summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBart Massey <bart@cs.pdx.edu>2001-02-11 01:27:11 +0000
committerBart Massey <bart@cs.pdx.edu>2001-02-11 01:27:11 +0000
commit780726ae0a2270f5f25b1096987a7ae0bb474e6e (patch)
tree576e1568092d5eac53be0c782e31545c61a283bd
parentbfba0920e13990d296bddee6329c60d22f07388e (diff)
Additional files for first release.
-rw-r--r--AUTHORS2
-rw-r--r--COPYING29
-rw-r--r--ChangeLog1
-rw-r--r--INSTALL182
-rw-r--r--Makefile.am28
-rw-r--r--Makefile.in478
-rw-r--r--NEWS1
-rw-r--r--README.name78
-rw-r--r--TODO18
-rw-r--r--aclocal.m4136
-rw-r--r--config.cache49
-rw-r--r--config.h75
-rw-r--r--config.h.in74
-rw-r--r--config.log103
-rwxr-xr-xconfig.status329
-rwxr-xr-xconfigure2488
-rw-r--r--configure.in48
-rwxr-xr-xdate-sh25
-rwxr-xr-xdate-sh.in25
-rw-r--r--gram.c2217
-rw-r--r--gram.h117
-rwxr-xr-xinstall-sh251
-rw-r--r--lex.c2502
-rwxr-xr-xmissing190
-rwxr-xr-xmkinstalldirs40
-rwxr-xr-xnicklebin0 -> 272249 bytes
-rw-r--r--nickle-1.99.0.tar.gzbin0 -> 143627 bytes
-rw-r--r--nickle.1314
-rw-r--r--nickle.1.in314
-rw-r--r--nickle.h534
-rw-r--r--stamp-h1
-rw-r--r--stamp-h.in1
32 files changed, 10650 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..48d2525
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,2 @@
+Keith Packard <keithp@keithp.com>
+Bart Massey <bart_massey@iname.com>
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..e36c015
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,29 @@
+Copyright (C) 1988-2001 Keith Packard and Bart Massey. All Rights Reserved.
+
+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 AUTHORS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the names of the authors
+or their institutions shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this
+Software without prior written authorization from the
+authors.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..6a5f70a
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1 @@
+1.99.0: First semi-public test release
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..b42a17a
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,182 @@
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory. After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..2eb35c0
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,28 @@
+## Process this file with automake to produce Makefile.in
+
+## Copyright (C) 1988-2001 Keith Packard and Bart Massey.
+## All Rights Reserved. See the file COPYING in this directory
+## for licensing information.
+
+EXTRA_DIST = README.name gram.h
+
+bin_PROGRAMS = nickle
+
+nickle_SOURCES = alarm.c array.c atom.c avl.c box.c builtin.c \
+ compile.c debug.c divide.c double.c edit.c \
+ error.c execute.c expr.c file.c frame.c func.c \
+ gcd.c history.c int.c integer.c io.c main.c mem.c \
+ natural.c pretty.c rational.c ref.c refer.c \
+ sched.c scope.c stack.c string.c struct.c \
+ symbol.c sync.c util.c value.c \
+ avl.h mem.h memp.h nickle.h opcode.h ref.h stack.h value.h \
+ gram.y lex.l
+
+man_MANS = nickle.1
+
+YFLAGS = -d
+
+builtin.o: builtin.c config.status $(srcdir)/date-sh
+ $(CC) -c -DBUILD=\""`$(srcdir)/date-sh`"\" -I. -I$(srcdir) $(CPPFLAGS) $(CFLAGS) builtin.c
+
+lex.o compile.o expr.o pretty.o: gram.h
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..afed8b1
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,478 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 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.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+AWK = @AWK@
+CC = @CC@
+DATE = @DATE@
+LEX = @LEX@
+LN_S = @LN_S@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+YACC = @YACC@
+
+EXTRA_DIST = README.name gram.h
+
+bin_PROGRAMS = nickle
+
+nickle_SOURCES = alarm.c array.c atom.c avl.c box.c builtin.c compile.c debug.c divide.c double.c edit.c error.c execute.c expr.c file.c frame.c func.c gcd.c history.c int.c integer.c io.c main.c mem.c natural.c pretty.c rational.c ref.c refer.c sched.c scope.c stack.c string.c struct.c symbol.c sync.c util.c value.c avl.h mem.h memp.h nickle.h opcode.h ref.h stack.h value.h gram.y lex.l
+
+
+man_MANS = nickle.1
+
+YFLAGS = -d
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = date-sh nickle.1
+PROGRAMS = $(bin_PROGRAMS)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I.
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+nickle_OBJECTS = alarm.o array.o atom.o avl.o box.o builtin.o compile.o \
+debug.o divide.o double.o edit.o error.o execute.o expr.o file.o \
+frame.o func.o gcd.o history.o int.o integer.o io.o main.o mem.o \
+natural.o pretty.o rational.o ref.o refer.o sched.o scope.o stack.o \
+string.o struct.o symbol.o sync.o util.o value.o gram.o lex.o
+nickle_LDADD = $(LDADD)
+nickle_DEPENDENCIES =
+nickle_LDFLAGS =
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LEXLIB = @LEXLIB@
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+man1dir = $(mandir)/man1
+MANS = $(man_MANS)
+
+NROFF = nroff
+DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
+Makefile.am Makefile.in NEWS TODO aclocal.m4 config.h.in configure \
+configure.in date-sh.in gram.c install-sh lex.c missing mkinstalldirs \
+nickle.1.in
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+DEP_FILES = .deps/alarm.P .deps/array.P .deps/atom.P .deps/avl.P \
+.deps/box.P .deps/builtin.P .deps/compile.P .deps/debug.P \
+.deps/divide.P .deps/double.P .deps/edit.P .deps/error.P \
+.deps/execute.P .deps/expr.P .deps/file.P .deps/frame.P .deps/func.P \
+.deps/gcd.P .deps/gram.P .deps/history.P .deps/int.P .deps/integer.P \
+.deps/io.P .deps/lex.P .deps/main.P .deps/mem.P .deps/natural.P \
+.deps/pretty.P .deps/rational.P .deps/ref.P .deps/refer.P .deps/sched.P \
+.deps/scope.P .deps/stack.P .deps/string.P .deps/struct.P \
+.deps/symbol.P .deps/sync.P .deps/util.P .deps/value.P
+SOURCES = $(nickle_SOURCES)
+OBJECTS = $(nickle_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .l .o .s .y
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
+ cd $(top_builddir) \
+ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(ACLOCAL_M4): configure.in
+ cd $(srcdir) && $(ACLOCAL)
+
+config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+ cd $(srcdir) && $(AUTOCONF)
+
+config.h: stamp-h
+ @if test ! -f $@; then \
+ rm -f stamp-h; \
+ $(MAKE) stamp-h; \
+ else :; fi
+stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES= CONFIG_HEADERS=config.h \
+ $(SHELL) ./config.status
+ @echo timestamp > stamp-h 2> /dev/null
+$(srcdir)/config.h.in: $(srcdir)/stamp-h.in
+ @if test ! -f $@; then \
+ rm -f $(srcdir)/stamp-h.in; \
+ $(MAKE) $(srcdir)/stamp-h.in; \
+ else :; fi
+$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOHEADER)
+ @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
+
+mostlyclean-hdr:
+
+clean-hdr:
+
+distclean-hdr:
+ -rm -f config.h
+
+maintainer-clean-hdr:
+date-sh: $(top_builddir)/config.status date-sh.in
+ cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+nickle.1: $(top_builddir)/config.status nickle.1.in
+ cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+mostlyclean-binPROGRAMS:
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+distclean-binPROGRAMS:
+
+maintainer-clean-binPROGRAMS:
+
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo " $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+ $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ list='$(bin_PROGRAMS)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+ done
+
+.s.o:
+ $(COMPILE) -c $<
+
+.S.o:
+ $(COMPILE) -c $<
+
+mostlyclean-compile:
+ -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+ -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+nickle: $(nickle_OBJECTS) $(nickle_DEPENDENCIES)
+ @rm -f nickle
+ $(LINK) $(nickle_LDFLAGS) $(nickle_OBJECTS) $(nickle_LDADD) $(LIBS)
+.l.c:
+ $(LEX) $(AM_LFLAGS) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@
+.y.c:
+ $(YACC) $(AM_YFLAGS) $(YFLAGS) $< && mv y.tab.c $*.c
+ if test -f y.tab.h; then \
+ if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \
+ else :; fi
+gram.h: gram.c
+
+
+install-man1:
+ $(mkinstalldirs) $(DESTDIR)$(man1dir)
+ @list='$(man1_MANS)'; \
+ l2='$(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/^.*\\.//'`; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
+ done
+
+uninstall-man1:
+ @list='$(man1_MANS)'; \
+ l2='$(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/^.*\\.//'`; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
+ rm -f $(DESTDIR)$(man1dir)/$$inst; \
+ done
+install-man: $(MANS)
+ @$(NORMAL_INSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) install-man1
+uninstall-man:
+ @$(NORMAL_UNINSTALL)
+ $(MAKE) $(AM_MAKEFLAGS) uninstall-man1
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(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
+ -rm -rf $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
+ mkdir $(distdir)/=build
+ mkdir $(distdir)/=inst
+ dc_install_base=`cd $(distdir)/=inst && pwd`; \
+ cd $(distdir)/=build \
+ && ../configure --srcdir=.. --prefix=$$dc_install_base \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) dist
+ -rm -rf $(distdir)
+ @banner="$(distdir).tar.gz is ready for distribution"; \
+ dashes=`echo "$$banner" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ echo "$$dashes"
+dist: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+dist-all: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+distdir: $(DISTFILES)
+ -rm -rf $(distdir)
+ mkdir $(distdir)
+ -chmod 777 $(distdir)
+ here=`cd $(top_builddir) && pwd`; \
+ top_distdir=`cd $(distdir) && pwd`; \
+ distdir=`cd $(distdir) && pwd`; \
+ cd $(top_srcdir) \
+ && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --gnu Makefile
+ @for file in $(DISTFILES); do \
+ d=$(srcdir); \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+
+DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :)
+
+-include $(DEP_FILES)
+
+mostlyclean-depend:
+
+clean-depend:
+
+distclean-depend:
+ -rm -rf .deps
+
+maintainer-clean-depend:
+
+%.o: %.c
+ @echo '$(COMPILE) -c $<'; \
+ $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-cp .deps/$(*F).pp .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm .deps/$(*F).pp
+
+%.lo: %.c
+ @echo '$(LTCOMPILE) -c $<'; \
+ $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $<
+ @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \
+ < .deps/$(*F).pp > .deps/$(*F).P; \
+ tr ' ' '\012' < .deps/$(*F).pp \
+ | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \
+ >> .deps/$(*F).P; \
+ rm -f .deps/$(*F).pp
+info-am:
+info: info-am
+dvi-am:
+dvi: dvi-am
+check-am: all-am
+check: check-am
+installcheck-am:
+installcheck: installcheck-am
+all-recursive-am: config.h
+ $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+install-exec-am: install-binPROGRAMS
+install-exec: install-exec-am
+
+install-data-am: install-man
+install-data: install-data-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-am
+uninstall-am: uninstall-binPROGRAMS uninstall-man
+uninstall: uninstall-am
+all-am: Makefile $(PROGRAMS) $(MANS) config.h
+all-redirect: all-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs:
+ $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+ -test -z "lexlgramhgramc" || rm -f lexl gramh gramc
+mostlyclean-am: mostlyclean-hdr mostlyclean-binPROGRAMS \
+ mostlyclean-compile mostlyclean-tags mostlyclean-depend \
+ mostlyclean-generic
+
+mostlyclean: mostlyclean-am
+
+clean-am: clean-hdr clean-binPROGRAMS clean-compile clean-tags \
+ clean-depend clean-generic mostlyclean-am
+
+clean: clean-am
+
+distclean-am: distclean-hdr distclean-binPROGRAMS distclean-compile \
+ distclean-tags distclean-depend distclean-generic \
+ clean-am
+
+distclean: distclean-am
+ -rm -f config.status
+
+maintainer-clean-am: maintainer-clean-hdr maintainer-clean-binPROGRAMS \
+ maintainer-clean-compile maintainer-clean-tags \
+ maintainer-clean-depend maintainer-clean-generic \
+ distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-am
+ -rm -f config.status
+
+.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
+mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
+maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile install-man1 uninstall-man1 install-man \
+uninstall-man tags mostlyclean-tags distclean-tags clean-tags \
+maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
+clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
+check-am installcheck-am installcheck all-recursive-am install-exec-am \
+install-exec install-data-am install-data install-am install \
+uninstall-am uninstall all-redirect all-am all installdirs \
+mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+builtin.o: builtin.c config.status $(srcdir)/date-sh
+ $(CC) -c -DBUILD=\""`$(srcdir)/date-sh`"\" -I. -I$(srcdir) $(CPPFLAGS) $(CFLAGS) builtin.c
+
+lex.o compile.o expr.o pretty.o: gram.h
+
+# 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/NEWS b/NEWS
new file mode 100644
index 0000000..5d9ab38
--- /dev/null
+++ b/NEWS
@@ -0,0 +1 @@
+No news is good news
diff --git a/README.name b/README.name
new file mode 100644
index 0000000..364c0e9
--- /dev/null
+++ b/README.name
@@ -0,0 +1,78 @@
+The Naming Of Nickle
+
+Keith Packard's original calculator language of 15 years ago
+was called "ic", for "interpreted C", based on his earlier
+"ec" inline compiler and runtime for arbitrary-precision
+rationals integrable with C code. At some point, the
+language name was upgraded to "Nick" (whether for "New IC of
+Keith's" or just because he liked the name, we cannot
+recall).
+
+That name was retained throughout our ongoing work, until
+our upcoming first public release. At that point, we
+decided we needed a name which was more descriptive of the
+nature of the current language. Nickle is designed to
+support one more major upgrade (to handle parametric type
+inference). The name nickle, for "nick <=", was chosen
+partly to denote this state.
+
+In addition (in no particular order), we note that:
+
+ + The progression to longer names built around the same
+ core is inline with the evolution of program naming in
+ UNIX generally. ic -> nick -> nickle is two characters
+ per iteration, which we believe to be about right.
+
+ + There is a weak tradition of "materials based" names
+ for scripting languages, most notably the "PERL" family
+ of languages and successors like "Ruby".
+
+ + There is a tradition of "materials-man" standards draft
+ names as well. Our language standard is currently much more
+ than a "strawman," but a little less than an "iron man":
+ "nickle man" appears to be about right.
+
+ + The term "nickle" (with this spelling) was apparently
+ a common abbreviation among the Mattel Intellivision processor
+ team for a 5-bit field. (The term may have a longer and
+ broader history.) We figure the language is worth about
+ 5 bits (i.e. $1.25 US).
+
+ + The word "nickle" probably actually originates from the
+ Germanic name "Nicholas", i.e. "Nick", as a short form of
+ the German "Kupfernickel" or "copper demon", for the
+ deceptive copper color of nickle ore. (Note that this is
+ also the origin of the term "Old Nick" to denote the
+ Christian Satan. Sources tell us that the cute little BSD
+ daemon is named "Chuck". We think "Nick" would be a better
+ choice.)
+
+ + Recall the famous joke about little-language designer
+ Nickle's Worth. ("Europeans call him by name, but Americans
+ call him by value.") Niklaus Wirth was easily the single
+ biggest influence on my development of interest in and
+ understanding of programming languages and language design.
+
+ + Several programming language researchers are named
+ "Nickle" or "Nickel". Hopefully, they will feel flattered
+ and supportive.
+
+ + Remember the famous Dilbertian "condescending UNIX
+ computer user" from Scott Adams' "Computer Holy Wars"
+ series? "Here's a nickle, kid: buy yourself a better
+ computer."
+
+Finally, a note about the spelling. "Nickel" appears to be
+the preferred spelling for both the metal and the
+U.S. coin. The New American Heritage Dictionary does not
+allow the variant "nickle", although the Merriam Webster
+Collegiate Dictionary does. A Google search reveals a vast
+predominance of the former spelling over the latter.
+However, for a variety of reasons, some noted above, we have
+chosen the more problematic variant. As the old gag goes,
+you can call it anything you like. Just call it.
+
+---
+Copyright (C) 1988-2001 Keith Packard and Bart Massey.
+All Rights Reserved. See the file COPYING in this directory
+for licensing information.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..1abb6c9
--- /dev/null
+++ b/TODO
@@ -0,0 +1,18 @@
+Finish exception handling
+
+Move std math functions out of math, or import math
+
+Implement library autoload mechanism
+
+Write fixed position (scale=n) math library in nickle ala bc/dc.
+
+Replace nick-in-C code (e.g. gcd.c) with nick library code
+
+Copyright status of code? AVL code in particular?
+
+read file should be load file?
+
+size(array)
+
+Remove gettimeofday() dependency? select() dependency?
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..102dc3e
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,136 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4
+
+dnl Copyright (C) 1994, 1995-8, 1999 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 This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+# Do all the work for Automake. 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.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AC_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# 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 conftestfile 2> /dev/null`
+ if test "[$]*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "[$]*" != "X $srcdir/configure conftestfile" \
+ && test "[$]*" != "X conftestfile $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" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+ $1=$2
+ AC_MSG_RESULT(found)
+else
+ $1="$3/missing $2"
+ AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file.
+
+AC_DEFUN(AM_CONFIG_HEADER,
+[AC_PREREQ([2.12])
+AC_CONFIG_HEADER([$1])
+dnl When config.status generates a header, we must update the stamp-h file.
+dnl This file resides in the same directory as the config header
+dnl that is generated. We must strip everything past the first ":",
+dnl and everything past the last "/".
+AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
+ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
+<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
+<<am_indx=1
+for am_file in <<$1>>; do
+ case " <<$>>CONFIG_HEADERS " in
+ *" <<$>>am_file "*<<)>>
+ echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
+ ;;
+ esac
+ am_indx=`expr "<<$>>am_indx" + 1`
+done<<>>dnl>>)
+changequote([,]))])
+
+
+dnl AM_PROG_LEX
+dnl Look for flex, lex or missing, then run AC_PROG_LEX and AC_DECL_YYTEXT
+AC_DEFUN(AM_PROG_LEX,
+[missing_dir=ifelse([$1],,`cd $ac_aux_dir && pwd`,$1)
+AC_CHECK_PROGS(LEX, flex lex, "$missing_dir/missing flex")
+AC_PROG_LEX
+AC_DECL_YYTEXT])
+
diff --git a/config.cache b/config.cache
new file mode 100644
index 0000000..460acb8
--- /dev/null
+++ b/config.cache
@@ -0,0 +1,49 @@
+# 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. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+ac_cv_c_inline=${ac_cv_c_inline='inline'}
+ac_cv_func___setfpucw=${ac_cv_func___setfpucw='no'}
+ac_cv_func_finite=${ac_cv_func_finite='yes'}
+ac_cv_func_getpgrp_void=${ac_cv_func_getpgrp_void='yes'}
+ac_cv_func_gettimeofday=${ac_cv_func_gettimeofday='yes'}
+ac_cv_func_select=${ac_cv_func_select='yes'}
+ac_cv_func_vprintf=${ac_cv_func_vprintf='yes'}
+ac_cv_header_fcntl_h=${ac_cv_header_fcntl_h='yes'}
+ac_cv_header_fpu_control_h=${ac_cv_header_fpu_control_h='yes'}
+ac_cv_header_ieeefp_h=${ac_cv_header_ieeefp_h='no'}
+ac_cv_header_stdc=${ac_cv_header_stdc='yes'}
+ac_cv_header_strings_h=${ac_cv_header_strings_h='yes'}
+ac_cv_header_stropts_h=${ac_cv_header_stropts_h='yes'}
+ac_cv_header_sys_time_h=${ac_cv_header_sys_time_h='yes'}
+ac_cv_header_time_h=${ac_cv_header_time_h='yes'}
+ac_cv_header_unistd_h=${ac_cv_header_unistd_h='yes'}
+ac_cv_lib_fl_yywrap=${ac_cv_lib_fl_yywrap='yes'}
+ac_cv_lib_m_sin=${ac_cv_lib_m_sin='yes'}
+ac_cv_path_install=${ac_cv_path_install='/usr/bin/install -c'}
+ac_cv_prog_AWK=${ac_cv_prog_AWK='gawk'}
+ac_cv_prog_CC=${ac_cv_prog_CC='gcc'}
+ac_cv_prog_CPP=${ac_cv_prog_CPP='gcc -E'}
+ac_cv_prog_DATE=${ac_cv_prog_DATE='date'}
+ac_cv_prog_LEX=${ac_cv_prog_LEX='flex'}
+ac_cv_prog_LN_S=${ac_cv_prog_LN_S='ln -s'}
+ac_cv_prog_YACC=${ac_cv_prog_YACC='byacc'}
+ac_cv_prog_cc_cross=${ac_cv_prog_cc_cross='no'}
+ac_cv_prog_cc_g=${ac_cv_prog_cc_g='yes'}
+ac_cv_prog_cc_works=${ac_cv_prog_cc_works='yes'}
+ac_cv_prog_gcc=${ac_cv_prog_gcc='yes'}
+ac_cv_prog_lex_root=${ac_cv_prog_lex_root='lex.yy'}
+ac_cv_prog_lex_yytext_pointer=${ac_cv_prog_lex_yytext_pointer='yes'}
+ac_cv_prog_make_make_set=${ac_cv_prog_make_make_set='yes'}
+ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long='8'}
+ac_cv_type_signal=${ac_cv_type_signal='void'}
diff --git a/config.h b/config.h
new file mode 100644
index 0000000..eab0775
--- /dev/null
+++ b/config.h
@@ -0,0 +1,75 @@
+/* config.h. Generated automatically by configure. */
+/* config.h.in. Generated automatically from configure.in by autoheader. */
+
+/* Define if the `getpgrp' function takes no argument. */
+#define GETPGRP_VOID 1
+
+/* Define if you don't have vprintf but do have _doprnt. */
+/* #undef HAVE_DOPRNT */
+
+/* Define if you have the vprintf function. */
+#define HAVE_VPRINTF 1
+
+/* Define as __inline if that's what the C compiler calls it. */
+/* #undef inline */
+
+/* Define as the return type of signal handlers (int or void). */
+#define RETSIGTYPE void
+
+/* Define if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define if lex declares yytext as a char * by default, not a char[]. */
+#define YYTEXT_POINTER 1
+
+/* The number of bytes in a long long. */
+#define SIZEOF_LONG_LONG 8
+
+/* Define if you have the __setfpucw function. */
+/* #undef HAVE___SETFPUCW */
+
+/* Define if you have the finite function. */
+#define HAVE_FINITE 1
+
+/* Define if you have the gettimeofday function. */
+#define HAVE_GETTIMEOFDAY 1
+
+/* Define if you have the select function. */
+#define HAVE_SELECT 1
+
+/* Define if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define if you have the <fpu_control.h> header file. */
+#define HAVE_FPU_CONTROL_H 1
+
+/* Define if you have the <ieeefp.h> header file. */
+/* #undef HAVE_IEEEFP_H */
+
+/* Define if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define if you have the <stropts.h> header file. */
+#define HAVE_STROPTS_H 1
+
+/* Define if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define if you have the <time.h> header file. */
+#define HAVE_TIME_H 1
+
+/* Define if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define if you have the m library (-lm). */
+#define HAVE_LIBM 1
+
+/* Name of package */
+#define PACKAGE "nickle"
+
+/* Version number of package */
+#define VERSION "1.99.0"
+
+/* C compiler has some form of inline. */
+#define HAVE_C_INLINE 1
+
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..a230640
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,74 @@
+/* config.h.in. Generated automatically from configure.in by autoheader. */
+
+/* Define if the `getpgrp' function takes no argument. */
+#undef GETPGRP_VOID
+
+/* Define if you don't have vprintf but do have _doprnt. */
+#undef HAVE_DOPRNT
+
+/* Define if you have the vprintf function. */
+#undef HAVE_VPRINTF
+
+/* Define as __inline if that's what the C compiler calls it. */
+#undef inline
+
+/* Define as the return type of signal handlers (int or void). */
+#undef RETSIGTYPE
+
+/* Define if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define if lex declares yytext as a char * by default, not a char[]. */
+#undef YYTEXT_POINTER
+
+/* The number of bytes in a long long. */
+#undef SIZEOF_LONG_LONG
+
+/* Define if you have the __setfpucw function. */
+#undef HAVE___SETFPUCW
+
+/* Define if you have the finite function. */
+#undef HAVE_FINITE
+
+/* Define if you have the gettimeofday function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define if you have the select function. */
+#undef HAVE_SELECT
+
+/* Define if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define if you have the <fpu_control.h> header file. */
+#undef HAVE_FPU_CONTROL_H
+
+/* Define if you have the <ieeefp.h> header file. */
+#undef HAVE_IEEEFP_H
+
+/* Define if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define if you have the <stropts.h> header file. */
+#undef HAVE_STROPTS_H
+
+/* Define if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define if you have the <time.h> header file. */
+#undef HAVE_TIME_H
+
+/* Define if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the m library (-lm). */
+#undef HAVE_LIBM
+
+/* Name of package */
+#undef PACKAGE
+
+/* Version number of package */
+#undef VERSION
+
+/* C compiler has some form of inline. */
+#undef HAVE_C_INLINE
+
diff --git a/config.log b/config.log
new file mode 100644
index 0000000..bdaaff5
--- /dev/null
+++ b/config.log
@@ -0,0 +1,103 @@
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+configure:556: checking for a BSD compatible install
+configure:609: checking whether build environment is sane
+configure:666: checking whether make sets ${MAKE}
+configure:712: checking for working aclocal
+configure:725: checking for working autoconf
+configure:738: checking for working automake
+configure:751: checking for working autoheader
+configure:764: checking for working makeinfo
+configure:784: checking for gcc
+configure:897: checking whether the C compiler (gcc ) works
+configure:913: gcc -o conftest conftest.c 1>&5
+configure:939: checking whether the C compiler (gcc ) is a cross-compiler
+configure:944: checking whether we are using GNU C
+configure:953: gcc -E conftest.c
+configure:972: checking whether gcc accepts -g
+configure:1015: checking for a BSD compatible install
+configure:1068: checking whether ln -s works
+configure:1089: checking how to run the C preprocessor
+configure:1110: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1174: checking for flex
+configure:1207: checking for flex
+configure:1241: checking for yywrap in -lfl
+configure:1260: gcc -o conftest -g -O2 conftest.c -lfl 1>&5
+configure:1283: checking lex output file root
+configure:1304: checking whether yytext is a pointer
+configure:1323: gcc -o conftest -g -O2 conftest.c -lfl 1>&5
+configure:1349: checking for byacc
+configure:1387: checking for gawk
+configure:1421: checking for date
+configure:1452: checking for sin in -lm
+configure:1471: gcc -o conftest -g -O2 conftest.c -lm 1>&5
+configure:1464: warning: conflicting types for built-in function `sin'
+configure:1500: checking for ANSI C header files
+configure:1513: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1580: gcc -o conftest -g -O2 conftest.c -lm 1>&5
+configure:1607: checking for fcntl.h
+configure:1617: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1607: checking for strings.h
+configure:1617: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1607: checking for time.h
+configure:1617: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1607: checking for sys/time.h
+configure:1617: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1607: checking for unistd.h
+configure:1617: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1647: checking for ieeefp.h
+configure:1657: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1653: ieeefp.h: No such file or directory
+configure: failed program was:
+#line 1652 "configure"
+#include "confdefs.h"
+#include <ieeefp.h>
+configure:1647: checking for fpu_control.h
+configure:1657: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1647: checking for stropts.h
+configure:1657: gcc -E conftest.c >/dev/null 2>conftest.out
+configure:1685: checking for inline
+configure:1699: gcc -c -g -O2 conftest.c 1>&5
+configure:1732: checking size of long long
+configure:1751: gcc -o conftest -g -O2 conftest.c -lm 1>&5
+configure:1772: checking return type of signal handlers
+configure:1794: gcc -c -g -O2 conftest.c 1>&5
+configure:1813: checking for vprintf
+configure:1841: gcc -o conftest -g -O2 conftest.c -lm 1>&5
+configure:1920: checking for gettimeofday
+configure:1948: gcc -o conftest -g -O2 conftest.c -lm 1>&5
+configure:1920: checking for select
+configure:1948: gcc -o conftest -g -O2 conftest.c -lm 1>&5
+configure:1975: checking for finite
+configure:2003: gcc -o conftest -g -O2 conftest.c -lm 1>&5
+configure:1975: checking for __setfpucw
+configure:2003: gcc -o conftest -g -O2 conftest.c -lm 1>&5
+/tmp/cczgTXDa.o: In function `main':
+/raid/local/src/nickle/configure:1997: undefined reference to `__setfpucw'
+collect2: ld returned 1 exit status
+configure: failed program was:
+#line 1980 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char __setfpucw(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char __setfpucw();
+
+int main() {
+
+/* 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___setfpucw) || defined (__stub_____setfpucw)
+choke me
+#else
+__setfpucw();
+#endif
+
+; return 0; }
+configure:2029: checking whether getpgrp takes no argument
+configure:2092: gcc -o conftest -g -O2 conftest.c -lm 1>&5
diff --git a/config.status b/config.status
new file mode 100755
index 0000000..88e8446
--- /dev/null
+++ b/config.status
@@ -0,0 +1,329 @@
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host bartfan:
+#
+# ./configure
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion"
+ exec ${CONFIG_SHELL-/bin/sh} ./configure --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "./config.status generated by autoconf version 2.13"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "$ac_cs_usage"; exit 0 ;;
+ *) echo "$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=.
+ac_given_INSTALL="/usr/bin/install -c"
+
+trap 'rm -fr Makefile date-sh nickle.1 config.h conftest*; exit 1' 1 2 15
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\&%]/\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF
+/^[ ]*VPATH[ ]*=[^:]*$/d
+
+s%@SHELL@%/bin/sh%g
+s%@CFLAGS@%-g -O2%g
+s%@CPPFLAGS@%%g
+s%@CXXFLAGS@%%g
+s%@FFLAGS@%%g
+s%@DEFS@%-DHAVE_CONFIG_H%g
+s%@LDFLAGS@%%g
+s%@LIBS@%-lm %g
+s%@exec_prefix@%${prefix}%g
+s%@prefix@%/usr/local%g
+s%@program_transform_name@%s,x,x,%g
+s%@bindir@%${exec_prefix}/bin%g
+s%@sbindir@%${exec_prefix}/sbin%g
+s%@libexecdir@%${exec_prefix}/libexec%g
+s%@datadir@%${prefix}/share%g
+s%@sysconfdir@%${prefix}/etc%g
+s%@sharedstatedir@%${prefix}/com%g
+s%@localstatedir@%${prefix}/var%g
+s%@libdir@%${exec_prefix}/lib%g
+s%@includedir@%${prefix}/include%g
+s%@oldincludedir@%/usr/include%g
+s%@infodir@%${prefix}/info%g
+s%@mandir@%${prefix}/man%g
+s%@INSTALL_PROGRAM@%${INSTALL}%g
+s%@INSTALL_SCRIPT@%${INSTALL_PROGRAM}%g
+s%@INSTALL_DATA@%${INSTALL} -m 644%g
+s%@PACKAGE@%nickle%g
+s%@VERSION@%1.99.0%g
+s%@ACLOCAL@%aclocal%g
+s%@AUTOCONF@%autoconf%g
+s%@AUTOMAKE@%automake%g
+s%@AUTOHEADER@%autoheader%g
+s%@MAKEINFO@%makeinfo%g
+s%@SET_MAKE@%%g
+s%@CC@%gcc%g
+s%@LN_S@%ln -s%g
+s%@LEX@%flex%g
+s%@LEXLIB@%-lfl%g
+s%@CPP@%gcc -E%g
+s%@LEX_OUTPUT_ROOT@%lex.yy%g
+s%@YACC@%byacc%g
+s%@AWK@%gawk%g
+s%@DATE@%date%g
+
+CEOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+
+CONFIG_FILES=${CONFIG_FILES-"Makefile date-sh nickle.1"}
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+ CONFIG_HEADERS="config.h"
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ cat $ac_file_inputs > conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}PACKAGE${ac_dB}PACKAGE${ac_dC}"nickle"${ac_dD}
+${ac_uA}PACKAGE${ac_uB}PACKAGE${ac_uC}"nickle"${ac_uD}
+${ac_eA}PACKAGE${ac_eB}PACKAGE${ac_eC}"nickle"${ac_eD}
+${ac_dA}VERSION${ac_dB}VERSION${ac_dC}"1.99.0"${ac_dD}
+${ac_uA}VERSION${ac_uB}VERSION${ac_uC}"1.99.0"${ac_uD}
+${ac_eA}VERSION${ac_eB}VERSION${ac_eC}"1.99.0"${ac_eD}
+${ac_dA}YYTEXT_POINTER${ac_dB}YYTEXT_POINTER${ac_dC}1${ac_dD}
+${ac_uA}YYTEXT_POINTER${ac_uB}YYTEXT_POINTER${ac_uC}1${ac_uD}
+${ac_eA}YYTEXT_POINTER${ac_eB}YYTEXT_POINTER${ac_eC}1${ac_eD}
+${ac_dA}HAVE_LIBM${ac_dB}HAVE_LIBM${ac_dC}1${ac_dD}
+${ac_uA}HAVE_LIBM${ac_uB}HAVE_LIBM${ac_uC}1${ac_uD}
+${ac_eA}HAVE_LIBM${ac_eB}HAVE_LIBM${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}STDC_HEADERS${ac_dB}STDC_HEADERS${ac_dC}1${ac_dD}
+${ac_uA}STDC_HEADERS${ac_uB}STDC_HEADERS${ac_uC}1${ac_uD}
+${ac_eA}STDC_HEADERS${ac_eB}STDC_HEADERS${ac_eC}1${ac_eD}
+${ac_dA}HAVE_FCNTL_H${ac_dB}HAVE_FCNTL_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_FCNTL_H${ac_uB}HAVE_FCNTL_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_FCNTL_H${ac_eB}HAVE_FCNTL_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STRINGS_H${ac_dB}HAVE_STRINGS_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STRINGS_H${ac_uB}HAVE_STRINGS_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STRINGS_H${ac_eB}HAVE_STRINGS_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_TIME_H${ac_dB}HAVE_TIME_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_TIME_H${ac_uB}HAVE_TIME_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_TIME_H${ac_eB}HAVE_TIME_H${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_SYS_TIME_H${ac_dB}HAVE_SYS_TIME_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SYS_TIME_H${ac_uB}HAVE_SYS_TIME_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SYS_TIME_H${ac_eB}HAVE_SYS_TIME_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_UNISTD_H${ac_eB}HAVE_UNISTD_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_FPU_CONTROL_H${ac_dB}HAVE_FPU_CONTROL_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_FPU_CONTROL_H${ac_uB}HAVE_FPU_CONTROL_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_FPU_CONTROL_H${ac_eB}HAVE_FPU_CONTROL_H${ac_eC}1${ac_eD}
+${ac_dA}HAVE_STROPTS_H${ac_dB}HAVE_STROPTS_H${ac_dC}1${ac_dD}
+${ac_uA}HAVE_STROPTS_H${ac_uB}HAVE_STROPTS_H${ac_uC}1${ac_uD}
+${ac_eA}HAVE_STROPTS_H${ac_eB}HAVE_STROPTS_H${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_C_INLINE${ac_dB}HAVE_C_INLINE${ac_dC}1${ac_dD}
+${ac_uA}HAVE_C_INLINE${ac_uB}HAVE_C_INLINE${ac_uC}1${ac_uD}
+${ac_eA}HAVE_C_INLINE${ac_eB}HAVE_C_INLINE${ac_eC}1${ac_eD}
+${ac_dA}SIZEOF_LONG_LONG${ac_dB}SIZEOF_LONG_LONG${ac_dC}8${ac_dD}
+${ac_uA}SIZEOF_LONG_LONG${ac_uB}SIZEOF_LONG_LONG${ac_uC}8${ac_uD}
+${ac_eA}SIZEOF_LONG_LONG${ac_eB}SIZEOF_LONG_LONG${ac_eC}8${ac_eD}
+${ac_dA}RETSIGTYPE${ac_dB}RETSIGTYPE${ac_dC}void${ac_dD}
+${ac_uA}RETSIGTYPE${ac_uB}RETSIGTYPE${ac_uC}void${ac_uD}
+${ac_eA}RETSIGTYPE${ac_eB}RETSIGTYPE${ac_eC}void${ac_eD}
+${ac_dA}HAVE_VPRINTF${ac_dB}HAVE_VPRINTF${ac_dC}1${ac_dD}
+${ac_uA}HAVE_VPRINTF${ac_uB}HAVE_VPRINTF${ac_uC}1${ac_uD}
+${ac_eA}HAVE_VPRINTF${ac_eB}HAVE_VPRINTF${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+${ac_dA}HAVE_GETTIMEOFDAY${ac_dB}HAVE_GETTIMEOFDAY${ac_dC}1${ac_dD}
+${ac_uA}HAVE_GETTIMEOFDAY${ac_uB}HAVE_GETTIMEOFDAY${ac_uC}1${ac_uD}
+${ac_eA}HAVE_GETTIMEOFDAY${ac_eB}HAVE_GETTIMEOFDAY${ac_eC}1${ac_eD}
+${ac_dA}HAVE_SELECT${ac_dB}HAVE_SELECT${ac_dC}1${ac_dD}
+${ac_uA}HAVE_SELECT${ac_uB}HAVE_SELECT${ac_uC}1${ac_uD}
+${ac_eA}HAVE_SELECT${ac_eB}HAVE_SELECT${ac_eC}1${ac_eD}
+${ac_dA}HAVE_FINITE${ac_dB}HAVE_FINITE${ac_dC}1${ac_dD}
+${ac_uA}HAVE_FINITE${ac_uB}HAVE_FINITE${ac_uC}1${ac_uD}
+${ac_eA}HAVE_FINITE${ac_eB}HAVE_FINITE${ac_eC}1${ac_eD}
+${ac_dA}GETPGRP_VOID${ac_dB}GETPGRP_VOID${ac_dC}1${ac_dD}
+${ac_uA}GETPGRP_VOID${ac_uB}GETPGRP_VOID${ac_uC}1${ac_uD}
+${ac_eA}GETPGRP_VOID${ac_eB}GETPGRP_VOID${ac_eC}1${ac_eD}
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ cat > conftest.frag <<CEOF
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+
+chmod +x ./date-sh
+test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
+
+exit 0
diff --git a/configure b/configure
new file mode 100755
index 0000000..8c8c728
--- /dev/null
+++ b/configure
@@ -0,0 +1,2488 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+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=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -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 ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$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" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ 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)
+ # 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 << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --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
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$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" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ 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)
+ 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" ;;
+
+ -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 ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.13"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ 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 "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=nickle.h
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ 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
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# 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
+# 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"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:556: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_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. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&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_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
+echo "configure:609: checking whether build environment is sane" >&5
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# 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 conftestfile 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "$*" != "X $srcdir/configure conftestfile" \
+ && test "$*" != "X conftestfile $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 "configure: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" 1>&2; exit 1; }
+ fi
+
+ test "$2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ { echo "configure: error: newly created file is older than distributed files!
+Check your system clock" 1>&2; exit 1; }
+fi
+rm -f conftest*
+echo "$ac_t""yes" 1>&6
+if test "$program_transform_name" = s,x,x,; then
+ program_transform_name=
+else
+ # Double any \ or $. echo might interpret backslashes.
+ cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+ program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+ rm -f conftestsed
+fi
+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"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:666: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftestmake <<\EOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ SET_MAKE=
+else
+ echo "$ac_t""no" 1>&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+PACKAGE=nickle
+
+VERSION=1.99.0
+
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
+fi
+cat >> confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cat >> confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
+echo "configure:712: checking for working aclocal" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (aclocal --version) < /dev/null > /dev/null 2>&1; then
+ ACLOCAL=aclocal
+ echo "$ac_t""found" 1>&6
+else
+ ACLOCAL="$missing_dir/missing aclocal"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
+echo "configure:725: checking for working autoconf" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+ AUTOCONF=autoconf
+ echo "$ac_t""found" 1>&6
+else
+ AUTOCONF="$missing_dir/missing autoconf"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working automake""... $ac_c" 1>&6
+echo "configure:738: checking for working automake" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (automake --version) < /dev/null > /dev/null 2>&1; then
+ AUTOMAKE=automake
+ echo "$ac_t""found" 1>&6
+else
+ AUTOMAKE="$missing_dir/missing automake"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
+echo "configure:751: checking for working autoheader" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+ AUTOHEADER=autoheader
+ echo "$ac_t""found" 1>&6
+else
+ AUTOHEADER="$missing_dir/missing autoheader"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
+echo "configure:764: checking for working makeinfo" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+ MAKEINFO=makeinfo
+ echo "$ac_t""found" 1>&6
+else
+ MAKEINFO="$missing_dir/missing makeinfo"
+ echo "$ac_t""missing" 1>&6
+fi
+
+
+
+
+
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:784: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:814: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_prog_rejected=no
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ break
+ fi
+ done
+ IFS="$ac_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 $# -gt 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
+ set dummy "$ac_dir/$ac_word" "$@"
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test -z "$CC"; then
+ case "`uname -s`" in
+ *win32* | *WIN32*)
+ # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:865: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="cl"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+ ;;
+ esac
+ fi
+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:897: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 908 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+ ac_cv_prog_cc_cross=no
+ else
+ ac_cv_prog_cc_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:939: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:944: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:953: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+else
+ ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:972: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_cc_g=yes
+else
+ ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&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
+
+# 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
+# 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"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:1015: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_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. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&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_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
+echo "configure:1068: checking whether ln -s works" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ rm -f conftestdata
+if ln -s X conftestdata 2>/dev/null
+then
+ rm -f conftestdata
+ ac_cv_prog_LN_S="ln -s"
+else
+ ac_cv_prog_LN_S=ln
+fi
+fi
+LN_S="$ac_cv_prog_LN_S"
+if test "$ac_cv_prog_LN_S" = "ln -s"; then
+ echo "$ac_t""yes" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:1089: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # This must be in double quotes, not single quotes, because CPP may get
+ # substituted into the Makefile and "${CC-cc}" will confuse make.
+ CPP="${CC-cc} -E"
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp.
+ cat > conftest.$ac_ext <<EOF
+#line 1104 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1110: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -E -traditional-cpp"
+ cat > conftest.$ac_ext <<EOF
+#line 1121 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1127: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -nologo -E"
+ cat > conftest.$ac_ext <<EOF
+#line 1138 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+ ac_cv_prog_CPP="$CPP"
+fi
+ CPP="$ac_cv_prog_CPP"
+else
+ ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+missing_dir=`cd $ac_aux_dir && pwd`
+for ac_prog in flex lex
+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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1174: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$LEX"; then
+ ac_cv_prog_LEX="$LEX" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_LEX="$ac_prog"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+LEX="$ac_cv_prog_LEX"
+if test -n "$LEX"; then
+ echo "$ac_t""$LEX" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+test -n "$LEX" && break
+done
+test -n "$LEX" || LEX=""$missing_dir/missing flex""
+
+# Extract the first word of "flex", so it can be a program name with args.
+set dummy flex; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1207: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$LEX"; then
+ ac_cv_prog_LEX="$LEX" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_LEX="flex"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_LEX" && ac_cv_prog_LEX="lex"
+fi
+fi
+LEX="$ac_cv_prog_LEX"
+if test -n "$LEX"; then
+ echo "$ac_t""$LEX" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$LEXLIB"
+then
+ case "$LEX" in
+ flex*) ac_lib=fl ;;
+ *) ac_lib=l ;;
+ esac
+ echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
+echo "configure:1241: checking for yywrap in -l$ac_lib" >&5
+ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-l$ac_lib $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1249 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char yywrap();
+
+int main() {
+yywrap()
+; return 0; }
+EOF
+if { (eval echo configure:1260: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ LEXLIB="-l$ac_lib"
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+echo $ac_n "checking lex output file root""... $ac_c" 1>&6
+echo "configure:1283: checking lex output file root" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # The minimal lex program is just a single line: %%. But some broken lexes
+# (Solaris, I think it was) want two %% lines, so accommodate them.
+echo '%%
+%%' | $LEX
+if test -f lex.yy.c; then
+ ac_cv_prog_lex_root=lex.yy
+elif test -f lexyy.c; then
+ ac_cv_prog_lex_root=lexyy
+else
+ { echo "configure: error: cannot find output from $LEX; giving up" 1>&2; exit 1; }
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_lex_root" 1>&6
+LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
+
+echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6
+echo "configure:1304: checking whether yytext is a pointer" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # POSIX says lex can declare yytext either as a pointer or an array; the
+# default is implementation-dependent. Figure out which it is, since
+# not all implementations provide the %pointer and %array declarations.
+ac_cv_prog_lex_yytext_pointer=no
+echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c
+ac_save_LIBS="$LIBS"
+LIBS="$LIBS $LEXLIB"
+cat > conftest.$ac_ext <<EOF
+#line 1316 "configure"
+#include "confdefs.h"
+`cat $LEX_OUTPUT_ROOT.c`
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1323: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ ac_cv_prog_lex_yytext_pointer=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+rm -f "${LEX_OUTPUT_ROOT}.c"
+
+fi
+
+echo "$ac_t""$ac_cv_prog_lex_yytext_pointer" 1>&6
+if test $ac_cv_prog_lex_yytext_pointer = yes; then
+ cat >> confdefs.h <<\EOF
+#define YYTEXT_POINTER 1
+EOF
+
+fi
+
+for ac_prog in byacc yacc bison
+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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1349: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$YACC"; then
+ ac_cv_prog_YACC="$YACC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_YACC="$ac_prog"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+YACC="$ac_cv_prog_YACC"
+if test -n "$YACC"; then
+ echo "$ac_t""$YACC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+test -n "$YACC" && break
+done
+test -n "$YACC" || YACC="yacc"
+
+case "$YACC" in
+*bison) YACC="$YACC -y" ;;
+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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1387: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$AWK"; then
+ ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_AWK="$ac_prog"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+AWK="$ac_cv_prog_AWK"
+if test -n "$AWK"; then
+ echo "$ac_t""$AWK" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+test -n "$AWK" && break
+done
+
+for ac_prog in date
+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 $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1421: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_DATE'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$DATE"; then
+ ac_cv_prog_DATE="$DATE" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_DATE="$ac_prog"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+DATE="$ac_cv_prog_DATE"
+if test -n "$DATE"; then
+ echo "$ac_t""$DATE" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+test -n "$DATE" && break
+done
+
+
+echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
+echo "configure:1452: checking for sin in -lm" >&5
+ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lm $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1460 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char sin();
+
+int main() {
+sin()
+; return 0; }
+EOF
+if { (eval echo configure:1471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo m | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-lm $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:1500: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1505 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1513: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ ac_cv_header_stdc=yes
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1530 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "memchr" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ 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 <<EOF
+#line 1548 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "free" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ 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 <<EOF
+#line 1569 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#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)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:1580: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+ cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+for ac_hdr in fcntl.h strings.h time.h sys/time.h unistd.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1607: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1612 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1617: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_hdr in ieeefp.h fpu_control.h stropts.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1647: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1652 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1657: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking for inline""... $ac_c" 1>&6
+echo "configure:1685: checking for inline" >&5
+if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+ cat > conftest.$ac_ext <<EOF
+#line 1692 "configure"
+#include "confdefs.h"
+
+int main() {
+} $ac_kw foo() {
+; return 0; }
+EOF
+if { (eval echo configure:1699: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_c_inline=$ac_kw; break
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+
+fi
+
+echo "$ac_t""$ac_cv_c_inline" 1>&6
+case "$ac_cv_c_inline" in
+ inline | yes) ;;
+ no) cat >> confdefs.h <<\EOF
+#define inline
+EOF
+ ;;
+ *) cat >> confdefs.h <<EOF
+#define inline $ac_cv_c_inline
+EOF
+ ;;
+esac
+
+case "$ac_cv_c_inline" in
+ no) ;;
+ *) cat >> confdefs.h <<\EOF
+#define HAVE_C_INLINE 1
+EOF
+ ;;
+esac
+echo $ac_n "checking size of long long""... $ac_c" 1>&6
+echo "configure:1732: checking size of long long" >&5
+if eval "test \"`echo '$''{'ac_cv_sizeof_long_long'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then
+ ac_cv_sizeof_long_long=0
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1740 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+main()
+{
+ FILE *f=fopen("conftestval", "w");
+ if (!f) exit(1);
+ fprintf(f, "%d\n", sizeof(long long));
+ exit(0);
+}
+EOF
+if { (eval echo configure:1751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ ac_cv_sizeof_long_long=`cat conftestval`
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_sizeof_long_long=0
+fi
+rm -fr conftest*
+fi
+
+fi
+echo "$ac_t""$ac_cv_sizeof_long_long" 1>&6
+cat >> confdefs.h <<EOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+EOF
+
+
+
+echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
+echo "configure:1772: checking return type of signal handlers" >&5
+if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1777 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <signal.h>
+#ifdef signal
+#undef signal
+#endif
+#ifdef __cplusplus
+extern "C" void (*signal (int, void (*)(int)))(int);
+#else
+void (*signal ()) ();
+#endif
+
+int main() {
+int i;
+; return 0; }
+EOF
+if { (eval echo configure:1794: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_type_signal=void
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_type_signal=int
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_type_signal" 1>&6
+cat >> confdefs.h <<EOF
+#define RETSIGTYPE $ac_cv_type_signal
+EOF
+
+
+echo $ac_n "checking for vprintf""... $ac_c" 1>&6
+echo "configure:1813: checking for vprintf" >&5
+if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1818 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char vprintf(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char vprintf();
+
+int main() {
+
+/* 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_vprintf) || defined (__stub___vprintf)
+choke me
+#else
+vprintf();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_vprintf=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_vprintf=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define HAVE_VPRINTF 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test "$ac_cv_func_vprintf" != yes; then
+echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
+echo "configure:1865: checking for _doprnt" >&5
+if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1870 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char _doprnt(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char _doprnt();
+
+int main() {
+
+/* 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__doprnt) || defined (__stub____doprnt)
+choke me
+#else
+_doprnt();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1893: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func__doprnt=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func__doprnt=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ cat >> confdefs.h <<\EOF
+#define HAVE_DOPRNT 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+for ac_func in gettimeofday select
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:1920: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1925 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* 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();
+
+int main() {
+
+/* 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
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_func in finite __setfpucw
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:1975: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1980 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* 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();
+
+int main() {
+
+/* 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
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking whether getpgrp takes no argument""... $ac_c" 1>&6
+echo "configure:2029: checking whether getpgrp takes no argument" >&5
+if eval "test \"`echo '$''{'ac_cv_func_getpgrp_void'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$cross_compiling" = yes; then
+ { echo "configure: error: cannot check getpgrp if cross compiling" 1>&2; exit 1; }
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2037 "configure"
+#include "confdefs.h"
+
+/*
+ * If this system has a BSD-style getpgrp(),
+ * which takes a pid argument, exit unsuccessfully.
+ *
+ * Snarfed from Chet Ramey's bash pgrp.c test program
+ */
+#include <stdio.h>
+#include <sys/types.h>
+
+int pid;
+int pg1, pg2, pg3, pg4;
+int ng, np, s, child;
+
+main()
+{
+ pid = getpid();
+ pg1 = getpgrp(0);
+ pg2 = getpgrp();
+ pg3 = getpgrp(pid);
+ pg4 = getpgrp(1);
+
+ /*
+ * If all of these values are the same, it's pretty sure that
+ * we're on a system that ignores getpgrp's first argument.
+ */
+ if (pg2 == pg4 && pg1 == pg3 && pg2 == pg3)
+ exit(0);
+
+ child = fork();
+ if (child < 0)
+ exit(1);
+ else if (child == 0) {
+ np = getpid();
+ /*
+ * If this is Sys V, this will not work; pgrp will be
+ * set to np because setpgrp just changes a pgrp to be
+ * the same as the pid.
+ */
+ setpgrp(np, pg1);
+ ng = getpgrp(0); /* Same result for Sys V and BSD */
+ if (ng == pg1) {
+ exit(1);
+ } else {
+ exit(0);
+ }
+ } else {
+ wait(&s);
+ exit(s>>8);
+ }
+}
+
+EOF
+if { (eval echo configure:2092: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ ac_cv_func_getpgrp_void=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_func_getpgrp_void=no
+fi
+rm -fr conftest*
+fi
+
+
+fi
+
+echo "$ac_t""$ac_cv_func_getpgrp_void" 1>&6
+if test $ac_cv_func_getpgrp_void = yes; then
+ cat >> confdefs.h <<\EOF
+#define GETPGRP_VOID 1
+EOF
+
+fi
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# 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. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# 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.
+(set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.13"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile date-sh nickle.1 config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@PACKAGE@%$PACKAGE%g
+s%@VERSION@%$VERSION%g
+s%@ACLOCAL@%$ACLOCAL%g
+s%@AUTOCONF@%$AUTOCONF%g
+s%@AUTOMAKE@%$AUTOMAKE%g
+s%@AUTOHEADER@%$AUTOHEADER%g
+s%@MAKEINFO@%$MAKEINFO%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@CC@%$CC%g
+s%@LN_S@%$LN_S%g
+s%@LEX@%$LEX%g
+s%@LEXLIB@%$LEXLIB%g
+s%@CPP@%$CPP%g
+s%@LEX_OUTPUT_ROOT@%$LEX_OUTPUT_ROOT%g
+s%@YACC@%$YACC%g
+s%@AWK@%$AWK%g
+s%@DATE@%$DATE%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile date-sh nickle.1"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ CONFIG_HEADERS="config.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h. And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments. This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+ ac_lines=`grep -c . conftest.vals`
+ # grep -c gives empty output for an empty file on some AIX systems.
+ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+ # Write a limited-size here document to conftest.frag.
+ echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ echo 'CEOF
+ sed -f conftest.frag conftest.in > conftest.out
+ rm -f conftest.in
+ mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ rm -f conftest.vals
+ mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+chmod +x ${srcdir}/date-sh
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..d5a3d3d
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,48 @@
+dnl Process this file with autoconf to produce a configure script.
+
+dnl Copyright (C) 1988-2001 Keith Packard and Bart Massey.
+dnl All Rights Reserved. See the file COPYING in this directory
+dnl for licensing information.
+
+AC_INIT(nickle.h)
+AM_INIT_AUTOMAKE(nickle,1.99.0)
+AM_CONFIG_HEADER(config.h)
+
+dnl Checks for programs.
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AM_PROG_LEX
+dnl AC_PROG_YACC
+AC_CHECK_PROGS([YACC], byacc yacc bison, yacc)
+case "$YACC" in
+*bison) YACC="$YACC -y" ;;
+esac
+AC_PROG_AWK
+AC_CHECK_PROGS([DATE], date)
+
+dnl Checks for libraries.
+AC_CHECK_LIB(m, sin)
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS(fcntl.h strings.h time.h sys/time.h unistd.h)
+AC_CHECK_HEADERS(ieeefp.h fpu_control.h stropts.h)
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+AC_C_INLINE
+case "$ac_cv_c_inline" in
+ no) ;;
+ *) AC_DEFINE([HAVE_C_INLINE], 1, [C compiler has some form of inline.]) ;;
+esac
+AC_CHECK_SIZEOF([long long], 0)
+
+dnl Checks for library functions.
+AC_TYPE_SIGNAL
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS(gettimeofday select)
+AC_CHECK_FUNCS(finite __setfpucw)
+
+AC_FUNC_GETPGRP
+
+AC_OUTPUT(Makefile date-sh nickle.1, , [chmod +x ${srcdir}/date-sh])
diff --git a/date-sh b/date-sh
new file mode 100755
index 0000000..af7949f
--- /dev/null
+++ b/date-sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+#
+# Copyright (C) 1988-2001 Keith Packard and Bart Massey.
+# All Rights Reserved. See the file COPYING in this directory
+# for licensing information.
+#
+date |
+gawk '
+BEGIN {
+ monthnum["Jan"] = 1
+ monthnum["Feb"] = 2
+ monthnum["Mar"] = 3
+ monthnum["Apr"] = 4
+ monthnum["May"] = 5
+ monthnum["Jun"] = 6
+ monthnum["Jul"] = 7
+ monthnum["Aug"] = 8
+ monthnum["Sep"] = 9
+ monthnum["Oct"] = 10
+ monthnum["Nov"] = 11
+ monthnum["Dec"] = 12
+}
+{
+ printf "%04d/%02d/%02d\n", $6, monthnum[$2], $3;
+}'
diff --git a/date-sh.in b/date-sh.in
new file mode 100755
index 0000000..c9c2ddb
--- /dev/null
+++ b/date-sh.in
@@ -0,0 +1,25 @@
+#!/bin/sh
+#
+# Copyright (C) 1988-2001 Keith Packard and Bart Massey.
+# All Rights Reserved. See the file COPYING in this directory
+# for licensing information.
+#
+@DATE@ |
+@AWK@ '
+BEGIN {
+ monthnum["Jan"] = 1
+ monthnum["Feb"] = 2
+ monthnum["Mar"] = 3
+ monthnum["Apr"] = 4
+ monthnum["May"] = 5
+ monthnum["Jun"] = 6
+ monthnum["Jul"] = 7
+ monthnum["Aug"] = 8
+ monthnum["Sep"] = 9
+ monthnum["Oct"] = 10
+ monthnum["Nov"] = 11
+ monthnum["Dec"] = 12
+}
+{
+ printf "%04d/%02d/%02d\n", $6, monthnum[$2], $3;
+}'
diff --git a/gram.c b/gram.c
new file mode 100644
index 0000000..696cbe5
--- /dev/null
+++ b/gram.c
@@ -0,0 +1,2217 @@
+#ifndef lint
+static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
+#endif
+#define YYBYACC 1
+#define YYMAJOR 1
+#define YYMINOR 9
+#define yyclearin (yychar=(-1))
+#define yyerrok (yyerrflag=0)
+#define YYRECOVERING (yyerrflag!=0)
+#define YYPREFIX "yy"
+#line 2 "gram.y"
+/* $Header$ */
+
+/*
+ * Copyright (C) 1988-2001 Keith Packard and Bart Massey.
+ * All Rights Reserved. See the file COPYING in this directory
+ * for licensing information.
+ */
+
+#include <config.h>
+
+#include <math.h>
+#include "nickle.h"
+
+int ignorenl;
+extern int yyfiledeep;
+
+void yyerror (char *fmt, ...);
+
+static void
+DeclListMark (void *object)
+{
+ DeclListPtr dl = object;
+
+ MemReference (dl->next);
+ MemReference (dl->init);
+}
+
+DataType DeclListType = { DeclListMark, 0 };
+
+DeclListPtr
+NewDeclList (Atom name, ExprPtr init, DeclListPtr next)
+{
+ ENTER ();
+ DeclListPtr dl;
+
+ dl = ALLOCATE (&DeclListType, sizeof (DeclList));
+ dl->name = name;
+ dl->init = init;
+ dl->next = next;
+ RETURN (dl);
+}
+
+static void
+MemListMark (void *object)
+{
+ MemListPtr ml = object;
+
+ MemReference (ml->next);
+ MemReference (ml->names);
+}
+
+DataType MemListType = { MemListMark, 0 };
+
+MemListPtr
+NewMemList (DeclListPtr names, Type type, MemListPtr next)
+{
+ ENTER ();
+ MemListPtr ml;
+
+ ml = ALLOCATE (&MemListType, sizeof (MemList));
+ ml->type = type;
+ ml->names = names;
+ ml->next = next;
+ RETURN (ml);
+}
+
+#line 70 "gram.y"
+typedef union {
+ int ival;
+ Value vval;
+ Class cval;
+ Type tval;
+ Publish pval;
+ ExprPtr eval;
+ Atom aval;
+ DeclListPtr dval;
+ MemListPtr mval;
+ Fulltype ftval;
+ ScopePtr sval;
+ CodePtr fval;
+} YYSTYPE;
+#line 94 "y.tab.c"
+#define CONST 257
+#define NL 258
+#define ALL 259
+#define DOWN 260
+#define UP 261
+#define QUIT 262
+#define READ 263
+#define SHELL 264
+#define EDIT 265
+#define DEFAULT 266
+#define UNDEFINE 267
+#define HISTORY 268
+#define PRINT 269
+#define WHILE 270
+#define IF 271
+#define ELSE 272
+#define FOR 273
+#define DO 274
+#define BREAK 275
+#define CONTINUE 276
+#define EXPR 277
+#define RETURNTOK 278
+#define SCOPE 279
+#define IMPORT 280
+#define TRY 281
+#define CATCH 282
+#define FORK 283
+#define OP 284
+#define CP 285
+#define OC 286
+#define CC 287
+#define COMMA 288
+#define SEMI 289
+#define DOLLAR 290
+#define VAR 291
+#define ASSIGNPLUS 292
+#define ASSIGNMINUS 293
+#define ASSIGNTIMES 294
+#define ASSIGNDIVIDE 295
+#define ASSIGNDIV 296
+#define ASSIGNMOD 297
+#define ASSIGNPOW 298
+#define ASSIGNLXOR 299
+#define ASSIGNLAND 300
+#define ASSIGNLOR 301
+#define NAME 302
+#define AUTO 303
+#define GLOBAL 304
+#define STATIC 305
+#define PUBLIC 306
+#define INT 307
+#define NATURAL 308
+#define INTEGER 309
+#define RATIONAL 310
+#define DOUBLE 311
+#define ARRAY 312
+#define FUNC 313
+#define EXCEPTION 314
+#define STRING 315
+#define POLYMORPH 316
+#define REF 317
+#define STRUCT 318
+#define TYPE 319
+#define FUNCTION 320
+#define AINIT 321
+#define POUND 322
+#define COMMAOP 323
+#define ASSIGN 324
+#define QUEST 325
+#define COLON 326
+#define OR 327
+#define AND 328
+#define LOR 329
+#define LXOR 330
+#define LAND 331
+#define EQ 332
+#define NE 333
+#define LT 334
+#define GT 335
+#define LE 336
+#define GE 337
+#define PLUS 338
+#define MINUS 339
+#define TIMES 340
+#define DIVIDE 341
+#define DIV 342
+#define MOD 343
+#define POW 344
+#define UMINUS 345
+#define BANG 346
+#define FACT 347
+#define LNOT 348
+#define INC 349
+#define DEC 350
+#define STAR 351
+#define AMPER 352
+#define THREAD 353
+#define OS 354
+#define CS 355
+#define DOT 356
+#define ARROW 357
+#define CALL 358
+#define YYERRCODE 256
+short yylhs[] = { -1,
+ 0, 0, 36, 39, 36, 38, 38, 37, 37, 37,
+ 41, 37, 37, 37, 37, 37, 37, 37, 40, 40,
+ 30, 18, 18, 19, 19, 20, 20, 21, 21, 22,
+ 22, 22, 22, 22, 22, 25, 25, 24, 24, 24,
+ 24, 24, 24, 24, 24, 24, 24, 24, 24, 23,
+ 23, 23, 27, 27, 26, 34, 34, 31, 31, 32,
+ 32, 33, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 16, 17,
+ 17, 43, 29, 8, 8, 8, 8, 42, 42, 42,
+ 4, 4, 5, 5, 1, 1, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 28, 28, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 10, 11, 11, 13, 13,
+ 12, 12, 14, 15, 15, 7, 7, 6, 6,
+};
+short yylen[] = { 2,
+ 2, 0, 1, 0, 3, 1, 1, 2, 2, 4,
+ 0, 3, 3, 3, 3, 3, 2, 1, 1, 0,
+ 3, 1, 0, 4, 2, 3, 1, 4, 0, 1,
+ 1, 1, 2, 2, 2, 1, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 6, 1,
+ 1, 1, 1, 0, 1, 2, 0, 1, 0, 3,
+ 1, 2, 6, 8, 6, 7, 10, 3, 3, 4,
+ 2, 4, 2, 5, 2, 7, 4, 4, 6, 2,
+ 1, 0, 7, 0, 1, 3, 2, 2, 2, 1,
+ 1, 0, 2, 0, 1, 3, 1, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
+ 3, 3, 3, 3, 3, 5, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 1,
+ 1, 2, 1, 3, 4, 4, 4, 3, 3, 2,
+ 4, 2, 5, 1, 0, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 3, 3, 0, 1, 3,
+ 3, 1, 3, 3, 1, 1, 0, 3, 1,
+};
+short yydefred[] = { 2,
+ 0, 4, 131, 18, 0, 0, 0, 0, 0, 0,
+ 82, 82, 82, 82, 82, 82, 82, 82, 0, 82,
+ 0, 0, 82, 82, 0, 0, 51, 50, 52, 55,
+ 38, 39, 40, 41, 42, 44, 47, 43, 48, 45,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 133, 0, 0, 11, 0, 0, 0, 30, 31,
+ 32, 0, 1, 3, 0, 8, 0, 0, 90, 0,
+ 17, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 53, 0, 0, 0,
+ 0, 0, 73, 144, 132, 0, 0, 36, 0, 140,
+ 0, 0, 0, 0, 98, 0, 0, 0, 0, 0,
+ 0, 0, 9, 0, 71, 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, 104, 106, 108, 0, 0, 142, 33, 34, 35,
+ 0, 75, 6, 7, 5, 14, 89, 88, 0, 13,
+ 0, 15, 0, 16, 0, 0, 0, 0, 0, 68,
+ 69, 0, 0, 0, 0, 0, 0, 134, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 156,
+ 0, 0, 0, 0, 0, 138, 139, 19, 12, 0,
+ 0, 0, 0, 155, 0, 153, 0, 154, 0, 0,
+ 0, 0, 0, 0, 0, 146, 0, 147, 0, 148,
+ 0, 149, 0, 150, 0, 151, 0, 152, 0, 0,
+ 0, 0, 0, 0, 0, 21, 22, 26, 0, 0,
+ 0, 0, 0, 70, 0, 77, 0, 0, 78, 137,
+ 93, 72, 0, 0, 141, 0, 0, 0, 0, 58,
+ 0, 0, 0, 0, 10, 136, 135, 0, 0, 157,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,
+ 0, 164, 0, 0, 62, 0, 0, 74, 143, 0,
+ 160, 161, 0, 0, 65, 0, 0, 0, 0, 0,
+ 49, 28, 0, 60, 24, 0, 0, 66, 76, 0,
+ 0, 64, 0, 0, 83, 0, 79, 67,
+};
+short yydgoto[] = { 1,
+ 168, 54, 179, 173, 180, 111, 194, 76, 56, 57,
+ 147, 233, 234, 182, 183, 248, 249, 236, 237, 73,
+ 184, 58, 59, 60, 99, 61, 88, 95, 100, 62,
+ 259, 260, 261, 273, 145, 63, 64, 155, 65, 199,
+ 121, 71, 79,
+};
+short yysindex[] = { 0,
+ 286, 0, 0, 0, -234, -240, -247, -262, 672, -219,
+ 0, 0, 0, 0, 0, 0, 0, 0, -238, 0,
+ -196, 1137, 0, 0, -150, -225, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -175, 208, 1137, 1137, 1137, -140, 1137, 1137, 1137, 1137,
+ 693, 0, -109, -272, 0, 2243, -147, 1634, 0, 0,
+ 0, -165, 0, 0, -245, 0, -127, -113, 0, -85,
+ 0, -145, -80, 208, 1137, -74, 2189, -70, -95, -94,
+ -92, 373, -93, -91, 1137, -238, 0, -108, 373, 1137,
+ -239, 373, 0, 0, 0, -107, 208, 0, -87, 0,
+ -238, -221, -221, -221, 0, -221, -221, -221, -221, -72,
+ -255, 2243, 0, 1137, 0, 1137, 1137, 1137, -102, -96,
+ -51, 1137, 1137, 1137, 1137, 714, 783, 804, 1137, 1137,
+ 1137, 1137, 1137, 1137, 825, 894, 915, 936, 1005, 1026,
+ 1047, 0, 0, 0, 1137, 1116, 0, 0, 0, 0,
+ -82, 0, 0, 0, 0, 0, 0, 0, -262, 0,
+ -73, 0, 1137, 0, 1137, 1137, 1137, -241, -61, 0,
+ 0, -73, -68, -69, -59, -66, -218, 0, 373, -55,
+ -81, -71, -50, -48, -262, 208, -62, 1116, 1137, 0,
+ 2243, -250, -46, -39, -251, 0, 0, 0, 0, 2243,
+ 2216, 2266, 2288, 0, 1331, 0, 1422, 0, 467, 1511,
+ 1511, -115, -115, -115, -115, 0, -228, 0, -228, 0,
+ -318, 0, -318, 0, -318, 0, -318, 0, -318, 2243,
+ 1116, 2243, -37, -36, -76, 0, 0, 0, 2243, -216,
+ -162, -38, -31, 0, -32, 0, -47, -66, 0, 0,
+ 0, 0, 1137, -107, 0, -238, -33, -35, -23, 0,
+ -2, 208, -22, 2243, 0, 0, 0, 1137, 2, 0,
+ 1116, 1137, 4, 373, 373, 1137, 1137, 373, 11, 0,
+ 2243, 0, -3, 208, 0, 14, 208, 0, 0, 1239,
+ 0, 0, 2243, -82, 0, 43, 31, -155, 35, 208,
+ 0, 0, 373, 0, 0, 373, 1137, 0, 0, 38,
+ 37, 0, 41, 373, 0, 373, 0, 0,
+};
+short yyrindex[] = { 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 70, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 27, 0,
+ 0, 0, 0, 0, 410, 497, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 572, -243, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1186, 0, -86, 584, -273, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, -244, 0, 46, 0, 0, 73, 0, 0, 0,
+ 0, 0, 0, 0, 45, 27, 0, 0, 0, 0,
+ 0, 49, 0, 0, 0, 0, 50, 0, 0, 0,
+ 27, 1273, 1305, 1365, 0, 1397, 1457, 1489, 1549, 0,
+ 0, -279, 0, 0, 0, 0, 53, 0, 0, 0,
+ 191, 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,
+ 54, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 81, 0, 0, 0, 0, 0, 45, 0, 0, 0,
+ 0, -229, 0, 0, 0, 0, 0, 0, 49, 0,
+ 0, 55, 0, 0, 0, -266, 0, 0, 0, 0,
+ -84, 0, 60, 0, 0, 0, 0, 0, 0, -223,
+ 0, 2160, 1126, 0, -235, 0, 2138, 0, 2128, 2047,
+ 2079, 1909, 1941, 1994, 2026, 0, 1822, 0, 1854, 0,
+ 1581, 0, 1640, 0, 1672, 0, 1731, 0, 1763, -77,
+ 0, -153, 0, 59, -151, 0, 0, 0, 90, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 27, 0, 0, 0, 0,
+ 71, 46, 0, -258, 0, 0, 0, 0, 0, 0,
+ 0, 0, 79, 0, 0, 45, 0, 49, 0, 0,
+ -146, 0, 0, 50, 0, 0, 82, 0, 0, 102,
+ 0, 0, -138, 0, 0, 96, 0, 0, 0, -266,
+ 0, 0, 49, 0, 0, 0, 77, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+};
+short yygindex[] = { 0,
+ 20, 0, 19, -167, -176, 65, 0, 0, 30, 0,
+ 0, -173, 0, 0, 119, 0, 133, 0, 94, -134,
+ 108, 0, 335, -40, -181, -15, -79, 0, 132, 0,
+ 95, 109, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 756,
+};
+#define YYTABLESIZE 2638
+short yytable[] = { 242,
+ 81, 98, 251, 87, 258, 169, 174, 265, 169, 68,
+ 69, 117, 153, 27, 263, 82, 67, 149, 59, 55,
+ 53, 187, 119, 66, 238, 141, 168, 142, 82, 168,
+ 143, 144, 189, 98, 122, 37, 189, 114, 77, 72,
+ 37, 91, 150, 154, 27, 178, 114, 115, 114, 119,
+ 257, 119, 119, 119, 70, 91, 185, 269, 82, 91,
+ 96, 122, 82, 122, 122, 122, 250, 30, 274, 114,
+ 87, 114, 102, 103, 104, 169, 106, 107, 108, 109,
+ 112, 118, 78, 119, 120, 87, 119, 90, 119, 119,
+ 119, 119, 119, 119, 161, 63, 168, 292, 122, 190,
+ 169, 299, 122, 267, 172, 258, 94, 176, 297, 177,
+ 97, 137, 138, 139, 140, 141, 105, 142, 258, 119,
+ 143, 144, 275, 152, 142, 114, 311, 143, 144, 308,
+ 156, 122, 114, 159, 159, 192, 57, 57, 146, 313,
+ 163, 163, 159, 191, 157, 98, 112, 112, 113, 56,
+ 56, 200, 201, 202, 203, 205, 207, 209, 210, 211,
+ 212, 213, 214, 215, 217, 219, 221, 223, 225, 227,
+ 229, 95, 158, 96, 230, 232, 283, 160, 114, 115,
+ 123, 193, 195, 162, 240, 241, 172, 164, 165, 166,
+ 20, 167, 239, 175, 181, 170, 186, 171, 95, 196,
+ 96, 95, 95, 96, 96, 197, 198, 123, 243, 123,
+ 123, 123, 116, 188, 114, 247, 254, 232, 264, 235,
+ 244, 98, 135, 136, 137, 138, 139, 140, 141, 246,
+ 142, 252, 245, 143, 144, 95, 255, 96, 256, 262,
+ 87, 189, 253, 185, 123, 266, 98, 272, 123, 270,
+ 276, 271, 277, 278, 279, 284, 81, 81, 81, 98,
+ 232, 286, 81, 81, 289, 81, 285, 81, 81, 81,
+ 81, 81, 81, 81, 81, 81, 81, 123, 81, 81,
+ 81, 81, 281, 81, 81, 287, 81, 81, 291, 81,
+ 81, 294, 295, 296, 300, 172, 298, 290, 301, 303,
+ 232, 293, 81, 81, 81, 81, 81, 81, 81, 81,
+ 81, 81, 81, 81, 306, 81, 81, 81, 81, 307,
+ 81, 309, 314, 315, 312, 316, 172, 84, 54, 37,
+ 85, 81, 317, 92, 318, 94, 29, 167, 87, 81,
+ 81, 165, 23, 81, 166, 162, 81, 86, 81, 81,
+ 81, 63, 63, 63, 81, 61, 81, 63, 63, 116,
+ 63, 92, 63, 63, 63, 63, 63, 25, 63, 63,
+ 63, 63, 282, 63, 63, 63, 63, 63, 63, 63,
+ 280, 63, 63, 37, 63, 63, 116, 305, 116, 116,
+ 116, 302, 148, 288, 310, 304, 0, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63, 63, 0,
+ 63, 63, 63, 63, 0, 63, 0, 0, 0, 0,
+ 0, 0, 0, 116, 0, 116, 63, 116, 0, 0,
+ 0, 0, 0, 0, 63, 63, 0, 0, 63, 0,
+ 0, 63, 0, 63, 63, 63, 20, 20, 0, 63,
+ 0, 63, 20, 20, 0, 20, 116, 20, 20, 20,
+ 20, 20, 0, 20, 20, 20, 20, 0, 20, 20,
+ 20, 20, 0, 20, 20, 0, 20, 0, 0, 20,
+ 20, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 0, 20, 20, 20, 20, 0,
+ 20, 0, 0, 0, 31, 32, 33, 34, 35, 36,
+ 37, 20, 38, 39, 40, 41, 0, 0, 0, 20,
+ 20, 0, 0, 20, 0, 0, 20, 0, 20, 20,
+ 20, 2, 3, 4, 20, 0, 20, 5, 6, 0,
+ 7, 0, 8, 9, 10, 11, 12, 0, 13, 14,
+ 15, 16, 0, 17, 18, 19, 20, 0, 21, 22,
+ 0, 23, 0, 0, 24, 25, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 26, 27, 28,
+ 29, 30, 31, 32, 33, 34, 35, 36, 37, 0,
+ 38, 39, 40, 41, 0, 42, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 43, 0, 0, 0,
+ 0, 0, 0, 0, 44, 45, 0, 0, 46, 3,
+ 0, 47, 0, 48, 49, 50, 0, 0, 0, 51,
+ 0, 52, 11, 12, 0, 13, 14, 15, 16, 0,
+ 17, 18, 19, 20, 0, 21, 22, 0, 23, 0,
+ 0, 24, 25, 0, 0, 0, 0, 145, 0, 0,
+ 0, 0, 0, 0, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 0, 38, 39, 40,
+ 41, 0, 42, 145, 145, 0, 145, 145, 145, 0,
+ 0, 0, 0, 43, 0, 0, 0, 0, 0, 0,
+ 0, 44, 45, 0, 0, 46, 0, 0, 47, 0,
+ 48, 49, 50, 0, 0, 0, 51, 0, 52, 0,
+ 0, 145, 0, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
+ 145, 145, 145, 145, 130, 145, 0, 0, 145, 145,
+ 0, 0, 0, 145, 145, 145, 145, 80, 81, 82,
+ 83, 84, 85, 86, 0, 89, 0, 0, 92, 93,
+ 130, 130, 0, 130, 130, 130, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 101, 129, 130,
+ 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
+ 141, 0, 142, 151, 0, 143, 144, 0, 130, 0,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 130, 130, 130, 130, 130, 130, 130, 130, 130,
+ 130, 158, 130, 0, 0, 130, 130, 0, 0, 0,
+ 130, 130, 130, 130, 0, 46, 0, 0, 0, 0,
+ 46, 0, 0, 0, 0, 0, 0, 158, 158, 0,
+ 158, 158, 158, 46, 46, 46, 46, 46, 46, 46,
+ 46, 46, 46, 46, 46, 0, 46, 46, 46, 46,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 158, 0, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 158, 158,
+ 158, 158, 158, 158, 158, 158, 158, 158, 3, 158,
+ 0, 0, 158, 158, 0, 0, 0, 158, 158, 158,
+ 158, 0, 0, 0, 0, 0, 0, 0, 0, 3,
+ 0, 0, 0, 0, 21, 22, 0, 0, 0, 0,
+ 0, 25, 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 0, 0, 26, 0, 21, 22, 0, 0, 0,
+ 0, 0, 25, 0, 0, 0, 0, 0, 0, 0,
+ 0, 74, 0, 0, 26, 75, 21, 22, 0, 0,
+ 0, 0, 43, 25, 0, 0, 0, 0, 0, 0,
+ 44, 45, 74, 0, 46, 26, 0, 47, 0, 48,
+ 49, 50, 0, 43, 0, 51, 0, 52, 0, 0,
+ 0, 44, 45, 74, 0, 46, 0, 204, 47, 3,
+ 48, 49, 50, 0, 43, 0, 51, 110, 52, 0,
+ 0, 0, 44, 45, 0, 0, 46, 0, 0, 47,
+ 3, 48, 49, 50, 0, 21, 22, 51, 0, 52,
+ 0, 0, 25, 0, 0, 0, 0, 0, 0, 0,
+ 0, 3, 0, 0, 26, 0, 21, 22, 0, 0,
+ 0, 0, 0, 25, 0, 0, 0, 0, 0, 0,
+ 0, 0, 74, 0, 0, 26, 206, 21, 22, 0,
+ 0, 0, 0, 43, 25, 0, 0, 0, 0, 0,
+ 0, 44, 45, 74, 0, 46, 26, 208, 47, 0,
+ 48, 49, 50, 0, 43, 0, 51, 0, 52, 0,
+ 0, 0, 44, 45, 74, 0, 46, 0, 216, 47,
+ 3, 48, 49, 50, 0, 43, 0, 51, 0, 52,
+ 0, 0, 0, 44, 45, 0, 0, 46, 0, 0,
+ 47, 3, 48, 49, 50, 0, 21, 22, 51, 0,
+ 52, 0, 0, 25, 0, 0, 0, 0, 0, 0,
+ 0, 0, 3, 0, 0, 26, 0, 21, 22, 0,
+ 0, 0, 0, 0, 25, 0, 0, 0, 0, 0,
+ 0, 0, 0, 74, 0, 0, 26, 218, 21, 22,
+ 0, 0, 0, 0, 43, 25, 0, 0, 0, 0,
+ 0, 0, 44, 45, 74, 0, 46, 26, 220, 47,
+ 0, 48, 49, 50, 0, 43, 0, 51, 0, 52,
+ 0, 0, 0, 44, 45, 74, 0, 46, 0, 222,
+ 47, 3, 48, 49, 50, 0, 43, 0, 51, 0,
+ 52, 0, 0, 0, 44, 45, 0, 0, 46, 0,
+ 0, 47, 3, 48, 49, 50, 0, 21, 22, 51,
+ 0, 52, 0, 0, 25, 0, 0, 0, 0, 0,
+ 0, 0, 0, 3, 0, 0, 26, 0, 21, 22,
+ 0, 0, 0, 0, 0, 25, 0, 0, 0, 0,
+ 0, 0, 0, 0, 74, 0, 0, 26, 224, 21,
+ 22, 0, 0, 0, 0, 43, 25, 0, 0, 0,
+ 0, 0, 0, 44, 45, 74, 0, 46, 26, 226,
+ 47, 0, 48, 49, 50, 0, 43, 0, 51, 0,
+ 52, 0, 0, 0, 44, 45, 74, 0, 46, 0,
+ 228, 47, 3, 48, 49, 50, 0, 43, 0, 51,
+ 0, 52, 0, 120, 0, 44, 45, 0, 0, 46,
+ 0, 0, 47, 3, 48, 49, 50, 0, 21, 22,
+ 51, 231, 52, 0, 0, 25, 0, 0, 0, 0,
+ 120, 0, 120, 120, 120, 0, 0, 26, 0, 21,
+ 22, 0, 0, 0, 0, 0, 25, 0, 0, 0,
+ 0, 0, 0, 0, 0, 74, 0, 0, 26, 0,
+ 0, 0, 0, 97, 0, 0, 43, 120, 0, 120,
+ 120, 120, 120, 120, 44, 45, 74, 0, 46, 0,
+ 0, 47, 0, 48, 49, 50, 0, 43, 0, 51,
+ 97, 52, 97, 97, 97, 44, 45, 0, 0, 46,
+ 120, 0, 47, 0, 48, 49, 50, 0, 0, 0,
+ 51, 0, 52, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 97, 0, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
+ 100, 97, 0, 0, 97, 97, 0, 0, 0, 0,
+ 97, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 100, 0, 100,
+ 100, 100, 101, 123, 0, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+ 139, 140, 141, 0, 142, 0, 0, 143, 144, 101,
+ 0, 101, 101, 101, 100, 0, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 100, 0, 0, 0,
+ 0, 0, 99, 0, 0, 0, 101, 100, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 101,
+ 101, 101, 101, 101, 101, 101, 101, 101, 101, 99,
+ 0, 99, 99, 99, 103, 0, 0, 0, 0, 101,
+ 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
+ 137, 138, 139, 140, 141, 0, 142, 0, 0, 143,
+ 144, 103, 0, 103, 103, 103, 99, 0, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
+ 99, 99, 99, 99, 99, 99, 99, 99, 99, 0,
+ 0, 0, 0, 0, 102, 0, 0, 0, 103, 99,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 103, 103, 103, 103, 103, 103, 103, 103, 103,
+ 103, 102, 0, 102, 102, 102, 105, 0, 0, 0,
+ 0, 103, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 0, 142, 0, 0,
+ 143, 144, 0, 105, 0, 105, 105, 105, 102, 0,
+ 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+ 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
+ 102, 0, 0, 0, 0, 0, 107, 0, 0, 0,
+ 105, 102, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 105, 105, 105, 105, 105, 105, 105,
+ 105, 105, 105, 107, 0, 107, 107, 107, 111, 0,
+ 0, 0, 0, 105, 131, 132, 133, 134, 135, 136,
+ 137, 138, 139, 140, 141, 0, 142, 0, 0, 143,
+ 144, 0, 0, 0, 0, 111, 0, 111, 111, 111,
+ 107, 0, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 107, 107, 107, 107, 107, 107, 107,
+ 107, 107, 107, 0, 0, 0, 0, 112, 0, 0,
+ 0, 0, 111, 107, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 111, 111, 111, 111, 111, 111,
+ 111, 111, 111, 111, 112, 0, 112, 112, 112, 113,
+ 0, 0, 0, 0, 0, 111, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 36, 37, 0, 38, 39,
+ 40, 41, 0, 0, 0, 0, 113, 0, 113, 113,
+ 113, 112, 0, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 112, 112, 112, 112, 112, 112, 112,
+ 112, 112, 112, 0, 0, 0, 0, 0, 114, 0,
+ 0, 0, 0, 113, 112, 113, 113, 113, 113, 113,
+ 113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
+ 113, 113, 113, 113, 113, 114, 0, 114, 114, 114,
+ 115, 0, 0, 0, 0, 0, 113, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 115, 0, 115,
+ 115, 115, 114, 0, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 114, 0, 0, 0, 0, 0, 109,
+ 0, 0, 0, 0, 115, 114, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
+ 115, 115, 115, 115, 115, 115, 109, 0, 109, 109,
+ 109, 110, 0, 0, 0, 0, 0, 115, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 110, 0,
+ 110, 110, 110, 109, 0, 109, 109, 109, 109, 109,
+ 109, 109, 109, 109, 109, 109, 109, 109, 109, 109,
+ 109, 0, 0, 0, 0, 0, 126, 0, 0, 0,
+ 0, 0, 0, 0, 0, 110, 109, 110, 110, 110,
+ 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,
+ 110, 110, 110, 126, 0, 126, 126, 126, 127, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 110, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 127, 0, 127, 127, 127,
+ 126, 0, 126, 126, 126, 126, 126, 126, 126, 126,
+ 126, 126, 126, 126, 126, 126, 0, 0, 0, 0,
+ 0, 128, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 127, 126, 127, 127, 127, 127, 127, 127,
+ 127, 127, 127, 127, 127, 127, 127, 127, 128, 0,
+ 128, 128, 128, 129, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 127, 0, 0, 0, 0,
+ 0, 0, 0, 0, 124, 0, 0, 0, 0, 0,
+ 129, 0, 129, 129, 129, 128, 0, 128, 128, 128,
+ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
+ 128, 124, 0, 124, 124, 124, 125, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 129, 128, 129,
+ 129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 125, 0, 125, 125, 125, 124, 0,
+ 124, 124, 124, 124, 124, 124, 124, 124, 124, 124,
+ 129, 0, 0, 0, 0, 118, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 117, 0, 0, 0, 0,
+ 125, 124, 125, 125, 125, 125, 125, 125, 125, 125,
+ 125, 125, 118, 0, 118, 118, 118, 121, 0, 0,
+ 0, 0, 117, 0, 117, 117, 117, 0, 0, 0,
+ 0, 0, 0, 125, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 121, 0, 121, 121, 121, 118,
+ 0, 118, 118, 118, 118, 118, 118, 118, 118, 117,
+ 0, 117, 117, 117, 117, 117, 117, 117, 0, 0,
+ 0, 0, 0, 0, 0, 0, 163, 0, 0, 0,
+ 0, 121, 118, 121, 121, 121, 121, 0, 0, 0,
+ 0, 0, 117, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 122, 123, 121, 124, 125, 126, 127, 128,
+ 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
+ 139, 140, 141, 0, 142, 0, 0, 143, 144, 122,
+ 123, 268, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 0, 142, 0, 0, 143, 144, 122, 123, 0, 124,
+ 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+ 135, 136, 137, 138, 139, 140, 141, 0, 142, 0,
+ 0, 143, 144, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 0, 142, 0, 0, 143, 144, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 0, 142, 0, 0, 143, 144,
+};
+short yycheck[] = { 167,
+ 0, 42, 179, 19, 186, 285, 86, 258, 288, 257,
+ 258, 284, 258, 258, 188, 289, 257, 58, 285, 1,
+ 1, 101, 258, 258, 159, 344, 285, 346, 302, 288,
+ 349, 350, 288, 74, 258, 302, 288, 288, 9, 302,
+ 284, 22, 58, 289, 289, 285, 288, 289, 288, 285,
+ 185, 287, 288, 289, 302, 285, 97, 231, 302, 289,
+ 286, 285, 306, 287, 288, 289, 285, 306, 285, 288,
+ 86, 288, 43, 44, 45, 355, 47, 48, 49, 50,
+ 51, 354, 302, 356, 357, 101, 322, 284, 324, 325,
+ 326, 327, 328, 329, 75, 0, 355, 271, 322, 355,
+ 82, 278, 326, 355, 85, 287, 257, 89, 276, 90,
+ 286, 340, 341, 342, 343, 344, 257, 346, 300, 355,
+ 349, 350, 285, 289, 346, 288, 303, 349, 350, 285,
+ 258, 355, 288, 287, 288, 116, 288, 289, 286, 307,
+ 287, 288, 288, 114, 258, 186, 117, 118, 258, 288,
+ 289, 122, 123, 124, 125, 126, 127, 128, 129, 130,
+ 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
+ 141, 258, 258, 258, 145, 146, 256, 258, 288, 289,
+ 258, 117, 118, 258, 165, 166, 167, 258, 284, 284,
+ 0, 284, 163, 302, 302, 289, 284, 289, 285, 302,
+ 285, 288, 289, 288, 289, 302, 258, 285, 270, 287,
+ 288, 289, 322, 286, 288, 282, 288, 188, 189, 302,
+ 289, 262, 338, 339, 340, 341, 342, 343, 344, 289,
+ 346, 287, 302, 349, 350, 322, 287, 322, 287, 302,
+ 256, 288, 324, 284, 322, 285, 287, 324, 326, 287,
+ 289, 288, 284, 286, 302, 289, 256, 257, 258, 300,
+ 231, 285, 262, 263, 287, 265, 302, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 355, 278, 279,
+ 280, 281, 253, 283, 284, 288, 286, 287, 287, 289,
+ 290, 288, 274, 275, 284, 276, 277, 268, 302, 286,
+ 271, 272, 302, 303, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 272, 315, 316, 317, 318, 289,
+ 320, 287, 285, 287, 306, 285, 307, 258, 302, 284,
+ 258, 331, 314, 289, 316, 287, 287, 285, 258, 339,
+ 340, 287, 289, 343, 285, 287, 346, 258, 348, 349,
+ 350, 256, 257, 258, 354, 285, 356, 262, 263, 258,
+ 265, 285, 267, 268, 269, 270, 271, 289, 273, 274,
+ 275, 276, 254, 278, 279, 280, 281, 282, 283, 284,
+ 248, 286, 287, 302, 289, 290, 285, 294, 287, 288,
+ 289, 284, 58, 262, 300, 287, -1, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, -1,
+ 315, 316, 317, 318, -1, 320, -1, -1, -1, -1,
+ -1, -1, -1, 322, -1, 324, 331, 326, -1, -1,
+ -1, -1, -1, -1, 339, 340, -1, -1, 343, -1,
+ -1, 346, -1, 348, 349, 350, 256, 257, -1, 354,
+ -1, 356, 262, 263, -1, 265, 355, 267, 268, 269,
+ 270, 271, -1, 273, 274, 275, 276, -1, 278, 279,
+ 280, 281, -1, 283, 284, -1, 286, -1, -1, 289,
+ 290, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 302, 303, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, -1, 315, 316, 317, 318, -1,
+ 320, -1, -1, -1, 307, 308, 309, 310, 311, 312,
+ 313, 331, 315, 316, 317, 318, -1, -1, -1, 339,
+ 340, -1, -1, 343, -1, -1, 346, -1, 348, 349,
+ 350, 256, 257, 258, 354, -1, 356, 262, 263, -1,
+ 265, -1, 267, 268, 269, 270, 271, -1, 273, 274,
+ 275, 276, -1, 278, 279, 280, 281, -1, 283, 284,
+ -1, 286, -1, -1, 289, 290, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, -1,
+ 315, 316, 317, 318, -1, 320, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 331, -1, -1, -1,
+ -1, -1, -1, -1, 339, 340, -1, -1, 343, 257,
+ -1, 346, -1, 348, 349, 350, -1, -1, -1, 354,
+ -1, 356, 270, 271, -1, 273, 274, 275, 276, -1,
+ 278, 279, 280, 281, -1, 283, 284, -1, 286, -1,
+ -1, 289, 290, -1, -1, -1, -1, 258, -1, -1,
+ -1, -1, -1, -1, 302, 303, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, -1, 315, 316, 317,
+ 318, -1, 320, 284, 285, -1, 287, 288, 289, -1,
+ -1, -1, -1, 331, -1, -1, -1, -1, -1, -1,
+ -1, 339, 340, -1, -1, 343, -1, -1, 346, -1,
+ 348, 349, 350, -1, -1, -1, 354, -1, 356, -1,
+ -1, 322, -1, 324, 325, 326, 327, 328, 329, 330,
+ 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
+ 341, 342, 343, 344, 258, 346, -1, -1, 349, 350,
+ -1, -1, -1, 354, 355, 356, 357, 12, 13, 14,
+ 15, 16, 17, 18, -1, 20, -1, -1, 23, 24,
+ 284, 285, -1, 287, 288, 289, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 42, 332, 333,
+ 334, 335, 336, 337, 338, 339, 340, 341, 342, 343,
+ 344, -1, 346, 58, -1, 349, 350, -1, 322, -1,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
+ 334, 335, 336, 337, 338, 339, 340, 341, 342, 343,
+ 344, 258, 346, -1, -1, 349, 350, -1, -1, -1,
+ 354, 355, 356, 357, -1, 284, -1, -1, -1, -1,
+ 289, -1, -1, -1, -1, -1, -1, 284, 285, -1,
+ 287, 288, 289, 302, 303, 304, 305, 306, 307, 308,
+ 309, 310, 311, 312, 313, -1, 315, 316, 317, 318,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 322, -1, 324, 325, 326,
+ 327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
+ 337, 338, 339, 340, 341, 342, 343, 344, 257, 346,
+ -1, -1, 349, 350, -1, -1, -1, 354, 355, 356,
+ 357, -1, -1, -1, -1, -1, -1, -1, -1, 257,
+ -1, -1, -1, -1, 283, 284, -1, -1, -1, -1,
+ -1, 290, -1, -1, -1, -1, -1, -1, -1, -1,
+ 257, -1, -1, 302, -1, 283, 284, -1, -1, -1,
+ -1, -1, 290, -1, -1, -1, -1, -1, -1, -1,
+ -1, 320, -1, -1, 302, 324, 283, 284, -1, -1,
+ -1, -1, 331, 290, -1, -1, -1, -1, -1, -1,
+ 339, 340, 320, -1, 343, 302, -1, 346, -1, 348,
+ 349, 350, -1, 331, -1, 354, -1, 356, -1, -1,
+ -1, 339, 340, 320, -1, 343, -1, 324, 346, 257,
+ 348, 349, 350, -1, 331, -1, 354, 355, 356, -1,
+ -1, -1, 339, 340, -1, -1, 343, -1, -1, 346,
+ 257, 348, 349, 350, -1, 283, 284, 354, -1, 356,
+ -1, -1, 290, -1, -1, -1, -1, -1, -1, -1,
+ -1, 257, -1, -1, 302, -1, 283, 284, -1, -1,
+ -1, -1, -1, 290, -1, -1, -1, -1, -1, -1,
+ -1, -1, 320, -1, -1, 302, 324, 283, 284, -1,
+ -1, -1, -1, 331, 290, -1, -1, -1, -1, -1,
+ -1, 339, 340, 320, -1, 343, 302, 324, 346, -1,
+ 348, 349, 350, -1, 331, -1, 354, -1, 356, -1,
+ -1, -1, 339, 340, 320, -1, 343, -1, 324, 346,
+ 257, 348, 349, 350, -1, 331, -1, 354, -1, 356,
+ -1, -1, -1, 339, 340, -1, -1, 343, -1, -1,
+ 346, 257, 348, 349, 350, -1, 283, 284, 354, -1,
+ 356, -1, -1, 290, -1, -1, -1, -1, -1, -1,
+ -1, -1, 257, -1, -1, 302, -1, 283, 284, -1,
+ -1, -1, -1, -1, 290, -1, -1, -1, -1, -1,
+ -1, -1, -1, 320, -1, -1, 302, 324, 283, 284,
+ -1, -1, -1, -1, 331, 290, -1, -1, -1, -1,
+ -1, -1, 339, 340, 320, -1, 343, 302, 324, 346,
+ -1, 348, 349, 350, -1, 331, -1, 354, -1, 356,
+ -1, -1, -1, 339, 340, 320, -1, 343, -1, 324,
+ 346, 257, 348, 349, 350, -1, 331, -1, 354, -1,
+ 356, -1, -1, -1, 339, 340, -1, -1, 343, -1,
+ -1, 346, 257, 348, 349, 350, -1, 283, 284, 354,
+ -1, 356, -1, -1, 290, -1, -1, -1, -1, -1,
+ -1, -1, -1, 257, -1, -1, 302, -1, 283, 284,
+ -1, -1, -1, -1, -1, 290, -1, -1, -1, -1,
+ -1, -1, -1, -1, 320, -1, -1, 302, 324, 283,
+ 284, -1, -1, -1, -1, 331, 290, -1, -1, -1,
+ -1, -1, -1, 339, 340, 320, -1, 343, 302, 324,
+ 346, -1, 348, 349, 350, -1, 331, -1, 354, -1,
+ 356, -1, -1, -1, 339, 340, 320, -1, 343, -1,
+ 324, 346, 257, 348, 349, 350, -1, 331, -1, 354,
+ -1, 356, -1, 258, -1, 339, 340, -1, -1, 343,
+ -1, -1, 346, 257, 348, 349, 350, -1, 283, 284,
+ 354, 286, 356, -1, -1, 290, -1, -1, -1, -1,
+ 285, -1, 287, 288, 289, -1, -1, 302, -1, 283,
+ 284, -1, -1, -1, -1, -1, 290, -1, -1, -1,
+ -1, -1, -1, -1, -1, 320, -1, -1, 302, -1,
+ -1, -1, -1, 258, -1, -1, 331, 322, -1, 324,
+ 325, 326, 327, 328, 339, 340, 320, -1, 343, -1,
+ -1, 346, -1, 348, 349, 350, -1, 331, -1, 354,
+ 285, 356, 287, 288, 289, 339, 340, -1, -1, 343,
+ 355, -1, 346, -1, 348, 349, 350, -1, -1, -1,
+ 354, -1, 356, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 322, -1, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
+ 258, 346, -1, -1, 349, 350, -1, -1, -1, -1,
+ 355, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 285, -1, 287,
+ 288, 289, 258, 325, -1, 327, 328, 329, 330, 331,
+ 332, 333, 334, 335, 336, 337, 338, 339, 340, 341,
+ 342, 343, 344, -1, 346, -1, -1, 349, 350, 285,
+ -1, 287, 288, 289, 322, -1, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
+ 338, 339, 340, 341, 342, 343, 344, -1, -1, -1,
+ -1, -1, 258, -1, -1, -1, 322, 355, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,
+ 336, 337, 338, 339, 340, 341, 342, 343, 344, 285,
+ -1, 287, 288, 289, 258, -1, -1, -1, -1, 355,
+ 330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
+ 340, 341, 342, 343, 344, -1, 346, -1, -1, 349,
+ 350, 285, -1, 287, 288, 289, 322, -1, 324, 325,
+ 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,
+ 336, 337, 338, 339, 340, 341, 342, 343, 344, -1,
+ -1, -1, -1, -1, 258, -1, -1, -1, 322, 355,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
+ 334, 335, 336, 337, 338, 339, 340, 341, 342, 343,
+ 344, 285, -1, 287, 288, 289, 258, -1, -1, -1,
+ -1, 355, 331, 332, 333, 334, 335, 336, 337, 338,
+ 339, 340, 341, 342, 343, 344, -1, 346, -1, -1,
+ 349, 350, -1, 285, -1, 287, 288, 289, 322, -1,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
+ 334, 335, 336, 337, 338, 339, 340, 341, 342, 343,
+ 344, -1, -1, -1, -1, -1, 258, -1, -1, -1,
+ 322, 355, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, 334, 335, 336, 337, 338, 339, 340, 341,
+ 342, 343, 344, 285, -1, 287, 288, 289, 258, -1,
+ -1, -1, -1, 355, 334, 335, 336, 337, 338, 339,
+ 340, 341, 342, 343, 344, -1, 346, -1, -1, 349,
+ 350, -1, -1, -1, -1, 285, -1, 287, 288, 289,
+ 322, -1, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, 334, 335, 336, 337, 338, 339, 340, 341,
+ 342, 343, 344, -1, -1, -1, -1, 258, -1, -1,
+ -1, -1, 322, 355, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
+ 340, 341, 342, 343, 285, -1, 287, 288, 289, 258,
+ -1, -1, -1, -1, -1, 355, 303, 304, 305, 306,
+ 307, 308, 309, 310, 311, 312, 313, -1, 315, 316,
+ 317, 318, -1, -1, -1, -1, 285, -1, 287, 288,
+ 289, 322, -1, 324, 325, 326, 327, 328, 329, 330,
+ 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
+ 341, 342, 343, -1, -1, -1, -1, -1, 258, -1,
+ -1, -1, -1, 322, 355, 324, 325, 326, 327, 328,
+ 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
+ 339, 340, 341, 342, 343, 285, -1, 287, 288, 289,
+ 258, -1, -1, -1, -1, -1, 355, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 285, -1, 287,
+ 288, 289, 322, -1, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, 334, 335, 336, 337, 338, 339,
+ 340, 341, 342, 343, -1, -1, -1, -1, -1, 258,
+ -1, -1, -1, -1, 322, 355, 324, 325, 326, 327,
+ 328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
+ 338, 339, 340, 341, 342, 343, 285, -1, 287, 288,
+ 289, 258, -1, -1, -1, -1, -1, 355, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 285, -1,
+ 287, 288, 289, 322, -1, 324, 325, 326, 327, 328,
+ 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
+ 339, -1, -1, -1, -1, -1, 258, -1, -1, -1,
+ -1, -1, -1, -1, -1, 322, 355, 324, 325, 326,
+ 327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
+ 337, 338, 339, 285, -1, 287, 288, 289, 258, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 355, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 285, -1, 287, 288, 289,
+ 322, -1, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, 334, 335, 336, 337, -1, -1, -1, -1,
+ -1, 258, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 322, 355, 324, 325, 326, 327, 328, 329,
+ 330, 331, 332, 333, 334, 335, 336, 337, 285, -1,
+ 287, 288, 289, 258, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 355, -1, -1, -1, -1,
+ -1, -1, -1, -1, 258, -1, -1, -1, -1, -1,
+ 285, -1, 287, 288, 289, 322, -1, 324, 325, 326,
+ 327, 328, 329, 330, 331, 332, 333, 334, 335, 336,
+ 337, 285, -1, 287, 288, 289, 258, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 322, 355, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
+ 335, 336, 337, 285, -1, 287, 288, 289, 322, -1,
+ 324, 325, 326, 327, 328, 329, 330, 331, 332, 333,
+ 355, -1, -1, -1, -1, 258, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 258, -1, -1, -1, -1,
+ 322, 355, 324, 325, 326, 327, 328, 329, 330, 331,
+ 332, 333, 285, -1, 287, 288, 289, 258, -1, -1,
+ -1, -1, 285, -1, 287, 288, 289, -1, -1, -1,
+ -1, -1, -1, 355, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 285, -1, 287, 288, 289, 322,
+ -1, 324, 325, 326, 327, 328, 329, 330, 331, 322,
+ -1, 324, 325, 326, 327, 328, 329, 330, -1, -1,
+ -1, -1, -1, -1, -1, -1, 288, -1, -1, -1,
+ -1, 322, 355, 324, 325, 326, 327, -1, -1, -1,
+ -1, -1, 355, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 324, 325, 355, 327, 328, 329, 330, 331,
+ 332, 333, 334, 335, 336, 337, 338, 339, 340, 341,
+ 342, 343, 344, -1, 346, -1, -1, 349, 350, 324,
+ 325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
+ -1, 346, -1, -1, 349, 350, 324, 325, -1, 327,
+ 328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
+ 338, 339, 340, 341, 342, 343, 344, -1, 346, -1,
+ -1, 349, 350, 328, 329, 330, 331, 332, 333, 334,
+ 335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
+ -1, 346, -1, -1, 349, 350, 329, 330, 331, 332,
+ 333, 334, 335, 336, 337, 338, 339, 340, 341, 342,
+ 343, 344, -1, 346, -1, -1, 349, 350,
+};
+#define YYFINAL 1
+#ifndef YYDEBUG
+#define YYDEBUG 0
+#endif
+#define YYMAXTOKEN 358
+#if YYDEBUG
+char *yyname[] = {
+"end-of-file",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,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","NL","ALL","DOWN","UP",
+"QUIT","READ","SHELL","EDIT","DEFAULT","UNDEFINE","HISTORY","PRINT","WHILE",
+"IF","ELSE","FOR","DO","BREAK","CONTINUE","EXPR","RETURNTOK","SCOPE","IMPORT",
+"TRY","CATCH","FORK","OP","CP","OC","CC","COMMA","SEMI","DOLLAR","VAR",
+"ASSIGNPLUS","ASSIGNMINUS","ASSIGNTIMES","ASSIGNDIVIDE","ASSIGNDIV","ASSIGNMOD",
+"ASSIGNPOW","ASSIGNLXOR","ASSIGNLAND","ASSIGNLOR","NAME","AUTO","GLOBAL",
+"STATIC","PUBLIC","INT","NATURAL","INTEGER","RATIONAL","DOUBLE","ARRAY","FUNC",
+"EXCEPTION","STRING","POLYMORPH","REF","STRUCT","TYPE","FUNCTION","AINIT",
+"POUND","COMMAOP","ASSIGN","QUEST","COLON","OR","AND","LOR","LXOR","LAND","EQ",
+"NE","LT","GT","LE","GE","PLUS","MINUS","TIMES","DIVIDE","DIV","MOD","POW",
+"UMINUS","BANG","FACT","LNOT","INC","DEC","STAR","AMPER","THREAD","OS","CS",
+"DOT","ARROW","CALL",
+};
+char *yyrule[] = {
+"$accept : lines",
+"lines : lines pcommand",
+"lines :",
+"pcommand : command",
+"$$1 :",
+"pcommand : error $$1 eend",
+"eend : NL",
+"eend : SEMI",
+"command : QUIT NL",
+"command : expr NL",
+"command : expr POUND expr NL",
+"$$2 :",
+"command : stat $$2 opt_nl",
+"command : UNDEFINE uninit_names NL",
+"command : READ CONST NL",
+"command : HISTORY history NL",
+"command : PRINT NAME NL",
+"command : EDIT edit",
+"command : NL",
+"opt_nl : NL",
+"opt_nl :",
+"var_def : type_def ignorenl o_names",
+"o_names : names",
+"o_names :",
+"names : NAME op_init COMMA names",
+"names : NAME op_init",
+"uninit_names : NAME COMMA uninit_names",
+"uninit_names : NAME",
+"memlist : type uninit_names SEMI memlist",
+"memlist :",
+"type_def : class",
+"type_def : type",
+"type_def : publish",
+"type_def : type_def class",
+"type_def : type_def type",
+"type_def : type_def publish",
+"o_type : type",
+"o_type :",
+"type : INT",
+"type : NATURAL",
+"type : INTEGER",
+"type : RATIONAL",
+"type : DOUBLE",
+"type : STRING",
+"type : ARRAY",
+"type : REF",
+"type : STRUCT",
+"type : FUNC",
+"type : POLYMORPH",
+"type : STRUCT OC memlist CC o_publish NAME",
+"class : GLOBAL",
+"class : AUTO",
+"class : STATIC",
+"o_publish : publish",
+"o_publish :",
+"publish : PUBLIC",
+"op_init : ASSIGN sexpr",
+"op_init :",
+"ofargs : fargs",
+"ofargs :",
+"fargs : farg COMMA fargs",
+"fargs : farg",
+"farg : o_type NAME",
+"stat : IF ignorenl OP expr CP stat",
+"stat : IF ignorenl OP expr CP stat ELSE stat",
+"stat : WHILE ignorenl OP expr CP stat",
+"stat : DO ignorenl stat WHILE OP expr CP",
+"stat : FOR ignorenl OP optexpr SEMI optexpr SEMI optexpr CP stat",
+"stat : BREAK ignorenl SEMI",
+"stat : CONTINUE ignorenl SEMI",
+"stat : RETURNTOK ignorenl optexpr SEMI",
+"stat : expr SEMI",
+"stat : OC ignorenl statlist CC",
+"stat : SEMI ignorenl",
+"stat : FUNCTION ignorenl o_publish NAME fbody",
+"stat : var_def SEMI",
+"stat : SCOPE ignorenl o_publish NAME OC statlist CC",
+"stat : IMPORT o_publish NAME SEMI",
+"stat : TRY ignorenl stat catches",
+"catch : CATCH NAME OP ofargs CP stat",
+"catches : catch catches",
+"catches : catch",
+"ignorenl :",
+"fbody : o_type OP ofargs CP OC statlist CC",
+"history :",
+"history : sexpr",
+"history : sexpr COMMA sexpr",
+"history : ASSIGN expr",
+"edit : NAME NL",
+"edit : CONST NL",
+"edit : NL",
+"optexpr : expr",
+"optexpr :",
+"statlist : stat statlist",
+"statlist :",
+"expr : sexpr",
+"expr : expr COMMA sexpr",
+"sexpr : primary",
+"sexpr : MOD CONST",
+"sexpr : TIMES sexpr",
+"sexpr : LAND sexpr",
+"sexpr : MINUS sexpr",
+"sexpr : LNOT sexpr",
+"sexpr : BANG sexpr",
+"sexpr : sexpr BANG",
+"sexpr : INC sexpr",
+"sexpr : sexpr INC",
+"sexpr : DEC sexpr",
+"sexpr : sexpr DEC",
+"sexpr : sexpr PLUS sexpr",
+"sexpr : sexpr MINUS sexpr",
+"sexpr : sexpr TIMES sexpr",
+"sexpr : sexpr DIVIDE sexpr",
+"sexpr : sexpr DIV sexpr",
+"sexpr : sexpr MOD sexpr",
+"sexpr : sexpr POW sexpr",
+"sexpr : sexpr QUEST sexpr COLON sexpr",
+"sexpr : sexpr LXOR sexpr",
+"sexpr : sexpr LAND sexpr",
+"sexpr : sexpr LOR sexpr",
+"sexpr : sexpr AND sexpr",
+"sexpr : sexpr OR sexpr",
+"sexpr : sexpr ASSIGN sexpr",
+"sexpr : sexpr assignop sexpr",
+"sexpr : sexpr EQ sexpr",
+"sexpr : sexpr NE sexpr",
+"sexpr : sexpr LT sexpr",
+"sexpr : sexpr GT sexpr",
+"sexpr : sexpr LE sexpr",
+"sexpr : sexpr GE sexpr",
+"primary : NAME",
+"primary : CONST",
+"primary : DOLLAR opt_const",
+"primary : DOT",
+"primary : OP expr CP",
+"primary : primary OS arglist CS",
+"primary : primary OP oarglist CP",
+"primary : FORK OP expr CP",
+"primary : primary DOT NAME",
+"primary : primary ARROW NAME",
+"primary : FUNCTION fbody",
+"primary : NAME OC sinits CC",
+"primary : array oainits",
+"primary : OS CS OC ainits CC",
+"opt_const : CONST",
+"opt_const :",
+"assignop : PLUS ASSIGN",
+"assignop : MINUS ASSIGN",
+"assignop : TIMES ASSIGN",
+"assignop : DIVIDE ASSIGN",
+"assignop : DIV ASSIGN",
+"assignop : MOD ASSIGN",
+"assignop : POW ASSIGN",
+"assignop : LXOR ASSIGN",
+"assignop : LAND ASSIGN",
+"assignop : LOR ASSIGN",
+"array : OS arglist CS",
+"oainits : OC ainits CC",
+"oainits :",
+"aelem : sexpr",
+"aelem : OC ainits CC",
+"ainits : aelem COMMA ainits",
+"ainits : aelem",
+"sinit : NAME ASSIGN sexpr",
+"sinits : sinit COMMA sinits",
+"sinits : sinit",
+"oarglist : arglist",
+"oarglist :",
+"arglist : arglist COMMA sexpr",
+"arglist : sexpr",
+};
+#endif
+#ifdef YYSTACKSIZE
+#undef YYMAXDEPTH
+#define YYMAXDEPTH YYSTACKSIZE
+#else
+#ifdef YYMAXDEPTH
+#define YYSTACKSIZE YYMAXDEPTH
+#else
+#define YYSTACKSIZE 500
+#define YYMAXDEPTH 500
+#endif
+#endif
+int yydebug;
+int yynerrs;
+int yyerrflag;
+int yychar;
+short *yyssp;
+YYSTYPE *yyvsp;
+YYSTYPE yyval;
+YYSTYPE yylval;
+short yyss[YYSTACKSIZE];
+YYSTYPE yyvs[YYSTACKSIZE];
+#define yystacksize YYSTACKSIZE
+#line 717 "gram.y"
+
+# include <stdio.h>
+
+extern ScopePtr CurrentScope;
+FramePtr CurrentFrame;
+
+Value
+lookupVar (char *name)
+{
+ ENTER ();
+ SymbolPtr s;
+ int depth;
+ Value v;
+
+ s = ScopeFindSymbol (CurrentScope, AtomId (name), &depth);
+ if (s && s->symbol.class == class_global)
+ v = BoxValue (s->global.value, 0);
+ else
+ v = Zero;
+ RETURN (v);
+}
+
+void
+setVar (char *name, Value v)
+{
+ ENTER ();
+ Atom n;
+ SymbolPtr s;
+ int depth;
+
+ n = AtomId (name);
+ s = ScopeFindSymbol (CurrentScope, n, &depth);
+ if (!s)
+ s = ScopeAddSymbol (CurrentScope, NewSymbolGlobal (n, type_undef,
+ publish_private));
+ if (s->symbol.class == class_global)
+ BoxValue (s->global.value, 0) = v;
+ EXIT ();
+}
+
+void
+GetScope (ScopePtr *scope, FramePtr *fp)
+{
+ *scope = CurrentScope;
+ *fp = CurrentFrame;
+}
+
+ExprPtr
+BuildName (char *name)
+{
+ ENTER ();
+ RETURN (NewExprAtom (AtomId(name)));
+}
+
+ExprPtr
+BuildCall (char *name, int nargs, ...)
+{
+ ENTER ();
+ va_list alist;
+ ExprPtr args;
+ ExprPtr e;
+
+ va_start (alist, nargs);
+ args = 0;
+ while (nargs--)
+ {
+ args = NewExprTree (COMMA, va_arg (alist, ExprPtr), args);
+ }
+ va_end (alist);
+ e = NewExprTree (OP, BuildName (name), args);
+#ifdef DEBUG
+ printExpr (stdout, e, -1, 0);
+ printf ("\n");
+#endif
+ RETURN (e);
+}
+
+int
+yywrap (void)
+{
+ if (interactive)
+ printf ("\n");
+ return 1;
+}
+
+void
+yyerror (char *fmt, ...)
+{
+ va_list args;
+ extern char *yyfile;
+ extern int yylineno;
+
+ if (yyfiledeep)
+ fprintf (stderr, "\"%s\": line %d, ", yyfile, yylineno);
+ va_start (args, fmt);
+ vPrintError (fmt, args);
+ va_end (args);
+}
+#line 1205 "y.tab.c"
+#define YYABORT goto yyabort
+#define YYREJECT goto yyabort
+#define YYACCEPT goto yyaccept
+#define YYERROR goto yyerrlab
+int
+yyparse()
+{
+ register int yym, yyn, yystate;
+#if YYDEBUG
+ register char *yys;
+ extern char *getenv();
+
+ if (yys = getenv("YYDEBUG"))
+ {
+ yyn = *yys;
+ if (yyn >= '0' && yyn <= '9')
+ yydebug = yyn - '0';
+ }
+#endif
+
+ yynerrs = 0;
+ yyerrflag = 0;
+ yychar = (-1);
+
+ yyssp = yyss;
+ yyvsp = yyvs;
+ *yyssp = yystate = 0;
+
+yyloop:
+ if (yyn = yydefred[yystate]) goto yyreduce;
+ if (yychar < 0)
+ {
+ if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ }
+ if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, shifting to state %d\n",
+ YYPREFIX, yystate, yytable[yyn]);
+#endif
+ if (yyssp >= yyss + yystacksize - 1)
+ {
+ goto yyoverflow;
+ }
+ *++yyssp = yystate = yytable[yyn];
+ *++yyvsp = yylval;
+ yychar = (-1);
+ if (yyerrflag > 0) --yyerrflag;
+ goto yyloop;
+ }
+ if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ {
+ yyn = yytable[yyn];
+ goto yyreduce;
+ }
+ if (yyerrflag) goto yyinrecovery;
+#ifdef lint
+ goto yynewerror;
+#endif
+yynewerror:
+ yyerror("syntax error");
+#ifdef lint
+ goto yyerrlab;
+#endif
+yyerrlab:
+ ++yynerrs;
+yyinrecovery:
+ if (yyerrflag < 3)
+ {
+ yyerrflag = 3;
+ for (;;)
+ {
+ if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, error recovery shifting\
+ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
+#endif
+ if (yyssp >= yyss + yystacksize - 1)
+ {
+ goto yyoverflow;
+ }
+ *++yyssp = yystate = yytable[yyn];
+ *++yyvsp = yylval;
+ goto yyloop;
+ }
+ else
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: error recovery discarding state %d\n",
+ YYPREFIX, *yyssp);
+#endif
+ if (yyssp <= yyss) goto yyabort;
+ --yyssp;
+ --yyvsp;
+ }
+ }
+ }
+ else
+ {
+ if (yychar == 0) goto yyabort;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
+ YYPREFIX, yystate, yychar, yys);
+ }
+#endif
+ yychar = (-1);
+ goto yyloop;
+ }
+yyreduce:
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: state %d, reducing by rule %d (%s)\n",
+ YYPREFIX, yystate, yyn, yyrule[yyn]);
+#endif
+ yym = yylen[yyn];
+ yyval = yyvsp[1-yym];
+ switch (yyn)
+ {
+case 4:
+#line 138 "gram.y"
+{ ignorenl = 0; }
+break;
+case 6:
+#line 140 "gram.y"
+{ yyerrok; }
+break;
+case 7:
+#line 141 "gram.y"
+{}
+break;
+case 8:
+#line 144 "gram.y"
+{ YYACCEPT; }
+break;
+case 9:
+#line 146 "gram.y"
+{
+ ENTER ();
+ ExprPtr e;
+ Value t;
+ ScopePtr s;
+ FramePtr f;
+
+ e = NewExprTree (COMMA,
+ BuildCall ("printf",
+ 2,
+ BuildName ("format"),
+ BuildCall ("HistoryInsert",
+ 1, yyvsp[-1].eval)),
+ BuildCall ("putchar",
+ 1,
+ NewExprConst (NewInt ('\n'))));
+ GetScope (&s, &f);
+ t = NewThread (f, CompileExpr (e, s));
+ ThreadsRun (t, 0);
+ EXIT ();
+ }
+break;
+case 10:
+#line 168 "gram.y"
+{
+ ENTER ();
+ ExprPtr e;
+ Value t;
+ ScopePtr s;
+ FramePtr f;
+
+ e = BuildCall ("Print",
+ 7,
+ BuildName ("stdout"),
+ BuildCall ("HistoryInsert",
+ 1, yyvsp[-3].eval),
+ NewExprConst (NewStrString ("g")),
+ yyvsp[-1].eval,
+ NewExprConst (Zero),
+ NewExprConst (NewInt (-1)),
+ NewExprConst (NewStrString (" ")));
+ e = NewExprTree (COMMA,
+ e,
+ BuildCall ("putchar",
+ 1,
+ NewExprConst (NewInt ('\n'))));
+ GetScope (&s, &f);
+ t = NewThread (f, CompileExpr (e, s));
+ ThreadsRun (t, 0);
+ EXIT ();
+ }
+break;
+case 11:
+#line 195 "gram.y"
+{ ignorenl = 0; }
+break;
+case 12:
+#line 196 "gram.y"
+{
+ ScopePtr s;
+ FramePtr f;
+ Value t;
+
+ GetScope (&s, &f);
+ t = NewThread (f, CompileStat (yyvsp[-2].eval, s));
+ ThreadsRun (t, 0);
+ }
+break;
+case 13:
+#line 206 "gram.y"
+{
+ ENTER ();
+ DeclListPtr dl;
+ SymbolPtr s;
+ int depth;
+
+ for (dl = yyvsp[-1].dval; dl; dl = dl->next) {
+ s = ScopeFindSymbol (GlobalScope,
+ dl->name,
+ &depth);
+ if (!s)
+ {
+ RaiseError (0, "Undefined symbol %A", dl->name);
+ }
+ else if (depth)
+ {
+ RaiseError (0, "Can't undefine at higher scope %A", dl->name);
+ }
+ else
+ {
+ ScopeRemoveSymbol (GlobalScope, s);
+ }
+ }
+ EXIT ();
+ }
+break;
+case 14:
+#line 232 "gram.y"
+{
+ ENTER ();
+ Value filename;
+
+ filename = yyvsp[-1].vval;
+ switch (filename->value.tag) {
+ default:
+ yyerror ("non string filename %v", filename);
+ break;
+ case type_string:
+ pushinput (StringChars (&filename->string), True);
+ break;
+ }
+ EXIT ();
+ }
+break;
+case 15:
+#line 248 "gram.y"
+{
+ Value t;
+ t = NewThread (0, CompileExpr (yyvsp[-1].eval, GlobalScope));
+ ThreadsRun (t, 0);
+ }
+break;
+case 16:
+#line 254 "gram.y"
+{
+ SymbolPtr sym;
+ int depth;
+ ScopePtr s;
+ FramePtr f;
+
+ GetScope (&s, &f);
+ sym = ScopeFindSymbol (s, yyvsp[-1].aval, &depth);
+ if (!sym)
+ {
+ yyerror ("Undefined symbol \"%s\"",
+ AtomName (yyvsp[-1].aval));
+ }
+ else
+ PrettyPrint (FileStdout, sym);
+ }
+break;
+case 17:
+#line 270 "gram.y"
+{}
+break;
+case 18:
+#line 271 "gram.y"
+{}
+break;
+case 19:
+#line 273 "gram.y"
+{}
+break;
+case 21:
+#line 277 "gram.y"
+{
+ yyval.eval = NewExprDecl (yyvsp[0].dval, yyvsp[-2].ftval.class, yyvsp[-2].ftval.type, yyvsp[-2].ftval.publish);
+ }
+break;
+case 23:
+#line 283 "gram.y"
+{ yyval.dval = 0; }
+break;
+case 24:
+#line 286 "gram.y"
+{ yyval.dval = NewDeclList (yyvsp[-3].aval, yyvsp[-2].eval, yyvsp[0].dval); }
+break;
+case 25:
+#line 288 "gram.y"
+{ yyval.dval = NewDeclList (yyvsp[-1].aval, yyvsp[0].eval, 0); }
+break;
+case 26:
+#line 291 "gram.y"
+{ yyval.dval = NewDeclList (yyvsp[-2].aval, 0, yyvsp[0].dval); }
+break;
+case 27:
+#line 293 "gram.y"
+{ yyval.dval = NewDeclList (yyvsp[0].aval, 0, 0); }
+break;
+case 28:
+#line 296 "gram.y"
+{ yyval.mval = NewMemList (yyvsp[-2].dval, yyvsp[-3].tval, yyvsp[0].mval); }
+break;
+case 29:
+#line 298 "gram.y"
+{ yyval.mval = 0; }
+break;
+case 30:
+#line 301 "gram.y"
+{ yyval.ftval.class = yyvsp[0].cval; yyval.ftval.type = type_undef; yyval.ftval.publish = publish_private; }
+break;
+case 31:
+#line 303 "gram.y"
+{ yyval.ftval.class = class_undef; yyval.ftval.type = yyvsp[0].tval; yyval.ftval.publish = publish_private; }
+break;
+case 32:
+#line 305 "gram.y"
+{ yyval.ftval.class = class_undef; yyval.ftval.type = type_undef; yyval.ftval.publish = yyvsp[0].pval; }
+break;
+case 33:
+#line 307 "gram.y"
+{
+ yyval.ftval = yyvsp[-1].ftval;
+ if (yyvsp[-1].ftval.class != class_undef)
+ yyerror ("Multiple class definitions \"%C\" \"%C\"",
+ yyvsp[-1].ftval.class, yyvsp[0].cval);
+ yyval.ftval.class = yyvsp[0].cval;
+ }
+break;
+case 34:
+#line 315 "gram.y"
+{
+ yyval.ftval = yyvsp[-1].ftval;
+ if (yyvsp[-1].ftval.type != type_undef)
+ yyerror ("Multiple type definitions \"%T\" \"%T\"",
+ yyvsp[-1].ftval.type, yyvsp[0].tval);
+ yyval.ftval.type = yyvsp[0].tval;
+ }
+break;
+case 35:
+#line 323 "gram.y"
+{
+ yyval.ftval = yyvsp[-1].ftval;
+ if (yyvsp[-1].ftval.publish != publish_private)
+ yyerror ("Multiple publish definitions \"%P\" \"%P\"",
+ yyvsp[-1].ftval.publish, yyvsp[0].pval);
+ yyval.ftval.publish = yyvsp[0].pval;
+ }
+break;
+case 36:
+#line 332 "gram.y"
+{ yyval.tval = yyvsp[0].tval; }
+break;
+case 37:
+#line 334 "gram.y"
+{ yyval.tval = type_undef; }
+break;
+case 49:
+#line 348 "gram.y"
+{
+ ENTER ();
+ DeclListPtr dl;
+ SymbolPtr s;
+ StructType *st;
+ StructElement *se;
+ MemListPtr ml;
+ int nelements;
+
+ nelements = 0;
+ for (ml = yyvsp[-3].mval; ml; ml = ml->next)
+ {
+ for (dl = ml->names; dl; dl = dl->next)
+ nelements++;
+ }
+ st = NewStructType (nelements);
+ se = StructTypeElements (st);
+ nelements = 0;
+ for (ml = yyvsp[-3].mval; ml; ml = ml->next)
+ {
+ for (dl = ml->names; dl; dl = dl->next)
+ {
+ se[nelements].type = ml->type;
+ se[nelements].name = dl->name;
+ nelements++;
+ }
+ }
+ s = NewSymbolStruct (yyvsp[0].aval, st, yyvsp[-1].pval);
+ ScopeAddSymbol (GlobalScope, s);
+ EXIT ();
+ }
+break;
+case 53:
+#line 385 "gram.y"
+{ yyval.pval = yyvsp[0].pval; }
+break;
+case 54:
+#line 387 "gram.y"
+{ yyval.pval = publish_private; }
+break;
+case 56:
+#line 392 "gram.y"
+{ yyval.eval = yyvsp[0].eval; }
+break;
+case 57:
+#line 394 "gram.y"
+{ yyval.eval = 0; }
+break;
+case 58:
+#line 397 "gram.y"
+{ yyval.eval = yyvsp[0].eval; }
+break;
+case 59:
+#line 399 "gram.y"
+{ yyval.eval = 0; }
+break;
+case 60:
+#line 402 "gram.y"
+{ yyval.eval = NewExprTree (COMMA, yyvsp[-2].eval, yyvsp[0].eval); }
+break;
+case 61:
+#line 404 "gram.y"
+{ yyval.eval = NewExprTree (COMMA, yyvsp[0].eval, 0); }
+break;
+case 62:
+#line 407 "gram.y"
+{ yyval.eval = NewExprDecl (NewDeclList (yyvsp[0].aval, NULL, NULL),
+ class_arg, yyvsp[-1].tval, publish_private);
+ }
+break;
+case 63:
+#line 412 "gram.y"
+{ yyval.eval = NewExprTree(IF, yyvsp[-2].eval, yyvsp[0].eval); }
+break;
+case 64:
+#line 414 "gram.y"
+{
+ yyval.eval = NewExprTree(ELSE, yyvsp[-4].eval,
+ NewExprTree(ELSE, yyvsp[-2].eval, yyvsp[0].eval));
+ }
+break;
+case 65:
+#line 419 "gram.y"
+{ yyval.eval = NewExprTree(WHILE, yyvsp[-2].eval, yyvsp[0].eval); }
+break;
+case 66:
+#line 421 "gram.y"
+{ yyval.eval = NewExprTree(DO, yyvsp[-4].eval, yyvsp[-1].eval); }
+break;
+case 67:
+#line 423 "gram.y"
+{
+ yyval.eval = NewExprTree(FOR, NewExprTree(FOR, yyvsp[-6].eval, yyvsp[-4].eval),
+ NewExprTree(FOR, yyvsp[-2].eval, yyvsp[0].eval));
+ }
+break;
+case 68:
+#line 428 "gram.y"
+{ yyval.eval = NewExprTree(BREAK, (Expr *) 0, (Expr *) 0); }
+break;
+case 69:
+#line 430 "gram.y"
+{ yyval.eval = NewExprTree(CONTINUE, (Expr *) 0, (Expr *) 0); }
+break;
+case 70:
+#line 432 "gram.y"
+{ yyval.eval = NewExprTree (RETURNTOK, (Expr *) 0, yyvsp[-1].eval); }
+break;
+case 71:
+#line 434 "gram.y"
+{ yyval.eval = NewExprTree(EXPR, yyvsp[-1].eval, (Expr *) 0); }
+break;
+case 72:
+#line 436 "gram.y"
+{ yyval.eval = yyvsp[-1].eval; }
+break;
+case 73:
+#line 438 "gram.y"
+{ yyval.eval = NewExprTree(SEMI, (Expr *) 0, (Expr *) 0); }
+break;
+case 74:
+#line 441 "gram.y"
+{
+ yyval.eval = NewExprTree (FUNCTION,
+ NewExprDecl (NewDeclList (yyvsp[-1].aval,
+ 0, 0),
+ class_undef,
+ type_func,
+ yyvsp[-2].pval),
+ NewExprTree (ASSIGN,
+ NewExprAtom (yyvsp[-1].aval),
+ NewExprCode (yyvsp[0].fval,
+ yyvsp[-1].aval)));
+ }
+break;
+case 75:
+#line 454 "gram.y"
+{ yyval.eval = yyvsp[-1].eval; }
+break;
+case 76:
+#line 456 "gram.y"
+{
+ yyval.eval = NewExprTree (SCOPE,
+ NewExprDecl (NewDeclList (yyvsp[-3].aval,
+ 0, 0),
+ class_undef,
+ type_undef,
+ yyvsp[-4].pval),
+ yyvsp[-1].eval);
+ }
+break;
+case 77:
+#line 466 "gram.y"
+{
+ yyval.eval = NewExprTree (IMPORT,
+ NewExprDecl (NewDeclList (yyvsp[-1].aval,
+ 0, 0),
+ class_undef,
+ type_undef,
+ yyvsp[-2].pval),
+ 0);
+ }
+break;
+case 78:
+#line 476 "gram.y"
+{ yyval.eval = NewExprTree (TRY, yyvsp[-1].eval, yyvsp[0].eval); }
+break;
+case 79:
+#line 479 "gram.y"
+{
+ yyval.eval = NewExprTree (CATCH,
+ NewExprTree (EXCEPTION,
+ NewExprAtom (yyvsp[-4].aval),
+ yyvsp[-2].eval),
+ yyvsp[0].eval);
+ }
+break;
+case 80:
+#line 488 "gram.y"
+{ yyval.eval = NewExprTree (TRY, yyvsp[-1].eval, yyvsp[0].eval); }
+break;
+case 81:
+#line 490 "gram.y"
+{ yyval.eval = NewExprTree (TRY, yyvsp[0].eval, 0); }
+break;
+case 82:
+#line 492 "gram.y"
+{ ignorenl = 1; }
+break;
+case 83:
+#line 494 "gram.y"
+{ yyval.fval = NewFuncCode (yyvsp[-6].tval, yyvsp[-4].eval, yyvsp[-1].eval);}
+break;
+case 84:
+#line 497 "gram.y"
+{ yyval.eval = BuildCall ("HistoryShow", 1,
+ BuildName ("format")); }
+break;
+case 85:
+#line 500 "gram.y"
+{ yyval.eval = BuildCall ("HistoryShow", 2,
+ BuildName ("format"), yyvsp[0].eval); }
+break;
+case 86:
+#line 503 "gram.y"
+{ yyval.eval = BuildCall ("HistoryShow", 3,
+ BuildName ("format"), yyvsp[-2].eval, yyvsp[0].eval); }
+break;
+case 87:
+#line 506 "gram.y"
+{ yyval.eval = BuildCall ("HistorySet", 1, yyvsp[0].eval); }
+break;
+case 88:
+#line 509 "gram.y"
+{
+ SymbolPtr s;
+ int depth;
+
+ s = ScopeFindSymbol (GlobalScope, yyvsp[-1].aval, &depth);
+ if (!s)
+ {
+ yyerror ("Undefined symbol \"%A\"", yyvsp[-1].aval);
+ }
+ else
+ EditFunction (s);
+ }
+break;
+case 89:
+#line 522 "gram.y"
+{
+ ENTER ();
+ EditFile (yyvsp[-1].vval);
+ EXIT ();
+ }
+break;
+case 90:
+#line 528 "gram.y"
+{
+ EditFile ((Value) 0);
+ }
+break;
+case 91:
+#line 533 "gram.y"
+{ yyval.eval = yyvsp[0].eval; }
+break;
+case 92:
+#line 535 "gram.y"
+{ yyval.eval = 0; }
+break;
+case 93:
+#line 538 "gram.y"
+{ yyval.eval = NewExprTree(OC, yyvsp[-1].eval, yyvsp[0].eval); }
+break;
+case 94:
+#line 540 "gram.y"
+{ yyval.eval = NewExprTree(OC, 0, 0); }
+break;
+case 96:
+#line 544 "gram.y"
+{ yyval.eval = NewExprTree(COMMA, yyvsp[-2].eval, yyvsp[0].eval); }
+break;
+case 98:
+#line 548 "gram.y"
+{ Value t;
+ t = ThreadFromId (yyvsp[0].vval);
+ if (Zerop (t))
+ {
+ yyerror ("No thread %v", yyvsp[0].vval);
+ YYERROR;
+ }
+ else
+ yyval.eval = NewExprConst(t);
+ }
+break;
+case 99:
+#line 559 "gram.y"
+{ yyval.eval = NewExprTree(STAR, yyvsp[0].eval, (Expr *) 0); }
+break;
+case 100:
+#line 561 "gram.y"
+{ yyval.eval = NewExprTree(AMPER, yyvsp[0].eval, (Expr *) 0); }
+break;
+case 101:
+#line 563 "gram.y"
+{ yyval.eval = NewExprTree(UMINUS, yyvsp[0].eval, (Expr *) 0); }
+break;
+case 102:
+#line 565 "gram.y"
+{ yyval.eval = NewExprTree(LNOT, yyvsp[0].eval, (Expr *) 0); }
+break;
+case 103:
+#line 567 "gram.y"
+{ yyval.eval = NewExprTree(BANG, yyvsp[0].eval, (Expr *) 0); }
+break;
+case 104:
+#line 569 "gram.y"
+{ yyval.eval = NewExprTree(FACT, yyvsp[-1].eval, (Expr *) 0); }
+break;
+case 105:
+#line 571 "gram.y"
+{ yyval.eval = NewExprTree(INC, yyvsp[0].eval, (Expr *) 0); }
+break;
+case 106:
+#line 573 "gram.y"
+{ yyval.eval = NewExprTree(INC, (Expr *) 0, yyvsp[-1].eval); }
+break;
+case 107:
+#line 575 "gram.y"
+{ yyval.eval = NewExprTree(DEC, yyvsp[0].eval, (Expr *) 0); }
+break;
+case 108:
+#line 577 "gram.y"
+{ yyval.eval = NewExprTree(DEC, (Expr *) 0, yyvsp[-1].eval); }
+break;
+case 109:
+#line 579 "gram.y"
+{
+ binop:
+ yyval.eval = NewExprTree(yyvsp[-1].ival, yyvsp[-2].eval, yyvsp[0].eval);
+ }
+break;
+case 110:
+#line 584 "gram.y"
+{ goto binop; }
+break;
+case 111:
+#line 586 "gram.y"
+{ goto binop; }
+break;
+case 112:
+#line 588 "gram.y"
+{ goto binop; }
+break;
+case 113:
+#line 590 "gram.y"
+{ goto binop; }
+break;
+case 114:
+#line 592 "gram.y"
+{ goto binop; }
+break;
+case 115:
+#line 594 "gram.y"
+{ goto binop; }
+break;
+case 116:
+#line 596 "gram.y"
+{ yyval.eval = NewExprTree(QUEST, yyvsp[-4].eval, NewExprTree(COLON, yyvsp[-2].eval, yyvsp[0].eval)); }
+break;
+case 117:
+#line 598 "gram.y"
+{ goto binop; }
+break;
+case 118:
+#line 600 "gram.y"
+{ goto binop; }
+break;
+case 119:
+#line 602 "gram.y"
+{ goto binop; }
+break;
+case 120:
+#line 604 "gram.y"
+{ goto binop; }
+break;
+case 121:
+#line 606 "gram.y"
+{ goto binop; }
+break;
+case 122:
+#line 608 "gram.y"
+{ goto binop; }
+break;
+case 123:
+#line 610 "gram.y"
+{ goto binop; }
+break;
+case 124:
+#line 612 "gram.y"
+{ goto binop; }
+break;
+case 125:
+#line 614 "gram.y"
+{ goto binop; }
+break;
+case 126:
+#line 616 "gram.y"
+{ goto binop; }
+break;
+case 127:
+#line 618 "gram.y"
+{ goto binop; }
+break;
+case 128:
+#line 620 "gram.y"
+{ goto binop; }
+break;
+case 129:
+#line 622 "gram.y"
+{ goto binop; }
+break;
+case 130:
+#line 625 "gram.y"
+{ yyval.eval = NewExprAtom (yyvsp[0].aval); }
+break;
+case 131:
+#line 627 "gram.y"
+{ yyval.eval = NewExprConst(yyvsp[0].vval); }
+break;
+case 132:
+#line 629 "gram.y"
+{ yyval.eval = NewExprConst(History (0, yyvsp[0].vval)); }
+break;
+case 133:
+#line 631 "gram.y"
+{ yyval.eval = NewExprConst(History (0, Zero)); }
+break;
+case 134:
+#line 633 "gram.y"
+{ yyval.eval = yyvsp[-1].eval; }
+break;
+case 135:
+#line 635 "gram.y"
+{ yyval.eval = NewExprTree(OS, yyvsp[-3].eval, yyvsp[-1].eval); }
+break;
+case 136:
+#line 637 "gram.y"
+{ yyval.eval = NewExprTree (yyvsp[-2].ival, yyvsp[-3].eval, yyvsp[-1].eval); }
+break;
+case 137:
+#line 639 "gram.y"
+{ yyval.eval = NewExprTree (FORK, (Expr *) 0, yyvsp[-1].eval); }
+break;
+case 138:
+#line 641 "gram.y"
+{ yyval.eval = NewExprTree(DOT, yyvsp[-2].eval, NewExprAtom (yyvsp[0].aval)); }
+break;
+case 139:
+#line 643 "gram.y"
+{ yyval.eval = NewExprTree(ARROW, yyvsp[-2].eval, NewExprAtom (yyvsp[0].aval)); }
+break;
+case 140:
+#line 645 "gram.y"
+{ yyval.eval = NewExprCode (yyvsp[0].fval, 0); }
+break;
+case 141:
+#line 647 "gram.y"
+{ yyval.eval = NewExprTree (STRUCT, NewExprAtom (yyvsp[-3].aval), yyvsp[-1].eval); }
+break;
+case 142:
+#line 649 "gram.y"
+{ yyval.eval = NewExprTree (ARRAY, yyvsp[-1].eval, yyvsp[0].eval); }
+break;
+case 143:
+#line 651 "gram.y"
+{ yyval.eval = NewExprTree (ARRAY, 0,
+ NewExprTree (AINIT, yyvsp[-1].eval, 0));
+ }
+break;
+case 144:
+#line 656 "gram.y"
+{ yyval.vval = yyvsp[0].vval; }
+break;
+case 145:
+#line 658 "gram.y"
+{ yyval.vval = Zero; }
+break;
+case 146:
+#line 661 "gram.y"
+{ yyval.ival = ASSIGNPLUS; }
+break;
+case 147:
+#line 663 "gram.y"
+{ yyval.ival = ASSIGNMINUS; }
+break;
+case 148:
+#line 665 "gram.y"
+{ yyval.ival = ASSIGNTIMES; }
+break;
+case 149:
+#line 667 "gram.y"
+{ yyval.ival = ASSIGNDIVIDE; }
+break;
+case 150:
+#line 669 "gram.y"
+{ yyval.ival = ASSIGNDIV; }
+break;
+case 151:
+#line 671 "gram.y"
+{ yyval.ival = ASSIGNMOD; }
+break;
+case 152:
+#line 673 "gram.y"
+{ yyval.ival = ASSIGNPOW; }
+break;
+case 153:
+#line 675 "gram.y"
+{ yyval.ival = ASSIGNLXOR; }
+break;
+case 154:
+#line 677 "gram.y"
+{ yyval.ival = ASSIGNLAND; }
+break;
+case 155:
+#line 679 "gram.y"
+{ yyval.ival = ASSIGNLOR; }
+break;
+case 156:
+#line 682 "gram.y"
+{ yyval.eval = yyvsp[-1].eval; }
+break;
+case 157:
+#line 685 "gram.y"
+{ yyval.eval = NewExprTree (AINIT, yyvsp[-1].eval, 0); }
+break;
+case 158:
+#line 687 "gram.y"
+{ yyval.eval = 0; }
+break;
+case 159:
+#line 690 "gram.y"
+{ yyval.eval = yyvsp[0].eval; }
+break;
+case 160:
+#line 692 "gram.y"
+{ yyval.eval = NewExprTree (AINIT, yyvsp[-1].eval, 0); }
+break;
+case 161:
+#line 695 "gram.y"
+{ yyval.eval = NewExprTree (COMMA, yyvsp[-2].eval, yyvsp[0].eval); }
+break;
+case 162:
+#line 697 "gram.y"
+{ yyval.eval = NewExprTree (COMMA, yyvsp[0].eval, 0); }
+break;
+case 163:
+#line 700 "gram.y"
+{ yyval.eval = NewExprTree (ASSIGN, NewExprAtom (yyvsp[-2].aval), yyvsp[0].eval); }
+break;
+case 164:
+#line 703 "gram.y"
+{ yyval.eval = NewExprTree (COMMA, yyvsp[-2].eval, yyvsp[0].eval); }
+break;
+case 165:
+#line 705 "gram.y"
+{ yyval.eval = NewExprTree (COMMA, yyvsp[0].eval, 0); }
+break;
+case 167:
+#line 709 "gram.y"
+{ yyval.eval = 0; }
+break;
+case 168:
+#line 712 "gram.y"
+{ yyval.eval = NewExprTree (yyvsp[-1].ival, yyvsp[0].eval, yyvsp[-2].eval); }
+break;
+case 169:
+#line 714 "gram.y"
+{ yyval.eval = NewExprTree (COMMA, yyvsp[0].eval, (Expr *) 0); }
+break;
+#line 2162 "y.tab.c"
+ }
+ yyssp -= yym;
+ yystate = *yyssp;
+ yyvsp -= yym;
+ yym = yylhs[yyn];
+ if (yystate == 0 && yym == 0)
+ {
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state 0 to\
+ state %d\n", YYPREFIX, YYFINAL);
+#endif
+ yystate = YYFINAL;
+ *++yyssp = YYFINAL;
+ *++yyvsp = yyval;
+ if (yychar < 0)
+ {
+ if ((yychar = yylex()) < 0) yychar = 0;
+#if YYDEBUG
+ if (yydebug)
+ {
+ yys = 0;
+ if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
+ if (!yys) yys = "illegal-symbol";
+ printf("%sdebug: state %d, reading %d (%s)\n",
+ YYPREFIX, YYFINAL, yychar, yys);
+ }
+#endif
+ }
+ if (yychar == 0) goto yyaccept;
+ goto yyloop;
+ }
+ if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
+ yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
+ yystate = yytable[yyn];
+ else
+ yystate = yydgoto[yym];
+#if YYDEBUG
+ if (yydebug)
+ printf("%sdebug: after reduction, shifting from state %d \
+to state %d\n", YYPREFIX, *yyssp, yystate);
+#endif
+ if (yyssp >= yyss + yystacksize - 1)
+ {
+ goto yyoverflow;
+ }
+ *++yyssp = yystate;
+ *++yyvsp = yyval;
+ goto yyloop;
+yyoverflow:
+ yyerror("yacc stack overflow");
+yyabort:
+ return (1);
+yyaccept:
+ return (0);
+}
diff --git a/gram.h b/gram.h
new file mode 100644
index 0000000..5cca954
--- /dev/null
+++ b/gram.h
@@ -0,0 +1,117 @@
+#define CONST 257
+#define NL 258
+#define ALL 259
+#define DOWN 260
+#define UP 261
+#define QUIT 262
+#define READ 263
+#define SHELL 264
+#define EDIT 265
+#define DEFAULT 266
+#define UNDEFINE 267
+#define HISTORY 268
+#define PRINT 269
+#define WHILE 270
+#define IF 271
+#define ELSE 272
+#define FOR 273
+#define DO 274
+#define BREAK 275
+#define CONTINUE 276
+#define EXPR 277
+#define RETURNTOK 278
+#define SCOPE 279
+#define IMPORT 280
+#define TRY 281
+#define CATCH 282
+#define FORK 283
+#define OP 284
+#define CP 285
+#define OC 286
+#define CC 287
+#define COMMA 288
+#define SEMI 289
+#define DOLLAR 290
+#define VAR 291
+#define ASSIGNPLUS 292
+#define ASSIGNMINUS 293
+#define ASSIGNTIMES 294
+#define ASSIGNDIVIDE 295
+#define ASSIGNDIV 296
+#define ASSIGNMOD 297
+#define ASSIGNPOW 298
+#define ASSIGNLXOR 299
+#define ASSIGNLAND 300
+#define ASSIGNLOR 301
+#define NAME 302
+#define AUTO 303
+#define GLOBAL 304
+#define STATIC 305
+#define PUBLIC 306
+#define INT 307
+#define NATURAL 308
+#define INTEGER 309
+#define RATIONAL 310
+#define DOUBLE 311
+#define ARRAY 312
+#define FUNC 313
+#define EXCEPTION 314
+#define STRING 315
+#define POLYMORPH 316
+#define REF 317
+#define STRUCT 318
+#define TYPE 319
+#define FUNCTION 320
+#define AINIT 321
+#define POUND 322
+#define COMMAOP 323
+#define ASSIGN 324
+#define QUEST 325
+#define COLON 326
+#define OR 327
+#define AND 328
+#define LOR 329
+#define LXOR 330
+#define LAND 331
+#define EQ 332
+#define NE 333
+#define LT 334
+#define GT 335
+#define LE 336
+#define GE 337
+#define PLUS 338
+#define MINUS 339
+#define TIMES 340
+#define DIVIDE 341
+#define DIV 342
+#define MOD 343
+#define POW 344
+#define UMINUS 345
+#define BANG 346
+#define FACT 347
+#define LNOT 348
+#define INC 349
+#define DEC 350
+#define STAR 351
+#define AMPER 352
+#define THREAD 353
+#define OS 354
+#define CS 355
+#define DOT 356
+#define ARROW 357
+#define CALL 358
+typedef union {
+ int ival;
+ Value vval;
+ Class cval;
+ Type tval;
+ Publish pval;
+ ExprPtr eval;
+ Atom aval;
+ DeclListPtr dval;
+ MemListPtr mval;
+ Fulltype ftval;
+ ScopePtr sval;
+ CodePtr fval;
+} YYSTYPE;
+extern YYSTYPE yylval;
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..e9de238
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission. M.I.T. makes no representations about the
+# suitability of this software for any purpose. It is provided "as is"
+# without express or implied warranty.
+#
+# 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. It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. 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}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ chmodcmd=""
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# 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 $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
diff --git a/lex.c b/lex.c
new file mode 100644
index 0000000..3f806e5
--- /dev/null
+++ b/lex.c
@@ -0,0 +1,2502 @@
+/* A lexical scanner generated by flex */
+
+/* Scanner skeleton version:
+ * $Header$
+ */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+#include <stdio.h>
+#include <unistd.h>
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <stdlib.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 90
+#define YY_END_OF_BUFFER 91
+static yyconst short int yy_accept[245] =
+ { 0,
+ 0, 0, 91, 89, 80, 46, 79, 59, 89, 60,
+ 43, 58, 62, 89, 47, 48, 55, 53, 42, 54,
+ 44, 56, 83, 86, 78, 41, 71, 66, 72, 77,
+ 88, 49, 50, 61, 88, 88, 88, 88, 88, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 51, 63, 52, 65, 2, 70, 0, 82, 0, 75,
+ 0, 0, 67, 68, 45, 87, 0, 1, 57, 87,
+ 83, 86, 0, 0, 0, 73, 69, 74, 88, 64,
+ 88, 88, 88, 88, 88, 88, 18, 88, 88, 88,
+ 88, 88, 88, 88, 19, 88, 88, 88, 88, 88,
+
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 76,
+ 82, 81, 81, 0, 87, 0, 0, 87, 84, 85,
+ 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
+ 88, 17, 88, 88, 88, 88, 26, 88, 88, 88,
+ 88, 88, 88, 32, 88, 88, 88, 88, 88, 24,
+ 88, 88, 87, 0, 88, 3, 88, 88, 88, 88,
+ 88, 11, 20, 88, 9, 36, 34, 88, 88, 88,
+ 88, 88, 88, 88, 8, 88, 14, 88, 88, 88,
+ 88, 88, 88, 88, 88, 31, 21, 25, 88, 88,
+ 88, 88, 88, 88, 88, 88, 88, 88, 13, 88,
+
+ 88, 88, 37, 10, 88, 88, 88, 88, 16, 88,
+ 88, 29, 88, 88, 4, 88, 38, 88, 88, 40,
+ 88, 23, 5, 30, 33, 88, 88, 15, 88, 88,
+ 12, 27, 88, 88, 88, 22, 88, 6, 88, 28,
+ 7, 39, 35, 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, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 22, 22, 22, 22, 22, 23, 23, 24, 25, 26,
+ 27, 28, 29, 1, 30, 30, 30, 30, 31, 30,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 33, 34, 35, 36, 37, 1, 38, 39, 40, 41,
+
+ 42, 43, 44, 45, 46, 32, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 32, 58, 59,
+ 60, 32, 61, 62, 63, 64, 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[65] =
+ { 0,
+ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 3,
+ 3, 3, 3, 1, 1, 1, 1, 1, 1, 3,
+ 3, 4, 1, 1, 1, 1, 4, 3, 3, 3,
+ 3, 3, 3, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1
+ } ;
+
+static yyconst short int yy_base[249] =
+ { 0,
+ 0, 336, 342, 344, 344, 344, 344, 314, 59, 344,
+ 344, 344, 330, 305, 344, 344, 344, 323, 344, 49,
+ 47, 57, 60, 67, 344, 344, 310, 309, 308, 344,
+ 0, 344, 344, 298, 18, 279, 35, 50, 55, 43,
+ 284, 285, 61, 61, 273, 75, 39, 275, 278, 282,
+ 344, 264, 344, 344, 344, 344, 91, 344, 99, 344,
+ 314, 313, 344, 344, 344, 100, 106, 344, 344, 114,
+ 126, 132, 149, 86, 0, 344, 344, 344, 0, 344,
+ 269, 266, 279, 264, 269, 275, 260, 270, 260, 84,
+ 260, 263, 261, 256, 0, 258, 253, 260, 261, 267,
+
+ 259, 248, 122, 252, 260, 78, 241, 259, 253, 344,
+ 133, 344, 287, 159, 163, 167, 175, 179, 120, 0,
+ 259, 245, 257, 254, 237, 254, 252, 234, 247, 246,
+ 231, 239, 245, 245, 227, 231, 239, 220, 229, 230,
+ 221, 230, 234, 0, 217, 221, 224, 215, 105, 0,
+ 228, 221, 161, 186, 208, 0, 220, 221, 219, 207,
+ 215, 0, 0, 210, 0, 0, 205, 222, 204, 197,
+ 204, 198, 190, 199, 0, 193, 0, 189, 200, 193,
+ 194, 189, 198, 194, 194, 0, 0, 0, 185, 186,
+ 191, 176, 185, 182, 175, 172, 185, 175, 0, 185,
+
+ 173, 171, 0, 0, 180, 175, 162, 171, 0, 159,
+ 159, 0, 168, 162, 0, 152, 0, 157, 156, 0,
+ 166, 0, 0, 0, 0, 143, 149, 0, 126, 126,
+ 0, 0, 121, 111, 116, 0, 93, 0, 93, 0,
+ 0, 0, 0, 344, 249, 253, 255, 71
+ } ;
+
+static yyconst short int yy_def[249] =
+ { 0,
+ 244, 1, 244, 244, 244, 244, 244, 244, 245, 244,
+ 244, 244, 244, 246, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 247, 244, 244, 244, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 244, 244, 244, 244, 244, 244, 245, 244, 245, 244,
+ 244, 246, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 248, 244, 244, 244, 247, 244,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 244,
+ 245, 244, 244, 244, 244, 244, 244, 244, 244, 248,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 244, 244, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 247, 247, 247, 247, 247, 247, 247,
+ 247, 247, 247, 0, 244, 244, 244, 244
+ } ;
+
+static yyconst short int yy_nxt[409] =
+ { 0,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 24, 24, 25, 26, 27, 28, 29, 30, 31,
+ 31, 31, 32, 4, 33, 34, 4, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 31, 31, 31, 31,
+ 31, 44, 45, 46, 47, 48, 49, 50, 31, 31,
+ 51, 52, 53, 54, 58, 64, 66, 66, 66, 66,
+ 68, 81, 84, 120, 82, 69, 65, 70, 104, 71,
+ 71, 71, 72, 105, 70, 85, 72, 72, 72, 72,
+ 73, 86, 59, 91, 106, 88, 58, 73, 74, 92,
+
+ 87, 73, 89, 95, 111, 119, 119, 67, 73, 96,
+ 97, 98, 102, 90, 99, 148, 103, 100, 75, 66,
+ 66, 66, 66, 130, 59, 114, 114, 114, 114, 131,
+ 73, 149, 59, 115, 115, 115, 115, 243, 58, 119,
+ 119, 73, 242, 70, 73, 71, 71, 71, 72, 70,
+ 182, 72, 72, 72, 72, 73, 73, 241, 240, 143,
+ 67, 183, 73, 117, 144, 117, 59, 73, 118, 118,
+ 118, 118, 239, 73, 116, 238, 237, 145, 114, 114,
+ 114, 114, 115, 115, 115, 115, 154, 154, 154, 154,
+ 236, 73, 235, 73, 118, 118, 118, 118, 118, 118,
+
+ 118, 118, 73, 234, 73, 154, 154, 154, 154, 233,
+ 232, 231, 230, 229, 228, 227, 226, 225, 224, 223,
+ 222, 153, 221, 116, 220, 219, 218, 217, 216, 215,
+ 214, 213, 212, 211, 210, 209, 208, 207, 206, 205,
+ 204, 203, 202, 201, 200, 199, 198, 197, 153, 57,
+ 196, 57, 57, 61, 195, 61, 61, 79, 79, 194,
+ 193, 192, 191, 190, 189, 188, 187, 186, 185, 184,
+ 181, 180, 179, 178, 177, 176, 175, 174, 173, 172,
+ 171, 170, 169, 168, 167, 166, 165, 164, 163, 162,
+ 161, 160, 159, 158, 157, 156, 155, 112, 152, 151,
+
+ 150, 147, 146, 142, 141, 140, 139, 138, 137, 136,
+ 135, 134, 133, 132, 129, 128, 127, 126, 125, 124,
+ 123, 122, 121, 113, 112, 110, 109, 108, 107, 101,
+ 94, 93, 83, 80, 78, 77, 76, 63, 62, 60,
+ 56, 244, 55, 3, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+
+ 244, 244, 244, 244, 244, 244, 244, 244
+ } ;
+
+static yyconst short int yy_chk[409] =
+ { 0,
+ 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, 9, 20, 21, 21, 21, 21,
+ 22, 35, 37, 248, 35, 22, 20, 23, 47, 23,
+ 23, 23, 23, 47, 24, 37, 24, 24, 24, 24,
+ 23, 38, 9, 40, 47, 39, 57, 24, 23, 40,
+
+ 38, 23, 39, 43, 59, 74, 74, 21, 24, 43,
+ 43, 44, 46, 39, 44, 106, 46, 44, 23, 66,
+ 66, 66, 66, 90, 57, 67, 67, 67, 67, 90,
+ 66, 106, 59, 70, 70, 70, 70, 239, 111, 119,
+ 119, 66, 237, 71, 70, 71, 71, 71, 71, 72,
+ 149, 72, 72, 72, 72, 70, 71, 235, 234, 103,
+ 66, 149, 72, 73, 103, 73, 111, 71, 73, 73,
+ 73, 73, 233, 72, 70, 230, 229, 103, 114, 114,
+ 114, 114, 115, 115, 115, 115, 116, 116, 116, 116,
+ 227, 153, 226, 115, 117, 117, 117, 117, 118, 118,
+
+ 118, 118, 153, 221, 115, 154, 154, 154, 154, 219,
+ 218, 216, 214, 213, 211, 210, 208, 207, 206, 205,
+ 202, 114, 201, 115, 200, 198, 197, 196, 195, 194,
+ 193, 192, 191, 190, 189, 185, 184, 183, 182, 181,
+ 180, 179, 178, 176, 174, 173, 172, 171, 154, 245,
+ 170, 245, 245, 246, 169, 246, 246, 247, 247, 168,
+ 167, 164, 161, 160, 159, 158, 157, 155, 152, 151,
+ 148, 147, 146, 145, 143, 142, 141, 140, 139, 138,
+ 137, 136, 135, 134, 133, 132, 131, 130, 129, 128,
+ 127, 126, 125, 124, 123, 122, 121, 113, 109, 108,
+
+ 107, 105, 104, 102, 101, 100, 99, 98, 97, 96,
+ 94, 93, 92, 91, 89, 88, 87, 86, 85, 84,
+ 83, 82, 81, 62, 61, 52, 50, 49, 48, 45,
+ 42, 41, 36, 34, 29, 28, 27, 18, 14, 13,
+ 8, 3, 2, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+ 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
+
+ 244, 244, 244, 244, 244, 244, 244, 244
+ } ;
+
+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 "lex.l"
+#define INITIAL 0
+#line 2 "lex.l"
+/* $Header$ */
+
+/*
+ * Copyright (C) 1988-2001 Keith Packard and Bart Massey.
+ * All Rights Reserved. See the file COPYING in this directory
+ * for licensing information.
+ */
+
+#include <config.h>
+
+#include "nickle.h"
+#include "gram.h"
+#include <strings.h>
+#include <errno.h>
+
+int at_bol = True;
+int yylineno;
+
+#undef YY_INPUT
+
+#define YY_INPUT(buf,result,max_size) \
+{ \
+ int c; \
+ result = 0; \
+ if (at_bol) yyprompt (); \
+ while (result < max_size) { \
+ c = FileInput (yyinput); \
+ at_bol = False; \
+ if (c < 0) { \
+ c = popinput (); \
+ if (c < 0) \
+ break; \
+ } \
+ buf[result++] = c; \
+ if (c == '\n') \
+ { \
+ at_bol = True; \
+ yylineno++; \
+ break; \
+ } \
+ } \
+}
+
+#ifndef FLEX_SCANNER
+#undef input
+#undef unput
+int input (void)
+{
+ char buf[1];
+ int r;
+
+ YY_INPUT(buf, r, 1);
+ if (r == 0)
+ return 0;
+ return buf[0];
+}
+
+void unput (char c)
+{
+ if (c == '\n')
+ yylineno--;
+ FileUnput (yyinput, c);
+}
+#endif
+
+#define YYINDEEP 20
+Value yyinstack[YYINDEEP];
+Value *yyinpt = yyinstack + YYINDEEP;
+Value yyinput;
+int linenos[YYINDEEP];
+int *linenopt = linenos + YYINDEEP;
+char *yyfile = "";
+char *fnames[YYINDEEP];
+char **fnamept = fnames + YYINDEEP;
+int yyfiledeep = 0;
+
+#line 612 "lex.yy.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 \
+ if ( yyleng > 0 ) \
+ yy_current_buffer->yy_at_bol = \
+ (yytext[yyleng - 1] == '\n'); \
+ YY_USER_ACTION
+
+YY_DECL
+ {
+ register yy_state_type yy_current_state;
+ register char *yy_cp = NULL, *yy_bp = NULL;
+ register int yy_act;
+
+#line 79 "lex.l"
+
+#line 768 "lex.yy.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_current_state += YY_AT_BOL();
+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 >= 245 )
+ 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] != 344 );
+
+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 80 "lex.l"
+skipcomment();
+ YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 81 "lex.l"
+skipline();
+ YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 82 "lex.l"
+{ yylval.cval = class_auto; return AUTO; }
+ YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 83 "lex.l"
+{ yylval.cval = class_global; return GLOBAL; }
+ YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 84 "lex.l"
+{ yylval.cval = class_static; return STATIC; }
+ YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 85 "lex.l"
+{ yylval.tval = type_func; return FUNCTION; }
+ YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 86 "lex.l"
+{ return UNDEFINE; }
+ YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 87 "lex.l"
+return QUIT;
+ YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 88 "lex.l"
+return QUIT;
+ YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 89 "lex.l"
+return SHELL;
+ YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 90 "lex.l"
+return EDIT;
+ YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 91 "lex.l"
+return HISTORY;
+ YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 92 "lex.l"
+return PRINT;
+ YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 93 "lex.l"
+return READ;
+ YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 94 "lex.l"
+return DEFAULT;
+ YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 95 "lex.l"
+{ yylval.ival = WHILE; return WHILE; }
+ YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 96 "lex.l"
+{ yylval.ival = FOR; return FOR; }
+ YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 97 "lex.l"
+{ yylval.ival = DO; return DO; }
+ YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 98 "lex.l"
+{ yylval.ival = IF; return IF; }
+ YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 99 "lex.l"
+{ yylval.ival = ELSE; return ELSE; }
+ YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 100 "lex.l"
+{ yylval.ival = BREAK; return BREAK; }
+ YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 101 "lex.l"
+{ yylval.ival = CONTINUE; return CONTINUE; }
+ YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 102 "lex.l"
+{ yylval.ival = RETURNTOK; return RETURNTOK; }
+ YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 103 "lex.l"
+{ yylval.ival = TRY; return TRY; }
+ YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 104 "lex.l"
+{ yylval.ival = CATCH; return CATCH; }
+ YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 105 "lex.l"
+{ yylval.tval = type_int; return INT; }
+ YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 106 "lex.l"
+{ yylval.tval = type_integer; return INTEGER; }
+ YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 107 "lex.l"
+{ yylval.tval = type_rational; return RATIONAL; }
+ YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 108 "lex.l"
+{ yylval.tval = type_double; return DOUBLE; }
+ YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 109 "lex.l"
+{ yylval.tval = type_string; return STRING; }
+ YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 110 "lex.l"
+{ yylval.tval = type_array; return ARRAY; }
+ YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 111 "lex.l"
+{ yylval.tval = type_ref; return REF; }
+ YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 112 "lex.l"
+{ yylval.tval = type_struct; return STRUCT; }
+ YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 113 "lex.l"
+{ yylval.tval = type_func; return FUNC; }
+ YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 114 "lex.l"
+{ yylval.tval = type_undef; return POLYMORPH; }
+ YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 115 "lex.l"
+{ yylval.ival = FORK; return FORK; }
+ YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 116 "lex.l"
+{ yylval.ival = SCOPE; return SCOPE; }
+ YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 117 "lex.l"
+{ yylval.ival = IMPORT; return IMPORT; }
+ YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 118 "lex.l"
+{ yylval.ival = EXCEPTION; return EXCEPTION; }
+ YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 119 "lex.l"
+{ yylval.pval = publish_public; return PUBLIC; }
+ YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 120 "lex.l"
+{ yylval.ival = SEMI; return SEMI; }
+ YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 121 "lex.l"
+{ yylval.ival = COMMA; return COMMA; }
+ YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 122 "lex.l"
+{ yylval.ival = DOLLAR; return DOLLAR; }
+ YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 123 "lex.l"
+{ yylval.ival = DOT; return DOT; }
+ YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 124 "lex.l"
+{ yylval.ival = ARROW; return ARROW; }
+ YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 125 "lex.l"
+{ if (!ignorenl) { yylval.ival = NL; return NL; } }
+ YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 126 "lex.l"
+{ yylval.ival = OP; return OP; }
+ YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 127 "lex.l"
+{ yylval.ival = CP; return CP; }
+ YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 128 "lex.l"
+{ yylval.ival = OS; return OS; }
+ YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 129 "lex.l"
+{ yylval.ival = CS; return CS; }
+ YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 130 "lex.l"
+{ yylval.ival = OC; return OC; }
+ YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 131 "lex.l"
+{ yylval.ival = CC; return CC; }
+ YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 132 "lex.l"
+{ yylval.ival = PLUS; return PLUS; }
+ YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 133 "lex.l"
+{ yylval.ival = MINUS; return MINUS; }
+ YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 134 "lex.l"
+{ yylval.ival = TIMES; return TIMES; }
+ YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 135 "lex.l"
+{ yylval.ival = DIVIDE; return DIVIDE; }
+ YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 136 "lex.l"
+{ yylval.ival = DIV; return DIV; }
+ YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 137 "lex.l"
+{ yylval.ival = MOD; return MOD; }
+ YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 138 "lex.l"
+{ yylval.ival = BANG; return BANG; }
+ YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 139 "lex.l"
+{ yylval.ival = POUND; return POUND; }
+ YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 140 "lex.l"
+{ yylval.ival = POW; return POW; }
+ YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 141 "lex.l"
+{ yylval.ival = LAND; return LAND; }
+ YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 142 "lex.l"
+{ yylval.ival = LOR; return LOR; }
+ YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 143 "lex.l"
+{ yylval.ival = LXOR; return LXOR; }
+ YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 144 "lex.l"
+{ yylval.ival = LNOT; return LNOT; }
+ YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 145 "lex.l"
+{ yylval.ival = ASSIGN; return ASSIGN; }
+ YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 146 "lex.l"
+{ yylval.ival = INC; return INC; }
+ YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 147 "lex.l"
+{ yylval.ival = DEC; return DEC; }
+ YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 148 "lex.l"
+{ yylval.ival = EQ; return EQ; }
+ YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 149 "lex.l"
+{ yylval.ival = NE; return NE; }
+ YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 150 "lex.l"
+{ yylval.ival = LT; return LT; }
+ YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 151 "lex.l"
+{ yylval.ival = GT; return GT; }
+ YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 152 "lex.l"
+{ yylval.ival = LE; return LE; }
+ YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 153 "lex.l"
+{ yylval.ival = GE; return GE; }
+ YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 154 "lex.l"
+{ yylval.ival = AND; return AND; }
+ YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 155 "lex.l"
+{ yylval.ival = OR; return OR; }
+ YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 156 "lex.l"
+{ yylval.ival = QUEST; return QUEST; }
+ YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 157 "lex.l"
+{ yylval.ival = COLON; return COLON; }
+ YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 158 "lex.l"
+;
+ YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 159 "lex.l"
+;
+ YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 160 "lex.l"
+{ ENTER ();
+ int i;
+
+ if (yytext[1] == '\\')
+ i = lexEscape (yytext[2]);
+ else
+ i = yytext[1];
+ yylval.vval = NewInt (i);
+ EXIT ();
+ REFERENCE (yylval.vval);
+ return CONST;
+ }
+ YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 172 "lex.l"
+{
+ ENTER ();
+ register char *c, *s;
+ yytext[yyleng - 1] = '\0';
+ yylval.vval = NewString (yyleng-2);
+ c = StringChars (&yylval.vval->string);
+ s = yytext + 1;
+ while (*s) {
+ if (*s == '\\')
+ *c++ = lexEscape (*++s);
+ else
+ *c++ = *s;
+ ++s;
+ }
+ *c = '\0';
+ EXIT ();
+ REFERENCE (yylval.vval);
+ return CONST;
+ }
+ YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 191 "lex.l"
+{
+ yylval.vval = atov(yytext+1, 8);
+ return CONST;
+ }
+ YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 195 "lex.l"
+{
+ yylval.vval = atov(yytext+2, 2);
+ return CONST;
+ }
+ YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 199 "lex.l"
+{
+ yylval.vval = atov(yytext+2, 16);
+ return CONST;
+ }
+ YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 203 "lex.l"
+{
+ yylval.vval = atov(yytext, 10);
+ return CONST;
+ }
+ YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 207 "lex.l"
+{
+ yylval.vval = aetov (yytext);
+ return CONST;
+ }
+ YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 211 "lex.l"
+{
+ yylval.aval = AtomId (yytext);
+ return NAME;
+ }
+ YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 215 "lex.l"
+FilePrintf (FileStderr, "character \\%o ignored\n", *yytext & 0xff);
+ YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 216 "lex.l"
+ECHO;
+ YY_BREAK
+#line 1349 "lex.yy.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;
+ yy_current_state += YY_AT_BOL();
+
+ 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 >= 245 )
+ 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 >= 245 )
+ 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 == 244);
+
+ 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;
+
+ yy_current_buffer->yy_at_bol = (c == '\n');
+
+ 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 );
+ }
+
+
+
+#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 216 "lex.l"
+
+
+int
+lexEscape (int c)
+{
+ switch (c) {
+ case '0':
+ return '\0';
+ break;
+ case 'b':
+ return '\b';
+ break;
+ case 'n':
+ return '\n';
+ break;
+ case 't':
+ return '\t';
+ break;
+ case 'f':
+ return '\f';
+ break;
+ default:
+ return c;
+ }
+}
+
+void
+skipcomment (void)
+{
+ int c;
+
+ c = input();
+ for (;;) {
+ while (c != EOF && c != '*')
+ c = input();
+ if (c == EOF)
+ return;
+ c = input();
+ if (c == EOF || c == '/')
+ return;
+ }
+}
+
+void
+skipline (void)
+{
+ int c;
+
+ do {
+ c = input();
+ } while (c != EOF && c != '\n');
+}
+
+Value
+atov (char *s, int base)
+{
+ ENTER ();
+ Value result;
+ Value d, b;
+
+ b = NewInt (base);
+ result = NewInt (0);
+ for (;;) {
+ switch (*s) {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ d = NewInt (*s - '0');
+ break;
+ case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
+ d = NewInt (*s - 'a' + 10);
+ break;
+ case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
+ d = NewInt (*s - 'A' + 10);
+ break;
+ default:
+ RETURN (result);
+ }
+ if (d->ints.value >= base)
+ break;
+ result = Plus (d, Times (result, b));
+ ++s;
+ }
+ RETURN (result);
+}
+
+Value
+aetov (char *s)
+{
+ ENTER ();
+ char *int_part, *frac_part, *rep_part, *exp_part, *next;
+ int sign, frac_len, rep_len, esign;
+ Value v, sv;
+
+ int_part = s;
+ sign = 1;
+ if (*int_part == '+')
+ int_part++;
+ else if (*int_part == '-') {
+ int_part++;
+ sign = -1;
+ }
+ next = int_part;
+ frac_part = strchr (next, '.');
+ frac_len = -1;
+ rep_part = 0;
+ rep_len = 0;
+ esign = 1;
+ if (frac_part) {
+ frac_part++;
+ next = frac_part;
+ rep_part = strchr (next, '{');
+ if (rep_part)
+ {
+ frac_len = rep_part - frac_part;
+ rep_part++;
+ next = strchr (rep_part, '}');
+ if (!next)
+ RETURN (Zero); /* "can't" happen */
+ rep_len = next - rep_part;
+ next = next + 1;
+ }
+ }
+ exp_part = strchr (next, 'e');
+ if (!exp_part)
+ exp_part = strchr (next, 'E');
+ if (exp_part) {
+ if (frac_len < 0)
+ frac_len = exp_part - frac_part;
+ exp_part++;
+ if (*exp_part == '+')
+ exp_part++;
+ else if (*exp_part == '-') {
+ esign = -1;
+ exp_part++;
+ }
+ } else if (frac_len < 0)
+ frac_len = strlen(frac_part);
+ v = atov (int_part, 10);
+ if (frac_part && frac_len)
+ {
+ v = Plus (v, Divide (atov (frac_part, 10),
+ Pow (NewInt (10),
+ NewInt (frac_len))));
+ }
+ if (rep_part)
+ {
+ Value rep;
+
+ rep = Divide (atov (rep_part, 10), Minus (Pow (NewInt (10),
+ NewInt (rep_len)),
+ One));
+ if (frac_len)
+ rep = Divide (rep, Pow (NewInt (10),
+ NewInt (frac_len)));
+ v = Plus (v, rep);
+ }
+ if (exp_part)
+ {
+ sv = Pow (NewInt (10), atov (exp_part, 10));
+ if (esign > 0)
+ v = Times (v, sv);
+ else
+ v = Divide (v, sv);
+ }
+ RETURN (v);
+}
+
+Bool
+lexfile(char *s)
+{
+ Value f;
+ f = FileFopen (s, "r");
+ interactive = 0;
+ if (f == 0) {
+ FilePuts (FileStderr, "cannot open file \"");
+ FilePuts (FileStderr, s);
+ FilePuts (FileStderr, "\"\n");
+ return False;
+ }
+ ++yyfiledeep;
+ yyinput = f;
+ yyfile = s;
+ return True;
+}
+
+void
+lexstdin(void)
+{
+ --yyfiledeep;
+ (void) FileClose (yyinput);
+ yyinput = FileStdin;
+ interactive = stdin_interactive;
+}
+
+Bool
+pushinput (char *s, Bool complain)
+{
+ Value f;
+
+ if (yyinpt == yyinstack) {
+ (void) FilePrintf (FileStderr, "files nested too deeply\n");
+ return False;
+ }
+ f = FileFopen (s, "r");
+ if (f == 0) {
+ if (complain)
+ (void) FilePrintf (FileStderr, "cannot open file %s\n", s);
+ return False;
+ }
+ ++yyfiledeep;
+ *--yyinpt = yyinput;
+ *--linenopt = yylineno;
+ *--fnamept = yyfile;
+ yyinput = f;
+ yylineno = 1;
+ yyfile = s;
+ interactive = 0;
+ return True;
+}
+
+int
+popinput (void)
+{
+ int c;
+
+/* printf ("popinput\n"); */
+ for (;;)
+ {
+ c = FileInput (yyinput);
+ if (c >= 0)
+ return c;
+ if (c == FileBlocked)
+ ThreadsRun (0, yyinput);
+ else
+ {
+ FileClose (yyinput);
+ if (yyinpt == yyinstack + YYINDEEP)
+ return FileEOF;
+ yyinput = *yyinpt++;
+ if (yyinput == FileStdin)
+ {
+ interactive = stdin_interactive;
+ yyprompt ();
+ }
+ yylineno = *linenopt++;
+ yyfile = *fnamept++;
+ --yyfiledeep;
+ }
+ }
+}
+
+void
+yyprompt (void)
+{
+ ENTER ();
+ Value v;
+
+ if (interactive)
+ {
+ if (ignorenl)
+ v = lookupVar ("prompt2");
+ else if (CurrentFrame)
+ v = lookupVar ("prompt3");
+ else
+ v = lookupVar ("prompt");
+ dofformat (FileStdout, "%s", 1, &v);
+ FileFlush (FileStdout);
+ }
+ EXIT ();
+}
+
diff --git a/missing b/missing
new file mode 100755
index 0000000..7789652
--- /dev/null
+++ b/missing
@@ -0,0 +1,190 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+# Franc,ois 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+if test $# -eq 0; then
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+fi
+
+case "$1" in
+
+ -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
+
+Supported PROGRAM values:
+ aclocal touch file \`aclocal.m4'
+ autoconf touch file \`configure'
+ autoheader touch file \`config.h.in'
+ 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
+ lex create \`lex.yy.c', if possible, from existing .c
+ makeinfo touch the output file
+ yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
+ ;;
+
+ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+ echo "missing - GNU libit 0.0"
+ ;;
+
+ -*)
+ echo 1>&2 "$0: Unknown \`$1' option"
+ echo 1>&2 "Try \`$0 --help' for more information"
+ exit 1
+ ;;
+
+ aclocal)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. You should only need it if
+ you modified \`acinclude.m4' or \`configure.in'. 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 missing on your system. You should only need it if
+ you modified \`configure.in'. 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 missing on your system. You should only need it if
+ you modified \`acconfig.h' or \`configure.in'. 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.in`
+ 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 missing on your system. You should only need it if
+ you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
+ 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
+ ;;
+
+ bison|yacc)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. 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 [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.y)
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.c
+ fi
+ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" y.tab.h
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f y.tab.h ]; then
+ echo >y.tab.h
+ fi
+ if [ ! -f y.tab.c ]; then
+ echo 'main() { return 0; }' >y.tab.c
+ fi
+ ;;
+
+ lex|flex)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. 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 [ $# -ne 1 ]; then
+ eval LASTARG="\${$#}"
+ case "$LASTARG" in
+ *.l)
+ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+ if [ -f "$SRCFILE" ]; then
+ cp "$SRCFILE" lex.yy.c
+ fi
+ ;;
+ esac
+ fi
+ if [ ! -f lex.yy.c ]; then
+ echo 'main() { return 0; }' >lex.yy.c
+ fi
+ ;;
+
+ makeinfo)
+ echo 1>&2 "\
+WARNING: \`$1' is missing on your system. 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."
+ file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+ if test -z "$file"; then
+ file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+ fi
+ touch $file
+ ;;
+
+ *)
+ echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+ system. 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 prerequirements 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
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755
index 0000000..6b3b5fc
--- /dev/null
+++ b/mkinstalldirs
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id$
+
+errstatus=0
+
+for file
+do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d
+ do
+ 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
+ fi
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/nickle b/nickle
new file mode 100755
index 0000000..c440923
--- /dev/null
+++ b/nickle
Binary files differ
diff --git a/nickle-1.99.0.tar.gz b/nickle-1.99.0.tar.gz
new file mode 100644
index 0000000..50f6b6b
--- /dev/null
+++ b/nickle-1.99.0.tar.gz
Binary files differ
diff --git a/nickle.1 b/nickle.1
new file mode 100644
index 0000000..61bc3b0
--- /dev/null
+++ b/nickle.1
@@ -0,0 +1,314 @@
+.TH NICKLE 1 "5 Feb 2001"
+.\" $Header$
+.SH NAME
+nickle \- a polymorphic desk calculator
+.SH SYNOPSIS
+nickle [ file ... ]
+.SH DESCRIPTION
+\fINickle\fP is a
+desk calculator language
+with powerful programming and scripting capabilities.
+\fINickle\fP supports several datatypes: int, natural,
+integer, ratio, double, string and array. The
+natural, integer and ratio datatypes are
+implemented with arbitrary precision. \fINickle\fP can automatically convert
+between types when appropriate.
+.PP
+The input language vaguely resembles C. Some things in C
+which do not
+translate easily are different, and some features are simply
+missing.
+To make the input language more
+useful in an interactive setting, \fBnewline\fP only terminates
+statements at ``reasonable'' times. \fBNewline\fP terminates either
+expressions or single statements typed by the user. Inside compound
+statements or function definitions, only a \fB;\fP
+terminates statements. This approach is convenient and does
+not appear to cause problems in normal use.
+.PP
+The syntax of \fInickle\fP programs is as follows.
+In this description,
+.B name
+denotes
+any sequence of letters, digits and _ characters
+not starting with a digit;
+.B E
+denotes any
+expression;
+.B S
+denotes any statement;
+and
+.B array
+denotes any expression which results
+in an array.
+.\"
+.LP
+Comments are enclosed in /* and */
+.\"
+.LP
+Operands:
+.IP
+floating point numbers - can include exponent, need not
+include decimal point nor sign.
+.IP
+octal numbers - start with a 0 (e.g., 014 is the same as 12).
+.IP
+hexdecimal numbers - start with "0x" (e.g., 0x1a is the same as 26).
+.IP
+name
+.IP
+name (E) - a function call.
+.\"
+.LP
+Operators (in order of decreasing precedence):
+.IP "(type) E"
+cast the result of E into this type
+.IP "array [E]"
+refers to the E'th element of this array
+.IP "++ --"
+Increment/Decrement - either postfix or prefix.
+.IP "-"
+Unary negate
+.IP "! E"
+Logical negation.
+.IP "E !"
+Factorial.
+.IP "^"
+Exponentiation
+.IP "* / %"
+Times, divide and remainder
+.IP "+ -"
+Addition and subtraction.
+.IP "<= >= < >"
+Relational operators.
+.IP "== !="
+Equality operators.
+.IP "|| &&"
+Logical OR and AND.
+.IP "E ? E : E"
+.IP "= <op>="
+Assignment
+.IP "[E1]([E2]...)"
+creates an array with E1 elements (each containing an array of E2 elements ...).
+For example, to make "a" reference a 10x10 array, "a = [10][10]".
+.\"
+.LP
+Statement Forms:
+.IP "E;"
+Evaluates the expression.
+.IP "{S ... S}"
+Executes the enclosed statements in order.
+.IP "if (E) S"
+.IP "if (E) S then S"
+.IP "while (E) S"
+.IP "do S while (E);"
+.IP "for (opt-E; opt-E; opt-E) S"
+.IP ";"
+The null statement
+.IP "break;"
+Discontinue execution of the nearest enclosing for/do/while statement.
+.IP "continue;"
+Branch directly to the conditional test of the nearest enclosing
+for/do/while statement.
+.IP "return E;"
+.\"
+.LP
+\fINickle\fP supports polymorphic data: As an expresion is evaluated, a
+data type is chosen to fit the result. Variables and arrays can be
+typed, in which case bounds violations will be flagged as errors.
+Polymorphic variables and functions do not place restrictions on the assigned
+data type; this is the default type for all objects. The different types are
+described below
+.IP "polymorph"
+This describes the union of all datatypes. A variable with this type
+can contain any data value.
+.IP "int"
+32 bit signed integers. Lean and mean, they can be quite limiting.
+.IP "natural"
+Arbitrary precision natural numbers (i.e. non-negative integers).
+.IP "integer"
+Arbitrary precision integers, currently
+implemented as natural numbers with a sign
+flag.
+.IP "ratio"
+Arbitrary precision rational numbers, currently
+implemented as integer numerator and
+natural denominator.
+.IP "double"
+Double precision floating point numbers. As many computations cannot
+be carried out exactly as rational numbers, \fInickle\fP implements non-precise
+arithmetic using normal machine-specific floating point numbers. A better
+solution would be to compute functional representations of the numbers
+(e.g. sqrt(2) / sin (30) instead of 2.828427). This is less frequently
+useful than the speed offered by the hardware solution.
+Ideally, both representations would be possible, but
+allowing them to coexist gracefully appears difficult.
+.IP "string"
+A regular array of characters. The \fB+\fP operator
+concatenates strings.
+.IP "array"
+A collection of data elements of equivalent type. In
+other words, each array has an overall
+associated type (which may be polymorph). When
+data is stored into the array, it is first coerced to this
+type as necessary.
+.IP "file"
+A file encapsulates a stdio FILE pointer. It is opaque, and thus
+useful only with builtin functions.
+.\"
+.LP
+Variables also have scope. Global variables are persistant and can be
+referenced by any function in the system. Auto variables are transitory,
+existing only while the enclosing function is executing. Static variables
+are persistant, but only availible to the enclosing function. The default
+for names created at the top level is "global", the default for local
+variables is "auto".
+.nf
+ global
+ static
+ auto
+.fi
+.\"
+.LP
+Functions are defined like the following:
+.nf
+ function [type] name ([type] name, ... , [type] name)
+ {
+ [type and/or class] name, name;
+ ...
+
+ S ...
+ }
+.fi
+.\"
+.LP
+The type of the function is optional, by default it is "polymorph". The
+variables declared inside the function body can be either "auto" or
+"static". Auto is the default.
+.\"
+.LP
+\fINickle\fP has a collection of standard functions built in. The math functions
+are implemented with routines from the C library, for their behaviour,
+please consult the appropriate manuals.
+.IP
+abs, acos, asin, atan, atan2, ceil, cos, cosh, exp, fclose, fflush, floor,
+fopen, fprintf, hypot, j0, j1, jn, log, log10, printf, scanf, sin, sinh,
+sqrt, tan, tanh, y0, y1, yn
+.IP
+Fprintf and Printf accept a reasonable sub-set of the stdio
+library version: %d, %e, %c, %g, %f, %s, %o work
+as expected, as does %v to smart-print a value.
+.\"
+.LP
+There are several other miscelaneous commands availible:
+.IP "quit"
+exit nickle
+.IP "default <type>"
+specifies a default type for expressions. With a default type, each
+function that is sumarily created, or each expression typed in at the
+top level will have all computations done with this type.
+.IP "undefine name {,name}"
+removes these names from the system. If you have accidentally
+redefined a builtin function, you can "undefine" the new definition and
+recover the old.
+.IP "read \"file\""
+read commands from a file.
+.IP "expr1 # expr2"
+print expr1 in base expr2
+.IP "print name"
+If name is a function, display a formatted version of the function.
+Comments and original formating are lost. If name is a variable, print the
+current type and value of the variable.
+.IP "edit function or edit file-name"
+Invokes $EDITOR on the named function, or the named file. In the second
+form, any expression with a string value is acceptable.
+.IP "history"
+Displays the 10 most recently printed values. They can be accessed
+with \fB$\fP\fIn\fP where \fIn\fP is the number displayed to the
+right of the value in this list.
+.IP "history= \fIboolean-value\fP"
+Specifies whether the history index of printed values should be displayed
+when the value is first printed.
+.IP "history \fIn\fP,\fIm\fP"
+Displays history values n through m.
+.\"
+.LP
+All function arguments are passed by value except for arrays which
+are always passed by reference. For example (taken from the \fIbc\fP manual:
+.nf
+
+ function exponent(double x) {
+ double a, b, c, i, s;
+
+ a = 1;
+ b = 1;
+ s = 1;
+ for (i = 1;; i++) {
+ a = a * x;
+ b = b * i;
+ c = a/b;
+ if (abs(c) < 1e-6 == 0)
+ return s;
+ s = s + c;
+ }
+ }
+
+.fi
+defines a function to compute an approximate value of the exponential
+function and
+.nf
+
+ for (i = 1; i < 10; i++)
+ printf ("%g\\n", exponent (i));
+
+.fi
+prints approximate values of the exponential function of the first
+ten integers.
+.\"
+.SH VERSION
+.PP
+This document describes version 1.99.0 of nickle. This document
+was distributed with version 1.99.0 of nickle.
+.SH BUGS
+.PP
+Conversion between ratio and double types is effected by converting both the
+numerator and denominator to double and simply dividing. This can lead to
+problems when neither is expressable as a double.
+.\"
+.SH AUTHOR
+\fINickle\fP was written by Keith Packard <keithp@keithp.com>
+and Bart Massey <bart_massey@iname.com>.
+.\"
+.PP
+Nickle is
+.br
+Copyright (C) 1988-2001 Keith Packard and Bart Massey. All
+Rights Reserved.
+.PP
+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:
+.PP
+The above copyright notice and this permission notice shall
+be included in all copies or substantial portions of the
+Software.
+.PP
+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 AUTHORS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+.PP
+Except as contained in this notice, the names of the authors
+or their institutions shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this
+Software without prior written authorization from the
+authors.
diff --git a/nickle.1.in b/nickle.1.in
new file mode 100644
index 0000000..3459f6f
--- /dev/null
+++ b/nickle.1.in
@@ -0,0 +1,314 @@
+.TH NICKLE 1 "5 Feb 2001"
+.\" $Header$
+.SH NAME
+nickle \- a polymorphic desk calculator
+.SH SYNOPSIS
+nickle [ file ... ]
+.SH DESCRIPTION
+\fINickle\fP is a
+desk calculator language
+with powerful programming and scripting capabilities.
+\fINickle\fP supports several datatypes: int, natural,
+integer, ratio, double, string and array. The
+natural, integer and ratio datatypes are
+implemented with arbitrary precision. \fINickle\fP can automatically convert
+between types when appropriate.
+.PP
+The input language vaguely resembles C. Some things in C
+which do not
+translate easily are different, and some features are simply
+missing.
+To make the input language more
+useful in an interactive setting, \fBnewline\fP only terminates
+statements at ``reasonable'' times. \fBNewline\fP terminates either
+expressions or single statements typed by the user. Inside compound
+statements or function definitions, only a \fB;\fP
+terminates statements. This approach is convenient and does
+not appear to cause problems in normal use.
+.PP
+The syntax of \fInickle\fP programs is as follows.
+In this description,
+.B name
+denotes
+any sequence of letters, digits and _ characters
+not starting with a digit;
+.B E
+denotes any
+expression;
+.B S
+denotes any statement;
+and
+.B array
+denotes any expression which results
+in an array.
+.\"
+.LP
+Comments are enclosed in /* and */
+.\"
+.LP
+Operands:
+.IP
+floating point numbers - can include exponent, need not
+include decimal point nor sign.
+.IP
+octal numbers - start with a 0 (e.g., 014 is the same as 12).
+.IP
+hexdecimal numbers - start with "0x" (e.g., 0x1a is the same as 26).
+.IP
+name
+.IP
+name (E) - a function call.
+.\"
+.LP
+Operators (in order of decreasing precedence):
+.IP "(type) E"
+cast the result of E into this type
+.IP "array [E]"
+refers to the E'th element of this array
+.IP "++ --"
+Increment/Decrement - either postfix or prefix.
+.IP "-"
+Unary negate
+.IP "! E"
+Logical negation.
+.IP "E !"
+Factorial.
+.IP "^"
+Exponentiation
+.IP "* / %"
+Times, divide and remainder
+.IP "+ -"
+Addition and subtraction.
+.IP "<= >= < >"
+Relational operators.
+.IP "== !="
+Equality operators.
+.IP "|| &&"
+Logical OR and AND.
+.IP "E ? E : E"
+.IP "= <op>="
+Assignment
+.IP "[E1]([E2]...)"
+creates an array with E1 elements (each containing an array of E2 elements ...).
+For example, to make "a" reference a 10x10 array, "a = [10][10]".
+.\"
+.LP
+Statement Forms:
+.IP "E;"
+Evaluates the expression.
+.IP "{S ... S}"
+Executes the enclosed statements in order.
+.IP "if (E) S"
+.IP "if (E) S then S"
+.IP "while (E) S"
+.IP "do S while (E);"
+.IP "for (opt-E; opt-E; opt-E) S"
+.IP ";"
+The null statement
+.IP "break;"
+Discontinue execution of the nearest enclosing for/do/while statement.
+.IP "continue;"
+Branch directly to the conditional test of the nearest enclosing
+for/do/while statement.
+.IP "return E;"
+.\"
+.LP
+\fINickle\fP supports polymorphic data: As an expresion is evaluated, a
+data type is chosen to fit the result. Variables and arrays can be
+typed, in which case bounds violations will be flagged as errors.
+Polymorphic variables and functions do not place restrictions on the assigned
+data type; this is the default type for all objects. The different types are
+described below
+.IP "polymorph"
+This describes the union of all datatypes. A variable with this type
+can contain any data value.
+.IP "int"
+32 bit signed integers. Lean and mean, they can be quite limiting.
+.IP "natural"
+Arbitrary precision natural numbers (i.e. non-negative integers).
+.IP "integer"
+Arbitrary precision integers, currently
+implemented as natural numbers with a sign
+flag.
+.IP "ratio"
+Arbitrary precision rational numbers, currently
+implemented as integer numerator and
+natural denominator.
+.IP "double"
+Double precision floating point numbers. As many computations cannot
+be carried out exactly as rational numbers, \fInickle\fP implements non-precise
+arithmetic using normal machine-specific floating point numbers. A better
+solution would be to compute functional representations of the numbers
+(e.g. sqrt(2) / sin (30) instead of 2.828427). This is less frequently
+useful than the speed offered by the hardware solution.
+Ideally, both representations would be possible, but
+allowing them to coexist gracefully appears difficult.
+.IP "string"
+A regular array of characters. The \fB+\fP operator
+concatenates strings.
+.IP "array"
+A collection of data elements of equivalent type. In
+other words, each array has an overall
+associated type (which may be polymorph). When
+data is stored into the array, it is first coerced to this
+type as necessary.
+.IP "file"
+A file encapsulates a stdio FILE pointer. It is opaque, and thus
+useful only with builtin functions.
+.\"
+.LP
+Variables also have scope. Global variables are persistant and can be
+referenced by any function in the system. Auto variables are transitory,
+existing only while the enclosing function is executing. Static variables
+are persistant, but only availible to the enclosing function. The default
+for names created at the top level is "global", the default for local
+variables is "auto".
+.nf
+ global
+ static
+ auto
+.fi
+.\"
+.LP
+Functions are defined like the following:
+.nf
+ function [type] name ([type] name, ... , [type] name)
+ {
+ [type and/or class] name, name;
+ ...
+
+ S ...
+ }
+.fi
+.\"
+.LP
+The type of the function is optional, by default it is "polymorph". The
+variables declared inside the function body can be either "auto" or
+"static". Auto is the default.
+.\"
+.LP
+\fINickle\fP has a collection of standard functions built in. The math functions
+are implemented with routines from the C library, for their behaviour,
+please consult the appropriate manuals.
+.IP
+abs, acos, asin, atan, atan2, ceil, cos, cosh, exp, fclose, fflush, floor,
+fopen, fprintf, hypot, j0, j1, jn, log, log10, printf, scanf, sin, sinh,
+sqrt, tan, tanh, y0, y1, yn
+.IP
+Fprintf and Printf accept a reasonable sub-set of the stdio
+library version: %d, %e, %c, %g, %f, %s, %o work
+as expected, as does %v to smart-print a value.
+.\"
+.LP
+There are several other miscelaneous commands availible:
+.IP "quit"
+exit nickle
+.IP "default <type>"
+specifies a default type for expressions. With a default type, each
+function that is sumarily created, or each expression typed in at the
+top level will have all computations done with this type.
+.IP "undefine name {,name}"
+removes these names from the system. If you have accidentally
+redefined a builtin function, you can "undefine" the new definition and
+recover the old.
+.IP "read \"file\""
+read commands from a file.
+.IP "expr1 # expr2"
+print expr1 in base expr2
+.IP "print name"
+If name is a function, display a formatted version of the function.
+Comments and original formating are lost. If name is a variable, print the
+current type and value of the variable.
+.IP "edit function or edit file-name"
+Invokes $EDITOR on the named function, or the named file. In the second
+form, any expression with a string value is acceptable.
+.IP "history"
+Displays the 10 most recently printed values. They can be accessed
+with \fB$\fP\fIn\fP where \fIn\fP is the number displayed to the
+right of the value in this list.
+.IP "history= \fIboolean-value\fP"
+Specifies whether the history index of printed values should be displayed
+when the value is first printed.
+.IP "history \fIn\fP,\fIm\fP"
+Displays history values n through m.
+.\"
+.LP
+All function arguments are passed by value except for arrays which
+are always passed by reference. For example (taken from the \fIbc\fP manual:
+.nf
+
+ function exponent(double x) {
+ double a, b, c, i, s;
+
+ a = 1;
+ b = 1;
+ s = 1;
+ for (i = 1;; i++) {
+ a = a * x;
+ b = b * i;
+ c = a/b;
+ if (abs(c) < 1e-6 == 0)
+ return s;
+ s = s + c;
+ }
+ }
+
+.fi
+defines a function to compute an approximate value of the exponential
+function and
+.nf
+
+ for (i = 1; i < 10; i++)
+ printf ("%g\\n", exponent (i));
+
+.fi
+prints approximate values of the exponential function of the first
+ten integers.
+.\"
+.SH VERSION
+.PP
+This document describes version 1.99.0 of nickle. This document
+was distributed with version @VERSION@ of nickle.
+.SH BUGS
+.PP
+Conversion between ratio and double types is effected by converting both the
+numerator and denominator to double and simply dividing. This can lead to
+problems when neither is expressable as a double.
+.\"
+.SH AUTHOR
+\fINickle\fP was written by Keith Packard <keithp@keithp.com>
+and Bart Massey <bart_massey@iname.com>.
+.\"
+.PP
+Nickle is
+.br
+Copyright (C) 1988-2001 Keith Packard and Bart Massey. All
+Rights Reserved.
+.PP
+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:
+.PP
+The above copyright notice and this permission notice shall
+be included in all copies or substantial portions of the
+Software.
+.PP
+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 AUTHORS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+.PP
+Except as contained in this notice, the names of the authors
+or their institutions shall not be used in advertising or
+otherwise to promote the sale, use or other dealings in this
+Software without prior written authorization from the
+authors.
diff --git a/nickle.h b/nickle.h
new file mode 100644
index 0000000..4b28bcb
--- /dev/null
+++ b/nickle.h
@@ -0,0 +1,534 @@
+/* $Header$ */
+
+/*
+ * Copyright (C) 1988-2001 Keith Packard and Bart Massey.
+ * All Rights Reserved. See the file COPYING in this directory
+ * for licensing information.
+ */
+
+#include "value.h"
+#include "opcode.h"
+
+typedef union _expr *ExprPtr;
+#if 0
+typedef union _type *TypePtr;
+#endif
+typedef union _symbol *SymbolPtr;
+typedef struct _func *FuncPtr;
+typedef struct _scope *ScopePtr;
+
+#if 0
+typedef struct _typeBase {
+ DataType *data;
+ int tag;
+} TypeBase;
+
+typedef struct _typeRef {
+ TypeBase type;
+ TypePtr ref;
+} TypeTree;
+
+typedef struct _typeName {
+ TypeBase type;
+ Atom name;
+} TypeName;
+
+typedef struct _typeExpr {
+ TypeBase type;
+ ExprPtr expr;
+} TypeExpr;
+
+typedef union _type {
+ TypeBase base;
+ TypeTree tree;
+ TypeName name;
+ TypeExpr expr;
+} Type;
+#endif
+
+typedef struct _symbolBase {
+ DataType *data;
+ SymbolPtr next;
+ Atom name;
+ Class class;
+ Type type;
+ Publish publish;
+} SymbolBase;
+
+#if 0
+typedef struct _symbolType {
+ SymbolBase symbol;
+} SymbolType;
+#endif
+
+typedef struct _symbolGlobal {
+ SymbolBase symbol;
+ BoxPtr value;
+} SymbolGlobal;
+
+typedef struct _symbolLocal {
+ SymbolBase symbol;
+ int element;
+} SymbolLocal;
+
+typedef struct _symbolStruct {
+ SymbolBase symbol;
+ StructType *type;
+} SymbolStruct;
+
+typedef struct _symbolScope {
+ SymbolBase symbol;
+ ScopePtr scope;
+} SymbolScope;
+
+typedef union _symbol {
+ SymbolBase symbol;
+#if 0
+ SymbolType type;
+#endif
+ SymbolGlobal global;
+ SymbolLocal local;
+ SymbolStruct structs;
+ SymbolScope scope;
+} Symbol;
+
+#if 0
+extern SymbolPtr NewSymbolType (Atom name, Type type);
+#endif
+extern SymbolPtr NewSymbolGlobal (Atom name, Type type, Publish publish);
+extern SymbolPtr NewSymbolArg (Atom name, Type type);
+extern SymbolPtr NewSymbolStatic (Atom name, Type type);
+extern SymbolPtr NewSymbolAuto (Atom name, Type type);
+extern SymbolPtr NewSymbolStruct (Atom name, StructType *type, Publish publish);
+extern SymbolPtr NewSymbolScope (Atom name, ScopePtr scope, Publish publish);
+
+typedef struct _scopeChain {
+ DataType *data;
+ struct _scopeChain *next;
+ SymbolPtr symbol;
+ Publish publish;
+} ScopeChain, *ScopeChainPtr;
+
+typedef struct _scope {
+ DataType *data;
+ ScopePtr previous;
+ ScopeChainPtr symbols;
+ CodePtr code;
+ Publish publish;
+} Scope;
+
+extern ScopePtr NewScope (ScopePtr previous);
+extern SymbolPtr ScopeLookupSymbol (ScopePtr scope, Atom name);
+extern SymbolPtr ScopeFindSymbol (ScopePtr scope, Atom name, int *depth);
+extern SymbolPtr ScopeAddSymbol (ScopePtr scope, SymbolPtr symbol);
+extern Bool ScopeRemoveSymbol (ScopePtr scope, SymbolPtr symbol);
+extern SymbolPtr ScopeImport (ScopePtr scope, ScopePtr import, Publish publish);
+extern ScopePtr GlobalScope, CurrentScope, DebugScope;
+extern FramePtr CurrentFrame;
+extern void ScopeInit (void);
+
+typedef struct _DeclList *DeclListPtr;
+typedef struct _DeclList {
+ DataType *data;
+ DeclListPtr next;
+ Atom name;
+ ExprPtr init;
+} DeclList;
+
+extern DeclListPtr NewDeclList (Atom name, ExprPtr init, DeclListPtr next);
+
+typedef struct _MemList *MemListPtr;
+typedef struct _MemList {
+ DataType *data;
+ MemListPtr next;
+ Type type;
+ DeclListPtr names;
+} MemList;
+
+extern MemListPtr NewMemList (DeclListPtr names, Type type, MemListPtr next);
+
+typedef struct _Fulltype {
+ Class class;
+ Type type;
+ Publish publish;
+} Fulltype;
+
+typedef struct _frame {
+ DataType *data;
+ FramePtr previous;
+ FramePtr staticLink;
+ Value function;
+ BoxPtr frame;
+ BoxPtr statics;
+ InstPtr savePc;
+ ObjPtr saveCode;
+} Frame;
+
+extern FramePtr NewFrame (Value function,
+ FramePtr previous,
+ FramePtr staticLink,
+ BoxTypesPtr dynamics,
+ BoxPtr statics);
+
+# define NOTHING 0
+# define CONT 1
+# define BRK 2
+# define RET 3
+
+typedef struct _exprBase {
+ DataType *data;
+ int tag;
+ ScopePtr scope;
+} ExprBase;
+
+typedef struct _exprTree {
+ ExprBase expr;
+ ExprPtr left;
+ ExprPtr right;
+} ExprTree;
+
+typedef struct _exprConst {
+ ExprBase expr;
+ Value constant;
+} ExprConst;
+
+typedef struct _exprAtom {
+ ExprBase expr;
+ Atom atom;
+} ExprAtom;
+
+typedef struct _exprCode {
+ ExprBase expr;
+ CodePtr code;
+} ExprCode;
+
+typedef struct _exprDecls {
+ ExprBase expr;
+ DeclListPtr decl;
+ Class class;
+ Type type;
+ Publish publish;
+} ExprDecl;
+
+typedef union _expr {
+ ExprBase base;
+ ExprTree tree;
+ ExprConst constant;
+ ExprAtom atom;
+ ExprCode code;
+ ExprDecl decl;
+} Expr;
+
+Expr *NewExprTree (int tag, Expr *left, Expr *right);
+Expr *NewExprConst (Value val);
+Expr *NewExprAtom (Atom atom);
+Expr *NewExprCode (CodePtr code, Atom name);
+Expr *NewExprDecl (DeclListPtr decl, Class class, Type type, Publish publish);
+
+typedef struct _catch {
+ DataType *data;
+ CatchPtr previous;
+ Atom exception;
+ FramePtr frame;
+ InstPtr pc;
+} Catch;
+
+Catch *NewCatch (CatchPtr previous, Atom exception, FramePtr frame, InstPtr pc);
+InstPtr *CatchThrow (Value thread, ExceptPtr except);
+
+typedef struct _except {
+ DataType *data;
+ Atom exception;
+ BoxPtr args;
+} Except;
+
+Except *NewExcept (Atom exception, int nargs, Value *args);
+
+typedef struct _codeBase {
+ DataType *data;
+ Bool builtin;
+ Type type;
+ int argc;
+ Atom name;
+} CodeBase;
+
+typedef struct _funcCode {
+ CodeBase base;
+ ExprPtr args;
+ ExprPtr code;
+ ObjPtr obj;
+
+ BoxTypesPtr dynamics;
+ BoxTypesPtr statics;
+
+ ObjPtr staticInit;
+ Bool inStaticInit;
+} FuncCode, *FuncCodePtr;
+
+typedef union _builtinFunc {
+ Value (*builtinN)(int, Value *);
+ Value (*builtin0)(void);
+ Value (*builtin1)(Value);
+ Value (*builtin2)(Value,Value);
+ Value (*builtin3)(Value,Value,Value);
+ Value (*builtin4)(Value,Value,Value,Value);
+ Value (*builtin5)(Value,Value,Value,Value,Value);
+ Value (*builtin6)(Value,Value,Value,Value,Value,Value);
+ Value (*builtin7)(Value,Value,Value,Value,Value,Value,Value);
+ Value (*builtin8)(Value,Value,Value,Value,Value,Value,Value,Value);
+ Value (*builtinNJ)(InstPtr *, int, Value *);
+ Value (*builtin0J)(InstPtr *);
+ Value (*builtin1J)(InstPtr *,Value);
+ Value (*builtin2J)(InstPtr *,Value,Value);
+} BuiltinFunc;
+
+typedef struct _builtinCode {
+ CodeBase base;
+ Bool needsNext;
+ BuiltinFunc b;
+} BuiltinCode, *BuiltinCodePtr;
+
+typedef union _code {
+ CodeBase base;
+ FuncCode func;
+ BuiltinCode builtin;
+} Code;
+
+CodePtr NewFuncCode (Type, ExprPtr args, ExprPtr code);
+CodePtr NewBuiltinCode (Type, int, BuiltinFunc func, Bool needsNext);
+Value NewFunc (CodePtr, FramePtr);
+
+typedef struct _instBase {
+ OpCode opCode;
+ Bool push;
+ ExprPtr stat;
+} InstBase;
+
+typedef struct _instVar {
+ InstBase inst;
+ SymbolPtr name;
+ int staticLink;
+} InstVar;
+
+typedef struct _instConst {
+ InstBase inst;
+ Value constant;
+} InstConst;
+
+typedef struct _instAtom {
+ InstBase inst;
+ Atom atom;
+} InstAtom;
+
+typedef struct _instInt {
+ InstBase inst;
+ int value;
+} InstInt;
+
+typedef struct _instCode {
+ InstBase inst;
+ CodePtr code;
+} InstCode;
+
+typedef struct _instBranch {
+ InstBase inst;
+ int offset;
+} InstBranch;
+
+typedef struct _instObj {
+ InstBase inst;
+ ObjPtr obj;
+} InstObj;
+
+typedef struct _instCatch {
+ InstBase inst;
+ Atom exception;
+ int offset;
+} InstCatch;
+
+typedef union _inst {
+ InstBase base;
+ InstVar var;
+ InstConst constant;
+ InstAtom atom;
+ InstInt ints;
+ InstCode code;
+ InstBranch branch;
+ InstObj obj;
+ InstCatch catch;
+} Inst;
+
+typedef struct _obj {
+ DataType *data;
+ int size;
+ int used;
+ int errors;
+} Obj;
+
+#define ObjCode(obj,i) (((InstPtr) (obj + 1)) + (i))
+#define ObjLast(obj) ((obj)->used - 1)
+
+ObjPtr CompileStat (ExprPtr expr, ScopePtr scope);
+ObjPtr CompileExpr (ExprPtr expr, ScopePtr scope);
+
+Value NewThread (FramePtr frame, ObjPtr code);
+void ThreadSleep (Value thread, Value sleep, int priority);
+void ThreadStepped (Value thread);
+void ThreadsWakeup (Value sleep);
+void ThreadsRun (Value thread, Value lex);
+void ThreadsInterrupt (void);
+void ThreadsContinue (void);
+void ThreadFinish (Value thread);
+void ThreadSetState (Value thread, ThreadState state);
+void ThreadClearState (Value thread, ThreadState state);
+void ThreadInit (void);
+Value ThreadFromId (Value);
+Value ThreadJoin (Value);
+
+#define Runnable(t) (((t)->thread.state & ~(ThreadSuspended)) == 0)
+
+extern Value running; /* current thread */
+extern Value stopped; /* stopped threads */
+extern Bool complete; /* must complete current inst */
+extern int runnable; /* number of non-broken threads */
+
+Value NewMutex (void);
+Value MutexAcquire (Value), MutexTryAcquire (Value), MutexRelease (Value);
+
+Value NewSemaphore (void);
+Value SemaphoreWait (Value), SemaphoreTest (Value), SemaphoreSignal (Value);
+
+void ObjDump (ObjPtr obj);
+
+Symbol *checkSym(Symbol *, Class, Type);
+Symbol *extractSym (Symbol *);
+Symbol *insertSym (char *);
+void SymbolInit (void);
+
+void BuiltinInit (void);
+
+Bool DebugSetFrame (Value thread, int offset);
+Value DebugDone (void);
+Value DebugUp (void);
+Value DebugDown (void);
+
+Value History (Value, Value);
+void HistorySet (Value, Value);
+void HistoryDisplay (Value, Value *, Value *);
+void HistoryInsert (Value);
+void HistoryInit (void);
+
+typedef Bool (*TimerFunc) (void *closure);
+
+unsigned long TimeInMs (void);
+
+void TimerInsert (void *closure, TimerFunc func,
+ unsigned long delta, unsigned long incr);
+void TimerInterrupt (void);
+Value Sleep (Value);
+void TimerInit (void);
+
+void IoInit (void);
+void IoStart (void);
+void IoStop (void);
+void IoFini (void);
+Bool IoTimeout (void *);
+void IoNoticeWriteBlocked (void);
+void IoNoticeTtyUnowned (void);
+void IoInterrupt (void);
+
+void *AllocateTemp (int size);
+
+void PrettyPrint (Value f, SymbolPtr name);
+void PrintCode (Value f, CodePtr code, char *name, Publish publish, int level, Bool nest);
+void PrintStat (Value F, Expr *e, Bool nest);
+void EditFunction (SymbolPtr name);
+void EditFile (Value file_name);
+
+void print (Value f, Value value);
+Value lookupVar (char *);
+void setVar (char *, Value);
+void GetScope (ScopePtr *, FramePtr *);
+ExprPtr BuildName (char *);
+ExprPtr BuildCall (char *, int, ...);
+/* int yywrap (void); */
+
+int yylex (void);
+Bool pushinput (char *, Bool);
+void yyprompt (void);
+Value atov (char *, int), aetov (char *);
+extern int ignorenl;
+void skipcomment (void);
+void skipline (void);
+int lexEscape (int);
+int popinput (void);
+Bool lexfile (char *);
+void lexstdin (void);
+
+void callformat (Value f, char *fmt, int n, Value *p);
+int dofformat (Value, char *, int, Value *);
+Value doprintf (int, Value *);
+
+extern void init (void);
+extern int yyparse (void);
+extern int interactive, stdin_interactive;
+
+void intr(int);
+void stop (int), die (int), segv (int);
+void ignore_ferr (void);
+
+extern Value yyinput;
+
+Value Atof (Value);
+Value Atoi (Value);
+Value Cont (void);
+Value CurrentThread (void);
+Value GetPriority (Value);
+Value Kill (int, Value *);
+Value SetPriority (Value,Value);
+Value Strtol (Value, Value);
+Value ThreadsList (void);
+Value Trace (int, Value *);
+Value acosD(Value);
+Value asinD(Value);
+Value atan2D(Value, Value);
+Value atanD(Value);
+Value ceilD(Value);
+Value cosD(Value);
+Value coshD(Value);
+Value doHistoryInsert(Value);
+Value doHistoryShow(int,Value*);
+Value dofclose(Value);
+Value dofflush(Value);
+Value dofopen(Value,Value);
+Value dofprintf(int, Value *);
+Value dosetbuf(Value, Value);
+Value dogcd(Value,Value);
+Value dogetc(Value);
+Value dogetchar(void);
+Value dotime(void);
+Value doprint(Value,Value,Value,Value,Value,Value,Value);
+Value doputc(Value,Value);
+Value doputchar(Value);
+Value doscanf(int,Value *);
+Value expD(Value);
+Value fabsD(Value);
+Value floorD(Value);
+Value hypotD(Value, Value);
+Value j0D(Value);
+Value j1D(Value);
+Value jnD(Value,Value);
+Value log10D(Value);
+Value logD(Value);
+Value sinD(Value);
+Value sinhD(Value);
+Value sqrtD(Value);
+Value tanD(Value);
+Value tanhD(Value);
+Value y0D(Value);
+Value y1D(Value);
+Value ynD(Value,Value);
+Value _random(Value);
+Value _srandom(Value);
+Value SetJump(InstPtr *, Value, Value);
+Value LongJump(InstPtr *, Value, Value);
diff --git a/stamp-h b/stamp-h
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/stamp-h
@@ -0,0 +1 @@
+timestamp
diff --git a/stamp-h.in b/stamp-h.in
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/stamp-h.in
@@ -0,0 +1 @@
+timestamp