moon-buggy-1.0.51/0000777000175000017500000000000010407331256010667 500000000000000moon-buggy-1.0.51/README0000644000175000017500000000552310164027574011475 00000000000000moon-buggy - drive some car across the moon INTRODUCTION: Moon-buggy is a simple character graphics game, where you drive some kind of car across the moon's surface. Unfortunately there are dangerous craters there. Fortunately your car can jump over them! Moon-Buggy comes with NO WARRANTY, to the extent permitted by law. You may redistribute copies of Moon-Buggy under the terms of the GNU General Public License. For more information about these matters, read the file COPYING of the source code distribution or press 'c' at moon-buggy's title screen. Please mail any suggestions and bug reports to . Your message should include the moon-buggy version number, as obtained by the command 'moon-buggy -V'. INSTALLATION: Moon-buggy requires the curses library as a prerequisite. If curses is not installed on your system, you may use the free ncurses package. The game does not work with BSD curses, thus on BSD systems you will need the ncurses package. Generic installation instructions are in the file INSTALL. There are some points of interest: * By default, the program will be installed as '/usr/local/bin/moon-buggy'. You can specify an installation prefix other than '/usr/local' by giving 'configure' the '--prefix=PATH' option. * You can choose the score file's location via 'configure''s '--sharedstatedir' option. On Linux you should use --sharedstatedir=/var/games to comply with the Filesystem Hierarchy Standard. * Moon-buggy supports shared score files. As explained in moon-buggy's manual, you may want to make moon-buggy a setgid program. This can be done with the '--with-setgid' option. If you use --with-setgid=games then the installation process arranges everything for setgid usage. CAUTION: this introduces potential security risks. I tried to minimise these, but nevertheless be careful with this. And remember: moon-buggy comes with no warranty. * If your version of the curses library is not autodetected, you have to use some of the '--with-curses-includedir', '--with-curses-header', and '--with-curses-libs' options. For example you should use --with-curses-includedir=/usr/pkg/include if your curses header files are in "/usr/pkg/include/". You may use --with-curses-header="" if your curses header is called "mycurses.h". And you may use --with-curses-libs="-L/usr/pkg/lib -lncurses" if your curses library is called "ncurses.a" and is located in "/usr/pkg/lib/". Example: On GNU/Linux systems you probably can use the following commands. For the last one you need root user permissions. ./configure --sharedstatedir=/var/games --mandir=/usr/share/man \ --with-setgid=games make make install moon-buggy-1.0.51/acinclude.m40000644000175000017500000000620210057171625012777 00000000000000dnl acinclude.m4 - aclocal include file for "aclocal.m4" dnl Copyright 2000 Jochen Voss dnl $Id: acinclude.m4 5726 2004-06-01 21:22:28Z voss $ dnl The idea of this tests, is to be as simple, as possible. dnl The only special case we check for, is old versions of dnl ncurses. Any other problems must be handled by the user dnl via configure's --with-curses-includedir, dnl --with-curses-header, and --with-curses-libs options. AC_DEFUN([JV_CHECK_CURSES],[ dnl step 1: find the correct preprocessor flags dnl This is completely left to the user. AC_MSG_CHECKING([for curses preprocessor flags]) AC_ARG_WITH(curses-includedir, [ --with-curses-includedir[=DIR] special header file location for the curses library [none]],[ case "$withval" in yes|no) ;; *) CURSES_INCLUDEDIR="-I$withval" ;; esac ]) AC_SUBST(CURSES_INCLUDEDIR) if test -z "$CURSES_INCLUDEDIR"; then mb_result="none" else mb_result="$CURSES_INCLUDEDIR" fi AC_MSG_RESULT($mb_result) dnl step 2: find the correct header file name dnl When nothing is specified on the command line, we try to guess. AC_ARG_WITH(curses-header, [ --with-curses-header[=ARG] the curses header file name (including brackets) []],[ case "$withval" in yes|no) ;; *) CURSES_HEADER="$withval" ;; esac ]) if test -z "$CURSES_HEADER"; then mb_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $CURSES_INCLUDEDIR" AC_CHECK_HEADERS(curses.h ncurses.h ncurses/ncurses.h ncurses/curses.h, break) CPPFLAGS="$mb_save_CPPFLAGS" if test "$ac_cv_header_curses_h" = yes; then CURSES_HEADER="" elif test "$ac_cv_header_ncurses_h" = yes; then CURSES_HEADER="" elif test "$ac_cv_header_ncurses_ncurses_h" = yes; then CURSES_HEADER="" elif test "$ac_cv_header_ncurses_curses_h" = yes; then CURSES_HEADER="" fi fi AC_MSG_CHECKING([how to include the curses header file]) if test -n "$CURSES_HEADER"; then AC_DEFINE_UNQUOTED(CURSES_HEADER, $CURSES_HEADER, [Define to the curses header file name (including brackets). ]) AC_MSG_RESULT($CURSES_HEADER) else AC_MSG_RESULT([unknown]) AC_MSG_WARN([no curses header found, try --with-curses-header]) fi dnl step 3: try to find the correct linker flags dnl When nothing is specified on the command line, we try to guess. AC_ARG_WITH(curses-libs, [ --with-curses-libs[=ARG] the -l and -L linker flags for the curses library [-lcurses]],[ case "$withval" in yes|no) ;; *) CURSES_LIBS="$withval" ;; esac ]) if test -z "$CURSES_LIBS"; then AC_CHECK_LIB(curses,initscr,CURSES_LIBS=-lcurses) if test -z "$CURSES_LIBS"; then AC_CHECK_LIB(ncurses,initscr,CURSES_LIBS=-lncurses) fi fi AC_MSG_CHECKING([for curses linker flags]) if test -n "$CURSES_LIBS"; then AC_SUBST(CURSES_LIBS) AC_MSG_RESULT($CURSES_LIBS) else AC_MSG_RESULT([unknown]) AC_MSG_WARN([curses library not found, try --with-curses-libs]) fi ]) moon-buggy-1.0.51/configure.ac0000644000175000017500000000350310167521375013100 00000000000000dnl Process this file with autoconf to produce a configure script. AC_REVISION($Revision: 1.4 $) AC_INIT(moon-buggy, 1.0.51, voss@seehuhn.de) AC_CONFIG_SRCDIR([moon-buggy.h]) AM_INIT_AUTOMAKE AM_CONFIG_HEADER(config.h) AC_CANONICAL_HOST dnl Some systems want _XOPEN_SOURCE to be defined as we use curses. case "$host" in *bsd*|sparc-sun-solaris2.4|*-*-darwin*) ;; *) AC_DEFINE(_XOPEN_SOURCE,1,[Define this if your system supports it.]) ;; esac AC_ARG_WITH(setgid, [ --with-setgid=NAME setgid usage: install moon-buggy as group NAME], [case "${withval}" in no) GAMEGROUP="" ;; yes) AC_MSG_ERROR([missing argument for --with-setgid]) ;; *) GAMEGROUP="$withval" ;; esac]) AC_SUBST(GAMEGROUP) dnl Checks for programs. AC_PROG_CC dnl Checks for libraries. AC_CHECK_LIB(m, modf) JV_CHECK_CURSES dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(getopt.h errno.h locale.h termios.h) # Check if needs to be included for fd_set AC_MSG_CHECKING([for fd_set]) AC_TRY_COMPILE([#include ], [fd_set readMask, writeMask;], mb_ok=yes, mb_ok=no) if test $mb_ok = yes; then AC_MSG_RESULT([yes, found in sys/types.h]) else AC_EGREP_HEADER(fd_mask, sys/select.h, mb_ok=yes) if test $mb_ok = yes; then AC_DEFINE(HAVE_SYS_SELECT_H,1, [Define if you have the header file.]) AC_MSG_RESULT([yes, found in sys/select.h]) else AC_DEFINE(NO_FD_SET,1,[Define if your system lacks `fd_set'.]) AC_MSG_RESULT(no) fi fi dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_UID_T AC_TYPE_SIZE_T dnl Checks for library functions. AC_TYPE_SIGNAL AC_CHECK_FUNCS(fclean ftruncate getopt_long setreuid setlocale) AM_CONDITIONAL(short_getopt, test "x$ac_cv_func_getopt_long" != xyes) AC_CONFIG_FILES([Makefile]) AC_OUTPUT moon-buggy-1.0.51/aclocal.m40000644000175000017500000007551510407330000012442 00000000000000# generated automatically by aclocal 1.9.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # 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. # Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION so it can be traced. # This function is AC_REQUIREd by AC_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.9.6])]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 7 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE]) AC_SUBST([$1_FALSE]) if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH]) ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 3 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 12 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.58])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl # 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 # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AM_PROG_INSTALL_SH AM_PROG_INSTALL_STRIP AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl ]) ]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $1 | $1:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl install_sh=${install_sh-"$am_aux_dir/install-sh"} AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. # # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories # created by `make install' are always world readable, even if the # installer happens to have an overly restrictive umask (e.g. 077). # This was a mistake. There are at least two reasons why we must not # use `-m 0755': # - it causes special bits like SGID to be ignored, # - it may be too restrictive (some setups expect 775 directories). # # Do not use -m 0755 and let people choose whatever they expect by # setting umask. # # We cannot accept any implementation of `mkdir' that recognizes `-p'. # Some implementations (such as Solaris 8's) are not thread-safe: if a # parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' # concurrently, both version can detect that a/ is missing, but only # one can create it and the other will error out. Consequently we # restrict ourselves to GNU make (using the --version option ensures # this.) AC_DEFUN([AM_PROG_MKDIR_P], [if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi AC_SUBST([mkdir_p])]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([acinclude.m4]) moon-buggy-1.0.51/Makefile.am0000644000175000017500000000434010164025610012632 00000000000000## Process this file with automake to produce Makefile.in # Copyright 1999, 2000, 2001 Jochen Voss # $Id: Makefile.am 6092 2004-12-27 15:34:32Z voss $ EXTRA_DIST = manpage.in car.img \ text2c.sed img.sed ANNOUNCE moon-buggy.lsm \ moon-buggy.png moon-buggy.xpm title.eps DISTCLEANFILES = moon-buggy.6 INCLUDES = @CURSES_INCLUDEDIR@ bin_PROGRAMS = moon-buggy moon_buggy_SOURCES = moon-buggy.h main.c mode.c title.c pager.c copying.h \ game.c level.c ground.c buggy.c buggy.h laser.c meteor.c highscore.c \ realname.c queue.c vclock.c date.c persona.c signal.c keyboard.c \ terminal.c cursor.c random.c error.c xmalloc.c xstrdup.c darray.h \ hpath.c moon_buggy_LDADD = @CURSES_LIBS@ info_TEXINFOS = moon-buggy.texi man_MANS = moon-buggy.6 scoredir = $(sharedstatedir)/moon-buggy hpath.o: hpath.c moon-buggy.h Makefile $(COMPILE) -DSCORE_DIR=\"$(scoredir)\" -c $< BUILT_SOURCES = copying.h buggy.h copying.h: COPYING text2c.sed cd $(srcdir) && sed -f text2c.sed $(srcdir)/COPYING >$@ buggy.h: car.img img.sed cd $(srcdir) && sed -n -f img.sed $(srcdir)/car.img >$@ install-exec-hook: @$(POST_INSTALL) if test "x@GAMEGROUP@" != "x"; then \ chgrp "@GAMEGROUP@" "$(DESTDIR)$(bindir)/moon-buggy" \ && chmod 2111 "$(DESTDIR)$(bindir)/moon-buggy" ; \ fi @$(NORMAL_INSTALL) install-data-local: $(mkinstalldirs) $(DESTDIR)$(scoredir) install-data-hook: @$(POST_INSTALL) if test "x@GAMEGROUP@" != "x"; then \ chgrp "@GAMEGROUP@" "$(DESTDIR)$(scoredir)" \ && { test ! -f "$(DESTDIR)$(scoredir)/mbscore" \ || chgrp "@GAMEGROUP@" "$(DESTDIR)$(scoredir)/mbscore" ; } \ && { test ! -f "$(DESTDIR)$(scoredir)/mbscore" \ || chmod 664 "$(DESTDIR)$(scoredir)/mbscore" ; } \ && chmod 575 "$(DESTDIR)$(scoredir)" ; \ fi $(DESTDIR)$(bindir)/moon-buggy -c uninstall-local: rm -f $(DESTDIR)$(scoredir)/mbscore -rmdir $(DESTDIR)$(scoredir) dist-hook: if [ -d $(srcdir)/debian ]; then \ mkdir $(distdir)/debian; \ cp -p $(srcdir)/debian/* $(distdir)/debian/; \ fi if short_getopt mbsep = \\\\\" endif moon-buggy.6: manpage.in Makefile.am echo ".\\\" $@ - automatically created from" $< >$@ sed "s:@MBBINDIR@:$(bindir):g;\ s:@MBSCORE@:$(scoredir):g;\ s:@C@:$(mbsep):g;\ s:@MBVERS@:$(VERSION):g" $(srcdir)/manpage.in >>$@ moon-buggy-1.0.51/Makefile.in0000644000175000017500000007427510407330002012653 00000000000000# Makefile.in generated by automake 1.9.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright 1999, 2000, 2001 Jochen Voss # $Id: Makefile.am 6092 2004-12-27 15:34:32Z voss $ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = moon-buggy$(EXEEXT) DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/stamp-vti $(srcdir)/version.texi \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ THANKS TODO config.guess config.sub depcomp install-sh \ mdate-sh missing texinfo.tex subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno configure.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \ "$(DESTDIR)$(man6dir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_moon_buggy_OBJECTS = main.$(OBJEXT) mode.$(OBJEXT) title.$(OBJEXT) \ pager.$(OBJEXT) game.$(OBJEXT) level.$(OBJEXT) \ ground.$(OBJEXT) buggy.$(OBJEXT) laser.$(OBJEXT) \ meteor.$(OBJEXT) highscore.$(OBJEXT) realname.$(OBJEXT) \ queue.$(OBJEXT) vclock.$(OBJEXT) date.$(OBJEXT) \ persona.$(OBJEXT) signal.$(OBJEXT) keyboard.$(OBJEXT) \ terminal.$(OBJEXT) cursor.$(OBJEXT) random.$(OBJEXT) \ error.$(OBJEXT) xmalloc.$(OBJEXT) xstrdup.$(OBJEXT) \ hpath.$(OBJEXT) moon_buggy_OBJECTS = $(am_moon_buggy_OBJECTS) moon_buggy_DEPENDENCIES = DEFAULT_INCLUDES = -I. -I$(srcdir) -I. depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(moon_buggy_SOURCES) DIST_SOURCES = $(moon_buggy_SOURCES) INFO_DEPS = $(srcdir)/moon-buggy.info am__TEXINFO_TEX_DIR = $(srcdir) DVIS = moon-buggy.dvi PDFS = moon-buggy.pdf PSS = moon-buggy.ps HTMLS = moon-buggy.html TEXINFOS = moon-buggy.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips man6dir = $(mandir)/man6 NROFF = nroff MANS = $(man_MANS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d $(distdir) \ || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr $(distdir); }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURSES_INCLUDEDIR = @CURSES_INCLUDEDIR@ CURSES_LIBS = @CURSES_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GAMEGROUP = @GAMEGROUP@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ ac_ct_CC = @ac_ct_CC@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ short_getopt_FALSE = @short_getopt_FALSE@ short_getopt_TRUE = @short_getopt_TRUE@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ EXTRA_DIST = manpage.in car.img \ text2c.sed img.sed ANNOUNCE moon-buggy.lsm \ moon-buggy.png moon-buggy.xpm title.eps DISTCLEANFILES = moon-buggy.6 INCLUDES = @CURSES_INCLUDEDIR@ moon_buggy_SOURCES = moon-buggy.h main.c mode.c title.c pager.c copying.h \ game.c level.c ground.c buggy.c buggy.h laser.c meteor.c highscore.c \ realname.c queue.c vclock.c date.c persona.c signal.c keyboard.c \ terminal.c cursor.c random.c error.c xmalloc.c xstrdup.c darray.h \ hpath.c moon_buggy_LDADD = @CURSES_LIBS@ info_TEXINFOS = moon-buggy.texi man_MANS = moon-buggy.6 scoredir = $(sharedstatedir)/moon-buggy BUILT_SOURCES = copying.h buggy.h @short_getopt_TRUE@mbsep = \\\\\" all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .dvi .html .info .o .obj .pdf .ps .texi am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ cd $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) cd $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) moon-buggy$(EXEEXT): $(moon_buggy_OBJECTS) $(moon_buggy_DEPENDENCIES) @rm -f moon-buggy$(EXEEXT) $(LINK) $(moon_buggy_LDFLAGS) $(moon_buggy_OBJECTS) $(moon_buggy_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buggy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cursor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/date.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/game.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ground.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/highscore.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hpath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/laser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/level.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/meteor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/persona.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/queue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/realname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/terminal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/title.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vclock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmalloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrdup.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ @am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .texi.info: restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && cd $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ cd $(srcdir); \ else \ rc=$$?; \ cd $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $< .texi.pdf: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $< .texi.html: rm -rf $(@:.html=.htp) if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@; \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ else \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ exit 1; \ fi $(srcdir)/moon-buggy.info: moon-buggy.texi $(srcdir)/version.texi moon-buggy.dvi: moon-buggy.texi $(srcdir)/version.texi moon-buggy.pdf: moon-buggy.texi $(srcdir)/version.texi moon-buggy.html: moon-buggy.texi $(srcdir)/version.texi $(srcdir)/version.texi: $(srcdir)/stamp-vti $(srcdir)/stamp-vti: moon-buggy.texi $(top_srcdir)/configure @(dir=.; test -f ./moon-buggy.texi || dir=$(srcdir); \ set `$(SHELL) $(srcdir)/mdate-sh $$dir/moon-buggy.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp @cmp -s vti.tmp $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi"; \ cp vti.tmp $(srcdir)/version.texi) -@rm -f vti.tmp @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp maintainer-clean-vti: -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) -o $@ $< uninstall-info-am: @$(PRE_UNINSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f $(distdir)/$$relfile || \ cp -p $$file $(distdir)/$$relfile; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf moon-buggy.aux moon-buggy.cp moon-buggy.cps moon-buggy.fn \ moon-buggy.fns moon-buggy.ky moon-buggy.kys moon-buggy.log \ moon-buggy.pg moon-buggy.pgs moon-buggy.tmp moon-buggy.toc \ moon-buggy.tp moon-buggy.tps moon-buggy.vr moon-buggy.vrs \ moon-buggy.dvi moon-buggy.pdf moon-buggy.ps moon-buggy.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-man6: $(man6_MANS) $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man6dir)" || $(mkdir_p) "$(DESTDIR)$(man6dir)" @list='$(man6_MANS) $(dist_man6_MANS) $(nodist_man6_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.6*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 6*) ;; \ *) ext='6' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man6dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man6dir)/$$inst"; \ done uninstall-man6: @$(NORMAL_UNINSTALL) @list='$(man6_MANS) $(dist_man6_MANS) $(nodist_man6_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.6*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 6*) ;; \ *) ext='6' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f '$(DESTDIR)$(man6dir)/$$inst'"; \ rm -f "$(DESTDIR)$(man6dir)/$$inst"; \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) mkdir $(distdir) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info dist-hook -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r $(distdir) dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && cd $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' distuninstallcheck: @cd $(distuninstallcheck_dir) \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(MANS) config.h installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man6dir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: $(DVIS) html: html-am html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-data-local install-info-am install-man @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-exec-am: install-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)" @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ else : ; fi; \ done; \ done @$(POST_INSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-man6 installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ mostlyclean-generic mostlyclean-vti pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-local \ uninstall-man uninstall-man: uninstall-man6 .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ clean-binPROGRAMS clean-generic ctags dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-info dist-shar dist-tarZ dist-zip \ distcheck distclean distclean-compile distclean-generic \ distclean-hdr distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-data-hook install-data-local \ install-exec install-exec-am install-exec-hook install-info \ install-info-am install-man install-man6 install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-aminfo maintainer-clean-generic \ maintainer-clean-vti mostlyclean mostlyclean-aminfo \ mostlyclean-compile mostlyclean-generic mostlyclean-vti pdf \ pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-info-am uninstall-local \ uninstall-man uninstall-man6 hpath.o: hpath.c moon-buggy.h Makefile $(COMPILE) -DSCORE_DIR=\"$(scoredir)\" -c $< copying.h: COPYING text2c.sed cd $(srcdir) && sed -f text2c.sed $(srcdir)/COPYING >$@ buggy.h: car.img img.sed cd $(srcdir) && sed -n -f img.sed $(srcdir)/car.img >$@ install-exec-hook: @$(POST_INSTALL) if test "x@GAMEGROUP@" != "x"; then \ chgrp "@GAMEGROUP@" "$(DESTDIR)$(bindir)/moon-buggy" \ && chmod 2111 "$(DESTDIR)$(bindir)/moon-buggy" ; \ fi @$(NORMAL_INSTALL) install-data-local: $(mkinstalldirs) $(DESTDIR)$(scoredir) install-data-hook: @$(POST_INSTALL) if test "x@GAMEGROUP@" != "x"; then \ chgrp "@GAMEGROUP@" "$(DESTDIR)$(scoredir)" \ && { test ! -f "$(DESTDIR)$(scoredir)/mbscore" \ || chgrp "@GAMEGROUP@" "$(DESTDIR)$(scoredir)/mbscore" ; } \ && { test ! -f "$(DESTDIR)$(scoredir)/mbscore" \ || chmod 664 "$(DESTDIR)$(scoredir)/mbscore" ; } \ && chmod 575 "$(DESTDIR)$(scoredir)" ; \ fi $(DESTDIR)$(bindir)/moon-buggy -c uninstall-local: rm -f $(DESTDIR)$(scoredir)/mbscore -rmdir $(DESTDIR)$(scoredir) dist-hook: if [ -d $(srcdir)/debian ]; then \ mkdir $(distdir)/debian; \ cp -p $(srcdir)/debian/* $(distdir)/debian/; \ fi moon-buggy.6: manpage.in Makefile.am echo ".\\\" $@ - automatically created from" $< >$@ sed "s:@MBBINDIR@:$(bindir):g;\ s:@MBSCORE@:$(scoredir):g;\ s:@C@:$(mbsep):g;\ s:@MBVERS@:$(VERSION):g" $(srcdir)/manpage.in >>$@ # 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: moon-buggy-1.0.51/config.h.in0000644000175000017500000000615510407330036012630 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to the curses header file name (including brackets). */ #undef CURSES_HEADER /* Define to 1 if you have the header file. */ #undef HAVE_CURSES_H /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H /* Define to 1 if you have the `fclean' function. */ #undef HAVE_FCLEAN /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getopt_long' function. */ #undef HAVE_GETOPT_LONG /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_NCURSES_CURSES_H /* Define to 1 if you have the header file. */ #undef HAVE_NCURSES_H /* Define to 1 if you have the header file. */ #undef HAVE_NCURSES_NCURSES_H /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `setreuid' function. */ #undef HAVE_SETREUID /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_TERMIOS_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define if your system lacks `fd_set'. */ #undef NO_FD_SET /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define this if your system supports it. */ #undef _XOPEN_SOURCE /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `int' if doesn't define. */ #undef gid_t /* Define to `unsigned' if does not define. */ #undef size_t /* Define to `int' if doesn't define. */ #undef uid_t moon-buggy-1.0.51/stamp-vti0000644000175000017500000000014710407330036012447 00000000000000@set UPDATED 27 December 2004 @set UPDATED-MONTH December 2004 @set EDITION 1.0.51 @set VERSION 1.0.51 moon-buggy-1.0.51/version.texi0000644000175000017500000000014710167521474013173 00000000000000@set UPDATED 27 December 2004 @set UPDATED-MONTH December 2004 @set EDITION 1.0.51 @set VERSION 1.0.51 moon-buggy-1.0.51/configure0000755000175000017500000054452410407330001012513 00000000000000#! /bin/sh # From configure.ac Revision: 1.4 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.59 for moon-buggy 1.0.51. # # Report bugs to . # # Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` exec 6>&1 # # Initializations. # ac_default_prefix=/usr/local ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. # This variable seems obsolete. It should probably be removed, and # only ac_max_sed_lines should be used. : ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='moon-buggy' PACKAGE_TARNAME='moon-buggy' PACKAGE_VERSION='1.0.51' PACKAGE_STRING='moon-buggy 1.0.51' PACKAGE_BUGREPORT='voss@seehuhn.de' ac_unique_file="moon-buggy.h" # Factoring default headers for most tests. ac_includes_default="\ #include #if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_STAT_H # include #endif #if STDC_HEADERS # include # include #else # if HAVE_STDLIB_H # include # endif #endif #if HAVE_STRING_H # if !STDC_HEADERS && HAVE_MEMORY_H # include # endif # include #endif #if HAVE_STRINGS_H # include #endif #if HAVE_INTTYPES_H # include #else # if HAVE_STDINT_H # include # endif #endif #if HAVE_UNISTD_H # include #endif" ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os GAMEGROUP CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CURSES_INCLUDEDIR CPP EGREP CURSES_LIBS short_getopt_TRUE short_getopt_FALSE LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. ac_init_help= ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. 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' 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 ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # 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_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir=$ac_optarg ;; -disable-* | --disable-*) ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid feature name: $ac_feature" >&2 { (exit 1); exit 1; }; } ac_feature=`echo $ac_feature | sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) 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 | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -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 | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` case $ac_option in *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid package name: $ac_package" >&2 { (exit 1); exit 1; }; } ac_package=`echo $ac_package | sed 's/-/_/g'` eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) { echo "$as_me: error: unrecognized option: $ac_option Try \`$0 --help' for more information." >&2 { (exit 1); exit 1; }; } ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 { (exit 1); exit 1; }; } ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` eval "$ac_envvar='$ac_optarg'" export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` { echo "$as_me: error: missing argument to $ac_option" >&2 { (exit 1); exit 1; }; } fi # Be sure to have absolute paths. for ac_var in exec_prefix prefix do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* | NONE | '' ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in [\\/$]* | ?:[\\/]* ) ;; *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 { (exit 1); exit 1; }; };; esac done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$0" : 'X\(//\)[^/]' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` 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 "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 { (exit 1); exit 1; }; } else { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 { (exit 1); exit 1; }; } fi fi (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias ac_cv_env_build_alias_set=${build_alias+set} ac_cv_env_build_alias_value=$build_alias ac_env_host_alias_set=${host_alias+set} ac_env_host_alias_value=$host_alias ac_cv_env_host_alias_set=${host_alias+set} ac_cv_env_host_alias_value=$host_alias ac_env_target_alias_set=${target_alias+set} ac_env_target_alias_value=$target_alias ac_cv_env_target_alias_set=${target_alias+set} ac_cv_env_target_alias_value=$target_alias ac_env_CC_set=${CC+set} ac_env_CC_value=$CC ac_cv_env_CC_set=${CC+set} ac_cv_env_CC_value=$CC ac_env_CFLAGS_set=${CFLAGS+set} ac_env_CFLAGS_value=$CFLAGS ac_cv_env_CFLAGS_set=${CFLAGS+set} ac_cv_env_CFLAGS_value=$CFLAGS ac_env_LDFLAGS_set=${LDFLAGS+set} ac_env_LDFLAGS_value=$LDFLAGS ac_cv_env_LDFLAGS_set=${LDFLAGS+set} ac_cv_env_LDFLAGS_value=$LDFLAGS ac_env_CPPFLAGS_set=${CPPFLAGS+set} ac_env_CPPFLAGS_value=$CPPFLAGS ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} ac_cv_env_CPPFLAGS_value=$CPPFLAGS ac_env_CPP_set=${CPP+set} ac_env_CPP_value=$CPP ac_cv_env_CPP_set=${CPP+set} ac_cv_env_CPP_value=$CPP # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures moon-buggy 1.0.51 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data [PREFIX/share] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --infodir=DIR info documentation [PREFIX/info] --mandir=DIR man documentation [PREFIX/man] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of moon-buggy 1.0.51:";; esac cat <<\_ACEOF Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-setgid=NAME setgid usage: install moon-buggy as group NAME --with-curses-includedir=DIR special header file location for the curses library none --with-curses-header=ARG the curses header file name (including brackets) --with-curses-libs=ARG the -l and -L linker flags for the curses library -lcurses Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d $ac_dir || continue ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. if test -f $ac_srcdir/configure.gnu; then echo $SHELL $ac_srcdir/configure.gnu --help=recursive elif test -f $ac_srcdir/configure; then echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi cd "$ac_popdir" done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF moon-buggy configure 1.0.51 generated by GNU Autoconf 2.59 Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit 0 fi exec 5>config.log cat >&5 <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by moon-buggy $as_me 1.0.51, which was generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ _ACEOF { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` hostinfo = `(hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. echo "PATH: $as_dir" done } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; 2) ac_configure_args1="$ac_configure_args1 '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" # Get rid of the leading space. ac_sep=" " ;; esac done done $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Be sure not to use single quotes in there, as some shells, # such as our DU 5.0 friend, will then `close' the trap. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, { (set) 2>&1 | case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------- ## ## Output files. ## ## ------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=$`echo $ac_var` echo "$ac_var='"'"'$ac_val'"'"'" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo >confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -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 "$as_me:$LINENO: loading site script $ac_site_file" >&5 echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special # files actually), so we avoid doing that. if test -f "$cache_file"; then { echo "$as_me:$LINENO: loading cache $cache_file" >&5 echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . $cache_file;; *) . ./$cache_file;; esac fi else { echo "$as_me:$LINENO: creating cache $cache_file" >&5 echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" eval ac_new_val="\$ac_env_${ac_var}_value" case $ac_old_set,$ac_new_set in set,) { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 echo "$as_me: error: changes in the environment can compromise the build" >&2;} { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version="1.9" 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 elif test -f $ac_dir/shtool; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} { (exit 1); exit 1; }; } fi ac_config_guess="$SHELL $ac_aux_dir/config.guess" ac_config_sub="$SHELL $ac_aux_dir/config.sub" ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi done done ;; esac done 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 "$as_me:$LINENO: result: $INSTALL" >&5 echo "${ECHO_T}$INSTALL" >&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo "$as_me:$LINENO: checking whether build environment is sane" >&5 echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 # Just in case sleep 1 echo timestamp > conftest.file # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&5 echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" >&2;} { (exit 1); exit 1; }; } fi test "$2" = conftest.file ) then # Ok. : else { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! Check your system clock" >&5 echo "$as_me: error: newly created file is older than distributed files! Check your system clock" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 test "$program_prefix" != NONE && program_transform_name="s,^,$program_prefix,;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$,$program_suffix,;$program_transform_name" # Double any \ or $. echo might interpret backslashes. # By default was `s,x,x', remove it if useless. cat <<\_ACEOF >conftest.sed s/[\\$]/&&/g;s/;s,x,x,$// _ACEOF program_transform_name=`echo $program_transform_name | sed -f conftest.sed` rm conftest.sed # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then # We used to keeping the `.' as first argument, in order to # allow $(mkdir_p) to be used without argument. As in # $(mkdir_p) $(somedir) # where $(somedir) is conditionally defined. However this is wrong # for two reasons: # 1. if the package is installed by a user who cannot write `.' # make install will fail, # 2. the above comment should most certainly read # $(mkdir_p) $(DESTDIR)$(somedir) # so it does not work when $(somedir) is undefined and # $(DESTDIR) is not. # To support the latter case, we have to write # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), # so the `.' trick is pointless. mkdir_p='mkdir -p --' else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. for d in ./-p ./--version; do test -d $d && rmdir $d done # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. if test -f "$ac_aux_dir/mkinstalldirs"; then mkdir_p='$(mkinstalldirs)' else mkdir_p='$(install_sh) -d' fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_AWK+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then echo "$as_me:$LINENO: result: $AWK" >&5 echo "${ECHO_T}$AWK" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$AWK" && break done echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.make <<\_ACEOF all: @echo 'ac_maketemp="$(MAKE)"' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftest.make fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 SET_MAKE= else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} { (exit 1); exit 1; }; } fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='moon-buggy' VERSION='1.0.51' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} install_sh=${install_sh-"$am_aux_dir/install-sh"} # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then echo "$as_me:$LINENO: result: $STRIP" >&5 echo "${ECHO_T}$STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 echo "${ECHO_T}$ac_ct_STRIP" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi STRIP=$ac_ct_STRIP else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' ac_config_headers="$ac_config_headers config.h" # Make sure we can run config.sub. $ac_config_sub sun4 >/dev/null 2>&1 || { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 echo "$as_me: error: cannot run $ac_config_sub" >&2;} { (exit 1); exit 1; }; } echo "$as_me:$LINENO: checking build system type" >&5 echo $ECHO_N "checking build system type... $ECHO_C" >&6 if test "${ac_cv_build+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_build_alias=$build_alias test -z "$ac_cv_build_alias" && ac_cv_build_alias=`$ac_config_guess` test -z "$ac_cv_build_alias" && { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 echo "$as_me: error: cannot guess build type; you must specify one" >&2;} { (exit 1); exit 1; }; } ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_build" >&5 echo "${ECHO_T}$ac_cv_build" >&6 build=$ac_cv_build build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` echo "$as_me:$LINENO: checking host system type" >&5 echo $ECHO_N "checking host system type... $ECHO_C" >&6 if test "${ac_cv_host+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_host_alias=$host_alias test -z "$ac_cv_host_alias" && ac_cv_host_alias=$ac_cv_build_alias ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} { (exit 1); exit 1; }; } fi echo "$as_me:$LINENO: result: $ac_cv_host" >&5 echo "${ECHO_T}$ac_cv_host" >&6 host=$ac_cv_host host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` case "$host" in *bsd*|sparc-sun-solaris2.4|*-*-darwin*) ;; *) cat >>confdefs.h <<\_ACEOF #define _XOPEN_SOURCE 1 _ACEOF ;; esac # Check whether --with-setgid or --without-setgid was given. if test "${with_setgid+set}" = set; then withval="$with_setgid" case "${withval}" in no) GAMEGROUP="" ;; yes) { { echo "$as_me:$LINENO: error: missing argument for --with-setgid" >&5 echo "$as_me: error: missing argument for --with-setgid" >&2;} { (exit 1); exit 1; }; } ;; *) GAMEGROUP="$withval" ;; esac fi; ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi CC=$ac_ct_CC else CC="$ac_cv_prog_CC" fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then echo "$as_me:$LINENO: result: $CC" >&5 echo "${ECHO_T}$CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 if test "${ac_cv_prog_ac_ct_CC+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 echo "${ECHO_T}$ac_ct_CC" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi test -n "$ac_ct_CC" && break done CC=$ac_ct_CC fi fi test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&5 echo "$as_me: error: no acceptable C compiler found in \$PATH See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } # Provide some information about the compiler. echo "$as_me:$LINENO:" \ "checking for C compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 (eval $ac_compiler --version &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 (eval $ac_compiler -v &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 (eval $ac_compiler -V &5) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 (eval $ac_link_default) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # Find the output, starting from the most likely. This scheme is # not robust to junk in `.', hence go to wildcards (a.*) only as a last # resort. # Be careful to initialize this variable, since it used to be cached. # Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. ac_cv_exeext= # b.out is created by i960 compilers. for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; conftest.$ac_ext ) # This is the source file. ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` # FIXME: I believe we export ac_cv_exeext for Libtool, # but it would be cool to find out if it's true. Does anybody # maintain Libtool? --akim. export ac_cv_exeext break;; * ) break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: C compiler cannot create executables See \`config.log' for more details." >&5 echo "$as_me: error: C compiler cannot create executables See \`config.log' for more details." >&2;} { (exit 77); exit 77; }; } fi ac_exeext=$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_file" >&5 echo "${ECHO_T}$ac_file" >&6 # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether the C compiler works" >&5 echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 # FIXME: These cross compiler hacks should be removed for Autoconf 3.0 # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { echo "$as_me:$LINENO: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&5 echo "$as_me: error: cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi fi fi echo "$as_me:$LINENO: result: yes" >&5 echo "${ECHO_T}yes" >&6 rm -f a.out a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save # Check the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 echo "$as_me:$LINENO: result: $cross_compiling" >&5 echo "${ECHO_T}$cross_compiling" >&6 echo "$as_me:$LINENO: checking for suffix of executables" >&5 echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` export ac_cv_exeext break;; * ) break;; esac done else { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest$ac_cv_exeext echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 echo "${ECHO_T}$ac_cv_exeext" >&6 rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT echo "$as_me:$LINENO: checking for suffix of object files" >&5 echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 if test "${ac_cv_objext+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&5 echo "$as_me: error: cannot compute suffix of object files: cannot compile See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 echo "${ECHO_T}$ac_cv_objext" >&6 OBJEXT=$ac_cv_objext ac_objext=$OBJEXT echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 if test "${ac_cv_c_compiler_gnu+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_compiler_gnu=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_compiler_gnu=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 GCC=`test $ac_compiler_gnu = yes && echo yes` ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS CFLAGS="-g" echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 if test "${ac_cv_prog_cc_g+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_g=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_prog_cc_g=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 if test "${ac_cv_prog_cc_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_cv_prog_cc_stdc=no ac_save_CC=$CC cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std1 is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std1. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX 10.20 and later -Ae # HP-UX older versions -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_prog_cc_stdc=$ac_arg break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext done rm -f conftest.$ac_ext conftest.$ac_objext CC=$ac_save_CC fi case "x$ac_cv_prog_cc_stdc" in x|xno) echo "$as_me:$LINENO: result: none needed" >&5 echo "${ECHO_T}none needed" >&6 ;; *) echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 CC="$CC $ac_cv_prog_cc_stdc" ;; esac # Some people use a C++ compiler to compile C. Since we use `exit', # in C++ we need to declare it. In case someone uses the same compiler # for both compiling C and C++ we need to have the C++ compiler decide # the declaration of exit, since it's the most demanding environment. cat >conftest.$ac_ext <<_ACEOF #ifndef __cplusplus choke me #endif _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then for ac_declaration in \ '' \ 'extern "C" void std::exit (int) throw (); using std::exit;' \ 'extern "C" void std::exit (int); using std::exit;' \ 'extern "C" void exit (int) throw ();' \ 'extern "C" void exit (int);' \ 'void exit (int);' do cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration #include int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 continue fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_declaration int main () { exit (42); ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then break else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest* if test -n "$ac_declaration"; then echo '#ifdef __cplusplus' >>confdefs.h echo $ac_declaration >>confdefs.h echo '#endif' >>confdefs.h fi else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo done .PHONY: am__doit END # If we don't find an include directive, just comment out the code. echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # We grep out `Entering directory' and `Leaving directory' # messages which can occur if `w' ends up in MAKEFLAGS. # In particular we don't look at `^make:' because GNU make might # be invoked under some other name (usually "gmake"), in which # case it prints its new name instead of `make'. if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then am__include=include am__quote= _am_result=GNU fi # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then am__include=.include am__quote="\"" _am_result=BSD fi fi echo "$as_me:$LINENO: result: $_am_result" >&5 echo "${ECHO_T}$_am_result" >&6 rm -f confinc confmf # Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then enableval="$enable_dependency_tracking" fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf case $depmode in nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; none) break ;; esac # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. if depmode=$depmode \ source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi echo "$as_me:$LINENO: checking for modf in -lm" >&5 echo $ECHO_N "checking for modf in -lm... $ECHO_C" >&6 if test "${ac_cv_lib_m_modf+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char modf (); int main () { modf (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_m_modf=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_m_modf=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_m_modf" >&5 echo "${ECHO_T}$ac_cv_lib_m_modf" >&6 if test $ac_cv_lib_m_modf = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi echo "$as_me:$LINENO: result: $CPP" >&5 echo "${ECHO_T}$CPP" >&6 ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then : else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether non-existent headers # can be detected and how. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then # Broken: success on invalid input. continue else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&5 echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." >&2;} { (exit 1); exit 1; }; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu echo "$as_me:$LINENO: checking for egrep" >&5 echo $ECHO_N "checking for egrep... $ECHO_C" >&6 if test "${ac_cv_prog_egrep+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else if echo a | (grep -E '(a|b)') >/dev/null 2>&1 then ac_cv_prog_egrep='grep -E' else ac_cv_prog_egrep='egrep' fi fi echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 echo "${ECHO_T}$ac_cv_prog_egrep" >&6 EGREP=$ac_cv_prog_egrep echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_Header=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_Header=no" fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done echo "$as_me:$LINENO: checking for curses preprocessor flags" >&5 echo $ECHO_N "checking for curses preprocessor flags... $ECHO_C" >&6 # Check whether --with-curses-includedir or --without-curses-includedir was given. if test "${with_curses_includedir+set}" = set; then withval="$with_curses_includedir" case "$withval" in yes|no) ;; *) CURSES_INCLUDEDIR="-I$withval" ;; esac fi; if test -z "$CURSES_INCLUDEDIR"; then mb_result="none" else mb_result="$CURSES_INCLUDEDIR" fi echo "$as_me:$LINENO: result: $mb_result" >&5 echo "${ECHO_T}$mb_result" >&6 # Check whether --with-curses-header or --without-curses-header was given. if test "${with_curses_header+set}" = set; then withval="$with_curses_header" case "$withval" in yes|no) ;; *) CURSES_HEADER="$withval" ;; esac fi; if test -z "$CURSES_HEADER"; then mb_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $CURSES_INCLUDEDIR" for ac_header in curses.h ncurses.h ncurses/ncurses.h ncurses/curses.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to voss@seehuhn.de ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi done CPPFLAGS="$mb_save_CPPFLAGS" if test "$ac_cv_header_curses_h" = yes; then CURSES_HEADER="" elif test "$ac_cv_header_ncurses_h" = yes; then CURSES_HEADER="" elif test "$ac_cv_header_ncurses_ncurses_h" = yes; then CURSES_HEADER="" elif test "$ac_cv_header_ncurses_curses_h" = yes; then CURSES_HEADER="" fi fi echo "$as_me:$LINENO: checking how to include the curses header file" >&5 echo $ECHO_N "checking how to include the curses header file... $ECHO_C" >&6 if test -n "$CURSES_HEADER"; then cat >>confdefs.h <<_ACEOF #define CURSES_HEADER $CURSES_HEADER _ACEOF echo "$as_me:$LINENO: result: $CURSES_HEADER" >&5 echo "${ECHO_T}$CURSES_HEADER" >&6 else echo "$as_me:$LINENO: result: unknown" >&5 echo "${ECHO_T}unknown" >&6 { echo "$as_me:$LINENO: WARNING: no curses header found, try --with-curses-header" >&5 echo "$as_me: WARNING: no curses header found, try --with-curses-header" >&2;} fi # Check whether --with-curses-libs or --without-curses-libs was given. if test "${with_curses_libs+set}" = set; then withval="$with_curses_libs" case "$withval" in yes|no) ;; *) CURSES_LIBS="$withval" ;; esac fi; if test -z "$CURSES_LIBS"; then echo "$as_me:$LINENO: checking for initscr in -lcurses" >&5 echo $ECHO_N "checking for initscr in -lcurses... $ECHO_C" >&6 if test "${ac_cv_lib_curses_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcurses $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_curses_initscr=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_curses_initscr=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_curses_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_curses_initscr" >&6 if test $ac_cv_lib_curses_initscr = yes; then CURSES_LIBS=-lcurses fi if test -z "$CURSES_LIBS"; then echo "$as_me:$LINENO: checking for initscr in -lncurses" >&5 echo $ECHO_N "checking for initscr in -lncurses... $ECHO_C" >&6 if test "${ac_cv_lib_ncurses_initscr+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char initscr (); int main () { initscr (); ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_lib_ncurses_initscr=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_lib_ncurses_initscr=no fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi echo "$as_me:$LINENO: result: $ac_cv_lib_ncurses_initscr" >&5 echo "${ECHO_T}$ac_cv_lib_ncurses_initscr" >&6 if test $ac_cv_lib_ncurses_initscr = yes; then CURSES_LIBS=-lncurses fi fi fi echo "$as_me:$LINENO: checking for curses linker flags" >&5 echo $ECHO_N "checking for curses linker flags... $ECHO_C" >&6 if test -n "$CURSES_LIBS"; then echo "$as_me:$LINENO: result: $CURSES_LIBS" >&5 echo "${ECHO_T}$CURSES_LIBS" >&6 else echo "$as_me:$LINENO: result: unknown" >&5 echo "${ECHO_T}unknown" >&6 { echo "$as_me:$LINENO: WARNING: curses library not found, try --with-curses-libs" >&5 echo "$as_me: WARNING: curses library not found, try --with-curses-libs" >&2;} fi echo "$as_me:$LINENO: checking for ANSI C header files" >&5 echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 if test "${ac_cv_header_stdc+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_header_stdc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_header_stdc=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } _ACEOF rm -f conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='./conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then : else echo "$as_me: program exited with status $ac_status" >&5 echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ( exit $ac_status ) ac_cv_header_stdc=no fi rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi fi fi echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 echo "${ECHO_T}$ac_cv_header_stdc" >&6 if test $ac_cv_header_stdc = yes; then cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 _ACEOF fi for ac_header in getopt.h errno.h locale.h termios.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 else # Is the header compilable? echo "$as_me:$LINENO: checking $ac_header usability" >&5 echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default #include <$ac_header> _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_header_compiler=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_compiler=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 echo "${ECHO_T}$ac_header_compiler" >&6 # Is the header present? echo "$as_me:$LINENO: checking $ac_header presence" >&5 echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include <$ac_header> _ACEOF if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } >/dev/null; then if test -s conftest.err; then ac_cpp_err=$ac_c_preproc_warn_flag ac_cpp_err=$ac_cpp_err$ac_c_werror_flag else ac_cpp_err= fi else ac_cpp_err=yes fi if test -z "$ac_cpp_err"; then ac_header_preproc=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 echo "${ECHO_T}$ac_header_preproc" >&6 # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in yes:no: ) { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} ac_header_preproc=yes ;; no:yes:* ) { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} ( cat <<\_ASBOX ## ------------------------------ ## ## Report this to voss@seehuhn.de ## ## ------------------------------ ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac echo "$as_me:$LINENO: checking for $ac_header" >&5 echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 if eval "test \"\${$as_ac_Header+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else eval "$as_ac_Header=\$ac_header_preproc" fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 fi if test `eval echo '${'$as_ac_Header'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Check if needs to be included for fd_set echo "$as_me:$LINENO: checking for fd_set" >&5 echo $ECHO_N "checking for fd_set... $ECHO_C" >&6 cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include int main () { fd_set readMask, writeMask; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then mb_ok=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 mb_ok=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext if test $mb_ok = yes; then echo "$as_me:$LINENO: result: yes, found in sys/types.h" >&5 echo "${ECHO_T}yes, found in sys/types.h" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "fd_mask" >/dev/null 2>&1; then mb_ok=yes fi rm -f conftest* if test $mb_ok = yes; then cat >>confdefs.h <<\_ACEOF #define HAVE_SYS_SELECT_H 1 _ACEOF echo "$as_me:$LINENO: result: yes, found in sys/select.h" >&5 echo "${ECHO_T}yes, found in sys/select.h" >&6 else cat >>confdefs.h <<\_ACEOF #define NO_FD_SET 1 _ACEOF echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi fi echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 if test "${ac_cv_c_const+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset x; /* SunOS 4.1.1 cc rejects this. */ char const *const *ccp; char **p; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; ccp = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++ccp; p = (char**) ccp; ccp = (char const *const *) p; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } #endif ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_c_const=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_c_const=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 echo "${ECHO_T}$ac_cv_c_const" >&6 if test $ac_cv_c_const = no; then cat >>confdefs.h <<\_ACEOF #define const _ACEOF fi echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5 echo $ECHO_N "checking for uid_t in sys/types.h... $ECHO_C" >&6 if test "${ac_cv_type_uid_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "uid_t" >/dev/null 2>&1; then ac_cv_type_uid_t=yes else ac_cv_type_uid_t=no fi rm -f conftest* fi echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 echo "${ECHO_T}$ac_cv_type_uid_t" >&6 if test $ac_cv_type_uid_t = no; then cat >>confdefs.h <<\_ACEOF #define uid_t int _ACEOF cat >>confdefs.h <<\_ACEOF #define gid_t int _ACEOF fi echo "$as_me:$LINENO: checking for size_t" >&5 echo $ECHO_N "checking for size_t... $ECHO_C" >&6 if test "${ac_cv_type_size_t+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ $ac_includes_default int main () { if ((size_t *) 0) return 0; if (sizeof (size_t)) return 0; ; return 0; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_size_t=yes else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_size_t=no fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 echo "${ECHO_T}$ac_cv_type_size_t" >&6 if test $ac_cv_type_size_t = yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned _ACEOF fi echo "$as_me:$LINENO: checking return type of signal handlers" >&5 echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 if test "${ac_cv_type_signal+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ #include #include #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; } _ACEOF rm -f conftest.$ac_objext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then ac_cv_type_signal=void else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_cv_type_signal=int fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 echo "${ECHO_T}$ac_cv_type_signal" >&6 cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF for ac_func in fclean ftruncate getopt_long setreuid setlocale do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 if eval "test \"\${$as_ac_var+set}\" = set"; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext cat >>conftest.$ac_ext <<_ACEOF /* end confdefs.h. */ /* Define $ac_func to an innocuous variant, in case declares $ac_func. For example, HP-UX 11i declares gettimeofday. */ #define $ac_func innocuous_$ac_func /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $ac_func /* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" { #endif /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else char (*f) () = $ac_func; #endif #ifdef __cplusplus } #endif int main () { return f != $ac_func; ; return 0; } _ACEOF rm -f conftest.$ac_objext conftest$ac_exeext if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 (eval $ac_link) 2>conftest.er1 ac_status=$? grep -v '^ *+' conftest.er1 >conftest.err rm -f conftest.er1 cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } && { ac_try='test -s conftest$ac_exeext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then eval "$as_ac_var=yes" else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 eval "$as_ac_var=no" fi rm -f conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 if test `eval echo '${'$as_ac_var'}'` = yes; then cat >>confdefs.h <<_ACEOF #define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_getopt_long" != xyes; then short_getopt_TRUE= short_getopt_FALSE='#' else short_getopt_TRUE='#' short_getopt_FALSE= fi ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, 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 \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | sed ' t clear : clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; s/^[^=]*=[ ]*$//; }' fi DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` # 2. Add them. ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi if test -z "${short_getopt_TRUE}" && test -z "${short_getopt_FALSE}"; then { { echo "$as_me:$LINENO: error: conditional \"short_getopt\" was never defined. Usually this means the macro was only invoked conditionally." >&5 echo "$as_me: error: conditional \"short_getopt\" was never defined. Usually this means the macro was only invoked conditionally." >&2;} { (exit 1); exit 1; }; } fi : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 echo "$as_me: creating $CONFIG_STATUS" >&6;} cat >$CONFIG_STATUS <<_ACEOF #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi DUALCASE=1; export DUALCASE # for MKS sh # Support unset when possible. if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi # Work around bugs in pre-3.0 UWIN ksh. $as_unset ENV MAIL MAILPATH PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. for as_var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then eval $as_var=C; export $as_var else $as_unset $as_var fi done # Required to use basename. if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi # Name of the executable. as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ . : '\(.\)' 2>/dev/null || echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } /^X\/\(\/\/\)$/{ s//\1/; q; } /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" || { # Find who we are. Look in the path if we contain no path at all # relative or not. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} { (exit 1); exit 1; }; } fi case $CONFIG_SHELL in '') as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for as_base in sh bash ksh sh5; do case $as_dir in /*) if ("$as_dir/$as_base" -c ' as_lineno_1=$LINENO as_lineno_2=$LINENO as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} fi;; esac done done ;; esac # Create $as_me.lineno as a copy of $as_myself, but with $LINENO # uniformly replaced by the line number. The first 'sed' inserts a # line-number line before each line; the second 'sed' does the real # work. The second script uses 'N' to pair each line-number line # with the numbered line, and appends trailing '-' during # substitution so that $LINENO is not a special case at line end. # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) sed '=' <$as_myself | sed ' N s,$,-, : loop s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, t loop s,-$,, s,^['$as_cr_digits']*\n,, ' >$as_me.lineno && chmod +x $as_me.lineno || { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} { (exit 1); exit 1; }; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensible to this). . ./$as_me.lineno # Exit status is that of the last command. exit } case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in *c*,-n*) ECHO_N= ECHO_C=' ' ECHO_T=' ' ;; *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; *) ECHO_N= ECHO_C='\c' ECHO_T= ;; esac if expr a : '\(a\)' >/dev/null 2>&1; then as_expr=expr else as_expr=false fi rm -f conf$$ conf$$.exe conf$$.file echo >conf$$.file if ln -s conf$$.file conf$$ 2>/dev/null; then # We could just check for DJGPP; but this test a) works b) is more generic # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). if test -f conf$$.exe; then # Don't use ln at all; we don't have any links as_ln_s='cp -p' else as_ln_s='ln -s' fi elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.file if mkdir -p . 2>/dev/null; then as_mkdir_p=: else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS # We need space, tab and new line, in precisely that order. as_nl=' ' IFS=" $as_nl" # CDPATH. $as_unset CDPATH exec 6>&1 # Open the log real soon, to keep \$[0] and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. Logging --version etc. is OK. exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX } >&5 cat >&5 <<_CSEOF This file was extended by moon-buggy $as_me 1.0.51, which was generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 _ACEOF # Files that config.status was made for. if test -n "$ac_config_files"; then echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS fi if test -n "$ac_config_headers"; then echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS fi if test -n "$ac_config_links"; then echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS fi if test -n "$ac_config_commands"; then echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS fi cat >>$CONFIG_STATUS <<\_ACEOF ac_cs_usage="\ \`$as_me' instantiates files from templates according to the current configuration. Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ moon-buggy config.status 1.0.51 configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir INSTALL="$INSTALL" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # If no file are specified by the user, then we need to provide default # value. By we need to know if files were specified by the user. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ac_shift=: ;; -*) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; *) # This is not an option, so the user has probably given explicit # arguments. ac_option=$1 ac_need_defaults=false;; esac case $ac_option in # Handling of the options. _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) # Conflict between --help and --header { { echo "$as_me:$LINENO: error: ambiguous option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: ambiguous option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; };; --help | --hel | -h ) echo "$ac_cs_usage"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 Try \`$0 --help' for more information." >&5 echo "$as_me: error: unrecognized option: $1 Try \`$0 --help' for more information." >&2;} { (exit 1); exit 1; }; } ;; *) ac_config_targets="$ac_config_targets $1" ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF if \$ac_cs_recheck; then echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # INIT-COMMANDS section. # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} { (exit 1); exit 1; }; };; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason to put it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 trap '{ (exit 1); exit 1; }' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } _ACEOF cat >>$CONFIG_STATUS <<_ACEOF # # CONFIG_FILES section. # # No need to generate the scripts if there are no CONFIG_FILES. # This happens for instance when ./config.status config.h if test -n "\$CONFIG_FILES"; then # Protect against being on the right side of a sed subst in config.status. sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF s,@SHELL@,$SHELL,;t t s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t s,@exec_prefix@,$exec_prefix,;t t s,@prefix@,$prefix,;t t s,@program_transform_name@,$program_transform_name,;t t s,@bindir@,$bindir,;t t s,@sbindir@,$sbindir,;t t s,@libexecdir@,$libexecdir,;t t s,@datadir@,$datadir,;t t s,@sysconfdir@,$sysconfdir,;t t s,@sharedstatedir@,$sharedstatedir,;t t s,@localstatedir@,$localstatedir,;t t s,@libdir@,$libdir,;t t s,@includedir@,$includedir,;t t s,@oldincludedir@,$oldincludedir,;t t s,@infodir@,$infodir,;t t s,@mandir@,$mandir,;t t s,@build_alias@,$build_alias,;t t s,@host_alias@,$host_alias,;t t s,@target_alias@,$target_alias,;t t s,@DEFS@,$DEFS,;t t s,@ECHO_C@,$ECHO_C,;t t s,@ECHO_N@,$ECHO_N,;t t s,@ECHO_T@,$ECHO_T,;t t s,@LIBS@,$LIBS,;t t s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t s,@INSTALL_DATA@,$INSTALL_DATA,;t t s,@CYGPATH_W@,$CYGPATH_W,;t t s,@PACKAGE@,$PACKAGE,;t t s,@VERSION@,$VERSION,;t t s,@ACLOCAL@,$ACLOCAL,;t t s,@AUTOCONF@,$AUTOCONF,;t t s,@AUTOMAKE@,$AUTOMAKE,;t t s,@AUTOHEADER@,$AUTOHEADER,;t t s,@MAKEINFO@,$MAKEINFO,;t t s,@install_sh@,$install_sh,;t t s,@STRIP@,$STRIP,;t t s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t s,@mkdir_p@,$mkdir_p,;t t s,@AWK@,$AWK,;t t s,@SET_MAKE@,$SET_MAKE,;t t s,@am__leading_dot@,$am__leading_dot,;t t s,@AMTAR@,$AMTAR,;t t s,@am__tar@,$am__tar,;t t s,@am__untar@,$am__untar,;t t s,@build@,$build,;t t s,@build_cpu@,$build_cpu,;t t s,@build_vendor@,$build_vendor,;t t s,@build_os@,$build_os,;t t s,@host@,$host,;t t s,@host_cpu@,$host_cpu,;t t s,@host_vendor@,$host_vendor,;t t s,@host_os@,$host_os,;t t s,@GAMEGROUP@,$GAMEGROUP,;t t s,@CC@,$CC,;t t s,@CFLAGS@,$CFLAGS,;t t s,@LDFLAGS@,$LDFLAGS,;t t s,@CPPFLAGS@,$CPPFLAGS,;t t s,@ac_ct_CC@,$ac_ct_CC,;t t s,@EXEEXT@,$EXEEXT,;t t s,@OBJEXT@,$OBJEXT,;t t s,@DEPDIR@,$DEPDIR,;t t s,@am__include@,$am__include,;t t s,@am__quote@,$am__quote,;t t s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t s,@CCDEPMODE@,$CCDEPMODE,;t t s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t s,@CURSES_INCLUDEDIR@,$CURSES_INCLUDEDIR,;t t s,@CPP@,$CPP,;t t s,@EGREP@,$EGREP,;t t s,@CURSES_LIBS@,$CURSES_LIBS,;t t s,@short_getopt_TRUE@,$short_getopt_TRUE,;t t s,@short_getopt_FALSE@,$short_getopt_FALSE,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_lines=48 ac_sed_frag=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_lines # Line after last line for current file. ac_more_lines=: ac_sed_cmds= while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag else sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag fi if test ! -s $tmp/subs.frag; then ac_more_lines=false else # The purpose of the label and of the branching condition is to # speed up the sed processing (if there are no `@' at all, there # is no need to browse any of the substitutions). # These are the two extra sed commands mentioned above. (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_lines` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi fi # test -n "$CONFIG_FILES" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then configure_input= else configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } if test x"$ac_file" != x-; then { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} rm -f "$ac_file" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s,@configure_input@,$configure_input,;t t s,@srcdir@,$ac_srcdir,;t t s,@abs_srcdir@,$ac_abs_srcdir,;t t s,@top_srcdir@,$ac_top_srcdir,;t t s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t s,@builddir@,$ac_builddir,;t t s,@abs_builddir@,$ac_abs_builddir,;t t s,@top_builddir@,$ac_top_builddir,;t t s,@abs_top_builddir@,$ac_abs_top_builddir,;t t s,@INSTALL@,$ac_INSTALL,;t t " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out rm -f $tmp/stdin if test x"$ac_file" != x-; then mv $tmp/out $ac_file else cat $tmp/out rm -f $tmp/out fi done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_HEADER section. # # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='[ ].*$,\1#\2' ac_dC=' ' ac_dD=',;t' # ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='$,\1#\2define\3' ac_uC=' ' ac_uD=',;t' for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin cat >$tmp/stdin ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 echo "$as_me: creating $ac_file" >&6;} # First look for the input files in the build tree, otherwise in the # src tree. ac_file_inputs=`IFS=: for f in $ac_file_in; do case $f in -) echo $tmp/stdin ;; [\\/$]*) # Absolute (can't be DOS-style, as IFS=:) test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } # Do quote $f, to prevent DOS paths from being IFS'd. echo "$f";; *) # Relative if test -f "$f"; then # Build tree echo "$f" elif test -f "$srcdir/$f"; then # Source tree echo "$srcdir/$f" else # /dev/null tree { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } fi;; esac done` || { (exit 1); exit 1; } # Remove the trailing spaces. sed 's/[ ]*$//' $ac_file_inputs >$tmp/in _ACEOF # Transform confdefs.h into two sed scripts, `conftest.defines' and # `conftest.undefs', that substitutes the proper values into # config.h.in to produce config.h. The first handles `#define' # templates, and the second `#undef' templates. # And first: Protect against being on the right side of a sed subst in # config.status. Protect against being in an unquoted here document # in config.status. rm -f conftest.defines conftest.undefs # Using a here document instead of a string reduces the quoting nightmare. # Putting comments in sed scripts is not portable. # # `end' is used to avoid that the second main sed command (meant for # 0-ary CPP macros) applies to n-ary macro definitions. # See the Autoconf documentation for `clear'. cat >confdef2sed.sed <<\_ACEOF s/[\\&,]/\\&/g s,[\\$`],\\&,g t clear : clear s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp t end s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp : end _ACEOF # If some macros were called several times there might be several times # the same #defines, which is useless. Nevertheless, we may not want to # sort them, since we want the *last* AC-DEFINE to be honored. uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs rm -f confdef2sed.sed # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >>conftest.undefs <<\_ACEOF s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, _ACEOF # Break up conftest.defines because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS echo ' :' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.defines >/dev/null do # Write a limited-size here document to $tmp/defines.sed. echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#define' lines. echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/defines.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail rm -f conftest.defines mv conftest.tail conftest.defines done rm -f conftest.defines echo ' fi # grep' >>$CONFIG_STATUS echo >>$CONFIG_STATUS # Break up conftest.undefs because some shells have a limit on the size # of here documents, and old seds have small limits too (100 cmds). echo ' # Handle all the #undef templates' >>$CONFIG_STATUS rm -f conftest.tail while grep . conftest.undefs >/dev/null do # Write a limited-size here document to $tmp/undefs.sed. echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS # Speed up: don't consider the non `#undef' echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS # Work around the forget-to-reset-the-flag bug. echo 't clr' >>$CONFIG_STATUS echo ': clr' >>$CONFIG_STATUS sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS echo 'CEOF sed -f $tmp/undefs.sed $tmp/in >$tmp/out rm -f $tmp/in mv $tmp/out $tmp/in ' >>$CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail rm -f conftest.undefs mv conftest.tail conftest.undefs done rm -f conftest.undefs cat >>$CONFIG_STATUS <<\_ACEOF # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ if test x"$ac_file" = x-; then echo "/* Generated by configure. */" >$tmp/config.h else echo "/* $ac_file. Generated by configure. */" >$tmp/config.h fi cat $tmp/in >>$tmp/config.h rm -f $tmp/in if test x"$ac_file" != x-; then if diff $ac_file $tmp/config.h >/dev/null 2>&1; then { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 echo "$as_me: $ac_file is unchanged" >&6;} else ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } rm -f $ac_file mv $tmp/config.h $ac_file fi else cat $tmp/config.h rm -f $tmp/config.h fi # Compute $ac_file's index in $config_headers. _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $ac_file | $ac_file:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || $as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X$ac_file : 'X\(//\)[^/]' \| \ X$ac_file : 'X\(//\)$' \| \ X$ac_file : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X$ac_file | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'`/stamp-h$_am_stamp_count done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF # # CONFIG_COMMANDS section. # for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue ac_dest=`echo "$ac_file" | sed 's,:.*,,'` ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` ac_dir=`(dirname "$ac_dest") 2>/dev/null || $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_dest" : 'X\(//\)[^/]' \| \ X"$ac_dest" : 'X\(//\)$' \| \ X"$ac_dest" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$ac_dest" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p "$ac_dir" else as_dir="$ac_dir" as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} { (exit 1); exit 1; }; }; } ac_builddir=. if test "$ac_dir" != .; then ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` # A "../" for each directory in $ac_dir_suffix. ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` else ac_dir_suffix= ac_top_builddir= fi case $srcdir in .) # No --srcdir option. We are building in place. ac_srcdir=. if test -z "$ac_top_builddir"; then ac_top_srcdir=. else ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` fi ;; [\\/]* | ?:[\\/]* ) # Absolute path. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ;; *) # Relative path. ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac # Do not use `cd foo && pwd` to compute absolute paths, because # the directories may not exist. case `pwd` in .) ac_abs_builddir="$ac_dir";; *) case "$ac_dir" in .) ac_abs_builddir=`pwd`;; [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; *) ac_abs_builddir=`pwd`/"$ac_dir";; esac;; esac case $ac_abs_builddir in .) ac_abs_top_builddir=${ac_top_builddir}.;; *) case ${ac_top_builddir}. in .) ac_abs_top_builddir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; esac;; esac case $ac_abs_builddir in .) ac_abs_srcdir=$ac_srcdir;; *) case $ac_srcdir in .) ac_abs_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; esac;; esac case $ac_abs_builddir in .) ac_abs_top_srcdir=$ac_top_srcdir;; *) case $ac_top_srcdir in .) ac_abs_top_srcdir=$ac_abs_builddir;; [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; esac;; esac { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 echo "$as_me: executing $ac_dest commands" >&6;} case $ac_dest in depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # So let's grep whole file. if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then dirpart=`(dirname "$mf") 2>/dev/null || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`(dirname "$file") 2>/dev/null || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` { if $as_mkdir_p; then mkdir -p $dirpart/$fdir else as_dir=$dirpart/$fdir as_dirs= while test ! -d "$as_dir"; do as_dirs="$as_dir $as_dirs" as_dir=`(dirname "$as_dir") 2>/dev/null || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| \ . : '\(.\)' 2>/dev/null || echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` done test ! -n "$as_dirs" || mkdir $as_dirs fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} { (exit 1); exit 1; }; }; } # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done ;; esac done _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF { (exit 0); exit 0; } _ACEOF chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || { (exit 1); exit 1; } fi moon-buggy-1.0.51/AUTHORS0000644000175000017500000000003607770710502011656 00000000000000Jochen Voss moon-buggy-1.0.51/COPYING0000644000175000017500000004312210404717653011646 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. moon-buggy-1.0.51/ChangeLog0000644000175000017500000016363210407331107012363 00000000000000------------------------------------------------------------------------ r6825 | voss | 2006-03-19 19:18:39 +0000 (Sun, 19 Mar 2006) | 5 lines * highscore.c, realname.c: fix highscore file corruption bug (thanks, Arnd Behring) * update the NEWS file * update the copyright dates ------------------------------------------------------------------------ r6660 | voss | 2006-01-15 10:57:38 +0000 (Sun, 15 Jan 2006) | 3 lines Increase the version string to "1.0.51". Minor MacOSX compatibility fix. ------------------------------------------------------------------------ r6588 | voss | 2005-11-13 13:35:07 +0000 (Sun, 13 Nov 2005) | 1 line fix svn repository path ------------------------------------------------------------------------ r6587 | voss | 2005-11-13 13:34:46 +0000 (Sun, 13 Nov 2005) | 1 line fix my email address ------------------------------------------------------------------------ r6586 | voss | 2005-11-13 13:34:29 +0000 (Sun, 13 Nov 2005) | 1 line cosmetical fixes, update copyright date ------------------------------------------------------------------------ r5984 | voss | 2004-12-27 15:58:57 +0000 (Mon, 27 Dec 2004) | 14 lines * manpage.in: - update the data string * ChangeLog: - add revisions up to 5983 * README: - remove the unstable-version-warning - fix the example configure call * buggy.c, main.c: - fix the copyright date * ANNOUNCE: - updates for version 1.0 * checklist: - updates for use with subversion ------------------------------------------------------------------------ r5983 | voss | 2004-12-27 15:34:32 +0000 (Mon, 27 Dec 2004) | 13 lines * configure.ac: - call AM_INIT_AUTOMAKE without arguments * merge.sed: - remove obsolete file * NEWS: - updates for version 1.0 * manpage.in: - minor UTF-8 bug fix * TODO: - remove some items * Makefile.am: - moon-buggy.6: do not substitute MBNAME any more ------------------------------------------------------------------------ r5982 | voss | 2004-12-27 15:13:05 +0000 (Mon, 27 Dec 2004) | 15 lines * moon-buggy.texi, instcmds: - fix my email address * configure.ac: - increase the version string to "1.0" - fix my email address * download.html, maint.in.in: - remove obsolete files * ChangeLog: - add entries after 2004-02-18 - fix my email addresses * ANNOUNCE: - fix the download location * moon-buggy.lsm: - updates ------------------------------------------------------------------------ r5731 | voss | 2004-07-11 20:33:59 +0100 (Sun, 11 Jul 2004) | 1 line * move moon-buggy into the new project structure ------------------------------------------------------------------------ r5631 | voss | 2004-06-01 22:22:28 +0100 (Tue, 01 Jun 2004) | 15 lines * README, AUTHORS, main.c: - fix my email address * manpage.in: - properly quote all hyphens and apostrophes - fix my email address - add an comment with local variables for emacs * vclock.c: - doc fix * TODO: - new item * acinclude.m4: - properly quote the AC_DEFUN for JV_CHECK_CURSES * checklist: - new entry ------------------------------------------------------------------------ r4869 | voss | 2003-04-14 14:21:45 +0100 (Mon, 14 Apr 2003) | 1 line add jv:section tags for the new make-links.sh script ------------------------------------------------------------------------ r4836 | voss | 2003-04-13 17:56:07 +0100 (Sun, 13 Apr 2003) | 1 line fix the svn:ignoe property ------------------------------------------------------------------------ r4835 | voss | 2003-04-13 17:50:02 +0100 (Sun, 13 Apr 2003) | 3 lines Transition the project from CVS to Subversion. Incorporate the changes donated by Piotr Grzybowski. ------------------------------------------------------------------------ r4834 | voss | 2003-04-13 17:43:32 +0100 (Sun, 13 Apr 2003) | 1 line continue CVS -> subversion transition ------------------------------------------------------------------------ r4833 | voss | 2003-04-13 17:42:06 +0100 (Sun, 13 Apr 2003) | 2 lines continue the CVS -> Subversion transition ------------------------------------------------------------------------ r4832 | voss | 2003-04-13 17:38:47 +0100 (Sun, 13 Apr 2003) | 1 line continue CVS -> subversion transition ------------------------------------------------------------------------ r4787 | voss | 2003-03-19 20:35:15 +0000 (Wed, 19 Mar 2003) | 2 lines Mention the new animations and current automake version. ------------------------------------------------------------------------ 2003-02-18 Jochen Voss * ChangeLog: Add 2002-07-13 to 2003-02-18 * moon-buggy.texi: Minor fix. * configure.ac: Increase the version string to "0.5.54". Fix the --with-setgid error message. * checklist: minor fixes. * TODO: Add new items. * README: Fix the single quote characters. 2002-07-13 Jochen Voss * main.c: Rename old 'RND_SHORT_OPTIONS' to new 'MB_SHORT_OPTIONS'. 2001-08-26 Jochen Voss * queue.c: Minor fixes. * configure.ac: Fix the AC_DEFINE calls. * ChangeLog: add 2000-11-13 to 2001-08-26 * Makefile.am, highscore.c, signal.c: update the copyright date * NEWS: mention autoconf 2.50 * checklist: Do not mention the "debian/" directory any more. * TODO: One item done. * acinclude.m4, configure.ac: Move the documentation from the obsolete file "acconfig.h" into the corresponing AC_DEFINE calls. * acconfig.h: acconfig.h is superseeded by the new AC_DEFINE syntax * signal.c (winch_handler): make the window resizing work again * terminal.c: white space fix 2001-05-24 Jochen Voss * configure.ac, configure.in: moved configure.in to configure.ac * Makefile.am (moon-buggy.6): fix the dependencies * acinclude.m4, configure.in: Updates for autoconf version 2.50. * TODO: updates * highscore.c: minor fixes. * main.c (main): minor improvement * manpage.in, moon-buggy.texi: Fix a typo. 2000-11-19 Jochen Voss * configure.in: Changed the version string to "0.5.53". * meteor.c: doc fix. * meteor.c: Removed some debugging output. 2000-11-16 Jochen Voss * moon-buggy.h: Add a prototype for the new function `scroll_meteors' from "meteor.c". Change the calling syntax of `car_meteor_hit' and `place_meteor'. * ground.c (scroll_handler): wait for the wheel to fly. * game.c: minor fixes * level.c: Use the new calling syntax for `place_meteor'. * meteor.c: Removed the obsolete function `meteor_handler'. New function `score_meteors'. * buggy.c: New code to show a flying wheel. Doc fixes. 2000-11-13 Jochen Voss * game.c: Renamed old `pause_mode' to new `crash_mode'. (leave_crash_mode): doc fix * ground.c, moon-buggy.h: Renamed old `pause_mode' to new `crash_mode'. * Makefile.am: Renamed old "mesg.c" to new "terminal.c". * configure.in: Check for the header file . * main.c: Renamed the function `mesg_off' to `term_prepare' and `mesg_restore' to `term_restore'. * terminal.c: Renamed the function `mesg_off' to `term_prepare' and `mesg_restore' to `term_restore'. Add code, to disable START and STOP characters. * moon-buggy.h: Renamed old "mesg.c" to new "terminal.c". Renamed the function `mesg_off' to `term_prepare' and `mesg_restore' to `term_restore'. * mesg.c, terminal.c: moved mesg.c to terminal.c * configure.in: Changed the version string to "0.5.52". 2000-11-01 Jochen Voss * ChangeLog: Added 2000-10-28 to 2000-11-01 * manpage.in: Fixed the modification date. * ground.c (print_ground): remove debugging aid. * TODO: Two items done. * keyboard.c: Ignore case of input characters. * highscore.c: Add a reload key for the highscore list. * NEWS: Mention the "-m" option and the redraw key. * signal.c (cont_handler): call the new function `prepare_screen'. * keyboard.c (install_keys): add the redraw key * title.c, pager.c, highscore.c, game.c: call the new function `mode_complete'. * main.c (prepare_screen, clear_windows): new functions (main): new option "-m" * mode.c (mode_complete): new function (mode_keypress): handle `mbk_redraw' * moon-buggy.texi, manpage.in: Explain the "-m" option. * moon-buggy.h: Add prototypes for the new file "mesg.c". Add a prototype for `prepare_screen' from "main.c". Add a prototype for `mode_complete' from "mode.c". Add `mbk_redraw' to `enum mb_key'. * Makefile.am: Add the new file "mesg.c". * mesg.c: initial revision 2000-10-29 Jochen Voss * highscore.c (show_highscores, print_scores): fix display of scores greater then 99999. 2000-10-28 Jochen Voss * signal.c (install_signal): add a consistency check. * TODO: Reordered. One item done. 2000-10-16 Jochen Voss * checklist: new item. * configure.in: changed the version string to "0.5.51". * NEWS: new news * ChangeLog: Added 2000-04-26 to 2000-10-16 * TODO: Mention the segmentation fault for large windows. * ANNOUNCE: Changes for version 0.5.1. * Makefile.am: minor fix * README: Mention the "0.5.1" release. * checklist: minor fixes. * configure.in: Do not set _XOPEN_SOURCE for "sparc-sun-solaris2.4". * keyboard.c (install_keys): Added some uppercase letters. * moon-buggy.lsm: updates for version 0.5.1 * realname.c (get_real_user_name): ignore everything after the first ',' in the pw_gecos field. 2000-09-03 Jochen Voss * moon-buggy.xpm: Changed the image format to fit the Debian menu system's needs. 2000-06-16 Jochen Voss * TODO: updates * Makefile.am: Rename old "moon.c" to new "ground.c". * moon-buggy.h: Rename old "moon.c" to new "ground.c". Changed the calling syntax for `score_set'. Removed the declarations for the obsolete functions `mode_start', `mode_leave', and `mode_keys'. * car.img (START): minor improvements * game.c: Reflect the changes from "mode.c". Minor fixes. * ground.c: doc fix * highscore.c: Reflect the changes from "mode.c". Minor fixes. * main.c, pager.c: Reflect the changes from "mode.c". * title.c: Reflect the changes from "mode.c". (print_title): bug fix. * mode.c: Doc fixes. Cleaned up the code. Removed the obsolete function `mode_keys'. 2000-06-01 Jochen Voss * ground.c, moon.c: moved moon.c to ground.c * game.c (pause_enter): bug fix. * Makefile.am: rename old "moonman.in" to new "manpage.in". * checklist: updates * mode.c (mode_keypress): changed the calling syntax. * moon-buggy.h: changed the `mode_keypress' calling syntax. * queue.c (main_loop): use the new `mode_keypress' syntax. * title.c (print_title): minor fix 2000-05-23 Jochen Voss * moon-buggy.h: Removed obsolete declaration. 2000-05-07 Jochen Voss * manpage.in, moonman.in: moved moonman.in to manpage.in * test-score-modes: initial revision * signal.c, queue.c: Merged the changes from the 0.5.1 release. * maintman.in: removed the maint-buggy script * highscore.c: Merged the changes from the 0.5.1 release. * moonman.in: Fixed the copyright date and revision date. * ChangeLog: added 2000-05-01 to 2000-05-07 * moon-buggy.lsm: fixes for version 0.5.1 * configure.in: Change the version string to "0.5.1". * ANNOUNCE: Announce version 0.5.1 * maintman.in: Fixed the copyright date. 2000-05-06 Jochen Voss * highscore.c (update_score_file): bug fixes 2000-05-05 Jochen Voss * queue.c (clock_freeze): minor fix * signal.c (winch_handler): minor fix * highscore.c (update_score_file): bug fix, cleaned up 2000-05-01 Jochen Voss * moonman.in: Fixed the copyright date and revision date. * main.c: Fixed the copyright date. * configure.in: Changed the version string to "0.5.0.90". 2000-04-26 Jochen Voss * autogen.sh, checklist, .cvsignore, Makefile.am, moon-buggy.texi, moonman.in: removed the maint-buggy script * main.c: Fixed the copyright notice. * README: Added the warning about unstable versions. * configure.in: Changed the version string to "0.5.50". * merge.sed: removed the maint-buggy script * instcmds: moved /home/voss/src/games/moon-buggy/instcmds to /home/voss/script/ * maint.in.in, maintman.in: removed the maint-buggy script 2000-04-24 Jochen Voss * ChangeLog: added 2000-04-24 * moon-buggy.lsm: fixes for version 0.5 * configure.in: Changed the version string to "0.5". * checklist: Added note about copyright dates. * TODO: Added new items * README: Minor fixes. Removed the "experimental version" warning. * moon-buggy.texi: Minor fixes. * main.c (allocate_windows): call `initscr' and `hide_cursor'. * signal.c (winch_handler): reflect changes in `allocate_windows'. 2000-04-16 Jochen Voss * ChangeLog: added 2000-04-13 to 2000-04-16 * README: Minor fix. * TODO: Added two new items. * moon-buggy.texi: Explain more keys and add a reference to the download page. * moonman.in: Explain more keys. 2000-04-15 Jochen Voss * configure.in: Changed the version string to "0.4.92". * highscore.c (fix_gap): new function (resize_highscore, key_handler): bug fixes * moon-buggy.h: Changed the declarations for `clock_thaw' and `handle_signals'. * signal.c (handle_signal): added a return value. * queue.c (my_select): bug fix. (wait_until): calling syntax changed. (clock_freeze): bug fix. (clock_thaw): calling syntax changed. 2000-04-13 Jochen Voss * mode.c (mode_redraw): bug fix * game.c (pause_resize): new function 2000-04-12 Jochen Voss * ChangeLog: added 2000-03-20 to 2000-04-12 * configure.in: Change the version string to "0.4.91". * keyboard.c (add_key): check for NCURSES_VERSION_MAJOR * mode.c (mode_redraw): bug fixes 2000-04-09 Jochen Voss * ANNOUNCE: Updated the announcement for version 0.5. * keyboard.c (choose_keys): new function (describe_keys): bug fixes and improvements. * pager.c: minor fixes * NEWS: Explain new features for version 0.5 2000-04-08 Jochen Voss * moon-buggy.h, queue.c: removed the obsolete function `quit_main_loop_h' * Makefile.am, configure.in, game.c, highscore.c, keyboard.c, main.c, moon-buggy.h, moon-buggy.texi, pager.c, queue.c, realname.c, signal.c, title.c: fixed the copyright notices * TODO: Several items resolved. * moon-buggy.texi: Renamed "top-ten" to "highscore". Added moon-buggy's location at sunsite to the list of references. * Makefile.am: Removed "moon-buggy.spec". * moon-buggy.h: Added declarations for the new functions `print_game_over' and `mode_leave'. * game.c (print_game_over): new function cosmetic fixes * keyboard.c: bug fixes * main.c (prepare_for_exit): cleaned up * mode.c (mode_leave): new function * realname.c (get_real_user_name): remove leading white space * highscore.c: History file removed. * highscore.c: Fixed the game over message * moon-buggy.spec: removed obsolete file * mvwaddnstr.c, wgetnstr.c: removed unused files 2000-04-01 Jochen Voss * moon-buggy.h: Added mbk_scores to enum mb_key. * TODO: Updates * highscore.c: highscore list is scrollable, now. * game.c: display fixes * keyboard.c: Add a binding for mbk_scores * main.c: Initialize the car * mode.c: Clear the moon window before entering a new mode. * pager.c: Removed unnecessary code * title.c: Add a new key to enter highscore mode. 2000-03-31 Jochen Voss * TODO: updates * Makefile.am: Added the new files "mode.c" and "cursor.c". * cursor.c, mode.c: initial revision * moon-buggy.h: Declarations for the new event driven model. Added declarations for the new files "mode.c" and "cursor.c". * buggy.c (jump, car_meteor_hit): calling syntax changed. * game.c, highscore.c: Use the new event driven model. * keyboard.c (describe_keys): new function * main.c: Use the new event driven model. (print_hint): new function Enable LC_CTYPE * moon.c, pager.c: Use the new event driven model. * queue.c: Implement the new event driven model. * realname.c: Check for failure/intterupts. Use show_cursor/hide_cursor. * signal.c, title.c: Use the new event driven model. 2000-03-29 Jochen Voss * game.c (game_mode): use `clear_hint_h'. * level.c: Use `print_hint_h'. * queue.c: Renamed old `print_message_h' and `clear_message_h' to new `print_hint_h' and `clear_hint_h'. Doc fixes. * configure.in: Check for the "locale.h" header and for the `setlocale' function. 2000-03-20 Jochen Voss * configure.in: Changed the version string to "0.4.53". Minor bug fix for bsd-support. 2000-03-19 Jochen Voss * ChangeLog: added 2000-03-14 to 2000-03-19 * configure.in: Removed some debugging output. * TODO: Doc fix * moon-buggy.h: Added a declaration for the new function `format_relative_time' from "date.c". * highscore.c: New expiration method for higscore entries. (expire_date): new function. * date.c (format_relative_time): new function 2000-03-17 Jochen Voss * README, moon-buggy.texi: Explain the new curses options for configure. * acconfig.h: BSD fixes * acinclude.m4: Added some auto-detection code again. * configure.in, highscore.c, persona.c, queue.c, realname.c, vclock.c: BSD fixes 2000-03-14 Jochen Voss * acinclude.m4: initial revision * TODO: updates * queue.c: Remove the unused loadmeter code. * moon-buggy.h: Use CURSES_HEADER. * Makefile.am: Use CURSES_INCLUDEDIR and CURSES_LIBS * configure.in: Moved all the curses checks to the new file "acinclude.m4". * configure.in: Changed the version string to "0.4.52". 2000-01-13 Jochen Voss * ChangeLog: Added 2001-01-03 and 2000-01-13 * checklist: mention README. * README: Added a warning about experimental versions. * TODO: updates * configure.in: Changed the version string to "0.4.51". * game.c (game_mode): cosmetic changes * highscore.c: Introduced a history file. 2000-01-03 Jochen Voss * date.c: initial revision * NEWS: new news * TODO: Updates * highscore.c: Cosmetic changes. Renamed old "topten" to new "highscore". * Makefile.am: remove old "getdate.c" in favour of new "date.c". * configure.in: Changed the version string to "0.4.50". * moon-buggy.h: Remove declarations for old "getdate.c" in favour of new "date.c". * checklist: Fixed the cvs commands. * getdate.c: remove old "getdate.c" in favour of new "date.c" * highscore.c: Changed the highscore list to 100 entries. Old entries are removed after 30 days, now. Changed the highscore file format. * main.c (main): move the `init_rnd' call to a better position. 1999-09-28 Jochen Voss * moon-buggy.lsm: Fixed the moon-buggy-0.4.1.tar.gz package size. * checklist: initial revision * ANNOUNCE: untabified * ChangeLog: Added 1999-09-15 and 1999-09-28 * moon-buggy.lsm: Changes for the 0.4.1 release * ANNOUNCE: Updates for the new 0.4.1 release. * configure.in: Changed the version string to "0.4.1". * TODO: new item * moon-buggy.texi: Identify the edition on the titlepage. Minor fixes. 1999-09-15 Jochen Voss * ChangeLog: Added 1999-09-14 1999-09-14 Jochen Voss * ChangeLog: Added 1999-09-14 * configure.in: Changed the version string to "0.4.0.94". Use AC_EGREP_HEADER instead of AC_HEADER_EGREP. * game.c (game_mode): make the use of A_BLINK conditional. * moon-buggy.texi: Fixed an overfull hbox. 1999-09-07 Jochen Voss * ChangeLog: Added 1999-09-07 * configure.in: Changed the version string to "0.4.0.93". * TODO: The signals-item is done. * signal.c (install_signal): new function (generic_handler, cont_handler): bug fixes 1999-09-02 Jochen Voss * download.html: updated the page to version 0.4.0.92 * ChangeLog: Added 1999-08-31 and 1999-09-02. * configure.in: Changed the version string to "0.4.0.92". * Makefile.am (dist-hook): corrected the handling of the "debian/" subdirectory. * main.c (print_message): bug fix * highscore.c: Bug fixes: handle corrupted score files 1999-08-31 Jochen Voss * download.html: initial revision 1999-08-30 Jochen Voss * ChangeLog: Added 1999-07-23 and 1999-08-30. * Makefile.am (dist-hook): minor fix * TODO: Removed one entry. * moon-buggy.texi: Explain the new "--show-scores" option. Rewrote the chapter on "shared score files". Refer to the file "SECURITY" from the bsd-games package. * Makefile.am (install-data-hook): bug fixes for setgid usage * keyboard.c: Removed the unused function `remove_key'. * moon-buggy.h: Added declarations for the new functions `create_highscores' and `show_highscores' from "highscore.c". * highscore.c (create_highscores, show_highscores): new functions. (do_open, print_scores): bug fixes. * moonman.in: Explain the new "--show-scores" option. * main.c: Added new options "--create-scores" and "--show-scores". * persona.c (is_setgid): bug fix. * configure.in: Changed the version string to "0.4.0.91". * Makefile.am: Include the "debian/" subdirectory into distribution. 1999-07-23 Jochen Voss * moonman.in: Fixed a typo. 1999-07-22 Jochen Voss * ChangeLog: Added 1999-07-02 to 1999-07-22 * NEWS: Added news for version "0.4.1". 1999-07-21 Jochen Voss * Makefile.am (install-data-hook): bug fix * Makefile.am (install-exec-hook, install-data-hook): Fixed the access premissions for setgid usage. * README: Explain setgid usage instead of setuid. * TODO: One item done (setgid usage). * moon-buggy.h: Added a declaration for the new function `is_setgid' from "persona.c". * moon-buggy.spec: Use "--with-setgid" instead of "--with-setuid". * moon-buggy.texi: Rewrote the chapter "Shared Score Files". Explain setgid usage instead of setuid. * persona.c (is_setgid): new function * highscore.c (do_open): fix the score file's access mode for setgid usage. * moon-buggy.xpm: initial revision * .cvsignore: Changed all occurrences fo "mbuggy" to "moon-buggy". * Makefile.am: Changed all occurrences fo "mbuggy" to "moon-buggy". Removed the "--with-setuid" option in favor of a "--with-setgid" option. * TODO: Added a new entry. * configure.in: Renamed the package to "moon-buggy" again. Changed the version string to "0.4.0.90". Removed the "--with-setuid" option in favor of a "--with-setgid" option. * maint.in.in, moon-buggy.lsm, moon-buggy.spec: Changed all occurrences fo "mbuggy" to "moon-buggy". * moon-buggy.h: Fixed the header file protection. * moon-buggy.texi: Renamed old "mbuggy.info" to new "moon-buggy.info". * getdate.c, random.c: Include "moon-buggy.h". * buggy.c, error.c, game.c, highscore.c, hpath.c, keyboard.c, laser.c, level.c, main.c, meteor.c, moon.c, mvwaddnstr.c, pager.c, persona.c, queue.c, realname.c, signal.c, title.c, vclock.c, wgetnstr.c, xmalloc.c, xstrdup.c: Renamed old "mbuggy.h" to new "moon-buggy.h". * mbuggy.spec, moon-buggy.spec: moved mbuggy.spec to moon-buggy.spec * moon-buggy.lsm, mbuggy.lsm: moved mbuggy.lsm to moon-buggy.lsm * moon-buggy.png, mbuggy.png: moved mbuggy.png to moon-buggy.png * moon-buggy.h, mbuggy.h: moved mbuggy.h to moon-buggy.h * moon-buggy.texi, mbuggy.texi: moved mbuggy.texi to moon-buggy.texi 1999-07-17 Jochen Voss * queue.c (drain_input): new function (main_loop): eat up all input in absence of a key handler * game.c (game_mode): sleep for half of a second after each crash * configure.in: add AC_HEADER_STDC 1999-07-08 Jochen Voss * mbuggy.spec, Makefile.am: Removed "mbuggy.gif" from the distribution. * mbuggy.gif: removed gif because of the patent problems 1999-07-02 Jochen Voss * mbuggy.lsm: Fixed the date string format as requested by the son of the lsm robot. Fixed the lsm file's length * configure.in: Changed the version string to "0.4.1". 1999-06-27 Jochen Voss * ChangeLog: Added 1999-06-27 * mbuggy.lsm: Added another keyword. * ANNOUNCE: Minor fixes. 1999-06-25 Jochen Voss * ChangeLog: Added remaining items. * mbuggy.h: Fixed the header protection comment. * autogen.sh: Added a warning message about uninst.pre.in. * main.c, maint.in.in, maintman.in, merge.sed, moonman.in, text2c.sed, title.c, AUTHORS, Makefile.am, img.sed, instcmds: do not use the german letter esszet in the files * mbuggy.lsm: initital revision * configure.in: Changed the version string to "0.4". Changed the package name to "mbuggy". * Makefile.am (install-exec-hook): minor fix. * ChangeLog: Added 1999-06-13 to 1999-06-25 * mbuggy.spec: Updated to moon-buggy version "0.4". * TODO: Cleaned up the file. * Makefile.am: Include the new file "ANNOUNCE" in the distribution. Renamed old "moon-buggy.gif" and "moon-buggy.png" to new "mbuggy.gif" and "mbuggy.png" * ANNOUNCE: initital revision * mbuggy.png, moon-buggy.png: moved moon-buggy.png to mbuggy.png * mbuggy.gif, moon-buggy.gif: moved moon-buggy.gif to mbuggy.gif * NEWS: Updated the news for version 0.4. * Makefile.am: Include "mbuggy.lsm" in the distribution. (install-data-hook): minor fixes 1999-06-17 Jochen Voss * highscore.c (load_table): prepare to handle corrupted score files. * getdate.c, keyboard.c, laser.c, level.c: doc fix * main.c: Fixed the copyright notice. * mbuggy.h: Added a declaration for the new functio `xsleep' from "queue.c". * meteor.c, mvwaddnstr.c: doc fix 1999-06-13 Jochen Voss * queue.c (xsleep): new function * random.c, signal.c: doc fix * title.c (print_title): fixed the copyright date. * vclock.c, xstrdup.c: doc fix * Makefile.am: Do not use GNU make's $< any more. * README: Reflect the changes in the manual. * TODO: Removed many items. * configure.in: Renamed old option "--with-suid" to new "--with-setuid". Check for missing user name. * darray.h: White space fixes. * keyboard.c: Fixed one error message. * mbuggy.texi: Improved the "shared score files" chapter. Renamed old option "--with-suid" to new "--with-setuid". * pager.c (lines_used, current_line): changed the type to `int'. * persona.c: Fixed some error messages. * queue.c: Include on __hp9000s800. * realname.c: Define _XOPEN_SOURCE_EXTENDED and on __hp9000s800 include . * vclock.c: Include on __hp9000s800. * wgetnstr.c (wgetnstr): fixed an error message 1999-06-06 Jochen Voss * configure.in: Changed the version string to "0.3.95". * Makefile.am (uninst.pre.in): fixed the dependencies. * TODO: Removed just another item. * ChangeLog: Added 1999-06-05 to 1999-06-06 * TODO: Another item done. * mbuggy.h: Removed the obsolete KEY_* stuff. Fixed the prototype for `uniform_rnd'. * highscore.c (struct score_entry): bug fix. (generate_date): every dwarf plays only once. * keyboard.c: Removed some unnecessary code. * random.c (uniform_rnd): changed the calling syntax * Makefile.am: Use "keyboard.c" instead of "xgetch.c". * TODO: Some items done. * game.c (life_key_handler, game_key_handler): use `read_key'. * highscore.c (highscore_mode): use `main_loop' instead of looping manually. (key_handler): new function. * main.c (main): call `install_keys'. * keyboard.c: initial revision * mbuggy.h: Added declarations for the new file "keyboard.c". * mbuggy.texi: Added a new "shared score files" chapter. * pager.c (key_handler): use `read_key'. * queue.c (clear_queue): do not use `xgetch' any more. * title.c (key_handler): use `read_key'. * wgetnstr.c: Do not use `xgetch' any more. * xgetch.c: xgetch.c is no longer needed 1999-06-05 Jochen Voss * autogen.sh: bug fix * Makefile.am (uninst.pre.in): call "instcmds" with the build directory being current. (install-data-hook): replaced the "-e" flags for "test" by "-f". * configure.in: Changed the version string to "0.3.94". * mbuggy.h: Added prototypes for the new functions `resize_meteors', `resize_laser', and `fix_game_time'. Removed the prototype for the obsolete function `block_winch'. * game.c (resize_game): call the new functions `resize_meteors' and `resize_laser'. * instcmds: bug fix: increased the version number. * laser.c (extinguish_laser): bug fix (resize_laser): new function * main.c (main): do not call `block_all'. * meteor.c (remove_meteors): bug fix (resize_meteors): new function * moon.c (resize_ground): do not block any signals anymore. * queue.c (fix_game_time): new function * signal.c: Removed the obsolete function `block_winch'. Use `fix_game_time'. (winch_handler): call `clearok' and add some extra delay. * xgetch.c (xgetch): undo the last changes. 1999-06-03 Jochen Voss * ChangeLog: Added 1999-05-27 to 1999-06-03 * .cvsignore: Added "uninst.pre.in", removed "uninst.post". * game.c (quit_game): bug fix. * highscore.c (highscore_mode): don't beep on resize. * moon.c (resize_ground): adjust `car_x'. * queue.c (my_select): renamed old `retval' to `res'. * signal.c (do_resize): new function (cont_handler): handle resizes while we are suspended * xgetch.c (xgetch): handle interrupts. * TODO: Removed two items. * game.c (quit_game): new function * main.c (prepare_for_exit): minor fix. * mbuggy.h: Added a declaration for the new function `quit_game' from "game.c". * queue.c (my_select): better interrupt handling * signal.c: Use "daraay.h" to avoid the use of `NSIG'. (handle_signals): bug fix. 1999-06-02 Jochen Voss * TODO: One item reoved, three added. * Makefile.am: Remvoed the uninst.post stuff Create "uninst.pre.in" instead of "uninst.pre". * maint.in.in: Moved the pre-uninstall-hack into Makefile.am. * autogen.sh: touch uninst.pre.in * configure.in: Change the version string to "0.3.93". Create "uninst.pre". * highscore.c: Include again. * instcmds: Changed the calling syntax. Pass all remaining arguments to "make". Small fixes. * merge.sed: Removed the post-uninstall stuff. 1999-05-31 Jochen Voss * NEWS: Added score files and levels. 1999-05-30 Jochen Voss * TODO: Added some entries. * getdate.c: initial revision * Makefile.am: Mention the new file "getdate.c". * autogen.sh: "darray.h" is a local file, again. * configure.in: Removed AC_HEADER_STDC. Do not check for `memmove'. * mbuggy.h: Changed the type of variable `stakes' to `int'. Fixed the prototype for `highscore_mode'. Added declaration for "getdate.c". Fixed the declarations for "persona.c". * error.c: Doc fix. * game.c: Changed the type of variables `score' and `stakes' to `int'. * highscore.c: Mostly rewritten. (highscore_mode): Added a second argument `level'. * main.c, moon.c: Do not use `STDC_HEADERS'. * persona.c: Renamed old variable `persona' to new `current'. Write "uid" instead of "user_id" and "gid" instead of "group id". Replaced old functions `set_game_persona' and `set_user_person' by new function `set_persona'. * xmalloc.c: Do not use `STDC_HEADERS'. * darray.h: switched to a local version again 1999-05-27 Jochen Voss * level.c (level0): made this level somewaht easier. * configure.in: Changed the version string to "0.3.92". * level.c (score_plateau): removed forgotten debugging aid 1999-05-26 Jochen Voss * ChangeLog: Added 1999-05-23 to 1999-05-26 * level.c: Give a bonus for small plateaus. (score_plateau): new function * meteor.c: Shooting on a meteor gives 10 points + laser cost. Jumping over it gives 20 points. (score_meteor): new function * laser.c: The laser costs one point per beam. * TODO: Mention some problems, which should be fixed. * main.c (prepare_for_exit): bug fix. * mbuggy.h: Added more keys to the list of possibly missing keys. * persona.c (set_user_persona, set_game_persona): Fixed serious bug in setreuid usage. Check systems calls for failure. Improved the error message texts. * realname.c (get_real_user_name): fixed a get-login-name bug. * signal.c: Removed the declaration of _POSIX_SOURCE. 1999-05-25 Jochen Voss * configure.in: Changed the version string to "0.3.91". AC_DEFINE(_XOPEN_SOURCE, 1) * acconfig.h: Added _XOPEN_SOURCE * highscore.c: Removed the _POSIX_SOURCE define. For hp9000s800 systems include . * main.c: Removed the _POSIX_SOURCE define. * mvwaddnstr.c: Include "mbuggy.h" instead of old "moon.h". * persona.c: Removed the _POSIX_SOURCE define. For hp9000s800 systems include . * queue.c: Removed the _POSIX_SOURCE define. Define _XOPEN_SOURCE_EXTENDED. * realname.c: Removed the _POSIX_SOURCE define. * vclock.c: Define _XOPEN_SOURCE_EXTENDED. * wgetnstr.c: Include "mbuggy.h" instead of old "moon.h". * xgetch.c: Removed the _POSIX_SOURCE define. 1999-05-24 Jochen Voss * TODO: Some items removed. * mbuggy.spec: Minor fixes. * mbuggy.texi, moonman.in: Minor fixes. Describe the key bindings. * Makefile.am (moon-buggy.6): added a substitution. * mbuggy.h: Added a declaration for the new variable `stakes' from "game.c". Removed the declaration of the old variable `bonus' from "game.c". Added a declaration for the new variable `bonus from "moon.c". Renamed old "control.c" to new "level.c". Removed the prototype for the obsolete function `requeue_meteors'. Added a prototype for the new function `print_message_h' from "queue.c". * level.c: Bug fixes. Use the new scoring system. Added level messages. New level 6. Improved the final level. (level_tick): changed the calling syntax. (current_level): new function. * buggy.c: Use the new scoring system. * game.c: doc fixes (stakes): new variable Removed old variable `bonus'. Removed obsolete function `score_handler'. (game_mode): when the car crashes, restart the current level from the very beginning. * main.c (remove_event): Do not use `clear_message_h' any more. * meteor.c: Remove the obsolete function `requeue_meteors'. * moon.c: New score system. (bonus): new global variable. (print_level): new function * queue.c (print_message_h): new function * random.c (uniform_rnd): check for invalid arguments. 1999-05-23 Jochen Voss * ChangeLog: Added "1999-05-11" until "1999-05-22". * TODO: Removed three (meteor related) items. * Makefile.am: Renamed old "control.c" to new "level.c". * mbuggy.h: Added prototypes for the new functions `car_meteor_hit', 'meteor_car_hit' and `requeue_meteors'. Changed the declarations for "meteor.c". * level.c: Added a new level (meteors). * buggy.c (sz_ram, sz_sit): new scenarios. (jump_handler): check for landings on a meteor. (car_meteor_hit): new function. * car.img: New images of the car being destroyed by a meteor. * game.c: Do not remove all meteors on a crash. * laser.c (beam_handler): bug fixes. * meteor.c (meteor_handler): check whether we hit the car. (requeue_meteors): new function. Renamed old `meteor_hit' to new `meteor_laser_hit'. (meteor_car_hit): new function. * moon.c (scroll_handler): After a crash run the animation one tick longer. * level.c, control.c: moved control.c to level.c * TODO: Cleaned up. Two items removed. * mbuggy.h: Removed the obsolete macro `MB_DEBUG'. Changed the declarations for "control.c". * meteor.c (place_meteor): fixed the initial horizontal position. * moon.c: Renamed old `control_tick' to new `level_tick'. * control.c: Added new levels. Replaced old `control_init' by new `level_start'. Renamed old `control_tick' to new `level_tick'. Overall improvements. * buggy.c: Removed the `MB_DEBUG' stuff. * game.c (spend_life): calling syntax changed. Do not call the obsolete function `control_init' any more. (game_mode): call `level_start'. * queue.c (main_loop): disable the load display. * main.c (print_message): use `clear_message_h' to remove the message later-on. (main): moved the "good luck" message into the level 0 part of "control.c". 1999-05-22 Jochen Voss * TODO: Replaced one item by another. * mbuggy.h: Fixed the prototype for `control_tick'. * moon.c (scroll_handler): Use the new calling syntax for `control_tick'. * control.c: Major reorganisation: implement different levels. * Makefile.am: Mention the new file "control.c". * mbuggy.h: Added declarations for the new file "control.c". * TODO: Drei neue Einträge. * buggy.c (sz_jump): slightly changed the jump length * game.c (spend_life): added a call to `control_init'. * moon.c (scroll_handler): Use the new function `control_tick' from "control.c". * control.c: initial revision * configure.in: Fixed the `AC_INIT' statement. * TODO: Removed one item. * mbuggy.h: Changed the declarations for "game.c". Added a declaration for the new function `shift_buggy' from "buggy.c". Changed the prototype of `highscore_mode'. * car.img (BROKEN): new image * buggy.c (sz_crash): new screnario (initialise_buggy): clear the old buggy from the screen. Set `car_x' and `car_y' (print_buggy): handle `car_BROKEN' in a special way (jump_handler): use `crash_detected' instead of `quit_main_loop' (crash_check): use `sz_crash' (shift_buggy): new function * game.c (crash_detected): new variable Changed the variable `score' from global scope to file local scope. Renamed old `score_bonus' into new `adjust_score'. (print_score): merged into `adjust_score'. (game_mode): do not set `car_x' any more. * highscore.c: Do not access the global variable `score' any more. (highscore_mode): changed the calling syntax. * moon.c (scroll_handler): delay the game's end after a crash by two ticks. * signal.c: Rename old `score_bonus' to new `adjust_score'. * title.c (setup_screen): do not set `car_x' any more. * realname.c, signal.c, title.c, vclock.c, xgetch.c, xmalloc.c, xstrdup.c, Makefile.am, buggy.c, error.c, game.c, highscore.c, hpath.c, laser.c, main.c, meteor.c, moon.c, pager.c, persona.c, queue.c: renamed old "moon.h" to new "mbuggy.h" * mbuggy.h: Fixed the header comment. * TODO: Spelling fix. * mbuggy.h, moon.h: moved moon.h to mbuggy.h * TODO: Removed three items, added one. * moon.h: Changed the declaration for `print_buggy'. * buggy.c (struct_scene): complete change Removed the obsolete variable `cstate'. Joined old `animate_buggy' into `print_buggy'. (print_buggy): use the table from "buggy.h". Do not check for crashs. (jump, can_jump, crash_check): fixes. * img.sed, car.img: Changed the images to height 2. * moon.c (scroll_handler): removed unnecessary calls to `print_buggy'. * queue.c: Made the loadmeter more responsive. 1999-05-19 Jochen Voss * TODO: Ein Punkt entfert. Dafür zwei neue. * Makefile.am: Mention the new file "random.c". * moon.h: Added declarations for the new file "random.c". Added a declaration for `start_scrolling' from "moon.c". * highscore.c: Use `uniform_rnd' instead of old `d_rnd'. * main.c (main): call `init_rnd'. * game.c: Moved `scroll_handler' from "game.c" into "moon.c". * moon.c: Moved `d_rnd' from "moon.c" into `uniform_rnd' in "random.c". Moved `scroll_handler' from "game.c" into "moon.c". Incorporated the old function `scroll_ground' into `scroll_handler'. (start_scrolling): new function. * random.c: initial revision 1999-05-16 Jochen Voss * TODO: CPU load done. New entry. * configure.in: Check for function `exp' in -lm. * queue.c: Measure the system's CPU load. 1999-05-15 Jochen Voss * TODO: Viele neue Einträge. * Makefile.am: Mention the new file "meteor.c". * moon.h: Define `BASELINE'. Removed the obsolete declaration of `ground3'. Added a declaration for the new function `laser_hit' from "laser.c". Added declarations for the new file "meteor.c". Added a declaration for the new function `remove_client_data' from "queue.c". * game.c (scroll_handler): Randomly place some meteors. (game_mode): remove them, if the player did not. * laser.c: Check for meteors, which are hit by the laser. (laser_hit): new function * meteor.c: initial revision 1999-05-11 Jochen Voss * moon.c: Removed any reference to `ground3'. * queue.c (remove_client_data): new function 1999-05-08 Jochen Voss * ChangeLog: Added 1999-04-25 to 1999-05-08 * TODO: Laser bug is fixed. * autogen.sh: Use "ln -sf" instead of "ln -s". * Makefile.am (moon_buggy_SOURCES): add "darray.h". * autogen.sh: initial revision * TODO: New entries. * darray.h: removed link out of the cvs controlled area * game.c (spend_life): add a call to `extinguish_laser'. * moon.h: Declare `extinguish_laser' from "laser.c". * laser.c: Changed the meaning of `b->right'. It is now right of the beam's rightmost character. Use the facilities from "darray.h". (beam_table): new static variable (extinguish_laser): new function. * persona.c: Define _XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED. * signal.c: Define _POSIX_SOURCE and _SVID_SOURCE. 1999-05-02 Jochen Voss * TODO: New entry 1999-04-25 Jochen Voss * .cvsignore: Mention the new file "buggy.h". * moon.h: Declare new variables `car_x' and `car_y' from "buggy.c". Removed declaration for obsolete variable `score_base'. Removed obsolete definition of `speed'. * buggy.c: Define new variables `car_x' and `car_y'. Moved variable `car_base' from "buggy.c" to "main.c". Removed obsolete variable `score_base'. (print_buggy): set `car_y'. * game.c (game_mode): initialise `car_x'. * laser.c (struct beam): added new `y' field. (beam_handler): clouds move with the ground, now. * main.c: Define the new global variable `car_base'. * moon.c (resize_ground): do not initialise the obsolete variable `score_base'. * title.c (setup_screen): initialise the new variable `car_x'. 1999-04-24 Jochen Voss * ChangeLog: Added 1999-03-08 to 199-04-24 * NEWS: Mention the laser device. * moon.h: Moved the definition of `speed' from "buggy.c" to "moon.h". Add a declaration for `fire_laser' from "laser.c". * moon.c: Do not output `ground3' for the moment. * game.c: Key `a' fires the laser, now. * buggy.c: Moved the definition of `speed' from "buggy.c" to "moon.h". * Makefile.am: Mention the new file "laser.c". Removed "hpath.c" from `EXTRA_DIST'. * laser.c: initial revision 1999-04-23 Jochen Voss * Makefile.am: Mention the new files "car.img", "img.sed", and "buggy.h". * TODO: updates * car.img: initial revision * main.c: Use `werase' instead of `wclear'. * img.sed: initial revision * buggy.c: Use the new queue mechnism. * game.c, pager.c, title.c: Use `werase' instead of `wclear'. Use the new queue mechnism. * moon.h: Fixed the prototypes for "queue.c". * signal.c (cont_handler): call `cbreak' and `noecho'. * queue.c: Partly rewritten. Now, we store a callback function instead of an event type. 1999-04-21 Jochen Voss * buggy.c, game.c, moon.c, moon.h: Added some preliminary support for rocks lying around. 1999-04-07 Jochen Voss * game.c: Print a message on game abortion. * queue.c: Major clean-ups. 1999-03-12 Jochen Voss * persona.c: doc fix 1999-03-10 Jochen Voss * persona.c: Bug fix. 1999-03-08 Jochen Voss * ChangeLog: added 1999-02-24 to 1999-03-08 * TODO: Neuer Punkt "messen" ersetzt alten Punkt "lag.c". * moon.h: Added a new type `game_time'. Fixed the declarations for "queue.c". Removed the declarations from the obsolete file "lag.c". * game.c: Use the new `game_time' type. Removed `load_meter'. * queue.c: Use the new `game_time' type. Remove `sleep_meter'. (clock_adjust_delay): do not ignore errors. (get_event): do not use `lagmeter' any more. * Makefile.am: Remove the obsolete file "lag.c". * lag.c: removed obsolete file * main.c: Do not allocate `queuelag' any more. * mbuggy.texi: minor fix * moon.c, pager.c: minor simplifications * lag.c, persona.c, title.c: white space fixes 1999-03-03 Jochen Voss * mbuggy.texi, maintman.in: Warn even more of maint-buggy's `--uninstall' option. 1999-03-02 Jochen Voss * TODO: Removed one item, added several. * configure.in: Changed the version string to "0.3.90". * Makefile.am: Add the new file "signal.c". * signal.c: initial revision * buggy.c, game.c: Changed the spelling of "initialise". * main.c: Moved the signal handling code to the new file "signal.c". * moon.h: Changed the spelling of "initialise". Added declarations for the new file "signal.c". * persona.c: Changed the spelling of "initialise". * queue.c (my_select): new function. * title.c: Changed the spelling of "initialise". 1999-02-24 Jochen Voss * configure.in: Changed the version string to "0.3.3". 1999-01-31 Jochen Voss * ChangeLog: added 1999-01-31 * basename.c: removed obsolete file * NEWS: new news 1999-01-30 Jochen Voss * ChangeLog: added 1999-01-21 to 1999-01-30 * Makefile.am: Do not define AWK for class to "instcmds". * configure.in: Changed the version string to "0.3.2". Remove AC_PROG_AWK and the check for `basename'. Check for the definition of `fd_set'. * acconfig.h: Add HAVE_SYS_SELECT_H and NO_FD_SET. * instcmds: Changed the version to "0.2". Use sed instead of awk. * moon.h: Added a declaration for `xstrnlen' from "xstrdup.c". Removed the `basename' declaration. * main.c: Fixed the _POSIX_SOURCE definition (main): avoid `basename' * realname.c: Fixed the _POSIX_SOURCE definition (get_real_user_name): take care of people with very long names * highscore.c: fix the _XOPEN_SOURCE definitions * game.c (game_mode): take care of people, which hold SPC too long. * pager.c: Renamed old `lines' to new `mb_lines'. * queue.c: Fixed the _POSIX_SOURCE define Try to include * xgetch.c: Fixed the _POSIX_SOURCE define * xstrdup.c (xstrnlen): changed to global scope 1999-01-21 Jochen Voss * Makefile.am (DISTCLEANFILES): final bug fix: add maint-buggy 1999-01-18 Jochen Voss * ChangeLog: added 1999-01-07 to 1999-01-18 * NEWS: new news * mbuggy.spec: Changed the version number minor fixes * README: minor fix * TODO: Differentiate between bug fixes and enhancements. * configure.in: Use `AC_REVISION'. * mbuggy.texi, xstrdup.c: minor fix 1999-01-09 Jochen Voss * TODO: Two new entries reordered * configure.in: Check for the mythical `fclean' function. * pager.c (pager_mode): minor fix * title.c (setup_screen): minor bug fix * highscore.c: Write out newly created score files, even if the player is not in. Use `fflush' before `ftruncate'. * Makefile.am (uninstall-local): remove the score file 1999-01-07 Jochen Voss * highscore.c (generate_table): generate more challenging score values. * configure.in: Changed the version string to "0.3.1". 1999-01-02 Jochen Voss * mbuggy.texi: Last bug fix! * ChangeLog: added 1998-12-28 to 1999-01-02 * configure.in: changed the version string to "0.3" * Makefile.am: Renamed old "moon-buggy-0.2-1.spec" to new "mbuggy.spec". (install-data-hook): changed the install category to `POST_INSTALL'. * mbuggy.spec, moon-buggy-0.2-1.spec: moved moon-buggy-0.2-1.spec to mbuggy.spec * maint.in.in: uninstall: bug fix * xmalloc.c: Fixed the copyright notice. * Makefile.am: Add the new file "xgetch.c". * NEWS: Added news for version 0.3 * README: Great improvements * TODO: Finished all tasks for the 0.3 release * basename.c: copyright fix * buggy.c: copyright fix (print_buggy): changed the calling syntax (crash_check): bug fix * error.c: copyright fix * game.c: copyright fix Use `MB_DEBUG'. Use `xgetch' instead of `wgetch'. (spend_life): Check for crashes during the landing. (game_mode): wait .3 seconds after each life. * highscore.c: copyright fix (highscore_mode): Use `xgetch' instead of `wgetch'. * hpath.c: copyright fix * main.c: copyright fix doc fixes * maint.in.in, maintman.in: added a copyright notice * mbuggy.texi: Spelling fixes and improved typography Copyright fix Add an image to the title page @setchapternewpage off Explain "maint-buggy" Minor improvements Greatly improved installation instructions * merge.sed: added a copyright notice * moon.c: copyright fix * moon.h: Define `MB_DEBUG'. Changed the declaration of `print_buggy'. Added a declaration for `xgetch' from the new file "xgetch.c". * moonman.in: added a copyright notice * pager.c: copyright fix (pager_mode): Use `xgetch' instead of `wgetch'. * persona.c: copyright fix * queue.c: copyright fix (clock_adjust_delay, get_event): bug fixes * realname.c: Doc fix. Copyright fix. * text2c.sed: Add an initial comment and a copyright notice. * title.c: Doc fixes. (title_mode): use `xgetch'. * title.eps: initital revision * wgetnstr.c (wgetnstr): Bug fix. Use `xgetch'. * xgetch.c: initial revision 1999-01-01 Jochen Voss * .cvsignore: Added the new files. * maint.in.in: initital revision * persona.c: suppport set-gid usage * mbscore: this is now automatically created by moon-buggy * TODO: updates * Makefile.am: Mention the new files "maintman.in", "instcmds", "merge.sed" Renamed old "manpage.in" to "moonman.in". Renamed old "mbpaths.c" to "hpath.c". Renamed old "mbicon.gif" to "monn-buggy.gif". Renamed old "mbicon.png" to "monn-buggy.png". Create "maint-buggy" and "maint-man.6". Add suid support to the installation targets. * merge.sed: initial revision * instcmds: initital revision * configure.in: Added an "--with-suid" option. Check for "awk". Check for the header file . Check for the functions `wgetnstr' and `setreuid'. Create "maint.in". * moon-buggy-0.2-1.spec: Changed the icon name. * mbuggy.texi: Explain the command line options. New chapter "Playing the game". * maintman.in: initital revision * manpage.in, moonman.in: moved manpage.in to moonman.in * manpage.in: Minor fixes. Added an "SEE ALSO" section. * moon.h (MB_SPEED): new macro Added declarations for the AC_REPLACE_FUNCS functions. * basename.c: Include and "moon.h". * error.c: Include . * game.c: Avoid using '\e'. * highscore.c: Define _XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED. Conditionalize the inclusion of . * main.c: Define _POSIX_SOURCE. Fixed the "--version" and "--help" messages. Prepare for systems without SIGWINCH. * moon.c (print_ground, scroll_ground): use `ground_width' instead of `COLS'. * pager.c: Avoid using '\e'. Fixed the usage message. * queue.c: define _POSIX_SOURCE Conditionalize the inclusion of * realname.c: define _POSIX_SOURCE avoid using dynamically sized arrays * title.c: avoid using '\e' * hpath.c, mbpaths.c: moved mbpaths.c to hpath.c * wgetnstr.c: initial revision 1998-12-31 Jochen Voss * persona.c: Handle systems without `setreuid'. 1998-12-30 Jochen Voss * mvwaddnstr.c: initial revision * Makefile.am: Do not use "-lm" Add "text2c.sed" to the distribution Do not use @CURSLIB@ Fixed the @LIBOBJS@ bug * configure.in: Use `LIBS' instead of `CURSLIB'. Check for the existence of `mvwaddnstr'. * manpage.in: Explain the "--no-title" option Explain the copyright. * moon.h: Add the `message' window. Handle curses versions which do not define the KEY_* macros. Fixed the declarations. doc fixes. * buggy.c: Use the `TICK' macro. * highscore.c: Renamed old `write_hiscore' into new `write_scores'. (highscore_mode, resize_highscore): new functions * game.c: initial revision * moon.c (resize_ground): new function Moved `print_ground' from "main.c" into "moon.c". * main.c: Moved `print_score', `print_lives', `limited', and `spend_live' from "main.c" into "game.c". Moved `print_ground' from "main.c" into "moon.c". (allocate_windows): new function Handle the `message' window (block_winch, block_all, unblock): new functions handle SIGWINCH New command line option "--no-title" * pager.c: display bug fixes * queue.c (key_ready, wait_for_key): new functions (clear_queue): eat up all keyboard events (get_event): handle empty queues and `t_return == NULL' * title.c: display bug fixes 1998-12-29 Jochen Voss * pager.c (resize_pager): new function * realname.c: Use the `message' window. * title.c (resize_title): new function * text2c.sed: Add an initial comment to the output file. * xmalloc.c: Doc fix. Fixed the error messages. (xrealloc): handle NULL pointers specially * Makefile.am: Handle the new files "title.c", "pager.c", and "copying.h". * xstrdup.c (xstrndup, xstrnlen): new functions. * text2c.sed: initital revision * title.c, pager.c: initial revision 1998-12-28 Jochen Voss * Makefile.am: Use @CURSLIB@ * configure.in: Check for curses. * main.c: Define and handle the `load_meter'. (limited): new function * moon.c: Use `char' instead of curses' `chtype'. * queue.c: Adjust `sleep_meter'. * moon.h: Changed the declarations for "lag.c" Added a declaration for `sleep_meter'. Use `char' instead of curses' `chtype'. doc fix. * lag.c: Choose better names: --- old -------- --- new -------- struct lagmeter struct circle_buffer new_lagmeter new_circle_buffer add_lag add_value get_lag get_mean 1998-12-27 Jochen Voss * ChangeLog: 19998-12-27 hinzugefügt. * .cvsignore: Added the temporary TeX files. * moon-buggy-0.2-1.spec: initital revision * TODO: Fixed * Makefile.am: Include the rpm spec file and the icon files into the distribution. Add "person.c". * moon-buggy.gif, moon-buggy.png: initital revision * README: Minor fix. * highscore.c: Properly handle the permissions from suid usage. * main.c (main): voluntarily give up the rights from the suid bit. * moon.h: Added declarations for the new file "persona.c". * persona.c: initial revision 1998-12-26 Jochen Voss * mbuggy.texi: White space fixes * ChangeLog: Added entries from 1998-12-22 to 1998-12-26. * TODO: Einige Punkte erledigt. Dafür einen neuen hinzugefügt. * README: Changed from fsstnd to fhs. * main.c: Do not print the time. Minor display fixes. * moon.h: Added a prototype for the new function `clock_adjust_delay' from "queue.c". * mbuggy.texi: Added a new chapter named "References". Minor fixes. * queue.c: Read all events from the queue relative to the new variable `time_base'. (clock_adjust_delay): new function * realname.c (get_real_user_name): turn the cursor on while doing `getstr'. 1998-12-23 Jochen Voss * Makefile.am (uninstall-local): bug fix * highscore.c: Use correct dates in the highscore list. (get_current_date): new function * configure.in: Check for the `getopt' stuff. Added AC_TYPE_SIZE_T, AC_TYPE_UID_T and AC_TYPE_SIGNAL. Check for `ftruncate'. * .cvsignore: Added the new files "moon-buggy.6" and "texinfo.tex". * Makefile.am: Removed all references to the obsolete file "mbscore.tmpl". Added the manual page. * README: Improved the spelling. Mention the `-V' option. * TODO: Updated the task list. * buggy.c (jump): bug fix. * error.c: Removed the obsolete function `warning'. * highscore.c: Doc fixes. Fixed the error messages. Old `find_table' replaced by completely new `find_tables'. (compose_filename, do_open, do_lock): new functions (generate_table): new function. * main.c: Changed the definition of `score' and `bonus'. Changed the layout of the `status' window. (print_message): new function Renamed old `main_loop' to new `spend_life'. Renamed old `do_one_game' to new `play_game'. (main_loop): new function (main): do some signal handling. Add option parsing. * manpage.in: Remove the explanation of the obsolete file "mbscore.tmpl". Added explanation of ".mbscore". * mbuggy.texi: Improved the spelling. Mention the `-V' option. * moon.c (d_rnd): changed to global scope * moon.h: Changed the type of the global variables `score' and `bonus' to `long'. Added a prototype for `d_rnd'. Removed the prototype for the obsolete function `warning'. 1998-12-22 Jochen Voss * xmalloc.c: Fixed the error messages. * xstrdup.c (xstrdup): Do not use `strdup'. * mbscore, mbscore.tmpl: moved mbscore.tmpl to mbscore * manpage.in: initial revision 1998-12-20 Jochen Voss * ChangeLog: Mention the fix in "mbuggy.texi". * mbuggy.texi: Bug fix. * ChangeLog: Added the remaining news for version 0.2 * mbuggy.texi, README: Mention my email address for bug reports. * main.c: Call `initialize_buggy'. * moon.h: Added prototype for `initialize_buggy'. * buggy.c (initialize_buggy): new function * ChangeLog: added 1998-12-19 until 1998-12-20 * configure.in: Changed the version string to "0.2". * .cvsignore: Added "mbuggy.info", "stamp-vti", and "version.texi". * TODO: Added new tasks Removed the scorefile entry * README: Explain `--sharedstatedir' * NEWS: New news * Makefile.am: Added rules for the new files. install/uninstall the score files. * mbuggy.texi: Explain `--sharedstatedir'. * moon.h: Updated the declarations. * buggy.c: Handle the per-crater-bonus. * error.c: Reflect the fact, that "moon-buggy" is always interactive. * highscore.c: Use the search path from "mbpaths.c". * main.c (do_one_game): new function (prepare_for_exit): new function great improvements * queue.c (clear_queue): new function * mbpaths.c: initial revision 1998-12-19 Jochen Voss * mbscore.tmpl, mbuggy.texi, realname.c, highscore.c: initial revision 1998-12-18 Jochen Voss * ChangeLog, README, TODO, NEWS: initial revision * main.c: Jumps give one point. * Makefile.am: Added the new files. * main.c: Completed a rudimentary version of the game. * moon.h: Added prototypes for the new files. * lag.c, moon.c, queue.c, buggy.c: initial revision 1998-12-17 Jochen Voss * .cvsignore, acconfig.h, AUTHORS, vclock.c, moon.h, main.c, xstrdup.c, xmalloc.c, error.c, basename.c, configure.in, Makefile.am: initial revision moon-buggy-1.0.51/INSTALL0000644000175000017500000002243210404717653011645 00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. 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, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. 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. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. 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 support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' 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' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS 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 machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `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. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Here is a another example: /bin/bash ./configure CONFIG_SHELL=/bin/bash Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent configuration-related scripts to be executed by `/bin/bash'. `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--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. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. moon-buggy-1.0.51/NEWS0000644000175000017500000000210010407327736011303 00000000000000 fix highscore file corruption bug (thanks, Arnd Behring) fix compilation on MacOS X version 1.0 (27 Dec 2004): new animations donated by Piotr Grzybowski new "-m" option to simulate the effect of "mesg n" added a "redraw screen" key removed the maintbuggy script use autoconf version 2.59 and automake version 1.9 bug fixes version 0.5: new highscore list improved user interface increased BSD compatibility version 0.4.1: Removed the old "--with-setuid" option in favour of "--with-setgid". Renamed the package from old "mbuggy" to "moon-buggy" again. minor bug fixes version 0.4: New score file format Introduced different levels Added a mining laser Rewritten game engine version 0.3.2: minor bug fixes increased portability version 0.3.1: minor bug fixes changed to use autoconf version 2.13, automake version 1.4 version 0.3: Numerous bug fixes and improvements. First public release. version 0.2: It works somewhat and includes support for a global score file. version 0.1: A rudimentary version of the game is finished. moon-buggy-1.0.51/THANKS0000644000175000017500000000051307636151537011531 00000000000000Christian T. Steigies handles the Debian packages of moon-buggy. Felix Kronlage handles the OpenBSD port of moon-buggy. Piotr Grzybowski donated better animations for the wheels. Georg C. F. Greve mentioned moon-buggy in his Brave GNU World column. moon-buggy-1.0.51/TODO0000644000175000017500000000412510164025171011271 00000000000000BUG FIXES: · Score file locking: recover from failure, i.e. use an alternative method. (What happens if two new score files are created at the same time?) Auf hyperion: /users/cip/sto/voss/test/bin/moon-buggy -c Fatal error: Cannot lock score file "/users/cip/sto/voss/test/com/moon-buggy/mbscore": Keine Sperren verfügbar · Fenstergrößenveränderungen beim Nameneingeben funktionieren mit ncurses-5 nicht gut. · Levels für Zwerge · Die Taste `j' sollte SPC immer und nicht nur meistens ersetzen können. · Speichere die Zeit in der Highscoreliste als GMT. Wegen `mktime' in `parse_date' ist das schwierig. IMPROVEMENTS: · Ob ich den Cursor nicht sicherheitshalber zusätzlich zum Abschalten noch irgendwo in die Ecke setzen soll? Das macht die Ausgabe ein winziges bisschen langsamer, aber auf seltsamen Terminals das Spielen angenehmer. · words of wisdom/advice · Loch in level 6. Level 9 für Klaus. · `resize_ground' wird meist nicht zum "resizen" verwendet. Umbenennen? · Read the new revision of the FHS · Neue Funktion `warning', z.B. für die "Score file corrupted" Meldung · Compile-time option für Pausentaste · Den `fd_set' Teil von "configure.in" verbessern. Zumindest sollte der cache verwendet werden. · `has_key' Ersatz für andere curses-Versionen einführen · Ist `addchstr' sinnvoll (wg. Geschwindigkeit) · Könnte man die Events einen Tick (oder 0.1 Sekunden) zu früh ausführen und nur das `doupdate' verzögern? Wie ist das dann mit Tastendrücken während der letzen zehntel Sekunde? Bringt das überhaupt eine signifikante Verbesserung? · Wäre eine asynchrone Behandlung von Tastendrücken sinnvoll? (siehe "Interrupt Input" in der glibc-Anleitung) · Prüfsumme für das Scorefile. · Use a timeout when waiting for a file lock · Portabilität bekümmern · Ufos einführen · Internationalisieren · Man sollte die Tastenbelegungen ändern können · "Andreas K. Foerster" suggests: Wie wäre es mit einem System-Beep beim Crash? Und ncurses kann doch auch Farbe... ; Local Variables: ; mode: auto-fill ; paragraph-start: "[ ]*$\\|^\f\\|·\\|[A-Z]+:$" ; paragraph-separate: "[ ]*$\\|^\f" ; End: moon-buggy-1.0.51/config.guess0000755000175000017500000012605110400073710013117 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. timestamp='2006-02-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner . # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerppc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS_NT-*:*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; x86:Interix*:[345]*) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T:Interix*:[345]*) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__sun) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: moon-buggy-1.0.51/config.sub0000755000175000017500000007713010400073710012565 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. timestamp='2006-02-23' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32r | m32rle | m68000 | m68k | m88k | maxq | mb | microblaze | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m32c) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa-* \ | ymp-* \ | z8k-*) ;; m32c-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16c) basic_machine=cr16c-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: moon-buggy-1.0.51/depcomp0000755000175000017500000003710010404717653012167 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2005-07-09.11 # Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mecanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: moon-buggy-1.0.51/install-sh0000755000175000017500000002202110404717653012612 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. 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}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: moon-buggy-1.0.51/mdate-sh0000755000175000017500000001255310404717653012247 00000000000000#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2005-06-29.22 # Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software # Foundation, Inc. # written by Ulrich Drepper , June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . case $1 in '') echo "$0: No file. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification time of FILE. Report bugs to . EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume `unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # A `ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named `Jan', or `Feb', etc. However, it's unlikely that `/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`ls -l -d /` # Find which argument is the month. month= command= until test $month do shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: moon-buggy-1.0.51/missing0000755000175000017500000002540610404717653012217 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2005-06-08.21 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case "$1" in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -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 $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -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 ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: moon-buggy-1.0.51/texinfo.tex0000644000175000017500000070156310404717653013023 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2005-07-05.19} % % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software % Foundation, Inc. % % This texinfo.tex file is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation; either version 2, or (at % your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this texinfo.tex file; see the file COPYING. If not, write % to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, % Boston, MA 02110-1301, USA. % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. (This has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org). % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \message{Basics,} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % In some macros, we cannot use the `\? notation---the left quote is % in some cases the escape char. \chardef\backChar = `\\ \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\plusChar = `\+ \chardef\questChar = `\? \chardef\semiChar = `\; \chardef\underChar = `\_ \chardef\spaceChar = `\ % \chardef\spacecat = 10 \def\spaceisspace{\catcode\spaceChar=\spacecat} {% for help with debugging. % example usage: \expandafter\show\activebackslash \catcode`\! = 0 \catcode`\\ = \active !global!def!activebackslash{\} } % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt} % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\undefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % For @cropmarks command. % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingxxx.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 2\baselineskip \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1 \unvbox#1 \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\next{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % We cannot use \next here, as it holds the macro to run; % thus we reuse \temp. \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \next. % (Similarily, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as enviroments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At runtime, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Evironment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty out of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} %% Simple single-character @ commands % @@ prints an @ % Kludge this until the fonts are right (grr). \def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. %% Define @` and @' to be the same as ` and ' %% but suppressing ligatures. %\def\`{{`}} %\def\'{{'}} % Used to generate quoted braces. \def\mylbrace {{\tt\char123}} \def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \t \let\ubaraccent = \b \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ptexi \else\ifx\temp\jmacro \j \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% \kern-.15em \TeX } % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in % Old definition--didn't work. %\parseargdef\need{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include file insert text of that file as input. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable \def\temp{\input #1 }% \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\next\centerH \else \let\next\centerV \fi \next{\hfil \ignorespaces#1\unskip \hfil}% } \def\centerH#1{% {% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }% } \def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} % @sp n outputs n lines of vertical space \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode\underChar = \active \gdef\mathunderscore{% \catcode\underChar=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a \ character. % FYI, plain.tex uses \\ as a temporary control sequence (why?), but % this is not advertised and we don't care. Texinfo does not % otherwise define @\. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus } } % @bullet and @minus need the same treatment as @math, just above. \def\bullet{$\ptexbullet$} \def\minus{$-$} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in a typewriter % font as three actual period characters. % \def\dots{% \leavevmode \hbox to 1.5em{% \hskip 0pt plus 0.25fil .\hfil.\hfil.% \hskip 0pt plus 0.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @comma{} is so commas can be inserted into text without messing up % Texinfo's parsing. % \let\comma = , % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as \undefined, % borrowed from ifpdf.sty. \ifx\pdfoutput\undefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, to % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html % (and related messages, the final outcome is that it is up to the TeX % user to double the backslashes and otherwise make the string valid, so % that's we do). % double active backslashes. % {\catcode`\@=0 \catcode`\\=\active @gdef@activebackslash{@catcode`@\=@active @otherbackslash} @gdef@activebackslashdouble{% @catcode@backChar=@active @let\=@doublebackslash} } % To handle parens, we must adopt a different approach, since parens are % not active characters. hyperref.dtx (which has the same problem as % us) handles it with this amazing macro to replace tokens. I've % tinkered with it a little for texinfo, but it's definitely from there. % % #1 is the tokens to replace. % #2 is the replacement. % #3 is the control sequence with the string. % \def\HyPsdSubst#1#2#3{% \def\HyPsdReplace##1#1##2\END{% ##1% \ifx\\##2\\% \else #2% \HyReturnAfterFi{% \HyPsdReplace##2\END }% \fi }% \xdef#3{\expandafter\HyPsdReplace#3#1\END}% } \long\def\HyReturnAfterFi#1\fi{\fi#1} % #1 is a control sequence in which to do the replacements. \def\backslashparens#1{% \xdef#1{#1}% redefine it as its expansion; the definition is simply % \lastnode when called from \setref -> \pdfmkdest. \HyPsdSubst{(}{\backslashlparen}{#1}% \HyPsdSubst{)}{\backslashrparen}{#1}% } {\catcode\exclamChar = 0 \catcode\backChar = \other !gdef!backslashlparen{\(}% !gdef!backslashrparen{\)}% } \ifpdf \input pdfcolor \pdfcatalog{/PageMode /UseOutlines}% \def\dopdfimage#1#2#3{% \def\imagewidth{#2}% \def\imageheight{#3}% % without \immediate, pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifx\empty\imagewidth\else width \imagewidth \fi \ifx\empty\imageheight\else height \imageheight \fi \ifnum\pdftexversion<13 #1.pdf% \else {#1.pdf}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \atdummies \activebackslashdouble \def\pdfdestname{#1}% \backslashparens\pdfdestname \pdfdest name{\pdfdestname} xyz% }}% % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1}% % \let\linkcolor = \Blue % was Cyan, but that seems light? \def\endlink{\Black\pdfendlink} % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \def\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else % Doubled backslashes in the name. {\activebackslashdouble \xdef\pdfoutlinedest{#3}% \backslashparens\pdfoutlinedest}% \fi % % Also double the backslashes in the display string. {\activebackslashdouble \xdef\pdfoutlinetext{#1}% \backslashparens\pdfoutlinetext}% % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % % Read toc silently, to get counts of subentries for \pdfoutline. \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % xx to do this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Right % now, I guess we'll just let the pdf reader have its way. \indexnofonts \setupdatafile \activebackslash \input \jobname.toc \endgroup } % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi \def\pdfurl#1{% \begingroup \normalturnoffactive\def\@{@}% \makevalueexpandable \leavevmode\Red \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \linkcolor #1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\linkcolor = \relax \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Default leading. \newdimen\textleading \textleading = 13.2pt % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % \def\setleading#1{% \normalbaselineskip = #1\relax \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor \def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\undefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep} \setfont\texttt\ttshape{10}{\mainmagstep} \setfont\textbf\bfshape{10}{\mainmagstep} \setfont\textit\itshape{10}{\mainmagstep} \setfont\textsl\slshape{10}{\mainmagstep} \setfont\textsf\sfshape{10}{\mainmagstep} \setfont\textsc\scshape{10}{\mainmagstep} \setfont\textttsl\ttslshape{10}{\mainmagstep} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1} \setfont\deftt\ttshape{10}{\magstep1} \setfont\defttsl\ttslshape{10}{\magstep1} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000} \setfont\smalltt\ttshape{9}{1000} \setfont\smallbf\bfshape{10}{900} \setfont\smallit\itshape{9}{1000} \setfont\smallsl\slshape{9}{1000} \setfont\smallsf\sfshape{9}{1000} \setfont\smallsc\scshape{10}{900} \setfont\smallttsl\ttslshape{10}{900} \font\smalli=cmmi9 \font\smallsy=cmsy9 % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000} \setfont\smallertt\ttshape{8}{1000} \setfont\smallerbf\bfshape{10}{800} \setfont\smallerit\itshape{8}{1000} \setfont\smallersl\slshape{8}{1000} \setfont\smallersf\sfshape{8}{1000} \setfont\smallersc\scshape{10}{800} \setfont\smallerttsl\ttslshape{10}{800} \font\smalleri=cmmi8 \font\smallersy=cmsy8 % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3} \setfont\titleit\itbshape{10}{\magstep4} \setfont\titlesl\slbshape{10}{\magstep4} \setfont\titlett\ttbshape{12}{\magstep3} \setfont\titlettsl\ttslshape{10}{\magstep4} \setfont\titlesf\sfbshape{17}{\magstep1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\authorrm{\secrm} \def\authortt{\sectt} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2} \setfont\chapit\itbshape{10}{\magstep3} \setfont\chapsl\slbshape{10}{\magstep3} \setfont\chaptt\ttbshape{12}{\magstep2} \setfont\chapttsl\ttslshape{10}{\magstep3} \setfont\chapsf\sfbshape{17}{1000} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1} \setfont\secit\itbshape{10}{\magstep2} \setfont\secsl\slbshape{10}{\magstep2} \setfont\sectt\ttbshape{12}{\magstep1} \setfont\secttsl\ttslshape{10}{\magstep2} \setfont\secsf\sfbshape{12}{\magstep1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} \setfont\ssecsl\slbshape{10}{1315} \setfont\ssectt\ttbshape{12}{\magstephalf} \setfont\ssecttsl\ttslshape{10}{1315} \setfont\ssecsf\sfbshape{12}{\magstephalf} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000} \setfont\reducedtt\ttshape{10}{1000} \setfont\reducedbf\bfshape{10}{1000} \setfont\reducedit\itshape{10}{1000} \setfont\reducedsl\slshape{10}{1000} \setfont\reducedsf\sfshape{10}{1000} \setfont\reducedsc\scshape{10}{1000} \setfont\reducedttsl\ttslshape{10}{1000} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{25pt}} \def\titlefont#1{{\titlefonts\rm #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % % I wish the USA used A4 paper. % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \textfonts \rm % Define these so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000} \setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000} \setfont\shortconttt\ttshape{12}{1000} %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic % \smartitalic{ARG} outputs arg in italics, followed by an italic correction % unless the following character is such as not to need one. \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else \ptexslash\fi\fi\fi} \def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally uses \ttsl. % @var is set to this for defun arguments. \def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitalicx} \let\i=\smartitalic \let\slanted=\smartslanted \let\var=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % @b, explicit bold. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } \def\samp#1{`\tclose{#1}'\null} \setfont\keyrm\rmshape{8}{1000} \font\keysy=cmsy9 \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% \kern-0.4pt\hrule}% \kern-.06em\raise0.4pt\hbox{\angleright}}}} % The old definition, with no lozenge: %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active % \global\def\code{\begingroup \catcode`\-=\active \catcode`\_=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\realdash \let_\realunder \fi \codex } } \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } \def\codex #1{\tclose{#1}\endgroup} % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is undesirable in % some manuals, especially if they don't have long identifiers in % general. @allowcodebreaks provides a way to control this. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg'}% \fi\fi } % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle option `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct.' \kbdinputstyle distinct \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\look}}\fi \else{\tclose{\kbdfont\look}}\fi} % For @indicateurl, @env, @command quotes seem unnecessary, so use \code. \let\indicateurl=\code \let\env=\code \let\command=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. Perhaps eventually put in % a hypertex \special here. % \def\uref#1{\douref #1,,,\finish} \def\douref#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} \def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\undefined \def\Orb{\mathhexbox20D} \fi \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } %%% Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines \let\tt=\authortt} \parseargdef\title{% \checkenv\titlepage \leftline{\titlefonts\rm #1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\authorfont \leftline{#1}}% \fi } %%% Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -\baselineskip \global\advance\vsize by -\baselineskip } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\HEADINGSoff{% \global\evenheadline={\hfil} \global\evenfootline={\hfil} \global\oddheadline={\hfil} \global\oddfootline={\hfil}} \HEADINGSoff % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\undefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi \def\itemcontents{#1}% % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. Note that \everycr resets \everytab. \def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we encounter the problem it was intended to solve again. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1', which must be on a line % by itself. \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \obeylines % \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. \def\enddoignore{\endgroup\ignorespaces} % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\realdash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \undefined % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname\donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % Need these in case \tex is in effect and \{ is a \delimiter again. % But can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. \let\{ = \mylbrace \let\} = \myrbrace % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control% words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\L \definedummyword\OE \definedummyword\O \definedummyword\aa \definedummyword\ae \definedummyword\l \definedummyword\oe \definedummyword\o \definedummyword\ss \definedummyword\exclamdown \definedummyword\questiondown \definedummyword\ordf \definedummyword\ordm % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\minus \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\result % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % % Better have this without active chars. { \catcode`\~=\other \gdef\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sc \definedummyword\t % % Commands that take arguments. \definedummyword\acronym \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w } } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % Hopefully, all control words can become @asis. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% % how to handle braces? \def\_{\normalunderscore}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\aa{aa}% \def\ae{ae}% \def\l{l}% \def\oe{oe}% \def\o{o}% \def\ss{ss}% \def\exclamdown{!}% \def\questiondown{?}% \def\ordf{a}% \def\ordm{o}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\registeredsymbol{R}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\minus{-}% \def\pounds{pounds}% \def\point{.}% \def\print{-|}% \def\result{=>}% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \ifvmode \dosubindsanitize \else \dosubindwrite \fi }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write will make \lastskip zero. The result is that sequences % like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % % ..., ready, GO: % \def\dosubindsanitize{% % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \skip0 = \lastskip \edef\lastskipmacro{\the\lastskip}% \count255 = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\skip0 glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\skip0 \fi % \dosubindwrite % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\count255>9999 \penalty\count255 \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\skip0 \fi } % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this frozes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \def\tempa{{\rm }}% \def\tempb{#1}% \edef\tempc{\tempa}% \edef\tempd{\tempb}% \ifx\tempc\tempd \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like \dotfill except takes at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % \unnumberedno is an oxymoron, of course. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines this as the name of the chapter. % page headings and footings can use it. @section does likewise. % However, they are not reliable, because we don't use marks. \def\thischapter{} \def\thissection{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achive this, remember the "biggest" unnum. sec. we are currently in: \chardef\unmlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unmlevel \chardef\unmlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unmlevel \def\headtype{U}% \else \chardef\unmlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % \message{\putwordChapter\space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % \def\appendixnum{\putwordAppendix\space \appendixletter}% \message{\appendixnum}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } \outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } \outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. \outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } \outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}% \bigskip \par\penalty 200\relax \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. %%% Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} \def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% \pchapsepmacro {% \chapfonts \rm % % Have to define \thissection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\thissection{#1}% \gdef\thischaptername{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \gdef\thischapter{#1}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \gdef\thischapter{}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% % We don't substitute the actual chapter name into \thischapter % because we don't want its macros evaluated now. And we don't % use \thissection because that changes with each section. % \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rm #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\sectionheading#1#2#3#4{% {% % Switch to the right set of fonts. \csname #2fonts\endcsname \rm % % Insert space above the heading. \csname #2headingbreak\endcsname % % Only insert the space after the number if we have a section number. \def\sectionlevel{#2}% \def\temptype{#3}% % \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\thissection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \thissection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\thissection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\thissection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chfplain. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chfplain. \donoderef{#3}% % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) \vskip-\parskip % % This is purely so the last item on the list is a known \penalty > % 10000. This is so \startdefun can avoid allowing breakpoints after % section headings. Otherwise, it would insert a valid breakpoint between: % % @section sec-whatever % @deffn def-whatever \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp } \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \jobname.toc } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \def\thischapter{}% \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % Normal (long) toc. \def\contents{% \startcontents{\putwordTOC}% \openin 1 \jobname.toc \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \jobname.toc \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, it should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @tex ... @end tex escapes into raw Tex temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain tex @ character. \envdef\tex{% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \escapechar=`\\ % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of \def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt \parindent = 0pt \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it by one command: \def\makedispenv #1#2{ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two synonyms: \def\maketwodispenvs #1#2#3{ \makedispenv{#1}{#3} \makedispenv{#2}{#3} } % @lisp: indented, narrowed, typewriter font; @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvs {lisp}{example}{% \nonfillstart \tt \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenv {display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenv{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill \gobble } \let\Eflushright = \afterenvbreak % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \envdef\quotation{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\undefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % [Knuth] pp. 380,381,391 % Disable Spanish ligatures ?` and !` of \tt font \begingroup \catcode`\`=\active\gdef`{\relax\lq} \endgroup % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \catcode`\`=\active \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % \def\starttabbox{\setbox0=\hbox\bgroup} \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen0=\wd0 % the width so far, or since the previous tab \divide\dimen0 by\tabw \multiply\dimen0 by\tabw % compute previous multiple of \tabw \advance\dimen0 by\tabw % advance to next multiple of \tabw \wd0=\dimen0 \box0 \starttabbox }% } \endgroup \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart % Easiest (and conventionally used) font for verbatim \tt \def\par{\leavevmode\egroup\box0\endgraf}% \catcode`\`=\active \tabexpand % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \defargscommonending, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % \ifnum\lastpenalty=10002 \penalty2000 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil \endgraf \nobreak\vskip -\parskip \penalty 10002 % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remainnig is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } %%% Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } %%% Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } %%% Type: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % How we'll format the type name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % (plain.tex says that \dimen1 should be used only as global.) \parshape 2 0in \dimen0 \defargsindent \dimen2 % % Put the type name to the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% return value type \ifx\temp\empty\else \tclose{\temp} \fi #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. Let's try @var for that. \let\var=\ttslanted #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } \def\badparencount{% \errmessage{Unbalanced parentheses in @def}% \global\parencount=0 } \def\badbrackcount{% \errmessage{Unbalanced square braces in @def}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\undefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{% \begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % ... and \example \spaceisspace % % Append \endinput to make sure that TeX does not see the ending newline. % % I've verified that it is necessary both for e-TeX and for ordinary TeX % --kasal, 29nov03 \scantokens{#1\endinput}% \endgroup } \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \. % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. \def\scanctxt{% \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other } \def\scanargctxt{% \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% \scanctxt \catcode`\\=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0% \else \expandafter\parsemargdef \argl;% \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname #1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.blah for each blah % in the params list, to be ##N where N is the position in that list. % That gets used by \mbodybackslash (above). % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. \def\parsemargdef#1;{\paramno=0\def\paramlist{}% \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1% \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% % This defines the macro itself. There are six cases: recursive and % nonrecursive macros of zero, one, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \fi \fi} \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg) \def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \next} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Just make them active and then expand them all to nothing. \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \thissection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\thissection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \writexrdef{pg}{\folio}% will be written later, during \shipout }% \fi } % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces \def\printedmanual{\ignorespaces #5}% \def\printedrefname{\ignorespaces #3}% \setbox1=\hbox{\printedmanual\unskip}% \setbox0=\hbox{\printedrefname\unskip}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf \leavevmode \getfilename{#4}% {\turnoffactive % See comments at \activebackslashdouble. {\activebackslashdouble \xdef\pdfxrefdest{#1}% \backslashparens\pdfxrefdest}% % \ifnum\filenamelength>0 \startlink attr{/Border [0 0 0]}% goto file{\the\filename.pdf} name{\pdfxrefdest}% \else \startlink attr{/Border [0 0 0]}% goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \linkcolor \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd0 = 0pt \refx{#1-snt}% \else \printedrefname \fi % % if the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd1 > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not % insert empty discretionaries after hyphens, which means that it will % not find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, this % is a loss. Therefore, we give the text of the node name again, so it % is as if TeX is seeing it for the first time. \ifdim \wd1 > 0pt \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via a macro so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi \fi \endlink \endgroup} % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs \message{\linenumber Undefined cross reference `#1'.}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR#1\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarily, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\undefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing this stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \nobreak\bigskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \line\bgroup\hss \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \hss \egroup \bigbreak \fi % space after the image \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \thissection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\thissection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \thissection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % and i18n. % @documentlanguage is usually given very early, just after % @setfilename. If done too late, it may not override everything % properly. Single argument is the language abbreviation. % It would be nice if we could set up a hyphenation file here. % \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file if it exists. \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \input txi-#1.tex \fi \closein 1 \endgroup } \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? In the current directory should work if nowhere else does.} % @documentencoding should change something in TeX eventually, most % likely, but for now just recognize it. \let\documentencoding = \comment % Page size parameters. % \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be so finicky about underfull hboxes, either. \hbadness = 2000 % Following George Bush, just get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{46\baselineskip}{6in}% {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {\voffset}{.25in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{51\baselineskip}{160mm} {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1 \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\$=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} \def\normalunderscore{_} \def\normalverticalbar{|} \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} \def\normaldollar{$}%$ font-lock fix % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. {\catcode`\\=\active @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} } % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % \normalbackslash outputs one backslash in fixed width font. \def\normalbackslash{{\tt\backslashcurfont}} \catcode`\\=\active % Used sometimes to turn off (effectively) the active characters % even after parsing them. @def@turnoffactive{% @let"=@normaldoublequote @let\=@realbackslash @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus @let$=@normaldollar %$ font-lock fix @unsepspaces } % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. (Thus, \ is not expandable when this is in % effect.) % @def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\{ in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These look ok in all fonts, so just make them not special. @catcode`@& = @other @catcode`@# = @other @catcode`@% = @other @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore moon-buggy-1.0.51/moon-buggy.h0000644000175000017500000001416507646332530013055 00000000000000/* moon-buggy.h - global moon-buggy header file * * Copyright 1999, 2000 Jochen Voss * * $Id: moon-buggy.h 4839 2003-04-13 16:50:02Z voss $ */ #ifndef FILE_MOON_BUGGY_H_SEEN #define FILE_MOON_BUGGY_H_SEEN /* The game's overall speed. High values indicate fast scrolling. * You may try to decrease this, if the animation flickers too much. */ #define MB_SPEED 1.0 #include /* we use `size_t' */ #include /* we use `time_t' */ #ifndef CURSES_HEADER #define CURSES_HEADER #endif #include CURSES_HEADER #define TICK(x) ((x)*0.08/(MB_SPEED)) #define BASELINE (LINES-5) /* from "main.c" */ extern const char *my_name; extern WINDOW *moon, *status, *message; extern int car_base; extern void print_message (const char *str); extern void print_hint (const char *str); extern void prepare_screen (void); extern void prepare_for_exit (void); extern void allocate_windows (void); extern void clear_windows (void); /* from "queue.c" */ typedef double game_time; typedef void (*callback_fn) (game_time, void *); extern game_time current_time (void); extern void clock_reset (void); extern void clock_thaw (void); extern void clear_queue (void); extern void add_event (game_time t, callback_fn callback, void *client_data); extern void remove_event (callback_fn callback); extern void remove_client_data (void *client_data); extern void clock_freeze (void); extern void quit_main_loop (void); extern void main_loop (void); extern void print_hint_h (game_time t, void *client_data); extern void clear_hint_h (game_time, void *); /* from "title.c" */ extern struct mode *title_mode; extern void setup_title_mode (void); /* from "pager.c" */ extern struct mode *pager_mode; extern void setup_pager_mode (void); /* from "game.c" */ extern struct mode *game_mode; extern struct mode *crash_mode; extern int crash_detected; extern int stakes; extern void adjust_score (int val); extern void print_lives (void); extern void print_game_over (int blink); extern void setup_game_mode (void); /* from "level.c" */ extern void level_start (int initial); extern void level_tick (double t); extern int current_level (void); /* from "ground.c" */ extern int *bonus; extern char *ground1, *ground2; extern void resize_ground (int clear_it); extern void print_ground (void); extern void start_scrolling (double t); /* from "buggy.c" */ extern int car_x, car_y; extern void initialise_buggy (void); extern void print_buggy (void); extern void shift_buggy (int dx); extern void jump (game_time t); extern int can_jump (void); extern int crash_check (void); extern int car_meteor_hit (int x); /* from "laser.c" */ extern void fire_laser (double t); extern void extinguish_laser (void); extern int laser_hit (int x); extern void resize_laser (void); /* from "meteor.c" */ extern void scroll_meteors (void); extern void place_meteor (void); extern void remove_meteors (void); extern int meteor_laser_hit (int x0, int x1); extern int meteor_car_hit (int x0, int x1); extern void resize_meteors (void); /* from "highscore.c" */ extern struct mode *highscore_mode; extern void create_highscores (void); extern void show_highscores (void); extern void score_set (int score, int level); extern void setup_highscore_mode (void); /* from "realname.c" */ extern int get_real_user_name (char *buffer, size_t size); /* from "vclock.c" */ extern double vclock (void); /* from "date.c" */ #define MAX_DATE_CHARS 32 extern time_t parse_date (const char *str); extern time_t convert_old_date (int day, int month, int year); extern void format_date (char *buffer, time_t date); extern void format_display_date (char *buffer, time_t date); extern void format_relative_time (char *buffer, double dt); /* from "persona.c" */ enum persona { pers_GAME, pers_USER }; extern void initialise_persona (void); extern int is_setgid (void); extern void set_persona (enum persona pers); /* from "signal.c" */ extern void block_all (void); extern void unblock (void); extern void initialise_signals (void); extern int handle_signals (void); /* from "keyboard.c" */ enum mb_key { mbk_copyright = 1, mbk_down = 2, mbk_end = 4, mbk_fire = 8, mbk_first = 16, mbk_jump = 32, mbk_last = 64, mbk_pagedown = 128, mbk_pageup = 256, mbk_start = 512, mbk_up = 1024, mbk_warranty = 2048, mbk_scores = 4096, mbk_redraw = 8192 /* specially handled in `mode_keypress' */ }; struct binding { int meanings; const char *desc; int res; }; extern void install_keys (void); extern int read_key (void); extern void describe_keys (int n, const struct binding *b); /* from "mode.c" */ struct mode { void (*enter) (int seed); void (*leave) (void); void (*redraw) (void); void (*signal) (int signum); struct { struct binding *data; int used, slots; } keys; void (*keypress) (game_time, int); }; extern struct mode *new_mode (void); extern void mode_add_key (struct mode *m, int meanings, const char *desc, int res); extern void mode_complete (struct mode *m); extern void mode_change (const struct mode *m, int seed); extern void mode_update (void); extern void mode_redraw (void); extern int mode_keypress (game_time t, int meaning); extern void mode_signal (int signum); /* from "terminal.c" */ extern void term_prepare (int mesg_n_flag); extern void term_restore (void); /* from "cursor.c" */ extern void hide_cursor (void); extern void show_cursor (void); /* from "random.c" */ extern void init_rnd (void); extern int uniform_rnd (unsigned limit); /* from "error.c" */ #ifdef __GNUC__ extern void fatal (const char *format, ...) __attribute__ ((noreturn)) __attribute__ ((format (printf, 1, 2))); #else extern void fatal (const char *format, ...); #endif /* from "xmalloc.c" */ extern void *xmalloc (size_t size); extern void *xrealloc (void *ptr, size_t size); /* from "xstrdup.c" */ extern size_t xstrnlen (const char *str, size_t size); extern char *xstrdup (const char *str); extern char *xstrndup (const char *str, size_t size); /* from "hpath.c" */ extern const char *score_dir; #endif /* FILE_MOON_BUGGY_H_SEEN */ moon-buggy-1.0.51/main.c0000644000175000017500000001332510407327736011707 00000000000000/* main.c - moon-buggy main file * * Copyright 1999, 2000, 2004, 2006 Jochen Voss */ static const char rcsid[] = "$Id: main.c 6825 2006-03-19 19:18:39Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include #ifdef HAVE_GETOPT_H #include #else #include extern char *optarg; extern int optind; #endif #ifdef HAVE_LOCALE_H #include #endif #include "moon-buggy.h" const char *my_name; static int curses_initialised; static int mesg_flag; WINDOW *moon, *status, *message; int car_base; void print_message (const char *str) /* Display STR in the message line. */ { if (curses_initialised) { werase (message); waddstr (message, str); wnoutrefresh (message); } else { fprintf (stderr, "%s\n", str); } } void print_hint (const char *str) /* Display STR in the message line. */ { if (curses_initialised) { int len = strlen (str); int cols = COLS; int pos; if (car_base+3+len/2 >= cols) { pos = cols - len - 1; } else { pos = car_base+3-len/2; } wmove (moon, LINES-11, 0); wclrtoeol (moon); mvwaddstr (moon, LINES-11, pos, str); wnoutrefresh (moon); } } void prepare_screen (void) /* Prepare the screen for the program. * Calls to `prepare_screen' and `prepare_for_exit' must be paired. */ { cbreak (); noecho (); hide_cursor (); term_prepare (mesg_flag); } void prepare_for_exit (void) /* Prepare the screen to exit from the program. * Calls to `prepare_screen' and `prepare_for_exit' must be paired. */ { if (! curses_initialised) return; term_restore (); show_cursor (); wrefresh (moon); wrefresh (message); werase (status); wmove (status, 0, 0); wrefresh (status); endwin (); fflush (NULL); } void allocate_windows (void) /* Create the curses windows. */ { initscr (); moon = newwin (LINES-2, 0, 0, 0); keypad (moon, TRUE); intrflush (moon, FALSE); status = newwin (1, 0, LINES-1, 0); keypad (status, TRUE); intrflush (status, FALSE); message = newwin (1, 0, LINES-2, 0); keypad (message, TRUE); intrflush (message, FALSE); } void clear_windows (void) { wclear (moon); wnoutrefresh (moon); wclear (status); wnoutrefresh (status); wclear (message); wnoutrefresh (message); } /************************************************************ * main procedure */ int main (int argc, char **argv) { #ifdef HAVE_GETOPT_LONG struct option long_options [] = { { "create-scores", no_argument, 0, 'c' }, { "help", no_argument, 0, 'h' }, { "mesg", no_argument, 0, 'm' }, { "no-title", no_argument, 0, 'n' }, { "show-scores", no_argument, 0, 's' }, { "version", no_argument, 0, 'V' }, { NULL, 0, NULL, 0} }; #endif #define MB_SHORT_OPTIONS "chmnsV" int help_flag = 0; int highscore_flag = 0; int title_flag = 1; int version_flag = 0; int error_flag = 0; initialise_persona (); set_persona (pers_USER); #ifdef HAVE_SETLOCALE setlocale (LC_CTYPE, ""); #endif /* `basename' seems to be non-standard. So we avoid it. */ my_name = strrchr (argv[0], '/'); my_name = xstrdup (my_name ? my_name+1 : argv[0]); do { int c; #ifdef HAVE_GETOPT_LONG int ind; c = getopt_long (argc, argv, MB_SHORT_OPTIONS, long_options, &ind); #else c = getopt (argc, argv, MB_SHORT_OPTIONS); #endif if (c == -1) break; switch (c) { case 'c': highscore_flag = 2; break; case 'h': help_flag = 1; break; case 'm': mesg_flag = 1; break; case 'n': title_flag = 0; break; case 's': highscore_flag = 1; break; case 'V': version_flag = 1; break; default: error_flag = 1; } } while (! error_flag); if (argc != optind) { fputs ("too many arguments\n", stderr); error_flag = 1; } if (version_flag) { puts ("Moon-Buggy " VERSION); puts ("Copyright 1998-2006 Jochen Voss"); puts ("\ Moon-Buggy comes with NO WARRANTY, to the extent permitted by law."); puts ("\ You may redistribute copies of Moon-Buggy under the terms of the GNU\n\ General Public License. For more information about these matters, see\n\ the file named COPYING or press `c' at Moon-Buggy's title screen."); if (! error_flag) exit (0); } if (error_flag || help_flag) { #ifdef HAVE_GETOPT_LONG #define OPT(short,long) " " short ", " long " " #else #define OPT(short,long) " " short " " #endif FILE *out = error_flag ? stderr : stdout; fprintf (out, "usage: %s [options]\n\n", my_name); fputs ("The options are\n", out); /* --create-scores: create the highscore file (internal use only) */ fputs (OPT("-h","--help ") "show this message and exit\n", out); fputs (OPT("-m","--mesg ") "imply the effect of \"mesg n\"\n", out); fputs (OPT("-n","--no-title ") "omit the title screen\n", out); fputs (OPT("-s","--show-scores ") "only show the highscore list\n", out); fputs (OPT("-V","--version ") "show the version number and exit\n\n", out); fputs ("Please report bugs to .\n", out); exit (error_flag); } init_rnd (); if (highscore_flag) { if (highscore_flag == 1) { show_highscores (); } else { create_highscores (); } exit (0); } initialise_signals (); allocate_windows (); curses_initialised = 1; prepare_screen (); install_keys (); setup_title_mode (); setup_pager_mode (); setup_game_mode (); setup_highscore_mode (); clear_windows (); resize_ground (1); initialise_buggy (); if (title_flag) { mode_change (title_mode, 0); } else { mode_change (game_mode, 0); } main_loop (); mode_change (NULL, 0); prepare_for_exit (); return 0; } moon-buggy-1.0.51/mode.c0000644000175000017500000000524107646332466011714 00000000000000/* mode.c - handle the program's modes in a consistent way * * Copyright (C) 2000 Jochen Voss. */ static const char rcsid[] = "$Id: mode.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include "moon-buggy.h" #include "darray.h" static const struct mode *current; static int mode_entered, mode_seed; struct mode * new_mode (void) /* Allocate a new mode struct. */ { struct mode *res = xmalloc (sizeof (struct mode)); res->enter = NULL; res->leave = NULL; res->redraw = NULL; DA_INIT (res->keys, struct binding); res->keypress = NULL; return res; } void mode_add_key (struct mode *m, int meanings, const char *desc, int res) /* Add a key binding to mode M. * MEANINGS should a combination (via |) of `mbk_key' values, DESC is * the label to display near the bottom of the screen. RES is passed * through to `keypress' handler. */ { struct binding *keys; DA_ADD_EMPTY (m->keys, struct binding, keys); keys->meanings = meanings; keys->desc = desc; keys->res = res; } void mode_complete (struct mode *m) /* This must be called at the very end of each mode's initialisation. */ { mode_add_key (m, mbk_redraw, "redraw", 0); } void mode_change (const struct mode *m, int seed) /* Change into new mode M. Pass SEED to the `enter' handler. */ { if (mode_entered && current->leave) current->leave (); current = m; mode_entered = 0; mode_seed = seed; } static void mode_enter (void) { werase (moon); wnoutrefresh (moon); if (! current) return; if (current->enter) current->enter (mode_seed); mode_entered = 1; } void mode_update (void) /* Flush queued mode updates. */ { if (! mode_entered) { clear_queue (); mode_enter (); mode_redraw (); } doupdate (); } void mode_redraw (void) /* Make the current mode redraw the screen but leave the status message intact. * This is also called after the screen is resized. */ { if (! mode_entered) return; describe_keys (current->keys.used, current->keys.data); if (current->redraw) current->redraw (); doupdate (); } int mode_keypress (game_time t, int meaning) /* Feed a keypress with meaning MEANING to the current mode. * Return 1 if the keypress could be processed, and 0 else. */ { int i; if (meaning == mbk_redraw) { clear_windows (); mode_redraw (); return 1; } for (i=0; ikeys.used; ++i) { if (current->keys.data[i].meanings & meaning) { current->keypress (t, current->keys.data[i].res); return 1; } } return 0; } void mode_signal (int signum) /* Feed signal SIGNUM to the current mode. */ { if (current->signal) current->signal (signum); } moon-buggy-1.0.51/title.c0000644000175000017500000000504710335640345012100 00000000000000/* title.c - print the title page * * Copyright 1999, 2000, 2004 Jochen Voss */ static const char rcsid[] = "$Id: title.c 6586 2005-11-13 13:34:29Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include "moon-buggy.h" struct mode *title_mode; const char *title [] = { "MM MM OOOOO OOOOO NN N", "M M M M O O O O N N N", "M M M M O O O O N N N", "M M M O O O O N N N", "M M O O O O N N N", "M M OOOOO OOOOO N NN", "", " BBBBBB U U GGGGG GGGGG Y Y", " B B U U G G G G Y Y", " BBBBBB U U G G Y Y", " B B U U G GGG G GGG Y", " B B U U G G G G Y", " BBBBBB UUUUU GGGGG GGGGG YY" }; static void print_title (void) /* Print the title screen. */ { int title_lines = sizeof (title) / sizeof (const char *); mvwaddstr (moon, 0, 0, " Moon-Buggy version " VERSION ", Copyright 2004 Jochen Voss \n"); waddstr (moon, " Moon-Buggy comes with ABSOLUTELY NO WARRANTY;" " for details type 'w'.\n"); waddstr (moon, " This is free software, and you are welcome to redistribute it\n\ under certain conditions; type 'c' for details.\n"); if (5 + title_lines + 5 <= LINES) { int top = (LINES-title_lines)/3.0 + 0.5; int i; if (top < 5) top = 5; for (i=0; i LINES) print_buggy (); wnoutrefresh (moon); } static void title_redraw (void) { resize_ground (1); print_ground (); print_title (); } static void key_handler (game_time t, int val) { switch (val) { case 1: mode_change (game_mode, 0); break; case 2: quit_main_loop (); break; case 3: mode_change (pager_mode, 0); break; case 4: mode_change (pager_mode, 1); break; case 5: mode_change (highscore_mode, 0); break; } } void setup_title_mode (void) { title_mode = new_mode (); title_mode->redraw = title_redraw; title_mode->keypress = key_handler; mode_add_key (title_mode, mbk_start, "start game", 1); mode_add_key (title_mode, mbk_end, "quit", 2); mode_add_key (title_mode, mbk_copyright, "show copyright", 3); mode_add_key (title_mode, mbk_warranty, "show warranty", 4); mode_add_key (title_mode, mbk_scores, "show scores", 5); mode_complete (title_mode); } moon-buggy-1.0.51/pager.c0000644000175000017500000000547507646332466012077 00000000000000/* pager.c - display very long strings (with scrolling) * * Copyright 1999, 2000 Jochen Voss */ static const char rcsid[] = "$Id: pager.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include "moon-buggy.h" #include "copying.h" struct mode *pager_mode; static int lines_used, current_line; static int mb_lines = 25; static void print_page (unsigned current_line) { int i; for (i=0; i 0) --current_line; print_page (current_line); break; case 3: if (current_line < lines_used-1) ++current_line; print_page (current_line); break; case 4: if (current_line > mb_lines-3) { current_line -= mb_lines-3; } else { current_line = 0; } print_page (current_line); break; case 5: current_line += mb_lines-3; if (current_line >= lines_used) { current_line = lines_used-1; if (current_line < 0) current_line = 0; } print_page (current_line); break; case 6: current_line = 0; print_page (current_line); break; case 7: current_line = lines_used-1; if (current_line < 0) current_line = 0; print_page (current_line); break; } } static void pager_enter (int what) { int i; lines_used = sizeof (copying_lines) / sizeof (const char *); switch (what) { case 0: current_line = 0; break; case 1: current_line = 0; for (i=0; ienter = pager_enter; pager_mode->leave = pager_leave; pager_mode->redraw = pager_redraw; pager_mode->keypress = key_handler; mode_add_key (pager_mode, mbk_end, "quit", 1); mode_add_key (pager_mode, mbk_up, "up", 2); mode_add_key (pager_mode, mbk_down, "down", 3); mode_add_key (pager_mode, mbk_pageup, "pg up", 4); mode_add_key (pager_mode, mbk_pagedown, "pg down", 5); mode_add_key (pager_mode, mbk_first, "home", 6); mode_add_key (pager_mode, mbk_last, "end", 7); mode_complete (pager_mode); } moon-buggy-1.0.51/copying.h0000644000175000017500000004663610407330036012436 00000000000000/* copying.h - moon-buggy's copyright notice * Automatically created from file "COPYING". * DO NOT EDIT !!! */ static const char *copying_lines [] = { " GNU GENERAL PUBLIC LICENSE", " Version 2, June 1991", "", " Copyright (C) 1989, 1991 Free Software Foundation, Inc.", " 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA", " Everyone is permitted to copy and distribute verbatim copies", " of this license document, but changing it is not allowed.", "", " Preamble", "", " The licenses for most software are designed to take away your", "freedom to share and change it. By contrast, the GNU General Public", "License is intended to guarantee your freedom to share and change free", "software--to make sure the software is free for all its users. This", "General Public License applies to most of the Free Software", "Foundation's software and to any other program whose authors commit to", "using it. (Some other Free Software Foundation software is covered by", "the GNU Library General Public License instead.) You can apply it to", "your programs, too.", "", " When we speak of free software, we are referring to freedom, not", "price. Our General Public Licenses are designed to make sure that you", "have the freedom to distribute copies of free software (and charge for", "this service if you wish), that you receive source code or can get it", "if you want it, that you can change the software or use pieces of it", "in new free programs; and that you know you can do these things.", "", " To protect your rights, we need to make restrictions that forbid", "anyone to deny you these rights or to ask you to surrender the rights.", "These restrictions translate to certain responsibilities for you if you", "distribute copies of the software, or if you modify it.", "", " For example, if you distribute copies of such a program, whether", "gratis or for a fee, you must give the recipients all the rights that", "you have. You must make sure that they, too, receive or can get the", "source code. And you must show them these terms so they know their", "rights.", "", " We protect your rights with two steps: (1) copyright the software, and", "(2) offer you this license which gives you legal permission to copy,", "distribute and/or modify the software.", "", " Also, for each author's protection and ours, we want to make certain", "that everyone understands that there is no warranty for this free", "software. If the software is modified by someone else and passed on, we", "want its recipients to know that what they have is not the original, so", "that any problems introduced by others will not reflect on the original", "authors' reputations.", "", " Finally, any free program is threatened constantly by software", "patents. We wish to avoid the danger that redistributors of a free", "program will individually obtain patent licenses, in effect making the", "program proprietary. To prevent this, we have made it clear that any", "patent must be licensed for everyone's free use or not licensed at all.", "", " The precise terms and conditions for copying, distribution and", "modification follow.", "", " GNU GENERAL PUBLIC LICENSE", " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION", "", " 0. This License applies to any program or other work which contains", "a notice placed by the copyright holder saying it may be distributed", "under the terms of this General Public License. The \"Program\", below,", "refers to any such program or work, and a \"work based on the Program\"", "means either the Program or any derivative work under copyright law:", "that is to say, a work containing the Program or a portion of it,", "either verbatim or with modifications and/or translated into another", "language. (Hereinafter, translation is included without limitation in", "the term \"modification\".) Each licensee is addressed as \"you\".", "", "Activities other than copying, distribution and modification are not", "covered by this License; they are outside its scope. The act of", "running the Program is not restricted, and the output from the Program", "is covered only if its contents constitute a work based on the", "Program (independent of having been made by running the Program).", "Whether that is true depends on what the Program does.", "", " 1. You may copy and distribute verbatim copies of the Program's", "source code as you receive it, in any medium, provided that you", "conspicuously and appropriately publish on each copy an appropriate", "copyright notice and disclaimer of warranty; keep intact all the", "notices that refer to this License and to the absence of any warranty;", "and give any other recipients of the Program a copy of this License", "along with the Program.", "", "You may charge a fee for the physical act of transferring a copy, and", "you may at your option offer warranty protection in exchange for a fee.", "", " 2. You may modify your copy or copies of the Program or any portion", "of it, thus forming a work based on the Program, and copy and", "distribute such modifications or work under the terms of Section 1", "above, provided that you also meet all of these conditions:", "", " a) You must cause the modified files to carry prominent notices", " stating that you changed the files and the date of any change.", "", " b) You must cause any work that you distribute or publish, that in", " whole or in part contains or is derived from the Program or any", " part thereof, to be licensed as a whole at no charge to all third", " parties under the terms of this License.", "", " c) If the modified program normally reads commands interactively", " when run, you must cause it, when started running for such", " interactive use in the most ordinary way, to print or display an", " announcement including an appropriate copyright notice and a", " notice that there is no warranty (or else, saying that you provide", " a warranty) and that users may redistribute the program under", " these conditions, and telling the user how to view a copy of this", " License. (Exception: if the Program itself is interactive but", " does not normally print such an announcement, your work based on", " the Program is not required to print an announcement.)", "", "These requirements apply to the modified work as a whole. If", "identifiable sections of that work are not derived from the Program,", "and can be reasonably considered independent and separate works in", "themselves, then this License, and its terms, do not apply to those", "sections when you distribute them as separate works. But when you", "distribute the same sections as part of a whole which is a work based", "on the Program, the distribution of the whole must be on the terms of", "this License, whose permissions for other licensees extend to the", "entire whole, and thus to each and every part regardless of who wrote it.", "", "Thus, it is not the intent of this section to claim rights or contest", "your rights to work written entirely by you; rather, the intent is to", "exercise the right to control the distribution of derivative or", "collective works based on the Program.", "", "In addition, mere aggregation of another work not based on the Program", "with the Program (or with a work based on the Program) on a volume of", "a storage or distribution medium does not bring the other work under", "the scope of this License.", "", " 3. You may copy and distribute the Program (or a work based on it,", "under Section 2) in object code or executable form under the terms of", "Sections 1 and 2 above provided that you also do one of the following:", "", " a) Accompany it with the complete corresponding machine-readable", " source code, which must be distributed under the terms of Sections", " 1 and 2 above on a medium customarily used for software interchange; or,", "", " b) Accompany it with a written offer, valid for at least three", " years, to give any third party, for a charge no more than your", " cost of physically performing source distribution, a complete", " machine-readable copy of the corresponding source code, to be", " distributed under the terms of Sections 1 and 2 above on a medium", " customarily used for software interchange; or,", "", " c) Accompany it with the information you received as to the offer", " to distribute corresponding source code. (This alternative is", " allowed only for noncommercial distribution and only if you", " received the program in object code or executable form with such", " an offer, in accord with Subsection b above.)", "", "The source code for a work means the preferred form of the work for", "making modifications to it. For an executable work, complete source", "code means all the source code for all modules it contains, plus any", "associated interface definition files, plus the scripts used to", "control compilation and installation of the executable. However, as a", "special exception, the source code distributed need not include", "anything that is normally distributed (in either source or binary", "form) with the major components (compiler, kernel, and so on) of the", "operating system on which the executable runs, unless that component", "itself accompanies the executable.", "", "If distribution of executable or object code is made by offering", "access to copy from a designated place, then offering equivalent", "access to copy the source code from the same place counts as", "distribution of the source code, even though third parties are not", "compelled to copy the source along with the object code.", "", " 4. You may not copy, modify, sublicense, or distribute the Program", "except as expressly provided under this License. Any attempt", "otherwise to copy, modify, sublicense or distribute the Program is", "void, and will automatically terminate your rights under this License.", "However, parties who have received copies, or rights, from you under", "this License will not have their licenses terminated so long as such", "parties remain in full compliance.", "", " 5. You are not required to accept this License, since you have not", "signed it. However, nothing else grants you permission to modify or", "distribute the Program or its derivative works. These actions are", "prohibited by law if you do not accept this License. Therefore, by", "modifying or distributing the Program (or any work based on the", "Program), you indicate your acceptance of this License to do so, and", "all its terms and conditions for copying, distributing or modifying", "the Program or works based on it.", "", " 6. Each time you redistribute the Program (or any work based on the", "Program), the recipient automatically receives a license from the", "original licensor to copy, distribute or modify the Program subject to", "these terms and conditions. You may not impose any further", "restrictions on the recipients' exercise of the rights granted herein.", "You are not responsible for enforcing compliance by third parties to", "this License.", "", " 7. If, as a consequence of a court judgment or allegation of patent", "infringement or for any other reason (not limited to patent issues),", "conditions are imposed on you (whether by court order, agreement or", "otherwise) that contradict the conditions of this License, they do not", "excuse you from the conditions of this License. If you cannot", "distribute so as to satisfy simultaneously your obligations under this", "License and any other pertinent obligations, then as a consequence you", "may not distribute the Program at all. For example, if a patent", "license would not permit royalty-free redistribution of the Program by", "all those who receive copies directly or indirectly through you, then", "the only way you could satisfy both it and this License would be to", "refrain entirely from distribution of the Program.", "", "If any portion of this section is held invalid or unenforceable under", "any particular circumstance, the balance of the section is intended to", "apply and the section as a whole is intended to apply in other", "circumstances.", "", "It is not the purpose of this section to induce you to infringe any", "patents or other property right claims or to contest validity of any", "such claims; this section has the sole purpose of protecting the", "integrity of the free software distribution system, which is", "implemented by public license practices. Many people have made", "generous contributions to the wide range of software distributed", "through that system in reliance on consistent application of that", "system; it is up to the author/donor to decide if he or she is willing", "to distribute software through any other system and a licensee cannot", "impose that choice.", "", "This section is intended to make thoroughly clear what is believed to", "be a consequence of the rest of this License.", "", " 8. If the distribution and/or use of the Program is restricted in", "certain countries either by patents or by copyrighted interfaces, the", "original copyright holder who places the Program under this License", "may add an explicit geographical distribution limitation excluding", "those countries, so that distribution is permitted only in or among", "countries not thus excluded. In such case, this License incorporates", "the limitation as if written in the body of this License.", "", " 9. The Free Software Foundation may publish revised and/or new versions", "of the General Public License from time to time. Such new versions will", "be similar in spirit to the present version, but may differ in detail to", "address new problems or concerns.", "", "Each version is given a distinguishing version number. If the Program", "specifies a version number of this License which applies to it and \"any", "later version\", you have the option of following the terms and conditions", "either of that version or of any later version published by the Free", "Software Foundation. If the Program does not specify a version number of", "this License, you may choose any version ever published by the Free Software", "Foundation.", "", " 10. If you wish to incorporate parts of the Program into other free", "programs whose distribution conditions are different, write to the author", "to ask for permission. For software which is copyrighted by the Free", "Software Foundation, write to the Free Software Foundation; we sometimes", "make exceptions for this. Our decision will be guided by the two goals", "of preserving the free status of all derivatives of our free software and", "of promoting the sharing and reuse of software generally.", "", " NO WARRANTY", "", " 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY", "FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN", "OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES", "PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED", "OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF", "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS", "TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE", "PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,", "REPAIR OR CORRECTION.", "", " 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING", "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR", "REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,", "INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING", "OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED", "TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY", "YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER", "PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE", "POSSIBILITY OF SUCH DAMAGES.", "", " END OF TERMS AND CONDITIONS", "", " How to Apply These Terms to Your New Programs", "", " If you develop a new program, and you want it to be of the greatest", "possible use to the public, the best way to achieve this is to make it", "free software which everyone can redistribute and change under these terms.", "", " To do so, attach the following notices to the program. It is safest", "to attach them to the start of each source file to most effectively", "convey the exclusion of warranty; and each file should have at least", "the \"copyright\" line and a pointer to where the full notice is found.", "", " ", " Copyright (C) ", "", " This program is free software; you can redistribute it and/or modify", " it under the terms of the GNU General Public License as published by", " the Free Software Foundation; either version 2 of the License, or", " (at your option) any later version.", "", " This program is distributed in the hope that it will be useful,", " but WITHOUT ANY WARRANTY; without even the implied warranty of", " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the", " GNU General Public License for more details.", "", " You should have received a copy of the GNU General Public License", " along with this program; if not, write to the Free Software", " Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA", "", "", "Also add information on how to contact you by electronic and paper mail.", "", "If the program is interactive, make it output a short notice like this", "when it starts in an interactive mode:", "", " Gnomovision version 69, Copyright (C) year name of author", " Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.", " This is free software, and you are welcome to redistribute it", " under certain conditions; type `show c' for details.", "", "The hypothetical commands `show w' and `show c' should show the appropriate", "parts of the General Public License. Of course, the commands you use may", "be called something other than `show w' and `show c'; they could even be", "mouse-clicks or menu items--whatever suits your program.", "", "You should also get your employer (if you work as a programmer) or your", "school, if any, to sign a \"copyright disclaimer\" for the program, if", "necessary. Here is a sample; alter the names:", "", " Yoyodyne, Inc., hereby disclaims all copyright interest in the program", " `Gnomovision' (which makes passes at compilers) written by James Hacker.", "", " , 1 April 1989", " Ty Coon, President of Vice", "", "This General Public License does not permit incorporating your program into", "proprietary programs. If your program is a subroutine library, you may", "consider it more useful to permit linking proprietary applications with the", "library. If this is what you want to do, use the GNU Library General", "Public License instead of this License.", }; moon-buggy-1.0.51/game.c0000644000175000017500000001056107646332467011703 00000000000000/* game.c - play the game * * Copyright 1999, 2000 Jochen Voss */ static const char rcsid[] = "$Id: game.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include "moon-buggy.h" struct mode *game_mode; struct mode *crash_mode; int crash_detected; /* a crash is in progress */ static int level; /* the current level (crash_mode only) */ static int lives; /* cars left (including the current one) */ static int score; /* points we already got */ int stakes; /* points to get, when we reach the ground */ void adjust_score (int val) /* Add VAL to the score and display the result. */ { if (crash_detected) return; score += val; mvwprintw (status, 0, car_base-7, "score: %-8d", score); wnoutrefresh (status); } void print_lives (void) { mvwprintw (status, 0, car_base-20, "lives: %d", lives); wnoutrefresh (status); } /********************************************************************** * game mode */ void print_game_over (int blink) { #ifdef A_BLINK if (blink) wattron (moon, A_BLINK); #endif mvwaddstr (moon, LINES-11, car_base-1, "GAME OVER"); #ifdef A_BLINK if (blink) wattroff (moon, A_BLINK); #endif wnoutrefresh (moon); } static void game_enter (int seed) { clock_reset (); if (seed == 0) { level = 0; score = 0; lives = 3; werase (status); wnoutrefresh (status); } resize_ground (1); level_start (level); crash_detected = 0; stakes = 0; initialise_buggy (); start_scrolling (1); } static void game_leave (void) { --lives; level = current_level (); extinguish_laser (); remove_meteors (); } static void game_redraw (void) { resize_meteors (); resize_laser (); resize_ground (0); print_ground (); adjust_score (0); print_lives (); print_buggy (); } static void key_handler (game_time t, int val) { switch (val) { case 1: if (! crash_detected && can_jump()) jump (t); break; case 2: if (! crash_detected) fire_laser (t); break; case 3: lives = 1; print_message ("aborted at user's request"); mode_change (crash_mode, 0); break; } } static void signal_handler (int signum) { switch (signum) { case SIGTSTP: if (lives > 1) lives = 1; if (! crash_detected) crash_detected = 1; print_message ("GAME OVER (suspended)"); break; case SIGCONT: print_message ("GAME OVER (suspended)"); break; } } /********************************************************************** * crash mode */ static int lives_flag; static void leave_crash_mode (game_time t, void *client_data) /* This function is a possible callback argument to `add_event'. * It switch control back to either `game_mode' or `highscore_mode'. * The arguments T and CLIENT_DATA are ignored. */ { if (lives > 0) { mode_change (game_mode, 1); } else { score_set (score, level+1); mode_change (highscore_mode, 0); } } static void print_lives_h (game_time t, void *client_data) /* This function is a callback argument to `add_event'. * It updates the number of lives display. */ { print_lives (); lives_flag = 1; } static void crash_enter (int seed) { clock_reset (); lives_flag = 0; add_event (1.2, print_lives_h, NULL); add_event (2.0, leave_crash_mode, NULL); print_buggy (); if (lives <= 0) print_game_over (1); } static void crash_redraw (void) { resize_ground (0); print_ground (); print_buggy (); adjust_score (0); if (lives_flag) print_lives (); } static void crash_key_handler (game_time t, int val) { if (t < 0.5) return; switch (val) { case 1: leave_crash_mode (0, NULL); break; case 3: lives = 0; leave_crash_mode (0, NULL); break; } } void setup_game_mode (void) { game_mode = new_mode (); game_mode->enter = game_enter; game_mode->leave = game_leave; game_mode->redraw = game_redraw; game_mode->keypress = key_handler; game_mode->signal = signal_handler; mode_add_key (game_mode, mbk_jump, "jump", 1); mode_add_key (game_mode, mbk_fire, "fire", 2); mode_add_key (game_mode, mbk_end, "abort game", 3); mode_complete (game_mode); crash_mode = new_mode (); crash_mode->enter = crash_enter; crash_mode->redraw = crash_redraw; crash_mode->keypress = crash_key_handler; mode_add_key (crash_mode, mbk_start, "continue", 1); mode_add_key (crash_mode, mbk_end, "abort game", 3); mode_complete (crash_mode); } moon-buggy-1.0.51/level.c0000644000175000017500000002213407646332467012100 00000000000000/* level.c - challenge the user in a controlled way * * Copyright 1999 Jochen Voss. */ static const char rcsid[] = "$Id: level.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include "moon-buggy.h" /* The length of the inter-level gap (measured in ticks) */ #define PAUSE 40 static int hole, plateau; static int is_edge, crater_seen; static int level, initial_level, last_level, ticks; static union { struct { int state, gap; } l0; struct { int state, gap; } l1; struct { int state, gap; } l2; struct { int state, gap, pos; } l3; struct { int state, gap, next_gap; } l4; /* l5 */ struct { int state, gap, next_gap, spare_time; } l6; struct { int state, gap, next_gap, spare_time; } l_fin; } data; static void level0_init (void) { hole = 2; data.l0.state = 0; } static void level0 (double t) { if (is_edge) { if (ticks < 345) { data.l0.gap = 14.5 - ticks*4.0/345 + uniform_rnd (4.5 + ticks*4.0/345); } else { switch (data.l0.state) { case 0: data.l0.gap = 13; break; case 1: data.l0.gap = 10; break; case 2: data.l0.gap = 11; break; default: ++level; break; } ++data.l0.state; } } --data.l0.gap; if (data.l0.gap <= 0) hole = 2; } static void level1_init (void) { hole = 5; data.l1.state = 0; } static void level1 (double t) { static const int table [11] = { 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4 }; if (is_edge) { if (ticks < 300) { data.l1.gap = 14.5 - ticks*4.0/300 + uniform_rnd (3); } else { switch (data.l1.state) { default: data.l1.gap = 12; break; case 1: data.l1.gap = 7; break; case 2: data.l1.gap = 8; break; } if (data.l1.state > 2) { ++level; } else { ++data.l1.state; } } } --data.l1.gap; if (data.l1.gap <= 0) { switch (data.l1.state) { case 1: case 2: hole = 4; break; case 3: hole = 5; break; default: hole = table [uniform_rnd (11)]; break; } } } static void level2_init (void) { hole = 2; data.l2.state = 0; } static void level2 (double t) { if (is_edge) { if (data.l2.state == 0) { data.l2.gap = 8; if (ticks >= 310) { data.l2.state = -1; } else { data.l2.state = 2 + uniform_rnd (3 + (ticks < 190)); } } else if (data.l2.state > 0) { data.l2.gap = 12 + uniform_rnd (6); --data.l2.state; } else { switch (data.l2.state) { case -1: data.l2.gap = 16; break; case -2: data.l2.gap = 13; break; case -4: data.l2.gap = 14; break; default: data.l2.gap = 7; break; } --data.l2.state; } } --data.l2.gap; if (data.l2.gap <= 0) hole = 2; if (data.l2.state < -6) ++level; } static void level3_init (void) { data.l3.state = -1; } static void level3 (double t) { if (data.l3.state < 0) { place_meteor (); data.l3.state = 0; } if (is_edge) { data.l3.gap = 20 + uniform_rnd (10); if (ticks > 160) ++data.l3.state; switch (data.l3.state) { case 0: data.l3.pos = uniform_rnd (5)+1; break; case 1: data.l3.pos = data.l3.gap - uniform_rnd (7) - 1; break; case 2: data.l3.pos = data.l3.gap - uniform_rnd (2) - 1; break; default: bonus[0] += 20; ++level; break; } } --data.l3.gap; if (data.l3.gap == data.l3.pos) place_meteor (); if (data.l3.gap <= 0) hole = 2; } static void level4_init (void) { hole = 6; data.l4.next_gap = 8 + uniform_rnd (10); data.l4.state = 3; } static void level4 (double t) { if (is_edge) { data.l4.gap = data.l4.next_gap; if (data.l4.state == 0 && ticks < 700) { data.l4.state = 3 + uniform_rnd (3 + 2*(ticks < 350)); } else { --data.l4.state; } if (data.l4.state < -5) ++level; } --data.l4.gap; if (data.l4.gap <= 0) { switch (data.l4.state) { default: hole = 2 + uniform_rnd (3); data.l4.next_gap = 14 + uniform_rnd (6) - hole; break; case 0: if (uniform_rnd (2)) { hole = 5; data.l4.next_gap = 9 + uniform_rnd (10); } else { hole = 2; data.l4.next_gap = 8; } break; case -1: hole = 3; data.l4.next_gap = 14; break; case -2: hole = 6; data.l4.next_gap = 6; break; case -3: hole = 4; data.l4.next_gap = 16 + uniform_rnd (6); break; case -4: hole = 2; data.l4.next_gap = 7; break; case -5: hole = 5; data.l4.next_gap = 12; break; } } } static void level5 (double t) { if (uniform_rnd (ticks % 20 < 8 ? 4 : 8) == 0) place_meteor (); if (ticks >= 125) ++level; } static void level6_init (void) { hole = 5; data.l6.next_gap = 8 + uniform_rnd (10); data.l6.state = 3; data.l6.spare_time = 6; } static void level6 (double t) { int slip; /* this many ticks/meteor may the user vaste */ if (is_edge) { data.l6.gap = data.l6.next_gap; if (data.l6.state == 0) { data.l6.state = 3 + uniform_rnd (5); if (ticks >= 375) ++level; } else { --data.l6.state; } } --data.l6.gap; ++data.l6.spare_time; if (data.l6.gap <= 0) { if (data.l6.state) { hole = 2 + uniform_rnd (3); data.l6.next_gap = 15 + uniform_rnd (6) - hole; } else { if (uniform_rnd (3)) { hole = 5; data.l6.next_gap = 9 + uniform_rnd (10); } else { hole = 2 + uniform_rnd (2); data.l6.next_gap = 9; } } data.l6.spare_time -= 11; } slip = (380-ticks)*3.0/374 + 1.5; if (data.l6.spare_time >= 3+slip) { if (uniform_rnd (data.l6.spare_time) > 2) { place_meteor (); data.l6.spare_time -= 3+slip; } } } static void level_fin_init (void) { data.l_fin.state = uniform_rnd (10); hole = 2; data.l_fin.next_gap = 7; data.l_fin.spare_time = 0; } static void level_fin (double t) { if (is_edge) { data.l_fin.gap = data.l_fin.next_gap; if (data.l_fin.state == 0) { data.l_fin.state = 3 + uniform_rnd (6); } else { --data.l_fin.state; } } --data.l_fin.gap; ++data.l_fin.spare_time; if (data.l_fin.gap <= 0) { if (data.l_fin.state) { hole = 2 + uniform_rnd (3); data.l_fin.next_gap = 15 + uniform_rnd (6) - hole; } else { if (uniform_rnd (3)) { hole = 5 + uniform_rnd (2); data.l_fin.next_gap = 9 + uniform_rnd (10); } else { hole = 2 + uniform_rnd (3); data.l_fin.next_gap = 9; } } data.l_fin.spare_time -= 11; } if (data.l_fin.spare_time >= 5) { if (uniform_rnd (data.l_fin.spare_time) > 2) { place_meteor (); data.l_fin.spare_time -= 5; } } } #define LEVEL_COUNT 8 static struct { void (*init_fn) (void); void (*fn) (double t); const char *msg; } levels [LEVEL_COUNT] = { { level0_init, level0, "good luck (or use to jump)" }, { level1_init, level1, "some craters are wider than others" }, { level2_init, level2 }, { level3_init, level3, "use to fire the laser" }, { level4_init, level4 }, { NULL, level5, "... but what is that?" }, { level6_init, level6 }, { level_fin_init, level_fin, "You may start your journey, now." } }; void level_start (int initial) /* Start the game anew with level INITIAL. */ { assert (initial >= 0 && initial < LEVEL_COUNT); level = initial_level = initial; last_level = -1; ticks = 0; } static void score_crater (int width) { static const int score_table [] = { 0, 0, 4, 8, 9, 16, 32 }; assert (width < 7); bonus[0] += score_table [width]; } static void score_plateau (int width) { static const int score_table [] = { 0, 0, 0, 0, 0, 0, 32, 18, 9 }; if (width > 8) return; bonus[0] += score_table [width]; } void level_tick (double t) /* Advance the current level's state by one. * The function must be called every time the ground moved. It fills * in the new values of `ground2[0]' and `bonus[0]'. The parameter T * must be the current game time. */ { int ground; bonus[0] = 0; if (level != last_level) { double msg_t; level = level % LEVEL_COUNT; hole = 0; if (levels[level].init_fn) levels[level].init_fn (); if (last_level >= 0) { ticks = -PAUSE; msg_t = t + TICK(car_x + PAUSE/5); } else { msg_t = t; } if (levels[level].msg) { add_event (msg_t, print_hint_h, (void *)levels[level].msg); } last_level = level; is_edge = 1; crater_seen = 0; } if (ticks < 0) { ground = '#'; } else if (hole > 0) { if (! crater_seen) { score_crater (hole); is_edge = 1; crater_seen = 1; plateau = 0; } ground = ' '; --hole; } else { levels[level].fn (t); is_edge = 0; crater_seen = 0; ground = '#'; ++plateau; if (hole > 0) score_plateau (plateau); } ground2[0] = ground; print_buggy(); /* ++pg now the refresh of the car is needed here. */ ++ticks; } int current_level (void) /* Return the current level's number as the car sees it. */ { int res = (ticks+PAUSE/2 >= car_x) ? level : level - 1; if (res < initial_level) res = initial_level; return res; } moon-buggy-1.0.51/ground.c0000644000175000017500000000352207646332466012266 00000000000000/* ground.c - implement the ground to drive on * * Copyright 1999 Jochen Voss */ static const char rcsid[] = "$Id: ground.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include #include "moon-buggy.h" int *bonus; /* points to get, if we drive over them */ char *ground1, *ground2; static int ground_width; void resize_ground (int clear_it) { int cols, i, old; cols = COLS; if (ground_width != cols) { bonus = xrealloc (bonus, cols*sizeof(int)); ground1 = xrealloc (ground1, cols); ground2 = xrealloc (ground2, cols); } for (i=(clear_it ? 0 : ground_width); i 80 ? 80 : cols) - 12; car_x += (car_base-old); } void print_ground (void) { mvwaddnstr (moon, LINES-4, 0, ground2, ground_width); mvwaddnstr (moon, LINES-3, 0, ground1, ground_width); wnoutrefresh (moon); } static void print_level (void) { mvwprintw (status, 0, car_base-32, "level: %d", current_level () + 1); wnoutrefresh (status); } static void scroll_handler (game_time t, void *client_data) { if (crash_detected <= 2) { scroll_meteors (); memmove (bonus+1, bonus, (ground_width-1)*sizeof(int)); memmove (ground2+1, ground2, ground_width-1); level_tick (t); print_ground (); print_level (); stakes += bonus[car_x + 7]; if (crash_detected) shift_buggy (1); } if (crash_detected || crash_check ()) { ++crash_detected; if (crash_detected > 35) mode_change (crash_mode, 1); } if (can_jump () && stakes) { adjust_score (stakes); stakes = 0; } add_event (t+TICK(1), scroll_handler, NULL); } void start_scrolling (double t) { add_event (t, scroll_handler, NULL); } moon-buggy-1.0.51/buggy.c0000644000175000017500000001166010164030501012055 00000000000000/* buggy.c - implement the moon buggy * * Copyright 1999, 2004 Jochen Voss */ static const char rcsid[] = "$Id: buggy.c 6093 2004-12-27 15:58:57Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include "moon-buggy.h" #include "buggy.h" int car_x, car_y; /********************************************************************** * display the car */ typedef struct scene { enum car_state n; /* image number (index to array `image') */ int y; /* vertical position */ double dt; /* time to next state */ int has_ground; /* flag, true iff we may crash or jump */ } scenario []; static scenario sz_empty = { { car_NORMAL, 5, TICK(1), 1 }, { car_NORMAL1, 5, TICK(2.5), 1 }, { car_NORMAL2, 5, TICK(4), 1 }, { car_NORMAL3, 5, TICK(5.5), 1 } }; static scenario sz_jump = { { car_START, 5, TICK(1), 0 }, { car_UP1, 6, TICK(2.5), 0 }, { car_UP2, 7, TICK(5), 0 }, { car_UP1, 6, TICK(2.5), 0 }, { car_LAND, 5, TICK(2.5), 1 }, { car_NORMAL, 5, -1, 1 } }; static scenario sz_crash = { { car_BROKEN, 5, -1, 0 } }; static scenario sz_ram = { { car_RAM1, 5, TICK(1), 0 }, { car_RAM2, 5, TICK(0.5), 0 }, { car_RAM3, 5, -1, 0 } }; static scenario sz_sit = { { car_SIT, 5, -1, 0 } }; static struct scene *state; static int nextG; void initialise_buggy (void) /* Reset the buggy to its initial state. */ { int y; state = sz_empty; for (y=5; y<9; ++y) mvwaddstr (moon, LINES-y, car_x, " "); car_x = car_base; car_y = state->y; wnoutrefresh (moon); } void print_buggy (void) { enum car_state n = state->n; int y = state->y; if (y < car_y) { mvwaddstr (moon, LINES-car_y-1, car_x, " "); } else if (y > car_y) { mvwaddstr (moon, LINES-car_y, car_x, " "); } car_y = y; /* ++pg the changing of the 4 normal states is realized in the following lines. */ if (n==car_NORMAL) { mvwaddstr (moon, LINES-y-1, car_x, image[n+nextG][0]); mvwaddstr (moon, LINES-y, car_x, image[n+nextG][1]); } else { mvwaddstr (moon, LINES-y-1, car_x, image[n][0]); mvwaddstr (moon, LINES-y, car_x, image[n][1]); } nextG++; if (nextG>3) nextG=0; if (n == car_BROKEN) { if (ground2[car_x+1] == ' ') mvwaddch (moon, LINES-4, car_x+1, 'o'); if (ground2[car_x+5] == ' ') mvwaddch (moon, LINES-4, car_x+5, 'o'); } wnoutrefresh (moon); } void shift_buggy (int dx) /* Horizontally shift the buggy by the amount DX. * Positive values of dx indicate a shift to the right. */ { mvwaddstr (moon, LINES-car_y-1, car_x, " "); mvwaddstr (moon, LINES-car_y, car_x, " "); car_x += dx; print_buggy (); } /********************************************************************** * display a rolling wheel after a crash */ static int wheel_x, wheel_y; static void wheel_handler (game_time t, void *client_data) { int wheel_crash; wheel_crash = (wheel_x= 0 && ! wheel_crash) { mvwaddch (moon, wheel_y, wheel_x, 'o'); add_event (t+TICK(2.3), wheel_handler, NULL); } else { crash_detected = 1000; } wnoutrefresh (moon); } static void start_wheel (void) { wheel_x = car_x; add_event (current_time()+TICK(0.5), wheel_handler, NULL); } /********************************************************************** * handle the jumps */ static void jump_handler (game_time t, void *client_data) { state = client_data; if (car_y > 5 && state->y == 5) { if (meteor_car_hit (car_x, car_x+7)) { state = sz_sit; start_wheel (); crash_detected = 1; } } print_buggy (); if (state->dt >= -0.5) { add_event (t+state->dt, jump_handler, state+1); } } void jump (game_time t) { assert (state->has_ground); remove_event (jump_handler); /* only one jump at a time */ add_event (t, jump_handler, sz_jump); } int can_jump (void) { return state->has_ground; } /********************************************************************** * check for crashes */ int crash_check (void) /* Return true, if the car crashed. */ { if (! state->has_ground) return 0; if (ground2[car_x+1] == ' ' || ground2[car_x+5] == ' ') { remove_event (jump_handler); state = sz_crash; print_buggy (); start_wheel (); return 1; } return 0; } int car_meteor_hit (int x) /* Return true, if the car is down and occupies position X. * Then the car crashes immediately. */ { if (car_y == 5 && x >= car_x && x < car_x+7) { remove_event (jump_handler); add_event (current_time (), jump_handler, sz_ram); print_buggy (); start_wheel (); crash_detected = 1; return 1; } return 0; } moon-buggy-1.0.51/buggy.h0000644000175000017500000000146307743051614012103 00000000000000/* buggy.h - the image data for "buggy.c" * Automatically created from file "car.img". * DO NOT EDIT !!! */ static char *image[][2] = { { " Omm ", "(|)-(|)", }, { " Omm ", "(\\)-(\\)", }, { " Omm ", "(-)-(-)", }, { " Omm ", "(/)-(/)", }, { " OMM ", "(U)-(U)", }, { " OMm ", "(|)-(|)", }, { " oMm ", "(\\)-(\\)", }, { " omm ", "(-)_(-)", }, { " __ ", "cnOMMnb", }, { " OMm ", "#(|)(|)", }, { " n OMm ", "##|)(|)", }, { " ##Mm ", " ###(|)", }, { " #MM ", "(|###|)", }, }; enum car_state { car_NORMAL, car_NORMAL1, car_NORMAL2, car_NORMAL3, car_START, car_UP1, car_UP2, car_LAND, car_BROKEN, car_RAM1, car_RAM2, car_RAM3, car_SIT, }; moon-buggy-1.0.51/laser.c0000644000175000017500000000727107646332467012104 00000000000000/* laser.c - a mining laser device for the moon-buggy * * Copyright 1999 Jochen Voss. */ static const char rcsid[] = "$Id: laser.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include "moon-buggy.h" #include "darray.h" enum beam_state { bs_START, bs_RUN, bs_CLOUD }; struct beam { enum beam_state state; int left, right, y; int count; }; static struct { struct beam **data; int slots, used; } beam_table; static void beam_handler (game_time t, void *client_data) { struct beam *b = client_data; int i, x; switch (b->state) { case bs_START: if (b->y == 5 && (x = meteor_laser_hit (b->left, b->right))) { b->count = 0; b->left = x; if (b->left > car_x - 2) b->left = car_x - 2; } wmove (moon, LINES-b->y, b->left); for (i=0; iright-b->left; ++i) waddch (moon, '-'); b->state = bs_RUN; add_event (t+TICK(0.25), beam_handler, client_data); break; case bs_RUN: if (b->count > 0) { b->left -= 1; b->right -= 1; mvwaddch (moon, LINES-b->y, b->left, '-'); mvwaddch (moon, LINES-b->y, b->right, ' '); if (b->y == 5 && meteor_laser_hit (b->left, b->right)) { b->count = 0; } else { b->count -= 1; } add_event (t+TICK(0.25), beam_handler, client_data); } else { wmove (moon, LINES-b->y, b->left); for (i=0; i<2; ++i) waddch (moon, '*'); for (i=2; iright-b->left; ++i) waddch (moon, ' '); b->right = b->left+2; b->state = bs_CLOUD; b->count = 3; if (b->right + b->count >= car_x) b->count = car_x - b->right - 1; add_event (t+TICK(1), beam_handler, client_data); } break; case bs_CLOUD: if (b->count > 1) { mvwaddch (moon, LINES-b->y, b->left, ' '); mvwaddch (moon, LINES-b->y, b->right, '*'); b->left += 1; b->right += 1; b->count -= 1; add_event (t+TICK(1), beam_handler, client_data); } else if (b->count > 0) { mvwaddch (moon, LINES-b->y, b->left, ' '); b->left += 1; b->right += 1; for (i=b->left; iright; ++i) mvwaddch (moon, LINES-b->y, i, '.'); b->count -= 1; add_event (t+TICK(1), beam_handler, client_data); } else { wmove (moon, LINES-b->y, b->left); for (i=0; i<2; ++i) waddch (moon, ' '); DA_REMOVE_VALUE (beam_table, struct beam *, b); free (b); } break; } wnoutrefresh (moon); } void fire_laser (double t) { struct beam *b; if (! beam_table.data) DA_INIT (beam_table, struct beam *); b = xmalloc (sizeof (struct beam)); b->state = bs_START; b->count = 40; b->left = car_x-8; b->right = car_x; b->y = car_y; DA_ADD (beam_table, struct beam *, b); add_event (t+TICK(0.25), beam_handler, b); adjust_score (-1); } void extinguish_laser (void) /* Clear all laser beams from the screen. */ { int j; remove_event (beam_handler); for (j=0; jleft; iright; ++i) mvwaddch (moon, LINES-b->y, i, ' '); free (b); } DA_CLEAR (beam_table); wnoutrefresh (moon); } int laser_hit (int x) /* Return true, if a beam covers location X of the baseline. * These beams hit a meteor and stop immediately. */ { int j; int res = 0; for (j=0; jy == 5 && b->left >= x && b->right < x) { if (b->state < bs_CLOUD) b->count = 0; res = 1; } } return res; } void resize_laser (void) /* Clear all laser beams from the screen. */ { int j; remove_event (beam_handler); for (j=0; j #endif #include "moon-buggy.h" #include "darray.h" enum meteor_state { ms_START, ms_BIG, ms_MEDIUM, ms_SMALL }; static char m_image [] = { 'O', 'O', 'o', ',' }; struct meteor { enum meteor_state state; int x; }; static struct { struct meteor **data; int slots, used; } meteor_table; static void score_meteor (struct meteor *m) { adjust_score (13); bonus[m->x] -= 20; } static int scroll_one_meteor (struct meteor *m) /* Move the meteor *M along with the ground. * Check for collisions with the car or with laser beams. * Return 1 iff the meteor should be removed from the list. */ { if (m->state == ms_START) { m->state = ms_BIG; } else { mvwaddch (moon, BASELINE, m->x, ' '); } m->x += 1; if (m->x >= COLS ) return 1; if (laser_hit (m->x)) { m->state += 1; if (m->state > ms_SMALL) { score_meteor (m); return 1; } } if (car_meteor_hit (m->x)) return 1; mvwaddch (moon, BASELINE, m->x, m_image[m->state]); return 0; } void scroll_meteors (void) /* Move the meteors along with the ground. * Handle collisions with the car or with laser beams. */ { int j; if (meteor_table.used > 0) wnoutrefresh (moon); for (j=meteor_table.used-1; j>=0; --j) { struct meteor *m = meteor_table.data[j]; int res; res = scroll_one_meteor (m); if (res) { DA_REMOVE (meteor_table, struct meteor *, j); free (m); } } } void place_meteor (void) /* Place a new meteor on the ground. */ { struct meteor *m; if (! meteor_table.data) DA_INIT (meteor_table, struct meteor *); m = xmalloc (sizeof (struct meteor)); m->state = ms_START; m->x = 0; bonus[0] += 20; DA_ADD (meteor_table, struct meteor *, m); } void remove_meteors (void) /* Remove all meteors from the ground. * Free any resources used by the internal representation. */ { int j; if (meteor_table.used > 0) wnoutrefresh (moon); for (j=0; jx, ' '); free (m); } DA_CLEAR (meteor_table); } int meteor_laser_hit (int x0, int x1) /* Check for meteors at positions >=x0 and x >= x0 && m->x < x1) { int x = m->x; m->state += 1; wnoutrefresh (moon); if (m->state > ms_SMALL) { mvwaddch (moon, BASELINE, m->x, ' '); score_meteor (m); remove_client_data (m); DA_REMOVE_VALUE (meteor_table, struct meteor *, m); free (m); } else { mvwaddch (moon, BASELINE, m->x, m_image[m->state]); } return x; } } return 0; } int meteor_car_hit (int x0, int x1) /* Check for meteors at positions >=x0 and =0; --j) { struct meteor *m = meteor_table.data[j]; if (m->x >= x0 && m->x < x1) { mvwaddch (moon, BASELINE, m->x, ' '); remove_client_data (m); DA_REMOVE_VALUE (meteor_table, struct meteor *, m); free (m); res = 1; } } if (res) wnoutrefresh (moon); return res; } void resize_meteors (void) /* Silently remove all meteors, which are no longer visible. */ { int j; j = 0; while (jx >= COLS) { remove_client_data (m); DA_REMOVE_VALUE (meteor_table, struct meteor *, m); free (m); } else { ++j; } } } moon-buggy-1.0.51/highscore.c0000644000175000017500000004237610407327736012746 00000000000000/* highscore.c - maintain the highscore list * * Copyright 1999, 2000, 2001, 2006 Jochen Voss */ static const char rcsid[] = "$Id: highscore.c 6825 2006-03-19 19:18:39Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #ifdef _XOPEN_SOURCE #define _XOPEN_SOURCE_EXTENDED 1 #endif #include #include #include #include #include #include #include #include #include #if HAVE_ERRNO_H #include #else extern int errno; #endif #if defined(__hp9000s800) #include #endif #include "moon-buggy.h" struct mode *highscore_mode; #define SCORE_FILE "mbscore" #define MAX_NAME_CHARS 40 #define HIGHSCORE_SLOTS 100 #define qx(str) #str #define quote(str) qx(str) /* The highscore list, as read by `read_data'. */ struct score_entry { int score, level; time_t date; char name [MAX_NAME_CHARS]; int new; }; static struct score_entry highscore [HIGHSCORE_SLOTS]; static int highscore_changed; static char * compose_filename (const char *dir, const char *name) /* Concatenate the path DIR and the name NAME in a newly allocated string. */ { char *res; if (dir) { res = xmalloc (strlen(dir) + 1 + strlen(name) + 1); strcpy (res, dir); strcat (res, "/"); strcat (res, name); } else { res = xstrdup (name); } return res; } static char * local_score_file_name (void) /* Return the local score file's name. * The caller is reponsible for freeing the returned string via `free'. */ { uid_t me = getuid (); struct passwd *my_passwd = getpwuid (me); if (my_passwd && my_passwd->pw_dir) { return compose_filename (my_passwd->pw_dir, "." SCORE_FILE); } else { return compose_filename (NULL, "." SCORE_FILE); } } static char * global_score_file_name (void) /* Return the global score file's name. * The is reponsible for freeing the returned string via `free'. */ { return compose_filename (score_dir, SCORE_FILE); } static int compare_entries (const void *a, const void *b) /* Compare two score values. * This is a comparison function for the use with `qsort'. */ { const struct score_entry *aa = a; const struct score_entry *bb = b; if (aa->score > bb->score) return -1; if (aa->score < bb->score) return +1; return 0; } static void merge_entry (const struct score_entry *entry) /* Merge ENTRY into the highscore list `highscore'. * Set `highscore_changed' to 1 if the list is changed. */ { struct score_entry *last; last = highscore+(HIGHSCORE_SLOTS-1); if (entry->score > last->score) { memcpy (last, entry, sizeof (struct score_entry)); qsort (highscore, HIGHSCORE_SLOTS, sizeof (struct score_entry), compare_entries); highscore_changed = 1; } } static void randomize_entry (int n) /* Fill slot N of `highscore' with a random entry. */ { static const char *names [13] = { "Dwalin", "Balin", "Kili", "Fili", "Dori", "Nori", "Ori", "Oin", "Gloin", "Bifur", "Bofur", "Bombur", "Thorin" }; highscore[n].score = 10*(HIGHSCORE_SLOTS-n); highscore[n].level = 1; highscore[n].date = time (NULL); strcpy (highscore[n].name, names[uniform_rnd(13)]); highscore[n].new = 0; highscore_changed = 1; } static time_t expire_date (int rank, time_t date) /* Calculate the expiration date for an entry, which is at position RANK * and which was entered at DATE. */ { /* linear interpolation: rank 3 expires after 180 days, the last one * after 14 days. */ double day = 24*60*60; double rate = (180-14)*day/(HIGHSCORE_SLOTS-4); if (rank < 3) return time(NULL)+2000*day; return date + 14*day + (HIGHSCORE_SLOTS-1-rank)*rate; } static void refill_old_entries (void) /* Replace old entries of `highscore' with new random ones. */ { time_t now; int i; now = time (NULL); for (i=3; i limit) gap = limit; if (gap < 2) gap = 0; } static void center_new (void) /* Prepare `gap' in order to view values around `last_score'. */ { int limit; int i, pos; max_line = LINES-11; if (max_line > 25) max_line = 25; limit = HIGHSCORE_SLOTS-(max_line-3); for (i=1; i0) || (i=3 && i<3+gap) || line>max_line) continue; format_display_date (date, highscore[i].date); dt = difftime (expire_date (i, highscore[i].date), now); format_relative_time (expire, dt); if (highscore[i].new) wstandout (moon); mvwprintw (moon, line++, 5, "%3d %8u %-3d %s %s %." quote(MAX_NAME_CHARS) "s\n", i+1, highscore[i].score, highscore[i].level, date, expire, highscore[i].name); if (highscore[i].new) wstandend (moon); } ++line; if (last_score > 0) mvwprintw (moon, line++, 17, "your score: %d", last_score); if (my_rank > 0) mvwprintw (moon, line++, 17, "your rank: %d", my_rank); wrefresh (moon); } void score_set (int score, int level) { last_score = score; last_level = level; } static void enter_name_h (game_time t, void *client_data) { struct score_entry entry; int res; entry.score = last_score; entry.level = last_level; entry.date = time (NULL); retry: entry.name[0] = '\0'; res = get_real_user_name (entry.name, MAX_NAME_CHARS); if (res == ERR || ! entry.name[0]) { mode_redraw (); goto retry; } entry.new = 1; print_message ("writing score file ..."); doupdate (); block_all (); update_score_file (&entry); unblock (); mode_redraw (); } static void highscore_enter (int seed) { print_ground (); print_buggy (); print_message ("loading score file ..."); doupdate (); block_all (); update_score_file (NULL); highscore_valid = 1; unblock (); center_new (); if (last_score > highscore[HIGHSCORE_SLOTS-1].score) { add_event (0.0, enter_name_h, NULL); } } static void highscore_leave (void) { print_game_over (0); last_score = last_level = 0; } void highscore_redraw (void) { resize_meteors (); resize_ground (0); max_line = LINES-11; if (max_line > 25) max_line = 25; fix_gap (); print_ground (); adjust_score (0); print_lives (); print_buggy (); if (last_level > 0) print_game_over (1); if (highscore_valid) print_scores (); } static void key_handler (game_time t, int val) { switch (val) { case 1: mode_change (game_mode, 0); break; case 2: quit_main_loop (); break; case 3: if (highscore_valid) { if (gap > 2) --gap; else gap = 0; print_scores (); } break; case 4: if (highscore_valid) { if (gap < 2) gap = 2; else ++gap; fix_gap (); print_scores (); } break; case 5: if (highscore_valid) { gap -= max_line-7; fix_gap (); print_scores (); } break; case 6: if (highscore_valid) { gap += max_line-7; fix_gap (); print_scores (); } break; case 7: print_message ("reloading score file ..."); doupdate (); block_all (); update_score_file (NULL); highscore_valid = 1; unblock (); center_new (); mode_redraw (); break; } } void setup_highscore_mode (void) { highscore_mode = new_mode (); highscore_mode->enter = highscore_enter; highscore_mode->leave = highscore_leave; highscore_mode->redraw = highscore_redraw; highscore_mode->keypress = key_handler; mode_add_key (highscore_mode, mbk_start, "new game", 1); mode_add_key (highscore_mode, mbk_end, "quit", 2); mode_add_key (highscore_mode, mbk_up, "up", 3); mode_add_key (highscore_mode, mbk_down, "down", 4); mode_add_key (highscore_mode, mbk_pageup, "pg up", 5); mode_add_key (highscore_mode, mbk_pagedown, "pg down", 6); mode_add_key (highscore_mode, mbk_scores, "reload", 7); mode_complete (highscore_mode); } moon-buggy-1.0.51/realname.c0000644000175000017500000000370010407330322012524 00000000000000/* realname.c - query the user's real name * * Copyright 1999, 2000, 2006 Jochen Voss */ static const char rcsid[] = "$Id: realname.c 6825 2006-03-19 19:18:39Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #ifdef _XOPEN_SOURCE #define _XOPEN_SOURCE_EXTENDED 1 #endif #include #include #include #include #include #include #include #if defined(__hp9000s800) #include #endif #include "moon-buggy.h" int get_real_user_name (char *buffer, size_t size) /* Query the real user name. * Store the result into BUFFER, but do not write more then SIZE * characters. */ { int res, start; char *tmp; if (buffer[0] == '\0') { uid_t me = geteuid (); struct passwd *my_passwd = getpwuid (me); if (my_passwd) { int i; strncpy (buffer, my_passwd->pw_gecos, size); for (i=0; i= (int)xstrnlen(buffer, size)) { sprintf (tmpl, "please enter your name (default: \"%%.%ds\"): ", size); } else { def_size -= 2; if (def_size < 6) def_size = 6; assert (size >= 8); sprintf (tmpl, "please enter your name (default: \"%%.%ds..\"): ", def_size); } wprintw (message, tmpl, buffer); } tmp = xmalloc (size+1); show_cursor (); echo (); res = wgetnstr (message, tmp, size); noecho (); hide_cursor (); start = 0; while (start < size && tmp[start] && isspace (tmp[start])) ++start; if (start0) buffer[size-start] = '\0'; } free (tmp); return res; } moon-buggy-1.0.51/queue.c0000644000175000017500000001646007646332470012114 00000000000000/* queue.c - a queue of events to happen * * Copyright 1999, 2000 Jochen Voss */ static const char rcsid[] = "$Id: queue.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #ifdef _XOPEN_SOURCE #define _XOPEN_SOURCE_EXTENDED 1 #endif #include #include #include #include #include #ifdef HAVE_SYS_SELECT_H #include #endif #include #include #ifdef HAVE_ERRNO_H #include #else extern int errno; #endif #include #if defined(__hp9000s800) #include #endif #include "moon-buggy.h" /* The queue of events */ struct event { struct event *next; game_time t; /* time, when the event should happen */ callback_fn callback; /* function to call */ void *client_data; /* argument to pass */ }; static struct event *queue; /********************************************************************** * convert between game time and real time */ typedef double real_time; /* The type `game_time' is relative to `time_base'. */ static double time_base; static real_time to_real (game_time t) { return t + time_base; } static game_time to_game (real_time t) { return t - time_base; } game_time current_time (void) { return to_game (vclock ()); } /********************************************************************** * wait for timeouts or keyboard input */ static int my_select (struct timeval *timeout) /* Wait until input is ready on stdin or a timeout is reached. * TIMEOUT has the same meaning, as is has for the `select' system * call. The return value is 0 if we return because of a timeout, * positive if input is ready, and negative if a signal occured. In * the latter case we must calculate a new TIMEOUT value and call * `my_select' again. */ { fd_set rfds; int res; /* Watch stdin (fd 0) to see when it has input. */ FD_ZERO (&rfds); FD_SET (0, &rfds); if (handle_signals ()) return -1; res = select (FD_SETSIZE, &rfds, NULL, NULL, timeout); if (res < 0) { if (errno == EINTR) { handle_signals (); } else { fatal ("Select failed: %s", strerror (errno)); } } return res; } static int key_ready (void) /* Return a positive value iff keyboard input is ready. */ { int res; do { struct timeval ancient_time; ancient_time.tv_sec = 0; ancient_time.tv_usec = 0; res = my_select (&ancient_time); } while (res < 0); return res; } static void wait_for_key (void) { int res; do { res = my_select (NULL); } while (res < 0); } static int wait_until (game_time t, real_time *t_return) /* Wait for time *T or the next key press, whichever comes first. * Return a positive value, if a key was pressed, and 0 else. * Set *T_RETURN to the return time. */ { double start; int res; do { double dt, sec, usec; struct timeval tv; start = vclock (); dt = to_real(t) - start; if (dt <= 0) { *t_return = start; return key_ready (); } usec = 1e6 * modf (dt, &sec) + 0.5; tv.tv_sec = sec + 0.5; tv.tv_usec = usec + 0.5; res = my_select (&tv); } while (res < 0); *t_return = vclock (); return res; } static void drain_input (void) /* Discard all data from the input queue. */ { char buffer [16]; int oldflags; oldflags = fcntl (0, F_GETFL, 0); if (oldflags < 0) { fatal ("Cannot get file status flags (%s)", strerror (errno)); } fcntl (0, F_SETFL, oldflags|O_NONBLOCK); while (read (0, buffer, 16) == 16) ; fcntl (0, F_SETFL, oldflags); } void clock_reset (void) /* Adjust the clock to make 0 the current time. */ { time_base = vclock (); } static void dummy_h (game_time t, void *client_data) /* This function is a possible callback argument to `add_event'. * It does nothing. */ { return; } void clock_freeze (void) /* Prepare to freeze the game's clock. * This function should be called before the game is resumed. * Afterwards you should use `clock_thaw ()' to restart the * game in the current state. If the next event is less then 0.1 * seconds in the future, we add some gap to allow for 0.1 seconds * pause after the restart. */ { game_time t; remove_event (dummy_h); t = current_time (); if (queue && t >= queue->t - 0.1) t = queue->t - 0.1; add_event (t, dummy_h, NULL); } void clock_thaw (void) /* Adjust the clock to make the next event occur immediately. * The queue must contain at least one element. */ { assert (queue); time_base = vclock () - queue->t; } void clear_queue (void) /* Remove all events from the queue. */ { struct event *ev; ev = queue, queue = NULL; while (ev) { struct event *old = ev; ev = old->next; free (old); } drain_input (); } void add_event (game_time t, callback_fn callback, void *client_data) /* Add a new event for time T to the queue. * The event calls function CALLBACK with argument CLIENT_DATA. */ { struct event **evp; struct event *ev; evp = &queue; while (*evp && (*evp)->t <= t) evp = &((*evp)->next); ev = xmalloc (sizeof (struct event)); ev->next = *evp; ev->t = t; ev->callback = callback; ev->client_data = client_data; *evp = ev; } void remove_event (callback_fn callback) /* Remove all events from the queue, which would call CALLBACK. */ { struct event **evp; evp = &queue; while (*evp) { struct event *ev = *evp; if (ev->callback == callback) { *evp = (*evp)->next; free (ev); } else { evp = &((*evp)->next); } } } void remove_client_data (void *client_data) /* Remove all events from the queue, which refer to CLIENT_DATA. */ { struct event **evp; evp = &queue; while (*evp) { struct event *ev = *evp; if (ev->client_data == client_data) { *evp = (*evp)->next; free (ev); } else { evp = &((*evp)->next); } } } /********************************************************************** * the main loop */ static int exit_flag; void quit_main_loop (void) { exit_flag = 1; } void main_loop (void) { clock_reset (); exit_flag = 0; while (! exit_flag) { int retval; double t; mode_update (); if (queue) { retval = wait_until (queue->t, &t); } else { wait_for_key (); t = vclock (); retval = 1; } if (retval>0) { int meaning = read_key (); if (meaning != -1) { if (! mode_keypress (to_game (t), meaning)) beep (); } } while (queue && queue->t <= current_time ()) { struct event *ev = queue; queue = queue->next; ev->callback (ev->t, ev->client_data); free (ev); } } } /********************************************************************** * some handlers for the main loop above */ void print_hint_h (game_time t, void *client_data) /* This function is a possible callback argument to `add_event'. * It causes the level hint (const char *)CLIENT_DATA to be * displayed for 4 seconds. */ { print_hint (client_data); remove_event (clear_hint_h); add_event (t+4, clear_hint_h, NULL); } void clear_hint_h (game_time t, void *client_data) /* This function is a possible callback argument to `add_event'. * It causes the screen's hint area to be cleared. * The arguments T and CLIENT_DATA are ignored. */ { wmove (moon, LINES-11, 0); wclrtoeol (moon); wnoutrefresh (moon); } moon-buggy-1.0.51/vclock.c0000644000175000017500000000116510057171625012236 00000000000000/* vclock.c - high-precision wall clock time * * Copyright 1998 Jochen Voss. */ static const char rcsid[] = "$Id: vclock.c 5726 2004-06-01 21:22:28Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #ifdef _XOPEN_SOURCE #define _XOPEN_SOURCE_EXTENDED 1 #endif #include #if defined(__hp9000s800) #include #endif #include "moon-buggy.h" double vclock (void) /* Return the elapsed (wall clock) time (measured in seconds) since * some base time with greater precision than `time()' does. */ { struct timeval x; gettimeofday (&x, NULL); return (x.tv_sec + x.tv_usec*1.0e-6); } moon-buggy-1.0.51/date.c0000644000175000017500000000457207646332467011714 00000000000000/* date.c - handle the highscore list's date entries * * Copyright (C) 2000 Jochen Voss. */ static const char rcsid[] = "$Id: date.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include "moon-buggy.h" time_t parse_date (const char *str) /* Read the date from STR and convert it to a `time_t'. * This is used to decode highscore entries. */ { struct tm broken; sscanf (str, "%d-%d-%d %d:%d:%d", &broken.tm_year, &broken.tm_mon, &broken.tm_mday, &broken.tm_hour, &broken.tm_min, &broken.tm_sec); broken.tm_year -= 1900; broken.tm_mon -= 1; broken.tm_isdst = -1; return mktime (&broken); } time_t convert_old_date (int day, int month, int year) { struct tm broken; broken.tm_year = year-1900; broken.tm_mon = month-1; broken.tm_mday = day; broken.tm_hour = 12; broken.tm_min = 0; broken.tm_sec = 0; return mktime (&broken); } void format_date (char *buffer, time_t date) /* Into the BUFFER format a textual representation of DATE. * Buffer must contain at least MAX_DATE_CHARS characters. * The filled-in string is feasible for parsing with `parse_date'. */ { struct tm *loctime; loctime = localtime (&date); sprintf (buffer, "%d-%d-%d %d:%d:%d", loctime->tm_year+1900, loctime->tm_mon+1, loctime->tm_mday, loctime->tm_hour, loctime->tm_min, loctime->tm_sec); } void format_display_date (char *buffer, time_t date) /* Into the BUFFER format a textual representation of DATE. * Buffer must contain at least 11 characters. The filled-in string * is meant to be part of the displayed highscore list. */ { struct tm *loctime; loctime = localtime (&date); sprintf (buffer, "%4d-%02d-%02d", loctime->tm_year+1900, loctime->tm_mon+1, loctime->tm_mday); } void format_relative_time (char *buffer, double dt) /* Into the BUFFER format a textual representation of time period DT. * Buffer must contain at least 5 characters. The filled-in string * is meant to be part of the displayed highscore list. */ { double hour = 60*60; double day = 24*hour; if (dt <= 0) { sprintf (buffer, "soon"); } else if (dt > 999*day) { sprintf (buffer, " -- "); } else if (dt >= day) { sprintf (buffer, "%3dd", (int)(dt/day+0.5)); } else if (dt >= hour) { sprintf (buffer, "%3dh", (int)(dt/hour+0.5)); } else { sprintf (buffer, "%3dm", (int)(dt/60+0.5)); } } moon-buggy-1.0.51/persona.c0000644000175000017500000000545607646332466012447 00000000000000/* persona.c - handle the persona of the process * * Copyright 1999 Jochen Voss */ static const char rcsid[] = "$Id: persona.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #ifdef _XOPEN_SOURCE #define _XOPEN_SOURCE_EXTENDED 1 #endif #include #include #include #include #if defined(__hp9000s800) #include #endif #include "moon-buggy.h" /* which method of uid handling is used? */ static enum { m_NONE, m_SAVED, m_EXCH } method = m_NONE; /* the current effective user id */ static enum persona current = pers_GAME; /* The real and effective ids */ static uid_t user_uid, game_uid; static gid_t user_gid, game_gid; void initialise_persona (void) { long int saved_ids_flag; current = pers_GAME; method = m_NONE; user_uid = getuid (); game_uid = geteuid (); user_gid = getgid (); game_gid = getegid (); if (user_uid == game_uid && user_gid == game_gid) return; /* check for the POSIX saved id feature. */ #ifdef _POSIX_SAVED_IDS saved_ids_flag = 1; #else /* not defined(_POSIX_SAVED_IDS) */ saved_ids_flag = sysconf (_SC_SAVED_IDS); #endif /* not defined(_POSIX_SAVED_IDS) */ if (saved_ids_flag != -1) { method = m_SAVED; return; } #ifdef HAVE_SETREUID method = m_EXCH; #else fputs ("WARNING: setuid/setgid usage not supported on this system!\n", stderr); sleep (3); setuid (user_uid); setgid (user_gid); method = m_NONE; #endif } int is_setgid (void) /* Return true, iff the game is run setgid and we currently use * privileged access. */ { return (user_gid != game_gid && current == pers_GAME); } static char *name[] = { "game", "user" }; void set_persona (enum persona pers) /* Switch to process persona (effective user id) PERS. */ { int res; uid_t old_uid, new_uid; gid_t old_gid, new_gid; if (current == pers) return; switch (pers) { case pers_GAME: old_uid = user_uid; new_uid = game_uid; old_gid = user_gid; new_gid = game_gid; break; case pers_USER: old_uid = game_uid; new_uid = user_uid; old_gid = game_gid; new_gid = user_gid; break; default: abort (); /* should not happen */ } switch (method) { case m_NONE: break; case m_SAVED: res = setuid (new_uid); if (res < 0) fatal ("Cannot set uid to %s", name[pers]); res = setgid (new_gid); if (res < 0) fatal ("Cannot set gid to %s", name[pers]); break; case m_EXCH: #ifdef HAVE_SETREUID res = setreuid (old_uid, new_uid); if (res < 0) fatal ("Cannot switch real/effective uid to %s", name[pers]); res = setregid (old_gid, new_gid); if (res < 0) fatal ("Cannot switch real/effective gid to %s", name[pers]); #else abort (); /* should not happen */ #endif break; } current = pers; } moon-buggy-1.0.51/signal.c0000644000175000017500000001007107646332467012243 00000000000000/* signal.c - signal handling * * Copyright 1999, 2000, 2001 Jochen Voss. */ static const char rcsid[] = "$Id: signal.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include "moon-buggy.h" #include "darray.h" struct sig_info { int signum; volatile sig_atomic_t pending; void (*handler) (int); }; static struct { struct sig_info *data; int slots, used; } sig_info_table; static volatile sig_atomic_t signal_arrived; static sigset_t full_set, old_sigset; void block_all (void) /* Block all signals until `unblock' is called. */ { sigprocmask (SIG_BLOCK, &full_set, &old_sigset); } void unblock (void) /* Undo the effect of `block_all'. */ { sigprocmask (SIG_SETMASK, &old_sigset, NULL); } static void install_signal (int signum, RETSIGTYPE (*handler) ()) /* Emulate the `signal' function via `sigaction'. */ { struct sigaction action; int ret; action.sa_handler = handler; sigemptyset (&action.sa_mask); action.sa_flags = 0; ret = sigaction (signum, &action, NULL); assert (ret == 0); } static RETSIGTYPE generic_handler (int signum) /* Interrupt handlers shouldn't do much. So we just note that the * signal arrived. */ { int i; signal_arrived = 1; for (i=0; isignum = signum; info->pending = 0; info->handler = handler; install_signal (signum, generic_handler); } /************************************************************ * signal handlers */ static void termination_handler (int signum) { prepare_for_exit (); fprintf (stderr, "GAME ABORTED (signal %d)\n", signum); /* We did `signal (signum, SIG_DFL)' in `generic_handler'. */ raise (signum); } static void tstp_handler (int signum) { clock_freeze (); mode_signal (signum); prepare_for_exit (); install_signal (SIGTSTP, SIG_DFL); raise (SIGTSTP); } static void cont_handler (int signum) { install_signal (SIGTSTP, tstp_handler); refresh (); prepare_screen (); mode_redraw (); mode_signal (signum); clock_thaw (); } static void winch_handler (int signum) { clock_freeze (); delwin (moon); delwin (status); delwin (message); sleep (1); endwin (); refresh (); allocate_windows (); hide_cursor (); mode_redraw (); clock_thaw (); } /************************************************************ * The outside-visible entry point */ void initialise_signals (void) { DA_INIT (sig_info_table, struct sig_info); my_signal (SIGINT, termination_handler, 1); my_signal (SIGHUP, termination_handler, 1); my_signal (SIGTERM, termination_handler, 1); my_signal (SIGCONT, cont_handler, 0); my_signal (SIGTSTP, tstp_handler, 0); #ifdef SIGWINCH my_signal (SIGWINCH, winch_handler, 0); #endif sigfillset (&full_set); } int handle_signals (void) /* Execute signal actions, for all signals, which occured before. * Return 1, if any action was taken. */ { int res = 0; while (signal_arrived) { int i; signal_arrived = 0; res = 1; for (i=0; i #endif #include #include #include #include #if HAVE_ERRNO_H #include #else extern int errno; #endif #include "moon-buggy.h" struct hash_entry { struct hash_entry *next; int key_code; int meaning; int priority; }; #define HASH_SIZE 37 struct hash_entry *hash_table [HASH_SIZE]; static unsigned m_mod (int x, int y) { int r = x%y; return r<0 ? (y<0 ? r-y : r+y) : r; } static struct hash_entry ** locate (int key_code) { int slot = m_mod (key_code, HASH_SIZE); struct hash_entry **res = &hash_table[slot]; while (*res && (*res)->key_code != key_code) res = &((*res)->next); return res; } static void add_key (int key_code, enum mb_key meaning, int priority) { struct hash_entry **entry_p; #if NCURSES_VERSION_MAJOR >= 4 if ((key_code < 0 || key_code > 255) && ! has_key (key_code)) return; #endif entry_p = locate (key_code); if (! *entry_p) { *entry_p = xmalloc (sizeof (struct hash_entry)); (*entry_p)->next = NULL; (*entry_p)->key_code = key_code; (*entry_p)->meaning = 0; (*entry_p)->priority = priority; } (*entry_p)->meaning |= meaning; } void install_keys (void) { int i; for (i=0; i', mbk_last, 90); #ifdef KEY_END add_key (KEY_END, mbk_last, 100); #endif add_key (' ', mbk_pagedown, 90); #ifdef KEY_NPAGE add_key (KEY_NPAGE, mbk_pagedown, 100); #endif add_key ('b', mbk_pageup, 90); #ifdef KEY_PPAGE add_key (KEY_PPAGE, mbk_pageup, 100); #endif add_key ('y', mbk_start, 100); add_key (' ', mbk_start, 90); add_key (10, mbk_start, 80); /* RET */ add_key (16, mbk_up, 80); /* \C-p */ #ifdef KEY_UP add_key (KEY_UP, mbk_up, 100); #endif add_key ('w', mbk_warranty, 100); add_key ('s', mbk_scores, 100); add_key ('r', mbk_redraw, 20); add_key (12, mbk_redraw, 10); /* \C-l */ } int read_key (void) { int key_code; struct hash_entry **entry_p; do { key_code = wgetch (moon); } while (key_code == ERR && errno == EINTR); if (key_code == ERR) fatal ("Cannot read keyboard input"); #ifdef KEY_RESIZE if (key_code == KEY_RESIZE) return -1; #endif if (key_code < 256 && isalpha (key_code)) key_code = tolower (key_code); entry_p = locate (key_code); return *entry_p ? (*entry_p)->meaning : 0; } static int function_key (int key) { return key>255 || key == ' ' || key == 10; } static int control_key (int key) { return key >= 1 && key <= 26; } char * key_name (int key) /* Convert a key code into a string. * The retured string must not be modified by the caller. Subsequent * calls to `key_name' may overwrite the returned string. * If the key's name is unknown, NULL is returned. */ { static char buffer [8]; int i; #ifdef KEY_BACKSPACE if (key == KEY_BACKSPACE) return "BS"; #endif #ifdef KEY_BEG if (key == KEY_BEG) return "BEG"; #endif #ifdef KEY_BREAK if (key == KEY_BREAK) return "BREAK"; #endif #ifdef KEY_CANCEL if (key == KEY_CANCEL) return "CANCEL"; #endif #ifdef KEY_CLOSE if (key == KEY_CLOSE) return "CLOSE"; #endif #ifdef KEY_DC if (key == KEY_DC) return "DEL"; #endif #ifdef KEY_DOWN if (key == KEY_DOWN) return "DOWN"; #endif #ifdef KEY_END if (key == KEY_END) return "END"; #endif #ifdef KEY_ENTER if (key == KEY_ENTER) return "ENTER"; #endif #ifdef KEY_EXIT if (key == KEY_EXIT) return "EXIT"; #endif #ifdef KEY_HOME if (key == KEY_HOME) return "HOME"; #endif #ifdef KEY_IC if (key == KEY_IC) return "INS"; #endif #ifdef KEY_LEFT if (key == KEY_LEFT) return "LEFT"; #endif #ifdef KEY_NPAGE if (key == KEY_NPAGE) return "NEXT"; #endif #ifdef KEY_PPAGE if (key == KEY_PPAGE) return "PREV"; #endif #ifdef KEY_RIGHT if (key == KEY_RIGHT) return "RIGHT"; #endif #ifdef KEY_UNDO if (key == KEY_UNDO) return "UNDO"; #endif #ifdef KEY_UP if (key == KEY_UP) return "UP"; #endif #ifdef KEY_F0 for (i=0; i<64; ++i) { if (key == KEY_F(i)) { sprintf (buffer, "F%d", i); return buffer; } } #endif if (key > 255) return NULL; if (key == ' ') return "SPC"; if (key == 10) return "RET"; if (isgraph (key)) { sprintf (buffer, "%c", key); return buffer; } if (control_key (key)) { sprintf (buffer, "C-%c", key+'a'-1); return buffer; } return NULL; } #define MAX_KEYS 16 struct key_name { char name [8]; int priority, base_priority; } data [MAX_KEYS]; struct key_info { int fn, ctrl, norm; int k; struct key_name data [MAX_KEYS]; }; static void set_display_priorities (struct key_name *data, int k) { int i; for (i=0; ipriority < bb->priority) return +1; if (aa->priority > bb->priority) return -1; if (strlen (aa->name) < strlen (bb->name)) return -1; if (strlen (aa->name) > strlen (bb->name)) return +1; return strcmp (aa->name, bb->name); } static int choose_keys (int *n, const struct binding *b, struct key_info *keys, int max_len) /* Choose the keys to explain, based on available display space. * Input are *N key bindings in the array B and the corresponding key * names in KEYS. The resulting explanation must fit within MAX_LEN * characters. * * This function may decrease *N and clear the priority values of * some keys in order to exclude keys from the explanation. */ { int finished; int *first; int i, k, len; /* Is there enough space to explain all functions? */ len = max_len; for (i=0; i<*n; ++i) { int x; x = (i>0) ? 1 : 0; /* " " */ x += 2 + strlen(b[i].desc); /* "x:desc" */ if (len >= x) { len -= x; } else { *n=i; break; } } /* How much space do we have left? */ len = max_len; first = xmalloc (*n * sizeof(int)); for (i=0; i<*n; ++i) { first[i] = 1; if (i>0) --len; /* " " */ len -= 1 + strlen(b[i].desc); /* ":desc" */ } finished = 0; for (k=0; ! finished; ++k) { finished = 1; for (i=0; i<*n; ++i) { if (k < keys[i].k) { int x; x = first[i] ? 0 : 1; /* "," */ x += strlen (keys[i].data[k].name); if (x <= len) { len -= x; first[i] = 0; } else { keys[i].data[k].base_priority = 0; } finished = 0; } } } free (first); for (i=0; i<*n; ++i) { set_display_priorities (keys[i].data, keys[i].k); qsort (keys[i].data, keys[i].k, sizeof (struct key_name), compare_keys); } return len; } void describe_keys (int n, const struct binding *b) { struct key_info *keys; char* buffer; int len, max_len; int i, j, k; keys = xmalloc (n*sizeof(struct key_info)); for (i=0; imeaning & b[i].meanings) { char *name = key_name (ent->key_code); if (name) { k = keys[i].k++; strncpy (keys[i].data[k].name, name, 7); keys[i].data[k].name[7] = 0; keys[i].data[k].base_priority = ent->priority; keys[i].data[k].priority = ent->priority; if (function_key (ent->key_code)) { if (keys[i].fn == 0) keys[i].data[k].priority += 1050; ++keys[i].fn; } else if (control_key (ent->key_code)) { if (keys[i].ctrl == 0) keys[i].data[k].priority += 1000; ++keys[i].ctrl; } else { keys[i].data[k].priority += 1100; ++keys[i].norm; } } break; } } ent = ent->next; } } for (i=0; i0) { if (len > 0) { --len; strcat (buffer, " "); } else { strcat (buffer, " "); } } first = 0; } strcat (buffer, keys[i].data[k].name); } } if (keys[i].data[0].priority) { strcat (buffer, ":"); strcat (buffer, b[i].desc); } } print_message (buffer); free (buffer); free (keys); } moon-buggy-1.0.51/terminal.c0000644000175000017500000000467507646332467012616 00000000000000/* terminal.c - prepare the terminal * * Copyright (C) 2000 Jochen Voss. */ static const char rcsid[] = "$Id: terminal.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H # include #endif #ifdef _XOPEN_SOURCE #define _XOPEN_SOURCE_EXTENDED 1 #endif #include #include #include #if HAVE_ERRNO_H #include #else extern int errno; #endif #if HAVE_TERMIOS_H #include #endif #include #include "moon-buggy.h" static mode_t term_mode; /* The terminal mode before we changed it */ static int term_mode_valid; /* true iff the above is valid */ static int attributes_changed; /* true iff we changed the IXON attribute */ void term_prepare (int mesg_n_flag) /* Prepare the terminal for game play. * This tries to disable the C-s key and, if MESG_N_FLAG is set, * restricts write access to the terminal as "mesg n" would do. */ { struct stat st; #if HAVE_TERMIOS_H struct termios settings; #endif int res; assert (! term_mode_valid); if ( ! isatty (0) ) return; if (mesg_n_flag) { res = fstat (0, &st); if (res < 0) fatal ("Cannot get terminal attributes: %s", strerror (errno)); term_mode = st.st_mode; term_mode_valid = 1; st.st_mode &= ~(S_IWGRP|S_IWOTH); res = fchmod (0, st.st_mode); if (res < 0) fatal ("Cannot set terminal permissions: %s", strerror (errno)); } #if HAVE_TERMIOS_H res = tcgetattr (0, &settings); if (res < 0) fatal ("Cannot get terminal attributes: %s", strerror (errno)); if (settings.c_iflag & IXON) { settings.c_iflag &= ~IXON; res = tcsetattr (0, TCSANOW, &settings); if (res < 0) fatal ("Cannot set terminal attributes: %s", strerror (errno)); attributes_changed = 1; } #endif } void term_restore (void) /* Restore the terminal's original access mode. */ { #if HAVE_TERMIOS_H struct termios settings; #endif int res; #if HAVE_TERMIOS_H if (attributes_changed) { res = tcgetattr (0, &settings); if (res < 0) fatal ("Cannot get terminal attributes: %s", strerror (errno)); settings.c_iflag |= IXON; res = tcsetattr (0, TCSANOW, &settings); if (res < 0) fatal ("Cannot set terminal attributes: %s", strerror (errno)); } #endif if (term_mode_valid) { res = fchmod (0, term_mode); if (res < 0) fatal ("Cannot restore terminal permissions: %s", strerror (errno)); term_mode_valid = 0; } } moon-buggy-1.0.51/cursor.c0000644000175000017500000000075307646332470012303 00000000000000/* cursor.c - handle the cursor's visibility * * Copyright (C) 2000 Jochen Voss. */ static const char rcsid[] = "$Id: cursor.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include "moon-buggy.h" void hide_cursor (void) { leaveok (moon, TRUE); leaveok (status, TRUE); leaveok (message, TRUE); curs_set (0); } void show_cursor (void) { curs_set (1); leaveok (moon, FALSE); leaveok (status, FALSE); leaveok (message, FALSE); } moon-buggy-1.0.51/random.c0000644000175000017500000000124107646332470012237 00000000000000/* random.c - generate pseudo random numbers * * Copyright 1999 Jochen Voss. */ static const char rcsid[] = "$Id: random.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "moon-buggy.h" void init_rnd (void) /* Initialise the random number generator with a random seed. * The seed is based on the current time. */ { srand (time (0)); } int uniform_rnd (unsigned limit) /* Returns a pseudo random integer `x' with `0 <= x < limit'. * The numbers a uniformly distributed. */ { assert (limit > 1); return (int)((double)limit*rand()/(RAND_MAX+1.0)); } moon-buggy-1.0.51/error.c0000644000175000017500000000140207646332466012114 00000000000000/* error.c - functions to signal error conditions * * Copyright 1999 Jochen Voss */ static const char rcsid[] = "$Id: error.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include "moon-buggy.h" void fatal (const char *format, ...) /* Signal a fatal error and quit immediately. The arguments have the * same meaning, as in the function `printf'. * The message should start with a capital letter. */ { va_list ap; prepare_for_exit (); va_start (ap, format); fflush (NULL); fputs ("Fatal error: ", stderr); vfprintf (stderr, format, ap); fputc ('\n', stderr); va_end (ap); exit (EXIT_FAILURE); } moon-buggy-1.0.51/xmalloc.c0000644000175000017500000000144707646332465012432 00000000000000/* xmalloc.c - memory allocation with error checking * * Copyright 1998 Jochen Voss */ static const char rcsid[] = "$Id: xmalloc.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include #include "moon-buggy.h" void * xmalloc (size_t size) /* Like `malloc', but check for shortage of memory. `xmalloc' never * returns `NULL'. */ { void *ptr = malloc (size); if (ptr == NULL) fatal ("Memory exhausted"); return ptr; } void * xrealloc (void *ptr, size_t size) /* Like `realloc', but check for shortage of memory. `xrealloc' never * returns `NULL'. */ { void *tmp; if (ptr) { tmp = realloc (ptr, size); } else { tmp = malloc (size); } if (tmp == NULL) fatal ("Memory exhausted"); return tmp; } moon-buggy-1.0.51/xstrdup.c0000644000175000017500000000147507646332467012507 00000000000000/* xstrdup.c - fail save strdup * * Copyright 1998 Jochen Voss. */ static const char rcsid[] = "$Id: xstrdup.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include #include "moon-buggy.h" char * xstrdup (const char *str) /* Duplicate STR as `strdup' does, but never return NULL. */ { char *tmp = xmalloc (strlen(str) + 1); strcpy (tmp, str); return tmp; } size_t xstrnlen (const char *str, size_t size) { size_t n = 0; while (n #ifndef DA_MALLOC #define DA_MALLOC xmalloc #endif /* not DA_MALLOC */ #ifndef DA_REALLOC #define DA_REALLOC xrealloc #endif /* not DA_REALLOC */ #ifndef DA_INC #define DA_INC 4 #endif /* not DA_INC */ #define DA_INIT(x,type) \ do { \ (x).slots = DA_INC; \ (x).data = (type*)DA_MALLOC((x).slots*sizeof(type)); \ (x).used = 0; \ } while(0) #define DA_CLEAR(x) \ (x).used = 0 #define DA_ADD(x,type,val) \ do { \ if ((x).used >= (x).slots) { \ (x).slots += DA_INC; \ (x).data = (type*)DA_REALLOC ((x).data, \ (x).slots*sizeof(type)); \ } \ (x).data[(x).used] = val; \ (x).used += 1; \ } while(0) #define DA_ADD_EMPTY(x,type,ptr) \ do { \ if ((x).used >= (x).slots) { \ (x).slots += DA_INC; \ (x).data = (type*)DA_REALLOC ((x).data, \ (x).slots*sizeof(type)); \ } \ ptr = (x).data+(x).used; \ (x).used += 1; \ } while(0) #define DA_REMOVE(x,type,idx) \ do { \ int _idx = (idx); \ memmove((x).data+_idx, (x).data+_idx+1, \ ((x).used-_idx-1)*sizeof(type)); \ (x).used -= 1; \ } while(0) #define DA_REMOVE_VALUE(x,type,val) \ do { \ int _i = 0; \ while (_i < (x).used) { \ if ((x).data[_i] == (val)) { \ memmove((x).data+_i, (x).data+_i+1, \ ((x).used-_i-1)*sizeof(type)); \ (x).used -= 1; \ } else { \ ++_i; \ } \ } \ } while(0) #endif /* FILE_DARRAY_H_SEEN */ moon-buggy-1.0.51/hpath.c0000644000175000017500000000042707646332467012076 00000000000000/* hpath.c - the central highscore file location * * Copyright 1999 Jochen Voss */ static const char rcsid[] = "$Id: hpath.c 4839 2003-04-13 16:50:02Z voss $"; #ifdef HAVE_CONFIG_H #include #endif #include "moon-buggy.h" const char *score_dir = SCORE_DIR; moon-buggy-1.0.51/moon-buggy.texi0000644000175000017500000002612410164022135013557 00000000000000\input texinfo @c -*-texinfo-*- @c $Id: moon-buggy.texi,v 1.15 2003/02/18 10:41:37 voss Exp $ @c %**start of header @setfilename moon-buggy.info @settitle Moon-Buggy Usage and Maintenance @include version.texi @c %**end of header @dircategory Games @direntry * moon-buggy: (moon-buggy). Drive some car across the moon @end direntry @ifinfo This file documents moon-buggy, a simple character graphics game. Copyright 1999, 2000 Jochen Vo@ss{} Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. @ignore Permission is granted to process this file through TeX and print the results, provided the printed document carries a copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. @end ifinfo @setchapternewpage off @titlepage @title Moon-Buggy Usage and Maintenance @subtitle @value{UPDATED} @subtitle Edition @value{EDITION} @sp 8 @center @image{title,,} @author by Jochen Vo@ss{} @page @vskip 0pt plus 1filll Copyright @copyright{} 1999, 2000 Jochen Vo@ss{} Published by Jochen Vo@ss{} Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. @end titlepage @headings double @node Top, Introduction, (dir), (dir) @ifinfo Moon-buggy is a simple character graphics game, where you drive some kind of car across the moon's surface. Unfortunately there are dangerous craters there. Fortunately your car can jump over them! This edition (last updated @value{UPDATED}) of the manual applies to version @value{VERSION} of the program. @end ifinfo @menu * Introduction:: Introduction * Moon-buggy Invocation:: Moon-buggy Invocation * Playing the Game:: Keyboard commands * Shared Score Files:: Competition via the highscore table * Installation:: Installation and setup * References:: References @end menu @node Introduction, Moon-buggy Invocation, Top, Top @chapter Introduction Moon-buggy is a simple character graphics game, where you drive some kind of car across the moon's surface. Unfortunately there are dangerous craters there. Fortunately your car can jump over them! Moon-Buggy comes with no warranty, to the extent permitted by law. You may redistribute copies of Moon-Buggy under the terms of the GNU General Public License. For more information about these matters, read the file @file{COPYING} of the source code distribution or press @key{c} at moon-buggy's title screen. Please mail any suggestions and bug reports to @email{voss@@seehuhn.de}. Your message should include the moon-buggy version number, as obtained by the command @samp{moon-buggy -V}. New versions of Moon-buggy may be found on the sunsite ftp server or on the moon-buggy download page (@pxref{References}). @node Moon-buggy Invocation, Playing the Game, Introduction, Top @chapter Moon-buggy Invocation Normal usage is to start @samp{moon-buggy} without any options. Nevertheless there are some. The long options (starting with @samp{--}) are only supported on some system types. @table @samp @item -h @itemx --help shows a short usage message. @item -m @itemx --mesg disable write access to your terminal by other users, so your boss can't disturb your game play with the help of "write" or "finger". @item -n @itemx --no-title skips the title screen. @item -s @itemx --show-scores shows the current highscore list and exits. @item -V @itemx --version prints the program's version to standard output and exits. @end table @node Playing the Game, Shared Score Files, Moon-buggy Invocation, Top @chapter Playing the Game The game is controlled by a couple of keys, which are described near the bottom of the screen. Most important are the following keys. @table @key @item SPC @itemx j makes your car jump. The length of a jump is fixed and you can only start a new jump while the wheels have contact to the ground. @item a @itemx l fires the mining laser. The laser is used to remove stones, which may block your way. @item q quits the game prematurely. But you still keep your score and may enter the highscore list. @end table Moon-buggy can handle a wide range of screen sizes. But it runs best if the screen has at least 80 columns. If you run it on a screen with significantly less columns it may look strange and could be hard to play. @node Shared Score Files, Installation, Playing the Game, Top @chapter Shared Score Files Moon-buggy has two concepts of score files: the @dfn{global score file} is located somewhere in the installation directories and is shared between all players. The exact place in the file system can be controlled via @code{configure}'s @samp{--sharedstatedir} option. This highscore file is used whenever Moon-buggy has the permissions to access it. Otherwise the @dfn{local score file} is used. This file is located in the user's home directory, the file name is @file{.mbscore}. Thus, the local score file is not shared between different accounts. As the game is much more fun, when players can compete for the highest scores, the global score file should be writable for the moon-buggy program (but not for the user's text editor). Here is a list of possible policies: @enumerate @item The preferred solution is to make moon-buggy a setgid program. This means the following: you choose a group ID, which cannot be used by ordinary users, and allow only members of this group to write the score file. Many systems have a group @samp{games} for this purpose (Check your @file{/etc/group} file). You make this group own the @file{moon-buggy} executable and set the file's setgid bit. This bit gives moon-buggy its file groups's access permissions and so the program is able to access the score file. You can use @code{configure}'s @samp{--with-setgid} option (@pxref{Installation}) to properly set up access permissions for this model. @item You could make moon-buggy a setuid program but for security reasons this is not recommended. The file @file{SECURITY} from the bsd-games distribution (@pxref{References}) has some informations about this topic. @item Another solution is to make the score file world writable. But then you have to trust your players: every player may open the score file with his favourite text editor and change it freely. So this is not recommended, too. @item Finally you could do nothing. Then every account uses its local score file. @end enumerate @node Installation, References, Shared Score Files, Top @chapter Installation Moon-buggy requires the curses library as a prerequisite. If curses is not installed on your system, you may use the free ncurses package (@pxref{References}). The game does not work with BSD curses, thus on BSD systems you will need the ncurses package. When you unpack the moon-buggy distribution, you get one directory, which holds all the source files and the documentation. Generic installation instructions are in the file @file{INSTALL}. There are some points of interest: @itemize @bullet @item By default, the program will be installed as @file{/usr/local/bin/moon-buggy}. You can specify an installation prefix other than @file{/usr/local} by giving @samp{configure} the @samp{--prefix=@var{path}} option. @item You can choose the score file's location via @code{configure}'s @samp{--sharedstatedir=@var{dir}} option. The score file then will be @file{@var{dir}/moonbuggy/mbscore}. On GNU/Linux systems you should use @example --sharedstatedir=/var/games @end example @noindent to comply with the Filesystem Hierarchy Standard (@pxref{References}). @item Moon-buggy supports shared score files. For details, see @ref{Shared Score Files}. As explained there, you may want to make moon-buggy a setgid program. This can be done with the @samp{--with-setgid} option. If you use @example --with-setgid=games @end example @noindent then the installation process arranges everything for setgid usage. @strong{Caution}: this introduces potential security risks. I tried to minimise these, but nevertheless be careful with this. And remember: moon-buggy comes with no warranty. @item If your version of the curses library is not autodetected, you have to use some of the @samp{--with-curses-includedir}, @samp{--with-curses-header}, and @samp{--with-curses-libs} options. For example you should use @example --with-curses-includedir=/usr/pkg/include @end example @noindent if your curses header files are in @file{/usr/pkg/include/}. You may use @example --with-curses-header="" @end example @noindent if your curses header is called @file{mycurses.h}. And you may use @example --with-curses-libs="-L/usr/pkg/lib -lncurses" @end example @noindent if your curses library is called @file{ncurses.a} and is located in @file{/usr/pkg/lib/}. @end itemize Example: On GNU/Linux systems you probably can use the following commands. For the last one you need root user permissions. @example ./configure --sharedstatedir=/var/games --with-setgid=games make make install @end example @node References, , Installation, Top @chapter References This chapter gives some references to resources mentioned in the manual. As the internet changes incessantly, the addresses below may be outdated. If you find this to happen, please report it as a bug. The latest version of @strong{Moon-buggy} may be found on the sunsite archive in the directory @url{ftp://sunsite.unc.edu/pub/linux/games/arcade/}. I provide a @strong{moon-buggy download page}, which is located at @url{http://seehuhn.de/comp/moon-buggy.html}. Version 2.0 of the @strong{Filesystem Hierarchy Standard} (FHS 2.0) may be found on the internet at @url{ftp://sunsite.unc.edu/pub/linux/docs/fhs/fhs-2.0.tar.gz}. The @strong{ncurses} package can be found on the GNU project's ftp server and its mirrors. The original site is @url{ftp://prep.ai.mit.edu/pub/gnu/ncurses/ncurses-4.2.tar.gz}. Hints about @strong{security concerns} may be found in the file @file{SECURITY} from the bsd-games package. One location where to find it is @url{ftp://sunsite.unc.edu/pub/linux/games/bsd-games-2.7.tar.gz}. @bye moon-buggy-1.0.51/manpage.in0000644000175000017500000000435010164030501012532 00000000000000.\" manpage.in - template for the "moon-buggy.6" manual page .\" Copyright 1999, 2000 Jochen Voss .\" $Id: manpage.in 6093 2004-12-27 15:58:57Z voss $ .de Op .BR \-\\$1 @C@ ", " \-\-\\$2 .. .TH moon\-buggy 6 "Dec 27 2004" "moon\-buggy @MBVERS@" .SH NAME moon\-buggy \- drive some car across the moon .SH SYNOPSIS moon\-buggy [\-hnsV] @C@[\-\-help] [\-\-no\-title] [\-\-show\-scores] [\-\-version] .SH DESCRIPTION .B Moon\-buggy is a simple character graphics game, where you drive some kind of car across the moon\'s surface. Unfortunately there are dangerous craters there. Fortunately your car can jump over them! .SH OPTIONS The program understands the following command line options. .TP .Op h help shows a short usage message. .TP .Op m mesg disable write access to your terminal by other users, so your boss can\'t disturb your game play with the help of "write" or "finger". .TP .Op n no\-title skips the title screen. .TP .Op s show\-scores shows the current highscore list and exits. .TP .Op V version prints the program\'s version to standard output and exits. .SH KEYS The moon\-buggy is controlled by a couple of keys, which are described near the bottom of the screen. Most important are the following keys. .IP "SPC, j" makes your car jump. The length of a jump is fixed and you can only start a new jump, while the wheels have contact to the ground. .IP "a, l" fires the mining laser. The laser is used to remove stones, which may block your way. .IP q quits the game prematurely. But you still keep your score and may enter the highscore list. .IP .SH FILES The following files on your system are related to moon\-buggy. .TP .I "@MBBINDIR@/moon\-buggy" the moon\-buggy executable. .TP .I "@MBSCORE@/mbscore" the global score file .TP .I "$HOME/.mbscore" the local score file. This is used, if .B moon\-buggy has no write access to the global score file. .SH SEE ALSO .B "Moon\-buggy Usage and Maintenance" by Jochen Voss. .SH COPYING Copyright \(co 2004 Jochen Voss .PP .B Moon\-buggy is free software. Read the file .I COPYING of the source code distribution for details or press \'c\' at .BR moon\-buggy \'s title screen. .SH AUTHOR The program .B moon\-buggy was implemented by Jochen Voss (voss@seehuhn.de). .\" Local Variables: .\" mode: nroff .\" End: moon-buggy-1.0.51/car.img0000644000175000017500000000074407646332467012073 00000000000000# car.img - images to animate the buggy # this is input for "img.sed" # $Id: car.img 4839 2003-04-13 16:50:02Z voss $ NORMAL: | Omm | |(|)-(|)| NORMAL1: | Omm | |(\\)-(\\)| NORMAL2: | Omm | |(-)-(-)| NORMAL3: | Omm | |(/)-(/)| START: | OMM | |(U)-(U)| UP1: | OMm | |(|)-(|)| UP2: | oMm | |(\\)-(\\)| LAND: | omm | |(-)_(-)| BROKEN: | __ | |cnOMMnb| RAM1: | OMm | |#(|)(|)| RAM2: | n OMm | |##|)(|)| RAM3: | ##Mm | | ###(|)| SIT: | #MM | |(|###|)| moon-buggy-1.0.51/text2c.sed0000644000175000017500000000055106735006475012525 00000000000000# text2c.sed - used by "Makefile.am" to create "copying.h" # Copyright 1999 Jochen Voss # $Id: text2c.sed,v 1.4 1999/06/25 23:14:05 voss Rel $ s/\\/\\\\/g s/"/\\"/g s/ //g s/^/ "/ s/$/",/ 1 i\ /* copying.h - moon-buggy's copyright notice\ * Automatically created from file "COPYING".\ * DO NOT EDIT !!! */\ \ static const char *copying_lines [] = { $ a\ }; moon-buggy-1.0.51/img.sed0000644000175000017500000000113006735006474012061 00000000000000# img.sed - used by "Makefile.am" to create "buggy.h" # Copyright 1999 Jochen Voss # $Id: img.sed,v 1.3 1999/06/25 23:14:04 voss Rel $ # initialisation 1 { i\ /* buggy.h - the image data for "buggy.c"\ * Automatically created from file "car.img".\ * DO NOT EDIT !!! */\ \ static char *image[][2] = { x s/^.*$/ / x } # closing brackets for the images 1, /^[A-Z0-9]*:/ b ishead /^[A-Z0-9]*:/ i\ }, : ishead # headers /^[A-Z0-9]*:/ { s/\([A-Z0-9]*\):/car_\1, / H x s/\n// x i\ { } # images /^|.*|/ s/|\(.*\)|/ "\1",/p # end $ { i\ },\ };\ \ enum car_state { x p i\ }; } moon-buggy-1.0.51/ANNOUNCE0000644000175000017500000000135510164030034011726 00000000000000 Announcement for Moon-buggy version 1.0 ======================================= I'm proud to announce the release of Moon-buggy version 1.0. Moon-buggy is a simple character graphics game where you drive some kind of car across the moon's surface. Unfortunately there are dangerous craters there. Fortunately your car can jump over them! Version 1.0 features new animations donated by Piotr Grzybowski and fixes some minor bugs. The program is supposed to compile and run on any POSIX compliant system which provides the curses library but at the moment it is only tested on GNU/Linux systems. Moon-buggy is free software and you can download it from the Moon-buggy download page at . moon-buggy-1.0.51/moon-buggy.lsm0000644000175000017500000000140410164022611013372 00000000000000Begin3 Title: moon-buggy Version: 1.0 Entered-date: 27DEC04 Description: Drive some car across the moon. Moon-buggy is a simple character graphics game, where you drive some kind of car across the moon's surface. Unfortunately there are dangerous craters there. Fortunately your car can jump over them! Keywords: games, moon, character graphics, curses Author: voss@seehuhn.de (Jochen Voss) Maintained-by: voss@seehuhn.de (Jochen Voss) Primary-site: sunsite.unc.edu /pub/Linux/games/arcade 199k moon-buggy-0.5.1.tar.gz 794 moon-buggy.lsm Alternate-site: Original-site: Platforms: POSIX systems, curses Copying-policy: GPL 2.0 End moon-buggy-1.0.51/moon-buggy.png0000644000175000017500000000420206745313742013404 00000000000000‰PNG  IHDR00Wù‡gAMA† 1è–_9IDATxÚí˜[Œ]UÇßZ{ïsö93g†ét.zIé@m­¡J}!)Ñ H,Q‹M/1ryµ!ÅD±$\"¡IEŒáÁ|0!j&ƒIcA¡0LèmfÚa.gÎ}ïµ>ÎÌH;#2-`œ²OrÖ^û»ÿu%,a KXÂþ‡!¦2ízLçpúùØ;p¼}§fL€ñ‚™VéQR”T§Êªâ³ò±t`¬c·&êÈ©¥…ÄS"…Ц}J`jêXùœ¸¤hÇ]ŠÄ<‘¼L?#ÄXž«¿ (·EëØ®+ù´trm¸üg´J×ä¯åcáÀ[_ÕÄü"=Ì+SÒ:_Œ®à2"®Ù»›Úè$?ù8§©ªò`pWQÀaÅä3 ¶+¸dìà Sêù‹?A}ûnzóíä/+`3U±Ü±ë›Ü}`#2Á”lÂøZ$ûÑ–P¥#Të®gSzˆ7}¯É:8ðÉ¢ê?=Ó båú]_æûv=±7ü º–„ÑÄÓ ²Í\,ã=–)h©òÏÔqµö°N?ÁƒÏX…T³ä¬¥%M…Ñr™jP¥Ñߢrçûͼ/õ§=zd¸Nœõœž®y:dmÆñ½Ï'ÜõYxîðÚåÑC†Ç¶y¾±Yéhùa³~|¥ÌDÃ0âj|ýʈïüuŠ#“Âé{Zx»RëáT¼¼FÚáÔj ÞTÞsnx EX;cyH`Í“S²ð ¬Já(†naÿö:?ÿsÀö«!õÂW ?ù“áÀ-žíë ^=8X›iðèmÊÓ¹q¥Ò‰ÙÔrÿU''*-9È– ïX}Þž€¸Î@ïtM€m@53ÓïÈBY T¯9é|{Æ«BÖ6úöO)V<å†04Ñœsëužß(¡Qˆj,oMYÛ«Ó¬‚reˆËÐ:¹ äKP¨@TƒL P½€8ü‡Vå–µBS@]!0 îwP50 c€ñD R4„êL5:Á{`Y«€1¬ïD(Uxk¡{2 Xc!]Q²d³ ¬€Sô‘H¥ã]9¯o uǾ2ÇN;†Ç`¬¢tÆ~µ9â“×gyý—Jñ°¡^õ¤‰D®)nLQ VƒŠQÎSPƒ šv㦓Ÿ$ âVC˜*ƒžŸ¬søL…×N9Ö.2^¹õÕ ŸoÑën/Éy{ MGJ ÐÙÞ*Öš@G«#^q[ÈX½¹=V…W¾ë ¶ELN1±Á h¢ Íy¸&}ˆƒ@<ݹÄCl)dà±”C'›Y~c´ÙŸRêU] éB9û7ô²ŠZlHè&iGèAÉRçíŸCƒÄŠY>ï 6Èʃ]%È#C3©¹ õ+x?ãóù<ÖZ‚ `ll+æ@[[21£õµÐR÷Þõ „)£Ùw­AROP60¡rb8•$ ¦Ž[ú‡Î¶NU¥³³“b±ˆ1†Z­v®rÞ…¬^¯Ï:0/J5õ4lJA„¢s4DÀª(ˆ%pi“t¤l1j…vpª.jÅs¢¨Í8†aH£Ñ Žã±ÐYÑ¿÷Þ{Ù³g7n`ß¾} °ÿþ³üx|úÛÚðFð6%rÐéRòÞSK<%/¨18ïñÞ7£›É°¿XäŒÎ­Ø;wÒ××ÇÞ½{9xð SSSìÚµ‹‘‘’$9+ æ\ãóù c Gray100", ", c None", /* pixels */ ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", ",,,,,,,,,,,,,,,,,, ,,,,,,,,,,", ",,,,,,,,,,,,,,,, ,,, ,,,,,,,,", ",,,,,,,,,,,,,,, ,oOO@, ,,,,,,,", ",,,,,,,,,,,,,, , O%&%&%., ,,,,,,", ",,,,,,,,,,,,, .%O%oO%&%., ,,,,,", ",,,,,,,,,,, ,OO.oO$o.O%., ,,,,", ",,,,, . , oOo$--;-XoOO, ,,,,", ",,,, ,,,, .o%%.#:-;-;-oO%., ,,,", ",,, ,+o@++o%%$%OO=&%-;;.o&O, ,,,", ",, ,o****%**+*+ooOooo@OoO%o, ,,,", ", , o++o%%++%o#+%O#*%O&%%$%+o, ,", ", ,.*%%X++@%*Xoo+++%*+%=%%+*o, ,", ", ,+*%*+*+o*+@+o%%+%=*%%%**%+.,.", ", ,+*.o.O%*+%o+@**+*%++**+.X++, ", ", ,.X .o+%%%Xo$%%=%*%+o. + ,", " , ..#%%oo%%%%+%o .. ", ", .#=@. oo%Xoo%o%%@. .#$X ", ", #>>;# X%oXoo%o%X =:>-. ", ", =>:>$ oooX@oooo. ->>;. ", ", @:>;@ o%oo%o%#%X . #::= ", ", .#$@. .ooo.oooo. .##X ", " , , ,,,,, , ", " , , , ", ", , ,,,,,,,, ,", ",, ,,,,,, ,,,,,,,,,, ,,,,,, ", ",,, ,,,,,,,,,,,, ,", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,", ",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,," }; moon-buggy-1.0.51/title.eps0000644000175000017500000040727306643404225012456 00000000000000%!PS-Adobe-3.0 EPSF-3.0 %%Creator: GIMP PostScript file plugin V 1.04 by Peter Kirchgessner %%Title: Moon-Buggy Titelbild %%CreationDate: Sat Jan 2 11:06:56 1999 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%Pages: 1 %%BoundingBox: 0 0 256 256 %%EndComments %%BeginPreview: 64 64 1 64 % 0000000000000000 % 0000000000000000 % 0000000000000000 % 0000140000000000 % 0000000000000000 % 0000004000000000 % 0004020000000000 % 0000400000000000 % 0000800000000000 % 0008001000000000 % 0000081000000000 % 0008080000000000 % 00001010000fc000 % 0000010000f03000 % 0004100017000c00 % 000200002c000200 % 0000108098100300 % 0000000020000100 % 00001001207a1080 % 0000000240864080 % 0000100040822840 % 0000000840812040 % 0000100040c11240 % 000010024c431040 % 007ff8005b820840 % 018007ffe0811e40 % 060000006f811458 % 0c08c40050811448 % 08888c007fc11fc8 % 08888810401fe048 % 0908880030000048 % 0908880020000088 % 0800080800020008 % 887f08000019f908 % 01c1c40000460708 % 8308301000981188 % 0c22180001314468 % 99048412024008b8 % 1048260020c52018 % a401021000800128 % 284053002314c008 % e00105490121182d % c400a11ef1060404 % c00089f003208014 % ca00828ffe090005 % 4000908002220014 % d100858003040004 % 4441110441208425 % 60002300010a080c % 2a4485000100a0a8 % a408220000a50a19 % 1291060000d040b0 % 9902540000491530 % 8ca8580000222260 % 0323300000184180 % 01c9c00000070f20 % 803f00000001f800 % 8000000000000000 % 0000000000000000 % 8000000000000000 % 0000000000000000 % 8000000000000000 % 0000000000000000 % 8000000000000000 %%EndPreview %%BeginProlog % Use own dictionary to avoid conflicts 5 dict begin %%EndProlog %%Page: 1 1 % Translate for offset 0.000000 0.000000 translate % Translate to begin of first scanline 0.000000 255.118110 translate 255.118110 -255.118110 scale % Variable to keep one line of raster data /scanline 256 1 mul string def % Image geometry 256 256 8 % Transformation matrix [ 256 0 0 256 0 0 ] { currentfile scanline readhexstring pop } image ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08d8d8d8d8d8d8d 8d8d8d8d8d8d8d79c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08d59598d8d8d8d8d8d 8d8d8d8d8d8d8d7955838d8de0ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffd079008d8de0ffffffffffff ffffffffffffffffd0978d8d008d8de0ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffc091915569ffffffffffffffffffff ffffffffffffffffffffffffe08d59598de0ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffd0559191c0ffffffffffffffffffffff ffffffffffffffffffffffffffffe08d6083ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffe08d00d0ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffd0559191c0ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffd05f59e0ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffc0919155d0ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffe0833283e0ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff9d32f0ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffff8d60d0ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffff6383ffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffd09700e0ffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffe05161c0ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffc05583e0ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffff9191ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffc0916e91ffffffffffffffffffffffffffffffffffffffffffe0 8d8d8d8d8d8d8d8d8de0ffffffffffffffffffffffffffc055d0ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff916e91c0ffffffffffffffffffffffffffffffffffe08d8d8d59 598d8d8d8d8d8d8d8d008080ffffffffffffffffffffffff6979ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffc06e91ffffffffffffffffffffffffffffffffffffff65598d8d8d e0ffffffffffffffffff803e69ffffffffffffffffffffffff00d0ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffd05591c0ffffffffffffffffffffffffffffffffc0916151e0ffffff ffffffffffffffffffffffd055c0ffffffffffffffffffffffd032d0ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff7969ffffffffffffffffffffffffffffffffffc06e6ec0ffffffffff ffffffffffffffffffffffff9191ffffffffffffffffffffffffd000d0ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffe000ffffffffffffffffffffffffffffffffffd05591c0ffffffffffff ffffffffffffffffffffffff916ec0ffffffffffffffffffffffffd055c0ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffe0598dffffffffffffffffffffffffffffffffc000d0ffffffffffffffff ffffffffffffffffffffffffc06e91ffffffffffffffffffffffffff9191ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d59e0ffffffffffffffffffffffffffffe08355c0ffffffffffffffffff ffffffffffffffffffffffffff9191ffffffffffffffffffffffffff9191ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffffffffffff8d60d0ffffffffffffffffffff ffffffffffffffffffffffffffc055d0ffffffffffffffffffffffff9191ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffffffffe08d00e0ffffffffffffffffffffff ffffffffffffffffffffffffffff693dffffffffffffffffffffffffc031ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffffffff835fe0ffffffffffffffffffffffff ffffffffffffffffffffffffffffff4180ffffffffffffffffffffffff55d0ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffffffc055d0ffffffffffffffffffffffffff ffffffffffffffffffffffffffffff8080ffffffffffffffffffffffff8397ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffffc06e91ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff8080ffffffffffffffffffffffff8d8dffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffff916ec0ffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff8080ffffffffffffffffffffffffb763ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffff9191ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff8080fffffffffffffffffffffffff035c0ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffff9191ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffff8041ffffffffffffffffffffffffff8080ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffff9191ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff4180ffffffffffffffffffffffff8080ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffff9191ffffffffffffffffffffffffffffff 808079d0ffffffffffffffffffffffff8080ffffffffffffffffffffffff8080ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffff9191ffffffffffffffffffffffffffc091 49494f55c0ffffffffffffffffffffff8080ffffffffffffffffffffffff8080ffffffffffffff fffffffffffffffffffffefcfaf8f6f4f4f4f4f4f4f3ebe6e3e1dfdfdfdfdfdfdfdfdfdfdfdfdf dfdfdfdfdfdfdfdfdfdfdfe1e4e8eef4f4f4f4f4f4f5f7f9fbfdffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffff9191ffffffffffffffffffffffffff916e 9191c09191ffffffffffffffffffffff8080ffffffffffffffffffffffff8080ffffffffffffff fffffffffffffffffffffef9f5f2efececececececebe6e3e1dfdedfdfdfdfdfdfdfdfdfdfdfdf dfdfdfdfdfdfdededededfe0e1e4e8ecececececececf0f4f7fbffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffff9191ffffffffffffffffffffffffff9191 ffffff9191ffffffffffffffffffffff8080ffffffffffffffffffffffff8080ffffffffffffff fffffffffffffffffffffdf6f1ede9e5e5e5e5e5e5e4e2e1e0dedddddddddddddddddddddddddd dddddddddddddddddddddedfdfe1e3e5e5e5e5e5e5e6eaeff4f9ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffff9191ffffffffffffffffffffffffff916e 9191916e91ffffffffffffffffffffff8080ffffffffffffffffffffffff8080ffffffffffffff fffffffffffffffffffffdf4ede8e3e0e0e0e0e1e1e0dfdfdededddddddddddddddddddddddddd dddddddddddddddddddddddddededfe0e0e0e0e0e0e1e6eaf1f8ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff8d8dffffffffffffffffffffff9191ffffffffffffffffffffffffffc049 49919191c0ffffffffffffffffffffff8080ffffffffffffffffffffffff8080ffffffffffffff fffffffffffffffffffffcf1eae4e0dcdcdedededededddddcdddddddddddddddddddddddddddd dddddddddddddddddddddcdcdcdddddcdcdcdcdcdcdee2e7eef6ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffff7979ffffffffffffffffffffff916ec0ffffffffffffffffffffffffff80 80ffffffffffffffffffffffffffffff8080ffffffffffffffffffffffff8080ffffffffffffff fffffffffffffffefefefbefe7e1dddbdbdcdcdcdddddddddddddddddddddddddddddddddddddd dddddddddddddddcdcdcdcdcdcdbdbdbdbdbdbdbdbdcdfe4ebf4fefefeffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffc055d0ffffffffffffffffffffc091559dffffffffffffffffffffffff80 80ffffffffffffffffffffffffffffff8080ffffffffffffffffffffffff8080ffffffffffffff fffffffffffcfaf8f5f3f1e8e4e0dcdbdcdcdcdddddddddddddddddddddddddddddddddddddddd dddddddddddddddddddcdcdcdcdbdbdbdbdbdbdbdbdcdee2e6ecf2f4f7f9fbfdffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff8397ffffffffffffffffffffffffd0326ad0ffffffffffffffffffff41 80ffffffffffffffffffffffffffffff8080ffffffffffffffffffffffff8080ffffffffffffff fffffffffffaf6f2efece9e4e2dfdddbdcdcdddddddddddddddddddddddddddddddddddddddddd dddddddddddddddddddddcdcdcdcdbdbdbdbdbdbdbdbdddfe2e6eaedf1f4f8fcffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff8d8dfffffffffffffffffffffffffff0aa55c0ffffffffffffffff8041 ffffffffffffffffffffffffffffffff8080ffffffffffffffffffffffff8080ffffffffffffff fffffffffff8f3eee9e6e3e1e0dddddcdcdcdddddddddddddddddddddddddddddddddddddddddd dddddddddddddddddddddddcdcdcdbdbdbdbbb75433838383839393a3b3d3e4041414141414141 41415bb5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff8d8dffffffffffffffffffffffffffffffc000d0ffffffffffffff8080 ffffffffffffffffffffffffffffffe000fffffffffffffffffffffffff035c0ffffffffffffff fffffffffff6efeae5e1e0dfdedddcdcdcdddddddddddddddddddddddddddddddddddddddddddd dddddddddddddddddddddddcc487503e3c330e0000000000000000000000000001010101010101 010101053889daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff8d8dffffffffffffffffffffffffffffffffd055c0ffffffffffff8080 ffffffffffffffffffffffffffffff7979ffffffffffffffffffffffffb763ffffffffffffffff fffffffffff4ece6e2dedddddcdcdcdcdddddddddddddddddddddddddddddddddddddddddddddd ddddddddddddddbc73473c3c220401010100000000000000000000000000000001010101010101 010101010101113e5e9de4ffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffff8d59e0ffffffffffffffffffffffffffffffff9191ffffffffffff8080 ffffffffffffffffffffffffffe08355c0ffffffffffffffffffffffff8397ffffffffffffffff fefefdfdfcf2eae4e0dedddddddddcdcdcdcdddddddddddddddddddddddddddddddddddddddddd ddddddddcd83340c0101010100000001010102082538383737373738393a3c3f40404040404141 412f05010101010202042398edffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffe0598dffffffffffffffffffffffffffffffffc0c0ffffffffffff8080 ffffffffffffffffffffe08d8d595fd0ffffffffffffffffffffffffd032d0fffffffffffffffe faf8f5f3f0eae6e2dfdddddddcdbdbdadadadad9d9d9d9dadadadadad9d9d9d7d7d7d7d7d7d7d7 d7c2854f1b0000000000010102041d393c436aaad5dddddddcdcdcdce0e3e7edf1f4f6f9fcffff ffffb55b2c0a0302010101073d9eedffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff8d8dffffffffffffffffffffffffffffffffffffffffffffffff8080 ffffffffffffffe08d8d008d8d8de0ffffffffffffffffffffffffff9783fffffffffffffffffd f7f3efece9e6e3e0dfdedddddbdadad9d7d7d7d6d6d6d6d6d6d6d7d6d5d4d4d3d2d2d2d2d2d2cb 9e2802010000000306273b3b4571badadbdbdcdddddddddddddddddedee1e4e7e9eef1f5faffff fffffffff6c67b4c1b02010101096cedffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffff8d59e0ffffffffffffffffffffffffffffffffffffffffffffff8080 ffffffffffa08d59598de0ffffffffffffffffffffffffffffffffff00e0fffffffffffffffffc f5efebe6e4e2e1e0dededddcdbdad7d6d6d5d4d4d3d3d3d3d3d3d4d3d1d0cecdccccccccae6d2a 0800000001002283bfd7d7d9d9d9dadadbdbdcdddddddddddddddddddedfe0e2e4e8edf2f8ffff ffffffffffffffffe4690901010100258ee4ffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffe05959e0ffffffffffffffffffffffffffffffffffffffffffff8080 ffffffffffa08d8de0ffffffffffffffffffffffffffffffffffff8080fffffffffffffffffffc f2ebe6e3e0e1e0dfdfdddddcdad9d6d4d4d3d2d0d0ced0d0d0d0d0cecccbc9c8c6c6b1570d0000 000002164581c3d3d4d5d6d6d7d9d9dadadbdcdddddddddddddddddddedddddedfe3e9eff6ffff ffffffffffffffffffeda23d07000000044cdaffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffe0598dffffffffffffffffffffffffffffffffffffffffffff8080 ffffffffffffffffffffffffffffffffffffffffffffffffffffff4180fffffffffffffffffffb f0e8e4e1dfdededddddedddcdad7d5d3d2d0cecdcccbcccccccccccbc8c6c5a5643e1e01000000 001169b3cbcdced0d2d3d4d5d6d7d9d9dadbdddddddededddddddddddddddcdcdde1e5ecf4ffff ffffffffffffffffffffffeda230000101053285daffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffff8d8dffffffffffffffffffffffffffffffffffffffffffff8080 ffffffffffffffffffffffffffffffffffffffffffffffffffff693efffffffffffefdfcfbfaf7 ece6e2dfdddddddddddddddbd9d6d4d2d0cecdcccbc9cbcbcbcbccc9c8b1611903010000000930 6aaac9cbcdceced0d1d3d3d4d5d6d6d7d9dadbdcdddddddddddddddddddddddcdcdfe3e9f0fafb fcfcfdfeffffffffffffffffffffa2180101020b85ffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffe0008de0ffffffffffffffffffffffffffffffffffffffff8080 ffffffffffffffffffffffffffffffffffffffffffffffffc09155d0fffffffffffbf8f5f2f0ec e6e3e0dedddddddcdbdadad7d6d4d2d0cecccccbc9c9c9cbcbccccae68240200000102042e9dd0 d0d2d3d4d5d4d3d3d2d0d1d2d3d3d3d4d5d6d7d7d9d9dadbdbdcdddddcdcdcdcdcdee1e4e9eef1 f4f7fafdffffffffffffffffffffff850b0201012fe4ffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffe05f83ffffffffffffffffffffffffffffffffffffffff8080 ffffffffffffffffffffffffffffffffffffffffffffffff916ec0fffffffffffff9f4f0ece8e6 e2e0dedddddcdbdad9d7d6d4d3d1d0cdcccccbc9c9c8c9cbcccccd6a080000000220416db5d7d7 d9d9dadadbd9d6d4d2d0ced0d0d0d0d1d2d3d3d4d4d5d7d7d9dadbdbdbdbdbdbdbdcdfe1e3e7ea eef2f7fcffffffffffffffffffffffda85320301037affffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffd05531c0ffffffffffffffffffffffffffffffffffff8080 ffffffffffffffffffffffffffffffffffffffffffffff6955c0fffffffffffffff7f1ebe7e2e0 dfdededcdcdad9d7d6d4d3d2d0cecdcccbcbc9c9c8c8c9cbccbe7a150000021a65bad4d9dbdedf dfdfdfdfdfdcd9d6d2cecdcdcdcdcdcdceced0d0d0d1d4d5d7d9dadadbdbdbdbdbdcdddee0e1e5 e9eef4fbffffffffffffffffffffffffffda2701010871e4ffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffc0559dffffffffffffffffffffffffffffffffff8080 ffffffffffffffffffffffffffffffffffffffffffff413dd0fffffffffffffffff5ede7e2dedd dcdddbdbdbd9d7d5d3d1d0cecdcccbc9c9c9c8c8c8c7c9cbcc5e0300000441b0d0d5dadde2e6e7 e6e6e6e6e5dfdcd7d3cccbcbcbcbcbcbcbcbcbcbccccd0d3d4d7d9dadadadbdbdbdcdcdddddee1 e5eaf2faffffffffffffffffffffffffffffa2050101024cdaffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffd03d408079d0ffffffffffffffffffffffffff8080 ffffffffffffffffffffffffffffffffffffffc0790080fffffffffffffffffffff3eae4dfdcda dadadadadad7d5d3d0cdcccbcbc9c9c8c8c8c7c7c6c7c9cb9c0b0000043eb3d3d3dadee4e9eded ececebeae9e4ddd9d3ccc9c9c8c8c8c7c7c7c7c8c8c8ccd0d3d5d7d9d9dadadbdbdbdbdbdbdbdd e2e7eff8ffffffffffffffffffffffffffffff901101010551daffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffc080695591c0ffffffffffffffffffffff8080 ffffffffffffffffffffffffffffffffffffd05579e0fffffffffffffffffffffff2eae3dedbdb dbdadadadad7d4d2cecccbc9c9c8c8c8c8c9c9c9cbcbcdb12f00000870bfd6d7d7dde2e6eaeeef ededecebeae5dfdbd6d0cdcbc9c8c7c6c6c6c6c6c6c7cbced2d4d7d9d9dadadbdbdbdbdcdcdcde e2e7eff8ffffffffffffffffffffffffffffffffc32402010358ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffc091c0ffffffffffffffffffffff8080 ffffffffffffffffffffffffffffe08d8d8d00d0fffffffffffffffffffffffffff2eae3dedbdb dadadadadad7d4d1cdcbc8c8c8c8c7c7c9cbccced1d3a23002000161dbdbdcdddde2e5e9ebefef eeedecebeae6e2dddad6d3d0ccc9c7c5c5c5c5c5c5c6c9cdd1d4d7d7d9dadadbdbdbdcdcdcdcde e2e7eff8ffffffffffffffffffffffffffffffffff850b010109e4ffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 ffffffffffffffffffffffffd09759598d8de0fffffffffffffffffffffffffffff2eae3dedbdb dadadadadad6d3d0ccc9c7c7c7c7c6c6c9ccd0d3bf600c00000342c7dfe0e1e1e2e5e8eaedefef eeedecebeae7e4e1dddad7d3d0cbc8c5c5c4c4c4c3c5c8ccd0d4d7d7d9dadadbdbdbdcdcdcddde e2e7eff8ffffffffffffffffffffffffffffffffffda850b010044edffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 ffffffffffffffffffffc09155838de0fffffffffffffffffffffffffffffffffff2eae3dedbdb dadadadad9d6d3cecbc8c6c6c6c6c6c6c9ced3b7410100000143c2e3e4e5e6e6e7e9eaeceeefef efedecebebe9e6e3e1dedcd6d2ccc8c4c3c3c2c2c2c3c8cbd0d3d6d7d9d9dadbdbdcdcdcddddde e2e7eff8ffffffffffffffffffffffffffffffffffffff6b00000098ffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 ffffffffffffffffffd05591c0fffffffffffffffffffffffffffffffffffffffff2eae3dedbdb dadadad9d9d5d2cec9c6c5c5c5c5c5c5cbd0d6720500000d65cee7e8e9e9e9eaebecedeeefefef efedecebebe9e8e6e4e3dfdad4cec8c3c2c2c2c1c1c2c6cbced3d6d7d9d9dadbdbdcdcdddddddf e2e7eff8ffffffffffffffffffffffffffffffffffffffe42800012bdaffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffff0d0fffffffffffffffffffffffffffffffffffffffffffef2eae3dedbdb dadadad9d9d5d1ccc9c5c4c4c4c5c5c5cbd3b92b01001cb2e9eaebececedeeefefefefefeff0ef efeeedecebe9e9e9e8e7e4ddd6d0c8c2c2c1c1c1c0c1c6c9ced3d6d7d9d9dadbdbdcdcdddddddf e2e7eff8ffffffffffffffffffffffffffffffffffffffff9d0601047affffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffffffffffffffffffffffffffffffcfaf8f6f4f3f3f3f3f3f3ebe5dfdcd8d6 d6d6d5d4d4d1cecbc8c6c5c8c9cbcdd0d4c2420400014bebececededeeefefeff0f0f0f1f1f1f1 efefefededecebebd990503e3c3b39383736467bb3c1c6c9cdd2d5d6d6d7d9d9dadbdbdcdddddf e1e4e9eff4f6f8fafcffffffffffffffffffffffffffffffe42b010132ffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffffffffffffffffffffffffffffffaf6f2efecebebebebebebe5e0dbd7d5d3 d3d2d1d0d0cecccbc8c7c7cbced3d6d9dd7c0300000a7bedeeefefefefeff0f1f1f1f2f2f2f2f2 f1f0efefefefeed33f00010101010101010101053da5c6c9ccd0d4d4d5d6d6d7d7dadadbdddddf e0e2e5e9eceff3f6fafeffffffffffffffffffffffffffffff91030108e4ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffffffffffffffffffffffffffffef7f2ede9e5e4e4e4e4e4e4e0dcd7d3cfce cecdcccccbcbc9c9c8c8c8ced4d9dde1c2190000167cccefeff0f0f1f1f1f2f2f2f2f3f3f3f3f3 f2f2f1f1f0cc7c2c000000010101010101010000022076baccd0d3d3d4d4d5d6d6d9dadbdddddd dfe0e2e4e5eaeef3f8feffffffffffffffffffffffffffffffed13010171ffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffffffffffffffffffffffffffffef5eee8e4e0dfdfdfe0e0e0ddd8d4d0cdcb c9c9c8c8c7c7c7c8c8c8c9d3d9dde3d04500000098f1f2f2f2f2f2f2f3f3f3f3f3f3f3f3f3f3f3 f3f3f3f2ce4c060000001c414140403f3e29040000000035b6ced2d2d3d3d3d4d4d6d9dadcddde dedfdf6ab7e5eab38b909191c0ffffffffffffffffffffffffff5101010fc3ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffffffffffffffffffffffffffffef3ebe5e1dddbdbdddddddddad6d0cdc8c7 c6c5c5c3c2c4c5c6c8c9ccd6dde4e9930600003df3f3f3f3f3f3f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f4d04d0400000348d9f3f2f1f1f0e9d07b22030000003cb0d0d0d1d1d2d2d3d5d7dadcdddd dede6f2e4aaae686698f916e91ffffffffffffffffffffffffffc30f010152ffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffffffffefefefefdfdfdfdfdfdfdf1e8e2dedbdbdbdbdbdcdcd7d4cecbc6c5 c3c2c2c1c0c2c4c6c8cbcdd9e0e8ee59010020d1f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5 f5f5f57f060000044dd1f5f5f5f5f5f5ede4dcbb7a1e0000021a67b9d0d0d0d0d1d4d7dadcdddd dddd386e7e60ab858afdff9191ffffffffffffffffffffffffffff71010114edffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffffffffbf9f6f4f2f1f1f1f1f1f1e9e3dfdcdadadadbdbdbdbd7d3d0cbc7c5 c5c3c2c2c1c5c8ccd0d4d7dfe5eade1d000151f4f5f5f5f5f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f44d0100044dd1f5f5f5f5f5f5f5eee7dfd9d0b63c030000023db0cececed0d3d6d9dcdddd dd6e38dda76062658afdff9191ffffffffffffffffffffffffffffe40a010378ffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffffffef9f4f1ede9e9e9e9e9e9e8e4e0dedbdadadadadadadad6d3d0cbc8c6 c5c5c3c2c2c7ccd2d7dcdfe4e9ec9400000097f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f442010129d0f4f4f4f5f5f5f5f5efe9e4ddd7d4b43e0200000441afcdcdced3d6d9dbdddd dd6e38dddea8623a68fdff9191ffffffffffffffffffffffffffffff51020113daffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffffffef6f1ebe6e2e1e1e1e1e1e1dfdddbdadadadadadadadad6d3d0ccc8c7 c6c5c4c3c2c9d0d7dde2e6e9ecef5001001ee2f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4 f4f4f442010142f4f4f4f4f4f4f5f5f5f0ece7e2dddad7be691100000440aeccccd2d5d9dbdddd dddd386edee0ab3a2352916e91ffffffffffffffffffffffffffffffc80c010485ffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffffffef4ede6e1dddbdbdbdbdcdcdbdadad9d9d9d9d9d9d9d9d5d3d0ccc9c8 c6c6c5c4c3ccd4dbe2e9ecefefce20000159f4f4f4f4f4f4f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3 f3f3f342010142f4f4f4f4f4f4f5f5f5f1eeeae7e3dfdcd9d56d0500000569cbccd1d4d9dbdedd dddd6e386f703a221a153f536ec0ffffffffffffffffffffffffffffff3b020252ffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fffffffffffffffffffffef2e9e2ddd9d7d7d8d8d8d8d8d8d8d7d9d9d9d9d7d7d7d4d3d0ccc9c8 c7c6c6c5c4ced7dfe8eff2f3f37e04000495f3f4f4f4f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3 f3f3f342010142f3f3f4f4f4f4f4f5f5f2efeeebe9e6e0dcd7b34004000025b3cbd0d4d7dbdede dddddd6e6f1c1d3b683e61513d61c0ffffffffffffffffffffffffffff51030128e4ffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8080 fefdfdfcfbfbfbfbfbfbfbefe6dfdad6d6d6d6d7d7d7d7d7d7d7d9d9d7d7d7d7d7d4d2ceccc9c8 c8c7c6c5c5d0dae2eaf2f5f4f44d020026d9f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3 f3f3f342010142f3f3f3f4f4f4f4f5f5f3f1efedebe9e3ddd9d2ae400300037bc9ced4d7dbdede dddddddd3839e4ccd3fadd8b432367c0ffffffffffffffffffffffffff850501038effffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807f fbf7f5f2efefefefefefefe7e1dcdad6d6d6d6d6d6d7d7d7d7d7d9d7d7d7d6d6d6d3d1ceccc9c8 c8c7c6c5c5d0dae2eaf2f5f4f442010142f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3 f3f3f342010142f3f3f3f4f4f4f4f4f4f3f1efeeece9e3ddd9d2cbad21000020b9ced3d7dbdede dddddd6e38e0e14f51eff2d667285991ffffffffffffffffffffffffffda1c010144ffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807f f8f3efebe7e7e7e7e7e7e6e1dddad8d6d6d6d6d6d6d6d7d7d7d7d7d7d7d6d6d5d4d3d0ceccc9c8 c8c6c6c5c5d0dae2eaf2f5f4da2701014ef3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3 f3f3f342010142f3f3f3f3f4f4f4f4f4f3f1efefedeae4ddd9d2cbc9770000007bcdd3d7dbdede dddddd6e6edfe0462c80815349b98e91ffffffffffffffffffffffffffff4501011bdaffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807e f5efe9e4e0e0e0e0e0e0dfdcdad9d7d5d6d6d6d6d6d6d7d7d7d7d7d7d6d6d5d4d3d1d0cdcbc9c8 c7c6c6c5c5d0dae2eaf2f5f4870300047ef3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3 f3f3f342010142f3f3f3f3f4f4f4f4f4f3f2f0efeeebe4ded9d2cbc9b917000145ccd2d6dbdede dddddd6e6ededf6c467d7f81d1f48e91ffffffffffffffffffffffffffff8e04010585ffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807e f3ebe5dfdbdadadadadadad9d8d6d6d5d6d6d6d6d6d6d6d7d7d7d7d7d6d5d4d3d3d0cecccbc9c8 c7c6c6c5c5d0dae2eaf2f5f44900001acff3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3 f3f3f342010142f3f3f3f3f3f4f4f4f4f3f2f1efefece5ded9d1c9c9c836010136ccd2d6dbdede dedddddd007b7a4d7be1e2e6ebf18d91ffffffffffffffffffffffffffffe429020252ffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff807e f0e7e0dbd7d6d6d6d6d6d5d5d5d4d5d5d5d6d6d6d6d6d6d7d7d7d7d7d6d4d4d3d1d0cdcccbc9c8 c7c6c6c5c5d0dae2eaf2f5f53c000038f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3 f3f3f342010142f3f3f3f3f3f3f3f4f4f3f2f1f0efede6dfd9d1c9c8c836010136ccd1d6dbdede deddddddc27a7a7ac3dee0e3e8ef8d91ffffffffffffffffffffffffffffff46020246ffffffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfcfbfaf9f9f9f9f9f9f9 f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f97c7b ede6e0dcd8d9d9d9d9d9d9d7d7d7d7d7d7d9d9d9d9d9d9dadadadadad7d6d4d3d2d0cecccbc9c8 c8c7c6c6c5d0d9e1e9eff3f33d00003df1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1 f1f2f24d02024ef3f3f3f3f3f3f3f3f4f3f2f2f1efede6dfd9d0c8c8c636010136cbd0d6dbdede dddddddddddddddddddddfe2e7ee8d91ffffffffffffffffffffffffffffff4602022bdaffffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffefaf8f5f3f1f1f1f1f1f1f1 f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f0f0f0f0f0f0f0f0f0f0f07877 eae6e3e0dddddddddddddddddddddddddddddddddddddddddedededddcdad7d5d3d2d0cecccbcb c9c8c8c7c6ced7dde6ecefef3c00003cececececececececececececececececececececececec edeeef6a0905287ecff3f3f3f3f3f4f4f3f3f2f2f1efe7dfd7cec6c6c536010135cbd0d5dadede dddddddddddddddddddddfe2e7ee8d91ffffffffffffffffffffffffffffff5102010785ffffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffef8f4f1efeeedededededed edededededededededededededededededededededededededededededededededecececec7676 e9e7e4e3e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e3e3e3e3e2dedddad7d4d3d2d0cecccc cbc9c8c8c7ced6dde2e9ebea3b00003be9e9e9e9e9e9e9e9e8e8e8e8e7e7e7e7e7e7e7e7e7e7e8 e9ebec7c0a0101052f7ecff3f3f3f4f4f3f3f3f3f2efe7dfd7cdc5c5c435010135c9d0d5dadede dddddddddddddddda67d7e80adee8d91ffff808080808080ffffffffffffff8506010252ffffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffef6f1efeeededededededed ededededededededededededededededededededededededededececececececececebebea7575 e9e8e7e7e7e7e7e7e7e7e7e7e6e6e6e6e6e6e6e6e6e6e7e7e7e7e7e6e2dfdcd9d6d4d3d2d0cecd cccbc9c9c8ced4dadfe4e7e63a00003ae4e4e4e4e4e4e4e3e3e3e3e3e3e3e3e2e2e2e2e2e2e2e3 e6e8e98f10010000010a7ef3f3f3f4f4f3f3f3f3f3f1e7dfd6ccc3c2c235010135c9ced5dadedd dddddddddddddddd7d5f7e6163b38d91ff4141808080804180ffffffffffffda2b020246ffffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffef4f0ededeeefefefefefef efefefeff0f0f0f0f0f0f0f0f0f0f0f0f0f0efefefefefefefefefeeeeeeededececececec7676 ecebeaeaebebebebebebebebeaeae9e9e9e9e9e9eaeaeaeaeaeaebe9e5e2dddbd7d6d4d3d1d0ce cdcccbc9c9ced3d9dde0e2e239000038dfdfdfdfdfdfdedededdddddddddddddddddddddddddde e2e4e7c77b2e060100014ef3f3f3f4f4f4f4f4f4f4f1e8dfd6cbc2c1c134010135c8ced4dadedd dddddddddcdcdcdc7d7ddeaa63666a91693dffffffffff8080ffffffffffffff46020246ffffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffffffffffffef3eeedeef2f4f4f4f4f4f4 f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f3f3f3f3f3f3f2f2f1f1f1f0efef7777 efefefefefefefefefefefefefeeeeededeeeeeeeeeeeeeeefefefede9e4e0ddd9d7d6d4d3d1d0 cecdcccbc9ced2d6d9dddddd38000037dadadbdbdbdbdadadadad9d9d9d9d9d9d9d9d9d7d7d7da dde1e4e8e9bb3a0300014df3f3f3f4f4f4f4f4f5f5f2e9dfd6c9a4746d1f010134c8ced4dadedd dddddddcdcdbdbdb7c5ea5e1ad66506e55d0ffffffffff4180ffffffffffffff46020246ffffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffdfbf9f8f6f5efececedf1f2f2f2f2f2f2 f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f2f2f2f2f2f1f1f1f0f0efefefef7777 efefefefefefefefefefeeeeedededededededededeeeeeeeeefefede9e4dfdcd7d6d6d4d3d2d1 cecdcccbc8ccd0d3d6d9dada37000036d7d7d7d7d7d7d6d6d6d6c684493a3a3e5da7d4d4d4d4d6 dadddfe2cb3d000000097bededededeeeeeeefefefece3dbd3c9640b0301000144c8ced4dadddd dddddddddcdddddda65f7ee2e687505391ffffff80804141ffffffffffffffff46020246ffffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffcf8f5f2efedebeaebeceff0f0f0f0f0f1 f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f0f0f0f0efefefefefefefefefee7776 edededededededededededededecececececedededededeeeeeeefece8e4dfdbd7d6d5d4d4d3d2 cecdcbc9c8cbccd0d2d4d6d536000035d3d3d3d3d3d3d3d3d3bc380001010100010b5ab2d1d1d3 d6d9ba4c070000000c63c4e6e6e6e6e6e6e7e7e7e7e5ddd6d0c84701000000067bc8ced4dadddd dddddddddddddddddd7d6080ad87505391808041418080ffffffffffffffffff46020246ffffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffffbf5f1edebe9e9e8eaebedefefefefefef efefefefefefefefefefefefefefefefefefefefefefefefefefefefeeeeeeeeeeedededed616f ececececececececececececececebebebecececedededededeeeeece8e3dedbd6d6d5d4d4d3d2 d0cccbc8c6c8cbccced0d1d035000034cececececececeb06b2500000001010000000316396ea3 81461c0200000028acdddddddddddddddddddddededdd7d2ccc6650300000149b4c9ced4d9dddd dddddddddddddddedea77f6183b36a6e31418080ffffffffffffffffffffffff46020246ffffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff9f2edeae8e7e7e8e9eaececececededed ededededeeeeeeeeeeeeeeeeedededededededededededededecececececececececececb14ebf ebebebebebebebebebebebebebebebebebebebecececedededeeeeece7e3dedad6d5d5d4d4d4d3 d0cccbc8c5c6c8c9c9cbcccb33000033cbcbcbcbad69402204010000163737290b020000000009 05010000000e58bcd4d4d5d5d5d5d5d5d6d6d6d6d6d4d0ccc9c6a53001000150c3c9ced4d9dddd dddddddddddedfdfdfe0e18183eebac080ffffffffffffffffffffffffffffff5103023affffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff8f0ebe8e6e6e7e8e8e9e9d99051404040 404040404040404040404040404040404040404040404040404040404040404040404040242440 404040403b3f6fc8e9e9e9e9e9e9e9e9eaeaebebecececedededeeece7e3dddad5d5d4d4d4d4d3 d0ccc9c7c5c5c5c6c6c7c7c732000032c6c6c6c6670801010000033bb1c6c6c6a93b0300000000 000001043babc9cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbc9c7c6c5c3a62c00000b9cc9d0d4d9dddd dddddddddedfdfe0e1e2e18164878dc0ffffffffffffffffffffffffffffffff8504010cc8ffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff7eee9e7e6e9e9e9e9d890370601010101 010101010101010101010101010101010101010101010101010101010101010101010101010101 010101010100031f3d3f3f3f3f3f5090d8e9eaebebecececededeeece7e2ddd9d4d4d4d4d4d4d4 d0ccc9c6c4c4c4c4c4c4c4c431000031c4c4c4af2400000101053ea7c4c4c4c4c4af6d3b210701 00053078afc4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4950900005bcbd0d4d9dddd dddddddedfdfc075483e3d2f242526344546463c2b3272daffffffffffffffffda0f010270ffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff7eee9e7e6e9a5533b1c00010000000101 010101010101010101010101010101010101010101010101010101010101010101010101000101 010101010100000001010101010101001b40404040404040414141403f3e3c3b3a3a3a3a3a3a3a 3938383736363636363737370e000028c8c8c86f020002214068abc9c9c9cbcbcbcbcbcbc39d62 5180bac9c9c9c9c9c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c829000139ced3d6d9dcdd dddddddedfdf880f02010101010101010101010100010a9bffffffffffffffffff3501014bffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff7eee9e7e67505000000000001072b4040 40403f3f3f3f3f40404040404040403f3f3f4040404040403f3f3f3f3f4040404040403024303f 3f3f40403b1f040101010101010100000001010101010101010101010101010101010101010101 01010101010101010101010100000015cccccc3c000016aecdceced0d0d0d0d1d1d2d2d2d3d3d3 d2d1d0d0cecececdcdcccccccccccccccccccccccccccccccdcdcdcdcd4b01001bb3d4d7dadcdd dddddddededf880e0101010101010101010101010001079bffffffffffffffffff46020246ffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff7eee9a33a020000000000225394daebec ebeae9e9e9e9e9eaebebecebebebeaeae9eaeaebebebebeaeae9e9e9eaebebecececebeae9e9e9 e9e9eaebebd29056423f3f4040401b000101010101010101010101010101010101010101010101 01010101010101010101010100000016d1d0d033000030d2d3d4d4d5d5d6d6d7d7d7d7d9d9d9d9 d7c6874c3a3a4882c3d1d1d0d0d0d0d0d0d0d0d1d1d1d2d2d2d2d3d3d3810400046ed6d7dadbdc dddddddddedfbf3e0504203e3f3f404041413403000246daffffffffffffffffff46020246ffff ffffffffffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff7a83b04000000022a53a5e9eaebebecec ebebe9e9e9e9e9eaebecececebebebeaeaeaebebebebebebeaeae9e9ebebececedecebeae9e9e9 e9e9ebebececebebebeaeaebebecdb925241404040404040414141403f3e3d3c3b3b3b3b3a3a3a 3a3939393939393a3a3b3b3b0f00002ad5d4d436000036d6d7d9dadadbdbdcdddddddddddddec5 883606000000000bacd5d5d4d4d4d4d4d4d4d4d5d5d5d6d6d6d6d6d6d6bf22010145d9d9dadbdb dcdddddddedfe05402012acde7eaecececed6901000fdaffffffffffffffffffff46020246ffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffb53e04000000000675e9e9e9e9eaebececed ecebe9e9e8e8e9eaebecedececebebeaeaebebebebecebebebeaeaeaebebecededecebeae9e9e8 e9e9ebecedececebebebeaebececedededededededecececedededebe7e4dfdddad9d9d7d7d6d6 d5d4d4d3d3d4d6d9dadddddc37000037d9d9d736000037dadbdddddddfdfe0e1e2e2e3e3d38126 0401000000000000b0d9d9d9d9d9d7d7d9d9d9d9d9dadadadadbdbdbdbdb3b01013bdadadadadb dcdddddddedfe07504000280eaecedefecdc2e000035ffffffffffffffffffffff46020246da85 52464646465185daffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffefefdb30b00000000043ba5e9e9e9e9e9ebebeceded ecebe9e9e7e7e9e9eaebececebebeaeae9eaebebecececebebeae9e9ebebececedecebe9e9e7e7 e9e9eaebecececebebebebebecededeeeeededececebebebebebebeae7e3dfdddad9d9d7d7d6d6 d6d5d4d4d4d6d9dbdddedfde38000037dbdada37000028dcdddfe0a050393a3a3a3a3a3a1c0000 000001030000002ecddbdbdbdbdadadadadbdbdbdbdbdcdcdddddddddddd3c01013cdbdbdadadb dcdddddddedfe0c118000045ebeef0f1ed9506000157fdfdfdfdfdfdfdfefeffff460202469b12 0302020202020751daffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffefbf8ae1f000000043aa3e9e9e9e9e9e9e9eaeaebebec e9e7e4e2dfdee0e2e2e3e4e5e6e6e6e7e7e9e9eaebecebeae9e9e8e7e8e8e8e9e9e7e5e3e2dfde e1e3e5e7e9e9e9e9eaeaebebecededeeedebe9e7e4e3e3e3e3e3e3e2e0dfdddcdbdadad9d9d7d7 d6d6d6d5d5d7dadcdde0e1de38000037d7d7d64c0000049cdd9f3a040000000000000000000000 031e461a000029cedddddcdcdbdbdbdbdbdbdbdbdbdbdbdbdbdcdcdcdcdc3c01013cdbdbdbdadb dddddddfdfe1e2e234000039ebedefefed5300000795f1f1f1f1f1f4f6f9fbfeff460202469b12 030202020201010785ffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffef89b090000001ea3e7e7e9e9e9e9e9e9e9e9e9eaeaea e7e3dfdddad9dadbdcbc8686bee1e2e3e4e7e9e9ebecebe9e9e7c4775576c2e4e4e2dfdddcdad9 dcdde0e3e6e7e8e9e9eaebebecededeeece9e6e2dedcdcdcdcdcdcdcdcdbdbdbdbdbdadad9d9d9 d7d7d7d6d6d9dbdddfe2e2df38000036d5d4d39504000014280400000000000000000000000021 6ec58e06000150dfdedddddddcdcdbdbdbdbdbdbdadadbdbdbdbdbdbdbdb3c01013cdbdbdbdbdc dddddfe0e1e2e3e33a00002aeaeceeefec4000002cdbebebebebeceef1f5f9fdff46020246da85 524646462b05010252ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffd980160000000aa4e8e7e8e8e9e9e9e9e9e9e9e9e9e9e9 e4dfdcd7d3d1d3d4d46f0f0f72dddee0e2e4e7e9ebecebe9e7e67609020e88e0dfdddbd9d6d3d1 d6d9dddfe2e4e6e7e9e9ebebecededeeece7e2ddd9d4d4d4d4d4d4d4d6d7dadbdcdbdbdbdadad9 d9d9d7d7d6dadcdde0e3e3df38000035d3d1d0ce3400000000000000042a3b3b3b3b3b3b53a5e9 e9e7500100078fe1dfdddddddddddcdbdbdbdbdadadadadadadadbdbdada3b01013cdbdbdbdbdd dddedfe1e2e3e3e451000004a5ebededeb4001013fe8e8e8e8e8e8eaeef2f7fdff46020246ffff ffffffffda2b020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffff830a0000012ea6eae8e8e7e8e9e9e9e9e9e9e9e9e9e9e8 e2ddd7d2cbc9cbcbae28010244d7dbdddfe3e5e8eaedeae9e6cb2900000986dddbd9d5d2cecbc9 ced3d7dbdee1c28b8dc7ebececededefebe4ddd7d1cbcbcbcbcbcbccd0d4d7dadddddcdbdbdada dad9d9d7d7dadddfe2e4e4df38000035cececccc900900000000043ba6ebeae9e9e9e9e9eaeae9 e9d82b01002ad2e2e0dfdedddddddddcdbdbdbdadadadadadadadadadada3b01013bdbdbdbdcdd dddfe1e2e3e4e4e4a204000053ebececd92b01013fe6e6e6e6e6e6e8ebeff5fcff46020246ffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffffffda3101000345d3eceae9e9e9e8e9e9e9e9e9c78d8dc5e7e6 dfdad3cbc4c2c3c46605000141d3d6dadde0e4e7e9edeae8e55901000245bad9d7d3cecbc7c4c2 c8cdd3d7dcc54308128debececededefeae2dbd3c9c2c2c2c2c2c2c5cbd0d5dadddddddcdcdbdb dadadad9d9dbdddfe3e5e5df3600002fcccbc9c8c88d4b373952a8eeedececebeaebebebebebeb e99006000152e4e3e2dfdfdedddddddddcdbdbdadad9d9d9d9d9d9d9d9d93b01013bdadbdbdcdd dee0e2e3e4e4e5e6e62a00003be9ebebbd0d000150e7e7e7e7e7e7e6e8ecf3fcff46020246ffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffffff850500012dc8edeeecebe9e9e8e9e9e9e9c74a0a0e78e7e6 dfd9d2cbc3c1c2c23e0100046ad1d6dadde0e4e7e9edeae8a204000021bad7d6d4d0ccc9c6c2c1 c7ccd2d7bb2c0000098debececededefeae2dad0c6bec0c0c1c1c1c3c9ced4d9dddddcdcdbdbdb dbdadad9d9dbdde1e3e6e6e141000016aecbc9c9c8c8d3dbe2e9efefededecebebebebebebebeb ea5101000792e5e3e2e0dfdfdedddddddddcdbdadadadadadadad9d9d9d93b01013bdbdbdcdddd dfe1e2e4e4e5e6e6e652000053e9eaebbd18020d90e9e9e9e9e9e8e6e8ecf2fcff46020246ffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffffda320100067aecefefedebeae9e8e9e9e9e97906000256e9e8 e2ddd6d0c9c7c6c536010121b0d3d7dddfe3e5e8eaedebe9520000048cdad6d4d0cecccbc9c8c8 cdd3d7c34200000045c7ebececededefeae2dad1c7c1c2c4c5c6c8c9ced1d4d7dadadadadadbdb dadadadad9dcdee2e4e7e8e37c0200046dd0cecdcccdd6dde3e9eeefedececebeaeaeaebebebea e93f01002ad6e6e4e3e2e1e0dfdfdfdedddddddcdbdbdbdbdbdbdbdbdbdb45020245dddddddddf e1e2e3e4e6e6e6e6e7a33031a5e9d97d280d09122f3f3f3f3f4a79c4e8ecf2fcff46020246ffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff850600012ec8ecefefedeceae9e8e9e9e9e94a01000579e9e9 e4dedad4ceccc9b21f00023fced4dadde1e4e6e9ebedebe93a000029dddad6d2cdcccccccccccd d3d7c3380000002ed0e9ebebecededeeeae2dad2c8c1c4c6c9cbced0d2d3d4d5d6d7d7d9d9dada dadadadadadddfe3e6e9e9e4c922000243d4d3d2d0d1d9dde4e9eeeeedecebeae9e9eaeaeaeaea e944010144e7e6e5e4e3e2e2e1e1e0dfdfdedddddddcdddddddddddddddd730f0f73dddedfdfe1 e2e3e4e5e6e6e6e7deb36f483f3f2c0400000000000101010101052d79c9f2fcff46020246ffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff510200067bebedefefeeeceae9e8e9e9e9941300012dc7eaea e6e2ddd9d4d1cd7102000368d0d6dbe0e3e6e7e9ebecebe93b000039dddad4d0c9cbccced0d2d3 d7bb4100000044c6e9e9ebebecededeeeae2dad2c8c2c6c9ccd1d4d5d5d4d4d4d4d5d6d7d9d9da dadadadadadde0e3e7e9eae7e347010122c0b66f443a3c3d3e3f4141414040403f3f3f3f40403f 3f1c01011c3f3f3f3e3e43609cd2e2e1e0dfdfddddddddddddddddddddddbc8686bddfdfe0e1e2 e3e4e5e6e7e7b7631d040201010101000000000000010101010000010a7bf2fcff25000258ffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff46020128caebedf0f0efedebe9e8e9e9a5090000057aebebeb e7e4dfddd9d6d23d000015add1d7dde3e6e7e9e9ebecebea3b00003adedad4cdc7c9ccd0d3d6d9 bc460400003bd0e9e9eaebebecededeeeae2dbd3c9c2c8ccd1d6dadad9d6d4d3d0d3d4d6d7d9d9 dadadadadadde1e4e8eaebe9e57504000586840f02010101010101010101010101010101010101 010100000101010101010102040b2555a2d9e0dfdededededfdfdfdfdfdfdfdfdfdfe0e2e2e3e3 e4e5e6c5621400000000000101010101040e131c323f3f3f270601000257f2fcb50000009effff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff46020142edecedf1f1efedebe9e8e8e95300000145c8ececec e9e6e3dfdddac51800003fcbd3d9dee4e7e9e9eaebecebeb3b00003adfdad3cbc5c8ccd2d6dadd 740600012ad0eaeaeaeaebebecededeeeae2dbd3c9c4c9d0d5dadededbd7d4d0cdd0d2d4d6d7d9 d9dadadadadde2e5e9ecece9e7c2260000237d0f02010101010101010101010101010101010101 0101010101010101010101010000000103102a3b3d3d3d3d3d3d3d3d3d3d3d3d3d3e3e3e3e3e3e 3e3f360f0000000000051b363f3f3f5394d8e9e9e9e9e9e9c7792d090e7bf2fc5b010020edffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff46020142edecedf1f1efedebe9e7e8e93b000021d1ebebecec e9e7e4e2dfdd850000008bcbd3dadfe6e9e9e9eaebecebda1c000052dfdad3cbc4c8cdd3d7dddf 480100057aeaeaeaeaeaeaebececedede9e2dbd3c9c4cbd1d7dde2e1ddd9d4cecbced0d3d5d7d9 d9dadadadbdde2e6e9ecede9e8e687000000506b463c23233f4041414040403f3f3f3f3f3f3f3f 3f3f3f3f3f3f3f3f3f3f39230c0401000000000101010101010101010101010101010101010101 010100000000001049b5e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e8c58b8dc9f2fc3b01013fffffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff46020142edecedf2f1efedebe9e7e8d81c000053eaebebecec e9e9e6e4e2df4c01001dc4cbd3dadfe6e9e9e9eaebebeb90000000a3dfdad3cbc4c8ced4dadec1 26010127c8eaeaeaeae9e9ebebececede9e1dad3c9c4cbd3d9dee4e4ddd9d3cdc8cbced2d5d7d9 dadadadadbdde2e6e9ecedeae9e6d22200000683dddd8081e7eaededecebeae9e9e9e9e9e9e9e9 e9e9e9e9e9e9e8e7e7e6e6e6d49e4c190502010101010101010101010101010101010101010101 010101020a53c6e8e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e8e8e8e7e6e8ebf2d71c01014dffffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff46020142edecedf2f2efedebe9e7e783000000a5e9eaebebeb eae9e8e6e5e23c010137c4cbd3dae0e7e9e9e9eaebebeb51010022e8dfdad3cbc4c9d0d6dce176 0600014aeaeaeae9e9e9e9eaebebebece9e0dad3c9c4ccd4dbe0e7e6dfdad3ccc6c9cdd1d4d7d9 dadadadbdbdee2e6e9ecedebe9e6e48f07000025bdde8062aeeaedececebeae9e9e9e9e9e9e9e9 e9e9e9e9e9e9e8e7e7e6e6e6e6e5e5e5cb8b53403d3d3d3d3e3e3e3e3e3e22223e3e3e3e3e3e3f 3f3f4770b4dfe9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e8e8e8e7e7e5e8ebf2830501048effffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff46020142edecedf2f2efedebe9e7ce27000021e9e9e9eaebeb eae9e9e9e7e43c010137c4ccd4dbe0e7e9e9e9eaeaebea3f01013fe8dfdad3cbc4c9d1d7dde34a 01000579eaeaeae9e9e9e9e9eaeaebebe8dfdad2c9c4cdd5dde3e9e9e0dad3c9c3c8ccd0d4d7d9 dadadadbdbdee2e6e9ecedebe9e7e4d25d0200036adfaa6383eaececebebeae9e9e9e9e9e9e9e9 e9e9e9e9e9e9e8e7e7e6e6e6e6e6e5e5e4e3e3e2e2e1e1e2e2e2e2e2e2e27c7ce2e3e3e4e5e6e6 e6e7e7e8e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e8e8e7e7e7e7e5e7ebd82e01022fe4ffffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff46020142eeedeef2f2efedebe9e78e0400036fe9e9e9eaeaeb eaeae9e9e9e73d010137c4ccd4dbe1e7e9e9e9eaeaeae93f01013fe8e0dad3cbc4c9d3d9dfe63f 010127c8eaeae9e9e9e9e9e9e9e9eaeae7dfd9d2c9c4ced6dde5ebeae2dad2c8c1c6c9ced3d7da dadadbdbdbdee2e6e9ecedebe9e7e5e3ca26000019c9e48284eaececebebeae9e9e9e9e9e9e9e9 e9e9e9e9e9e9e8e7e7e6e6e6e6e6e6e6e4e4e3e2e2e2e2e2e2e2e2e2e2e27c7ce2e3e4e4e5e6e6 e7e7e8e8e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e8e8e8e7e7e7e6e5e7eb8602010585ffffffff ffffffffff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff46020142eeedeef2f2efedebe9e75501001fc7e9e9e9e9eaea ebebebebece93e010137c4cc9fa4e2e8eaeaeae9e9e9e93f01013fe9e0dad3cbc4cbd3dbe1e840 010140ebebeae9e9e9e9e9e9e9e9e9e9e7ded9d1c9c4ced7dfe7edece3dbd1c7bec4c8ced3d7da dadadbdbdbdfe3e6e9eceeebe9e8e6e4e38100000043c28364b0ececebebeae9e9e9e9e9e9e9e9 e9e9e9e9e9e9e8e8e7e7e6e6e6e6e6e6e5e4e3e3e2e2e2e2e2e2e3e2e2e27c7ce2e3e4e4e6e6e7 e7e7e8e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e8e8e7e7e7e7e6e4e7da23000127daffffffff ffffffffff46020246ffffffffffffffffffffffffff fffffffffffffffffffffffdfbf943010141edeef1f4f4f2efedebe94201013deaebb0b0ebebec ecececededeb3e01013acdd47b7ee4e9ebebebebebebea4001013fafa8dad3cbc4cbd3dae1e740 010140ebeaeae9e9e9e9e9e9e9e9e9e9e7dfd9d1c9c4ced7dfe7edece3dbd1c7bec5c9ced4d9db dbdcdddddde0e4e7e9edeeeceae9e7e5e5d33c00000577ad6485ebebebeae9e9e9e9e9e9e9e9e9 e9e9e9e9e9e9e9e8e7e7e7e7e7e7e7e7e6e6e5e4e4e3e4e4e4e4e4e4e4e47e7ee4e6e6e7e7e8e9 e9e9e9e9e9e9eaeaeaeaeaebebebebebeaeaeae9e9e9e9e9e9e9e9e8d7630000009cf9fbfdffff ffffffffff46020246ffffffffffffffffffffffffff fffffffffffffffffffffffbf7f442010141edf0f2f6f6f3f2efedeb40010140ecec8686ededed edeeeeeeefed3f01013cd7b24aabe8ebedecececececeb4001013f847fdbd3cbc4c9d3dae0e740 010140eaeaeaeae9e9e9e9e9e9e9e9e9e7dfd9d1c9c4ced7dfe7edece3dbd1c7bec5c9d0d5dadd dddddddddee2e5e8eaedeeecebe9e8e6e6e6cd24000249e88485ebebeaeae9e9e9e9e9e9e9e9e9 e9e9e9e9e9e9e9e9e8e8e8e8e8e7e7e7e7e7e6e6e6e5e6e6e6e6e6e6e6e67f7fe6e7e8e9e9e9e9 eaeaebebebebececececececececececececececececebebebebead9630400002ef3f5f8fbffff ffffffffff46020246ffffffffffffffffffffffffff fffffffffffffffffffffffaf5f141010141eef2f5f8f8f6f3f2efee41010141efc24fb3efefef efefefefefef45010142de6b5ee8eaedeeededededecec40010140847fdbd4cbc4c9d3dae0e740 010140eaeaeaeae9e9e9e9e9e9e9e9e9e7dfd9d1c9c4ced7dfe7edece3dbd1c7bec5cbd1d6dbdd dddedfdfe0e3e6e9ebedeeecebe9e9e7e7e7e74a02024ae98485ebebeae9e9e9e9e9e9e9e9e9e9 e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e8e8e7e7e7e7e7e7e7e7e8e8e8e88080e9e9e9eaebebeb ecececededededededeeeeeeeeeeeeeeeeeeeeeeeeedededededed920800000898f1f3f6faffff ffffffffff46020246ffffffffffffffffffffffffff fffffffffffffffffffffff8f2ef41010141f1f4f7faf9f7f6f3f2ef4101012cde3962efefefef eff0f0f0f1ef68060666e77474ebedefefefefeeeeeded45010145847fdbd4ccc4c9d3dadfe63f 010140eaeaeaeaeae9e9e9e9e9e9eaeae7dfd9d2c9c4ced7dee7edece3dbd1c7bec5cbd2d7ddde dfe0e1e2e2e4e7e9ebedeeedecebe9e9e9e9e979101079e9af84b0eae9e9e9e9e9e9e9e9e9e9e9 e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e98080e9ebebececeded edeeeeefefefefefefefefefefefefefefefefefefefefefefde972001000366dff0f1f4f9ffff ffffffffff46020246ffffffffffffffffffffffffff fffffffffffffffffffffff7f0ed40010142f4f6f9fcfbf9f7f6f3f2530100064d3df1f1f1f1f1 f1f1f2f2f2f2bd6262bbed7777efefeff0efefefefefed680606678480dbd4ccc4c9d3dadfe63f 01013feaeaeaeaeaeaeaeaeaeaeaeaeae7dfd9d2c9c4ced7dee6edece3dad1c7bec6ccd3d9dde0 e1e2e3e3e4e6e8e9ecedefedecebebe9e9e9e9c78d8dc7e9e98485e9e9e9e9e9e9e9e9e9e9e9e9 e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaeaeaeaeaebebeb8181ececededeeefef efefefefefeff0f0f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f17d0a0000003ae5f4f1eff2f7ffff ffffffffff46020246ffffffffffffffffffffffffff fffffffffffffffffffffff6efec40010142f6f8fafcfcfaf8f6f5f3960800013779f2f2f2f2f1 f2f2f2f2f2f2f2f2f2f2f23d78f1f1f1f0efefefefefeeb96161b88480dbd4ccc5cbd3dadfe63f 010127c7eaeaeaeaeaeaeaeaeaeaeaeae7dfd9d2c9c4ced7dee6edece3dad1c7bec6ccd3dadee1 e2e3e3e4e5e7e9eaecedefededecebebebebebebebebeaeaea8484e9e9e9e9e9e9e9e9e9e9e9e9 e9e9e9e9e9e9e9e9e9e9e9e9e9eaeaeaebebebebebebebebebebecececec8283ededeeefefefef efeff0f0f0f1f1f1f1f1f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2370000010e9efaf7f2f0f1f6fefe fefeffffff46020246ffffffffffffffffffffffffff fffffffffffffffffffffff8f1ee40010141f3f6f8fcfaf8f6f3efeddc6412184975ebeaeae9e9 e9e9e9e9e9e9e9e9e9e9e974e9e9e9e9e9e9eaebebebebebebebeb8481dfdad5ced4d9dde2e74a 01000679e9e9e9e9e9e9e9e9e9e9e9e9e6ded9d1c9c4ced7dee6ecebe2dad1c7bec6ccd3d9dde1 e2e2e3e4e4e6e9e9ecedeeedececebeaeaeaeaeaeaeaeaeaea8484e9e9e9e9e9e9e9e9e9e9e9e9 e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaeaeaeaeaebebebebebebebecececec8383edededededeeed ececebebebebeaeaeaeae9e9e9e9e9e9e9e9e9eaeaeaeaeaea4c05073995e2f6f3efeeedf0f3f5 f7f9fbfeff46020246ffffffffffffffffffffffffff fffffffffffffffffffffff9f3f041010141f1f4f7fbf9f6f3efebe9e7d6b9b9d4e5e4e4e3e3e3 e2e2e2e2e2e2e2e2e2e2e3e2e2e2e2e2e3e4e5e7e8e9e9e9e9eaeb8582e3dedbd7dadde1e4e779 0500014ae9e9e9e9e9e9e9e9e9e9e9e9e6ddd7d1c9c4ced7dde6ecebe2dad0c6bdc6ccd3d9dde0 e1e2e3e3e4e6e8e9ebedeeedececebeaeaeaeaeaeaeaeaeaea6e9ae9e9e9e9e9e9e9e9e9e9e9e9 e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaeaeaeaeaeaebebebebececc08b825283ededececececeb e9e9e8e7e6e5e5e4e4e4e3e3e2e2e1e0e1e2e2e3e3e3e3e3e3b27e99d8eceff2efedececedeef0 f2f5f9fdff46020246ffffffffffffffffffffffffff fffffffffffffffffffffffbf6f341010141f0f2f6faf8f4efebe6e2e2e0dfdfdddddddddcdbdb dbdadadadadadadadadbdbdbdbdbdbdbdbdddfe2e4e6e7e8e9e9ebb0afe6e3e1dee0e2e4e6e8c7 2701013fe8e8e8e8e7e7e7e7e8e8e8e8e4ddd7d0c9c4ced6dde5eceae2dad0c6bdc6ccd3d9dddf e1e2e2e3e3e6e8e9ebedeeedecebebe9e9e9e9eaeaeaeae9cc5ccce9e9e9e9e9e9e9e9e9e9e9e9 e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9eaeaeace8181826f4e798283d0edececebebeae9 e7e5e3e2e0dfdedddddddcdbdadad9d9d9dadbdbdcdcdcdcdcdcdcdfe3e7e9edececebebeaebed eff2f7fcff46020246ffffffffffffffffffffffffff fffffffffffffffffffffffcf9f743010141eff1f4f9f8f2ede7e1dddbdadad9d7d6d6d5d4d3d3 d2d2d1d0d0d0d0d1d2d2d3d3d3d3d3d3d4d7dbdde0e3e4e6e8e9eaebe9e9e8e7e6e6e7e7e8e9e9 3f01013fe7e7e7e7e7e6e6e7e7e7e7e7e4ddd7d0c8c4cdd6dde4ebeae1d9d0c6bdc5cbd3d9dddf e0e1e2e2e3e5e7e9ebedeeedecebebe9e9e9e9e9e9e9e9e9805ce9e9e9e9e9e9e9e9e9e9e9e9e9 e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9cc81525281826fb1ecededededecebeae9e9e7 e4e2dedddbdad9d7d6d5d4d3d2d0ceced0d0d2d3d4d4d4d4d4d4d4d9dde0e4e8e9e8eaeaebebeb edf0f5fcff46020246ffffffffffffffffffffffffff fffffffffffffffffffffffefdfc440101197ccdf3f8f6efe9e3dcd6d4d3d2d0d0cecdcccbc9c9 c8c8aa673e3736363636373737373737406db6d9dddfe2e4e6e9eaebececececececebeae9e9e9 3f01013fe6e6e6e6e6e6e5e6e6e6e6e7e3ddd6d0c8c4cdd6dde4ebe9e0d9d0c6bdc5cbd2d7dddf dfe0e1e2e2e4e7e9ebededececebeae9e9e9e9e9e9e9e9e95aa7e9e9e9e9e9e9e9e9e9e9e9e9e9 e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9cc8080515181ceebececececededededebeac779493f 3d3c3c3b3a39393938384068aac6c5c4c5c6c8c9cbcbcbcbcbcbcbd1d6dadde2e4e6e8eaecedeb eceef3fbff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff520200011091f2f8f6efe9e0d9d3d0cecdcccbc9c8c7a9663f 353520040101010101010101010101010104233a3c4675c2e6e9eaecededefefefefedeceae9e9 3f01013fe6e6e6e6e5e5e5e5e6e6e6e6e3ddd7d1c9c6ced7dde4ebe9e0d9d0c6bdc5cbd2d7dddf dfe0e1e2e2e4e7e9ebededececebeae9e9e9e9e9e9e9e9e930dbeaeaeaeaeaeaeae9e9e9e9e9e9 e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9be6e00808080cceaebebecececededca7b4c404027050101 0101010101010101010101042035343c64a5c3c5c6c6c6c6c6c6c6ccd1d6dbdee2e5e9ebedefec ebedf2fbff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffff850b01021091f2f8f6efe7dfd7d1cecdcbc9c8aa673f210501 0101010000010101010101010101010100000101010105264979c8ecedefefeff0efeeedebe9e9 4a020249e6e6adade6e5e5e5e6e6e6e6e4dfdbd7d3ced6dce1e6ebe9e0d9d0c7bec6ccd3d7dddf e0e1e2e2e3e5e7e9ebedeeedecebebeaeaeae9e9e9e9ea926feaeaeaeaeaeaeaeaeaeae9e9e9e9 e9e9e9e9e9e9e9e9e9e9e9e9af84844d5feaeaeaebebebecececedca7b4c270601010101000001 0101010101010101010100000101010104203d65a7c4c4c4c4c4c5cbd0d4d9dddfe4e7eaedefec eaedf2fbff46020246ffffffffffffffffffffffffff ffffffffffffffffffffffffffffda85504e7dccf2f8f5eee7ded6d0cdcbab683f210501010000 0101010105203434343435353535352005010101010000010105274b7ccceff0f1efefedecebe9 79101078e7e68282e6e5e5e6e6e6e6e6e4e1dddbd9d6dbdfe3e7ebe9e0d9d0c7c0c6ccd3d9dddf e0e1e2e2e3e5e7e9ebedeeedececebebeaeaeaeaeaeaea349beaebebebeaeaeaeaeaeaeaeae9e9 e9e9eaeaeae9e9e9e9e9e95f4d8484afeaebebebebecececca7b4c270601010000010101010626 3d3c3a3938383736362105010101010000010104203d65a5c2c2c3c8ced3d7dcdfe3e7e9edefec eaedf2fbff46020246ffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffdf3efeff2f8f5ede6ddd6ceae68270501010000010104 2034343c63a2c0c0c1c1c1c1c1c1c1a46540383a2406010100000101052e7dcef2f1efeeedebea c78d8dc6e7e78282e6e6e5e6e6e6e6e6e5e3e1dfdddddfe3e6e9ebe9e0d9d1c8c1c6ccd3d9dddf e0e1e2e3e3e6e8e9ebedefededececebebebebebeaeab03aebebebebebebebebebeaeaeaeaeaea eaeaeaeaeaeaeaeacc80006ebeeaeaeaebebebecececca7b2e06010100000101052740404a79c2 dfdbd6d0cccbc8c6c5a5653e34342005010100000101042564a4c2c7ccd2d6dbdde2e6e9ecefeb eaedf2fbff46020246ffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffdf3efeff2f8f5ede6ddb56a2705010000010104203c64 a2bebebebdbdbebebebec0c0c0c0c0c0c2c8ced4b9734826060101000001052f7eceefefedeceb eae9e9e8e7e78382e6e6e6e6e6e6e6e6e6e5e4e4e3e3e4e6e9e9ebe9e0d9d1c8c1c7cdd3d9dddf e1e2e2e3e3e6e8e9eceeefeeededecebebebebebebdd30b0ebebebebebebebebebebebeaeaeaea eaeaeaeaeaeaeabe5751cdeaeaeaeaeaebebececca7b2e06010000010105284b7ccaecebe9e9e4 dfdad5d0ccc9c7c5c2c1c0c0bebea1623c20050101000001042564a9cbd0d5dadde2e5e9ecefeb eaedf2fbff46020246ffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffdf3efeff2f7f5edc37329050100000104203c63a2bdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc1c7cdd3d9dde1c2784a270601000001052f7dcceeedec ebe9e9e9e7e78382e6e6e6e6e6e6e6e6e6e7e7e8e8e9e9e9eaebebe9e0dad1c8c1c8cdd4d9dddf e1e2e2e3e4e6e9eaeceeefefededecececebebebeba85bebebebebebebebebebebebebebebeaea ebebebebebce782d78cdeaeaeaebebebebecca7b2e060100000105284b7cccefefeeecebe9e9e4 dfdad4cecbc8c5c3c1bebdbdbdbdbdbdbda1623c1f0501000001042668b0d4d9dce0e4e8ebeeeb eaedf2fbff46020246ffffffffffffffffffffffffff fffffffffffffffffffffffefdfcfaf9f8efecedeff3ce792c0501000001042664a2bebdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc0c6ccd1d6dbdde1e4e7c77a2e0601000001052e7ac8e9 e9e9e7e7e6bb4cace4e4e4e4e4e4e4e4e5e6e7e7e8e9e9e9e9e9e9e7dfd9d0c8c1c7ccd3d7ddde dfe0e1e2e2e4e7e9eaecedececebebe9e9e9e9e9e98080e9e9e9eaeaeaeaeaeae9e9e9e9e9e9e9 e9e9e9e9be0089bee9e9e9e9eaeaeaeac87b2e0601000001052e7ac8ebebecececeae9e9e7e6e1 ddd7d3ccc9c6c5c2c1bdbdbdbdbdbdbdbdbdbdbda16225050100000104286db6dadde1e4e8eae7 e7e9eef5f944010145ffffffffffffffffffffffffff fffffffffffffffffffffffcf8f4f1edeae5e4e5e7c7490601000001042665a4c0bebdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbec5c8ccd1d5d7dadddee1e2c2762c06010000010648c2 e4e3e3e2e26b5ce1e1e1e1e1e1e1e1e1e2e2e3e3e4e4e5e5e6e6e6e3dcd6cec7c1c6cbd0d5dadb dddddddddee0e2e4e6e8e9e8e7e7e6e6e6e6e6e6e67f7fe6e7e7e7e7e8e8e8e8e8e8e8e8e8e8e8 e8e9af844dbee9e9e9e9e9e9e9e9e9c74a0601000001052d77c2e2e2e2e3e3e3e3e2e0dfdeddda d6d2cdc9c6c5c3c1c0bdbdbdbdbdbdbdbdbdbdbdbdbda1622505010000010542b4d7dadddfe2e0 e0e1e4e9ec42010144ffffffffffffffffffffffffff fffffffffffffffffffffffaf4eee9e3dfdddcdcbe4704000001042666a5c2c1bebdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbec3c6c9ccd0d2d4d6d7dadadbdbbc732b060100000446 bededededddddddddddddddddddddddddddedfdfe0e1e2e2e2e2e3e0dad3ccc6c1c5c9ced3d7d9 dadadadbdbdddee0e2e3e4e3e3e3e2e2e2e2e2e2e27c7de3e4e4e5e5e5e5e6e6e6e6e6e6e6e6e6 e69a4883ade7e7e7e7e7e7e8e9e9c74a04000001052e79c3e1dddadadbdbdbdbdbdad9d9d7d6d4 d0ccc9c6c5c3c2c1bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbda16225050100000441b2d4d6d9dad8 d9d9dcdfe23f010144ffffffffffffffffffffffffff fffffffffffffffffffffff8f0e8e1d9d4d3b46e29040000042767a6c2c1c1c0bebdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc1c3c5c7c9cbcccdced0d2d2d3d3d3b56f2904000004 2a72bbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcdddddddddddddededfddd7d1cbc5c0c4c8ccd0d4d6 d6d7d7d7d9dadbdddddfdfdfdededddddddddddddd7a7bdfe1e2e2e3e3e3e3e3e3e3e4e4e4e4e4 ab4798e5e6e6e6e6e6e6e6e7c5792d040000042e7bc8e6e1dcd7d2d2d2d2d2d2d2d1d0d0d0cecc c9c8c6c4c2c1c1c0bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda1642603000003276ab0d0d1d0 d0d1d2d3d73d010144ffffffffffffffffffffffffff fffffffffffffffffffffff6ece2d9cfc8ab4005010000033ea7c2c1c0c0bebebdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc0c1c2c3c4c5c5c6c6c7c8c8c8c8c8c9cbaf42040000 010543b7d7d7d7d7d9d9d9d9d9d9d9d9d9d9d9dadadadbdbdbdcdcdad4cec9c4bec3c6c9cdd1d3 d3d4d4d4d4d6d7d9dadbdbdbdbdadadadadadadadb7979dddddedfdfe0e0e1e1e1e2e2e2e2e2e2 8181e3e4e4e4e4e4e4e5e5c44906010000044ac8eceae3ddd6cec8c8c8c8c8c8c8c8c7c7c6c6c5 c5c3c2c1c1c0bebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbea43d03000001053eaac8c8 c8c8c9c8cd3b010129daffffffffffffffffffffffff fffffffffffffffffffffff5e8dcd0c5a13c03000001053ca1bdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc1c5aa400501 00000443b4d4d4d4d4d5d5d5d5d5d5d4d5d5d6d6d6d6d7d7d7d9d9d6d1ccc7c2bec2c5c8cbcece d0d0d0d0d1d3d3d4d6d6d7d6d6d6d6d5d5d6d6d6d67677dadbdcdddddddddddededfdfdfdfe0a8 617fe2e2e2e3e3e3e3e3c24804000001064ac7ebece9e0d9d0c7bdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda13c05010000033ca1bd bdbdbdbdc24201000685ffffffffffffffffffffffff fffffffffffefcfaf8f6f5ece1d7cda63c030000032562a1bdbdbdbdbdbdbdbdbdbdbdbdbdbebe bebebebebebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc1c3c6aa6928 0400000443b5d4d4d5d6d6d6d6d5d5d5d5d5d6d6d6d6d7d7d7d9d9d6d1ccc7c3bec2c5c8cbcece d0d0d0d0d1d2d3d4d6d6d7d7d6d6d6d5d6d6d6d6d67677dadbdbdddddddddddddddddededeb54a 7ea8e0e1e1e1e2e2e2c147040000042c77c4e6e6e7e4ddd5cdc5bdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbebebebebebdbdbdbdbdbdbdbdbdbdbdbda16225030000033ca1 bdbdbdbdc16a0500014ef6f8fafcfeffffffffffffff fffffffffffef9f5f1ede9e2d9d1ab3d030000033ca1bdbdbdbdbdbdbdbdbebebebec0c0c0c0c0 c0c0c0c0c0c0c0bebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc0c2c5c6c8ab 400400000443b5d5d6d6d7d6d6d6d6d5d5d6d6d6d6d7d7d7d9d9d9d7d1ccc8c3bec2c5c8cbced0 d0d0d0d0d1d3d4d5d6d7d7d7d7d6d6d6d6d6d6d6d77677dadadbdcddddddddddddddddddc200b4 dededfdfdfdfdfdfbe460400000447c1e2e1e1e0dfddd7d1c9c4bdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbebec0c0c1c0c0bebebebebebebebebebebdbdbdbda13c030000033c a1bdbdbdc0ab2301013fedf1f5f9fdffffffffffffff fffffffffffdf6f0eae4ded8d2ae3e030000033ca1bdbdbdbdbdbdbdbdbebec0c0c0c1c1c1c1c1 c1c1c1c1c1c1c1c0bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc0c1c2c5c6c7 ab400400000443b6d6d7d7d7d7d6d6d6d6d6d6d6d7d7d7d7d9d9d9d7d2ccc8c3bec2c5c8cbced0 d0d0d0d1d1d3d4d5d6d7d9d7d7d7d7d6d6d7d7d7d77677d9dadbdbdcdcdcdcdcdcdddddd7182dd dddddddedededdbc460400000446bedfdddddcdbdad7d2ccc7c2bdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbec0c1c1c2c1c1c0c0bebebebebebec0bebebdbdbdbda13c03000003 3ca1bdbdbfc63801013ce4eaf0f6fcffffffffffffff fffffffffffdf3ebe3dbd3cfac3f030000033ca1bdbdbdbdbdbdbdbdbdbec0c0c1c1c1c1c1c1c1 c2c2c2c2c2c2c1c1c0bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbec1c1c2c4c5 c8ad410400000443b7d7d9d7d7d7d6d6d6d6d7d7d7d7d9d9d9d9dad7d2ccc8c3bec2c5c8cbced0 d0d0d1d1d1d3d4d6d7d9d9d9d9d7d7d7d7d7d7d7d77677d9dadadbdbdbdbdbdbdbdbdba549b3dd ddddddddddddbc460400000446bcdddddbd9d7d4d3d0ccc8c5c1bdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc0c1c1c2c2c2c1c1c1c0c0c0c0c0c0c0c0bebebdbdbdbda13c030000 033ca1bdbec336010139dbe3ebf3fbffffffffffffff fffffffffffcf0e6dcd1c7c565050000033ca1bdbdbdbdbdbdbdbdbdbebec0c1c1c1c2c2c2c2c2 c2c2c2c3c3c3c2c1c0bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbec0c1c1c2 c6c8ae420400000570d9dad9d9d7d7d6d6d7d7d7d7d9d9d9d9dadad7d2ccc8c3bec2c6c8ccced0 d0d0d1d1d1d3d4d6d7d9dad9d9d9d9d7d7d7d7d7d77677d9dadadadadadadadadadbdb6767dbdb dbdcdcdcdddc720600000445badadadad7d4d1cdcbc8c6c4c2c0bdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec0c1c2c3c4c3c2c1c1c0c0c0c0c1c1c1c0c0bebdbdbdbdbda13c0300 000562bdbdbf34010136d1dce6f0faffffffffffffff fffffffffffcede1d5c9bea1250100033ca1bdbdbdbdbdbdbdbdbdbdbec0c1c1c2c2c2c2c2c2c2 c3c3c4c4c4c4c2c1c1bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbebec0 c4c8cbb0430400012abadadad9d9d7d7d7d7d7d7d9d9d9d9d9dadad7d3cdc8c4c0c2c6c8ccced0 d0d1d1d1d2d3d4d6d7dadadadad9d9d9d9d9d7d7d77677d9d9dadadadadadadadadada7878dada dbdbdbdbdbbb2a01000444b9d9d7d7d7d4d0ccc8c5c2c1c1c0bebdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec1c2c3c4c5c4c3c2c1c1c1c1c1c1c1c1c1c0bebdbdbdbdbdbda13c03 000125a1bdbd33010133cad6e2edf9ffffffffffffff fffffffffffcede1d5c9a23c03000125a1bdbdbdbdbdbdbdbdbdbdbdbebec0c1c1c1c2c2c2c2c2 c2c3c3c4c4c4c2c1c1bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbebe c4c7cbceb42901000444bad9d9d9d7d7d7d7d7d7d7d9d9d9d9dadad7d3cdc8c4c0c3c6c8ccced0 d0d0d1d1d1d3d4d6d7dadadad9d9d9d9d9d7d7d7d77676d9d9d9dadadadadadadadada00bfdada dadadbdbbb450400012ab7d7d7d7d7d7d3cecbc7c3c2c1c0bebdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec1c2c3c5c5c4c3c2c1c0c0c0c1c1c1c1c1c0bebdbdbdbdbdbdbda125 0100033ca1bd33010133cad6e2edf9ffffffffffffff fffffffffffcede1d5ab3c0300000562bdbdbdbdbdbdbdbdbdbdbdbdbdbec0c1c1c1c1c1c2c2c2 c2c3c3c4c4c4c2c1c1bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbe c4c7cbced26e0500000445b9d9d9d7d7d7d7d7d7d7d7d9d9d9d9dad7d3cdc8c4c0c3c6c8cbced0 d0d0d1d1d1d3d4d6d7dadadad9d9d9d7d7d7d7d7d77676d9d9d9d9d9d9d9d9d9d9d95966d9d9da dadadbbb450400000570d7d7d7d6d6d6d2cec9c6c2c1c1c0bebdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec1c2c3c5c5c4c3c2c1c0c0c0c1c1c1c1c1c0bebdbdbdbdbdbdbdbd62 050000033ca133010133cad6e2edf9ffffffffffffff fffffffffffcede1d568050000033ca1bdbdbdbdbdbdbdbdbdbdbdbdbdbec0c0c1c1c1c1c1c1c2 c2c2c3c4c4c4c2c1c1bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbe c3c6cbced2b4430400000571d9d9d7d7d7d7d7d7d7d7d9d9d9d9dad7d3cdc8c4c0c3c6c8cbced0 d0d0d0d1d1d3d4d6d7d9dadad9d9d9d7d7d7d7d7d76e7fd7d9d9d9d9d9d9d9d9d9a348b1d9d9d9 dadada720600000444b7d7d6d6d6d6d6d1cdc9c5c2c0c0bebebdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec1c2c3c5c6c4c3c2c1bebec0c0c1c1c1c1c0bebdbdbdbdbdbdbdbda1 3c03000005623c02023ccad6e2edf9ffffffffffffff fffffffffffcede1b6270100033ca1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbebec0c0c1c1c1c1c1c1 c2c2c3c3c4c4c2c1c1bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbe c3c6c9cdd1d3b5430400012ab9d9d9d7d7d7d7d7d7d7d7d9d9d9dad7d2cdc8c4c0c3c6c8cbced0 d0d0d0d0d1d3d4d6d7d9dadad9d9d9d7d7d7d7d7af2aafd7d7d9d9d9d9d9d9d9d97b7bd9d9d9d9 d9daba2a01000444b7d6d6d6d6d5d5d5d0ccc8c5c1bebebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec1c2c4c5c6c5c3c2c1bebebec0c1c1c1c1c0bebebdbdbdbdbdbdbdbd a13c03000125540d0d62cad6e2edf9ffffffffffffff fffffffffffcede16f04000125a1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbebec0c0c0c1c1c1c1 c1c2c2c3c4c4c2c1c1bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd c3c6c9cdd1d3d4b62901000571d9d9d9d9d7d7d7d7d7d7d9d9d9d9d7d2cdc8c4c0c3c6c8cbced0 d0d0d0d0d1d3d4d6d7d9dadad9d9d7d7d7d7d7d77f6ed7d7d7d7d7d7d9d9d9d9d97b7bd9d9d7d9 d9da710500012ab7d7d6d6d5d5d4d4d4d0cbc8c4c0bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec1c2c4c5c6c5c3c2c0bdbdbec0c1c1c1c1c0bebebdbdbdbdbdbdbdbd bda125010005547272a1cad6e2edf9ffffffffffffff fefefefdfdfbecbf2901000562bdbdbdbdbdbdbdbdbdbdbdbdbdbebec0c0c1c1c1c1c2c2c2c2c2 c3c4c5c5c6c6c4c3c2c1bebebebebebebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd c2c6c9ccd0d2d3d46f0500012ab9d9d9d9d7d7d7d7d7d7d7d9d9d9d7d2cdc8c4c1c3c6c8cbced0 d0d0d0d0d1d3d4d6d7d9dad9d9d9d7d7d7d7d7d77676d7d7d7d7d7d7d7d7d7d7a15c7ad7d7d7d7 d9b92a01000571d7d6d5d5d4d4d4d4d3cecbc7c3c0bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbebebebebebebec1c2c4c6c7c8c6c5c3c2c0c0c1c1c2c2c2c2c1c0bebdbdbdbdbdbdbdbd bdbd6204000125a1bdbdc9d5e0ecf8fdfdfdfdfdfdff fcf9f6f3f1ede27104000125a1bdbdbdbdbdbdbdbdbdbec1c2c5c6c7c9cbccced0d1d2d3d3d4d5 d5d6d6d7d7d6d4d1cecbc9c8c8c8c7c6c6c4c2c1c0bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd c2c5c7c9cccdced0b2290100056fd7d7d7d7d7d7d7d6d7d7d9d9d9d7d2ccc8c4c1c3c6c8cbced0 d0d0d0d0d1d3d4d6d7d9d9d9d7d7d7d6d6d6d6d67676d6d6d6d6d6d6d6d6d6d6795ca1d6d6d6d6 d7710500012ab7d5d4d3d2d1d1d0d0d0ccc8c6c2bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbe c1c2c3c5c6c6c7c7c8c8cbced2d4d7d9d6d5d3d1cecececed0d0d0ccc9c6c4c1c1c0bebebebdbd bdbda12501000562bdbdc7d0d9e2ebefefefefefefff faf5f0ebe6e2b92901000562bdbdbdbdbdbdbdbdbdbdc0c3c6c8ccced1d4d6d9dbdddddedfe1e2 e2e2e3e3e3e2dedbd9d5d2d1d0cecdcccbc8c6c3c1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd c1c3c5c7c9cbcbcccc6a04000129b6d7d7d7d7d7d6d6d7d7d7d9d9d7d2ccc8c4c1c3c6c8ccced0 d0d0d0d1d1d3d4d5d6d7d9d7d7d6d6d6d6d6d6d67575d6d6d6d6d6d6d6d6d6d67979d6d6d5d5d6 b62a01000570d6d4d2d0cececececdccc9c7c5c2bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc1 c2c5c7c9cbcccdced0d0d4d9dcdee2e4e2dfdddddadadadadadadad5d0ccc7c3c2c1c1c0bebebd bdbdbd6204000125a1bdc4cbd2d9e0e4e4e4e4e4e4ff f8f1eae3dcd76d04000125a1bdbdbdbdbdbdbdbdbdbdc1c5c9cdd2d5d9dcdfe2e6e7e9e9ebecb2 86868787878684827f7d7ba3d7d6d4d3d2ccc8c5c2bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd c1c2c3c5c6c7c8c8c8ab270100056ed7d7d7d7d6d6d6d6d7d7d7d9d6d2ccc8c4c1c3c6c9ccced0 d0d0d1d1d1d3d4d5d6d7d7d7d6d6d6d5d5d5d5d57575d5d5d5d5d5d5d4d4d4d47878d4d4d4d4d5 6f0500012ab6d4d2d0cdcccccbcbcbc9c8c6c3c1bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc1 c5c8cbced1d3d4d6d7d9dce0e4e9ecefeceae9e7e4e4e4e3e3e3e3ddd7d2cbc5c3c2c1c1c0bebe bdbdbda12501000562bdc2c7ccd1d6d8d8d8d8d8d8ff f6ede4dbd1ae2701000562bdbdbdbdbdbdbdbdbdbdbdc2c7ccd3d7dbdfe4e7ebeff0f2b68a8b6a 6a8c8c8c8c8b898684827fa7dddcdbd9d7d1ccc7c2bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd c0c1c2c2c4c4c5c5c5c56704000129b6d7d6d6d6d6d6d6d7d7d7d9d6d1ccc8c4c1c3c6c9ccced0 d0d1d1d1d1d3d3d4d6d6d7d6d6d5d4d4d4d4d4ba00bad4d4d4d4d4d4d4d4d4d47878d3d3d3d3b5 2901000571d6d3d0cdcbc9c9c8c8c8c8c6c4c2c1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd92 95cbd0d4d6d9dadcdddee3e9edf1f5f8f5f3f2efededecececebebe4ddd6cec7c5c3c2c1c1bebe bebdbdbd6204000125a1c0c3c6c8cbcdcdcdcdcdcdff f4e9ddd2c76404000125a1bdbdbdbdbdbdbdbdbdbdbdc2c9d0d6dde0e6ebeff3f6f866538f8f8f befdfefefefdf9f5f1ece8e6e4e2dfdddcd6d0c9c4bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbec0c1c1c1c1c1c1c1a5260100056fd6d6d6d6d6d6d6d6d7d7d7d6d1ccc8c4c1c3c6c9ccd0d0 d1d1d1d1d1d3d3d4d5d6d6d6d5d4d4d3d4d4d47575d4d4d3d3d3d3d3d3d3d3d37777d3d3d3d36e 0400012ab9d4d2cecbc8c7c6c6c6c5c5c4c2c1c0bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd6e 56758cbedbdddfe2e3e5e9eff4f8fcfdfcfbf9f8f6f5f4f4f3f3f2eae3dbd3c9c6c5c3c2c1c0be bebdbdbda12501000562bebebfc0c1c1c1c1c1c1c1ff efe4d9cec33c01000562bdbdbdbdbdbdbdbdbdbdbdbdc3cbd3dadfe4eaeff3b9760077cefeffff fffffffffffffcf8f4efebe9e7e6e4e2a77b777394bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbebebebebebebebec06604000144d6d6d6d6d5d5d6d6d6d7d7d6d1ccc8c4c1c3c6c9ccced0 d0d0d1d1d1d2d3d4d4d6d6d5d4d4d4d3d3d3d37474d3d3d3d3d3d3d3d3d3d3d37777d2d2d2d243 01000570d9d4d1cdcbc7c6c5c5c5c4c4c2c1c1c0bdbdbdbdbdbdbdbdbdbdbdbdbdbdbda6683c4a 727665566995c7e5e7e9edf3f7fbfefffefdfcfaf8f8f8f7f7f6f6eee7ddd6cbc8c6c5c3c2c1c0 bebebdbdbd620400013cbdbdbdbdbdbdbdbdbdbdbdff e4dbd3caa41f01011fa1bdbdbdbdbebebebebebdbdbdc5ced6dde5eaeff2c75277ddfdfdfeffff fffffffffffffcf9f6f2eeecebe9e9e7ab7d7974263f9abdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbebebebebebebebec0a821010124b6d6d6d5d4d4d5d6d6d6d7d5d0ccc8c5c1c4c6c8cbcece ced0d0d0d0d1d2d3d4d5d5d4d4d4d3d3d3d3d3745877777777777777777777775b77d3d3d3b423 010124b9d9d5d2cec9c6c5c5c5c4c3c2c2c1c0bebdbdbdbdbdbdbdbdbdbdbdbdbdbd9a006876c5 ccd3dac3966d256eceecf0f5f8fcfefffffdfdfcfafafaf9f9f9f8f1eae2dad0ccc9c7c5c3c2c1 c1c0bebdbda11f01011fa1bdbdbdbdbdbdbdbdbdbdff dbd4cdc7640400013cbdbdbdbdbebec0c0c0bebebebdc5d0dae2e9eff2e67880fcfdfdfeffffff fffffffffffffdfaf7f3f0efeeedecebe9dfd7d0c66147a6bdbdbebebdbdbdbdbdbdbdbdbdbdbd bdbdbdbebebebebebebebec53f0100056fd6d5d4d4d4d4d5d5d6d6d4d0ccc8c5c1c4c6c8cbccce cececececed0d1d3d4d4d5d4d4d3d3d3d3d3d36c2c7777777777777777777777779ed3d3d36e04 000145d9dad6d2cec9c6c5c5c4c3c2c2c1c1c0bebdbdbdbdbdbdbdbdbdbdbdbd8e6b3f9abdbdc5 cdd5dce3e7e9ea940077797b20fcfffffffefdfcfcfcfbfbfbfbfbf4ede5ddd3ceccc9c7c5c3c2 c1c1bebdbdbd3c01000562bdbdbdbdbdbdbdbdbdbdff d1cdc8c33c01000562bdbdbdbebec0c1c1c0c0c0bebec6d3dce5edf3f53360dcfdfdfefeffffff fffffffffffffdfbf8f5f3f2f1f0efefece3dad1c7a64141a6bebebebebdbdbdbdbdbdbdbdbdbd bdbdbdbebebebebebdbdbec56804000144d6d5d4d4d39f789fd5d6d4d0ccc8c5c2c4c6c8c9cccc cccdcdcdcdced0d2d3d4d4d4d4d3d3d2d3d3d3c6acd3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d34301 000571dadad6d3cec9c6c5c4c3c2c2c1c1c0bebebdbdbdbdbdbdbdbdbdbdbd8e51518ebdbdbdc6 ced7dee6e9ecedeff1797a7c103cd0fffffefefdfdfcfdfdfdfdfcf6efe8dfd6d3ceccc9c6c5c3 c2c1c0bdbdbd620400013cbdbdbdbdbdbdbdbdbdbdff c8c5c3a42001011fa1bdbdbdbec0c1c1c1c1c1c0c0bec7d4dee9f1f66659fbfcfdfefeffffffff fffffffffffffdfcf9f7f4f4f3f3f3f2efe6ddd3c8bda64169bebebebebebdbdbdbdbdbdbdbdbd bdbdbdbdbebebdbdbdbdbec4aa22010124b6d4d4d3d39e7846576a69cecbc8c5c2c4c6c7c9cbcc ccccccccccced0d1d3d4d4d4d3d3d3d2d2d2d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3b42301 0124b9dadbd6d3cec9c6c5c3c2c2c1c0c0bebebdbdbdbdbdbdbdbdbdbdbd4d3f6b8ebdbdbdbdc6 d0dae1e9edeff0f2f3f5f7f9fc6855c0fffffefefdfdfdfefefefef8f2ebe3dad6d2cecbc8c6c4 c2c1c0bdbdbda11f01011fa1bdbdbdbdbdbdbdbdbdff bebebe620400013cbdbdbdbdbec0c1c1c2c1c1c1c0c0c8d6e1ebf4bb53cdfdfdfeffffffffffff fffffffffffffdfcfaf8f6f6f6f6f5f5f3e9dfd5c9bdbda600a6c0c0bebebdbdbdbdbdbdbdbdbd bdbdbdbdbebdbdbdbdbdbdc4c8400100056fd4d4d3d2d3d3ac646a353465c8c5c2c4c6c7c8c9cb cbcbcbcbcbccced0d2d3d4d4d3d3d2d2d2d2d2d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d36e0400 0145d9dbdbd7d3cec9c6c4c3c2c1c0bebebebdbdbdbdbdbdbdbdbdbdbd4d2a9abdbdbdbdbdbdc7 d2dbe4ebeff2f3f5f6f8f9fbfdfe916ec0fffffffefefffffffffffaf4ede6ddd9d4d1cdc9c7c5 c3c2c1bdbdbdbd3c01000562bdbdbdbdbdbdbdbdbdff bdbdbd3c01000562bdbdbdbdbec0c1c2c2c1c1c1c0c0c8d7e3edc853bdfdfdfefeffffffffffff fffffffffffffefdfbf9f8f7f7f7f7f6f4e9dfd6c9bdbdbd7061c0c0bebebdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c86a04000144d4d3d3d2d2d3d3d3d4d3673332626162c6c7c8c9cb cbcbcbcbcbccced0d2d3d4d3d3d3d2d2d2d2d2d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4430100 0570d9dbdbd7d3cec9c6c4c2c2c1c0bebebdbdbdbdbdbdbdbdbdbdbd8e3f9abdbdbdbdbdbdbdc8 d3dce4edf1f3f4f6f7f8fafcfdfec06e6e91c0fffffffffffffffffbf5efe7dddad6d3cecbc7c5 c4c2c1bdbdbdbd620400013cbdbdbdbdbdbdbdbdbdff bdbdbd3301011fa1bdbdbdbdc0c1c1c2c2c2c1c1c1c0c9d9e4ef9281fdfdfefeffffffffffffff fffffffffffffefdfcfaf8f8f8f8f8f8f6ebe2d6c9bdbdbd9a3f90c0bebebdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8ae2301013ad4d3d2d1d2d2d3d3d3d2cecb646361323263646464 646465656566676869696a696969696969696969696969696969d3d3d3d3d3d3d3d3d3d43a0101 24b7dadbdbd7d3cec9c5c3c2c1c1c0bebdbdbdbdbdbdbdbdbdbdbd8e516bbdbdbdbdbdbdbdbdc8 d3dde6eef2f4f6f7f8fafbfcfdfeffc0916e6ec0fffffffffffffffbf6efe8dfdbd7d3cecbc8c6 c4c2c1bdbdbdbda11f010133bdbdbdbdbdbdbdbdbdff bdbdbd33010133bdbdbdbdbdc0c1c1c2c2c2c1c1c1c0c9dae5d100defdfefeffffffffffffffff fffffffffffffefdfcfbfafaf9f9f9f9f7ece2d7cbbdbdbebe5a5bc0c0bebebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8cc3901013ad4d3d2d1d1d2d2d3d3d2cecbc8c6c3c56363646464 646464646466666868696a69696969696969696969696969696900747474747484d3d3d43a0101 3ad7dadbdcd7d3cec9c5c3c2c1c1bebdbdbdbdbdbdbdbdbdbdbd8e51518ebdbdbdbdbdbdbdbdc8 d4dde7eff3f6f7f8fafbfcfdfeffffffffc06e91fffffffffffffffbf6efe9e0ddd9d4d0cbc8c6 c4c2c1bdbdbdbdbd33010133bdbdbdbdbdbdbdbdbdff bdbda11f010133bdbdbdbdbdc0c1c1c2c2c2c1c1c1c1c9dae68589fefeffffffffffffffffffff fffffffffffffefdfdfcfbfafafafafaf8eee3d9cbbdbdbebe6a6ac0c0bebebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8cc39010123b4d3d1d0d1d1d1d2d2d1cdcbc8c6c4c5c6c7c8c9c9 c9c9c9c9c9cccdd0d1d3d4d3d3d3d3d2d2d2d2d3d3d3d3d3d3d3b9747474747484d3d3b5230101 3ad9dadbdcd7d3cdc9c5c2c2c1c0bebdbdbdbdbdbdbdbdbdbdbd6b518ebdbdbdbdbdbdbdbdbdc8 d4dde8eff4f6f8f9fbfcfdfdfeffffffffff916ec0fffffffffffffcf6f0e9e2ddd9d5d0ccc8c6 c5c2c1bdbdbdbdbd3301011fa1bdbdbdbdbdbdbdbdff bdbd620400013cbdbdbdbdbec0c1c1c2c2c2c2c1c1c1cbdbe7858affffffffffffffffffffffff fffffffffffffffefdfcfcfcfcfcfcfcf9efe4d9cbbdbdbebe6a6ac0c0bebebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8cc420100056ed2d1b16c423939426cafcbc8c6c5c5c6c7c8c8c9 c9c9c9c9c9cbcdced1d3d4d3d3d3d3d2d2d2d2d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d36e040001 44d9dadbdcd7d3cdc8c4c2c1c1c0bebdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbdbdbdbdc9 d5dfe9f1f6f8f9fafcfdfdfeffffffffffffc06e91fffffffffffffcf7f1eae3dedad6d1ccc8c6 c5c2c1bebdbdbdbd3c01000562bdbdbdbdbdbdbdbdff bdbd3c01000562bdbdbdbdbec0c1c1c2c2c2c2c1c1c1cbdce97c95ffffffffffffffffffffffff fffffffffffffffefdfdfcfcfcfcfcfcfaefe6daccbdbdbebe6a6ac0c0bebebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8cc6d05000143d2d07e0e0201010204162e32468bc5c6c7c8c8c9 c9c9c9c9c9cbcdced1d3d4d3d3d3d3d3d2d2d2d2d2d3d3d3d3d3d3d3d3d3d3d3d3d3d343010005 6fd9dadbdcd7d3cdc8c4c2c1c1bebdbdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbdbdbdbdc9 d6dfe9f2f6f8fafcfdfefeffffffffffffffff9191fffffffffffffcf7f1ebe4dfdbd6d2ccc8c6 c5c2c1bebdbdbdbd620400013cbdbdbdbdbdbdbdbdff bdbd3301011fa1bdbdbdbdbec0c1c2c2c3c2c2c2c2c1cbddaf51cdffffffffffffffffffffffff fffffffffffffffefefdfdfdfdfdfdfdfbf0e6daccbdbdbebe6a6ac1c0bebebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8ccb223010139d2d07e0e020101000000000000001d3636477fba c9c9c9c9c9cbcdced0d2d3d3d3d2d2d1d1d1d1d1d1d1d2d2d2d2d2d2d2d3d3d3d3d3d339010123 b6d7d9dadbd6d1ccc7c3c1c1c0bebdbdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbdbdbebec9 d6e0e9f3f7f9fafcfdfefeffffffffffffffff9191fffffffffffffcf7f2ebe4e0dbd7d3cdc9c6 c5c2c1bebdbdbdbda11f010133bdbdbdbdbdbdbdbdff bdbd33010133bdbdbdbdbdbec0c1c2c2c3c3c2c2c2c2ccdd6e73fcffffffffffffffffffffffff fffffffffffffffffefdfdfdfdfdfdfdfcf1e6daccbdbdbebe6a6ac1c0bebebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8ccd13a010139d2d0b06c42393920020000000000000101010625 37373737373c5aa1d0d1d2d2d1d1d1d0d0d0b9733d3335353535353535354a94d1d2d239010139 d4d6d7d9dad4d0cbc6c2c1c0c0bebdbdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbebebec0cb d7e1ebf3f8f9fbfcfdfeffffffffffffffffff9191fffffffffffffcf7f2ece6e1dcd7d3cdc9c7 c5c3c1bebdbdbdbdbd33010133bdbdbdbdbdbdbdbdff bdbd33010133bdbdbdbdbdbec0c1c2c3c4c3c3c3c2c2ccdd8086fcffffffffffffffffffffffff fffffffffffffffffefefdfdfdfdfdfdfcf1e7dbccbdbdbec06a6ac1c0c0bebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8ccd13a010139d2d0ced0d0d0d0b9733d32331800010101000000 010101010101010930393939393939393939200200000000000000000000002cd0d0d039010139 d4d5d6d7d9d4cecbc6c2c0c0bebebdbdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbebec0c1cb d7e2ebf3f8fafcfdfdffffffffffffffffffff9191fffffffffffffcf8f3ece6e2ddd9d4cec9c7 c5c3c1bebdbdbdbdbd33010133bdbdbdbdbdbdbdbdff bdbd33010133bdbdbdbdbdbec0c1c2c3c4c4c3c3c3c3cddd8086fcffffffffffffffffffffffff fffffffffffffffffffefefefefefefefcf2e7dbccbdbdbec06a6ac1c0c0bebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8ccd13a010139d2d0ceced0d0d0d0d0cecdccbc7c463726050101 010101010101000001010101010101010101000000000000000000000000002cd0d0d039010139 d3d4d5d7d7d3cec9c5c1bebebebdbdbdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbebec0c1c1cc d9e3ecf4f8fafcfdfeffffffffffffffffffff9191fffffffffffffcf8f3ede7e3ddd9d4cecbc8 c6c3c1bebdbdbdbdbd33010133bdbdbdbdbdbdbdbdff bdbd33010133bdbdbdbdbdbec1c1c2c3c4c4c4c4c4c4cddd8086fcffffffffffffffffffffffff fffffffffffffffffffffefefefefefefcf2e7dbccbdbdbec06a6ac1c1c0bebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8ccd23a010139d2d0cececed0d0d0d0cececdcccbccccbd7e4738 38383838382b0c03010101010101010101010204162f34343434343434344992cecece38010139 d1d3d4d6d6d2ccc8c5c1bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbec0c1c1c1cc d9e3ecf5f9fbfcfdfeffffffffffffffffffff9191fffffffffffffcf8f3ede7e3dddad4d0cbc8 c6c4c1bebdbdbdbdbd33010133bdbdbdbdbdbdbdbdff bdbd33010133bdbdbdbdbdbec1c1c2c3c4c4c4c4c4c4cedd8086fcffffffffffffffffffffffff fffffffffffffffffffffffffffefefefdf3e8dbccbdbdbec06a6ac1c1c0bebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8ccd23a010139d2d0cececed0d0d0d0cecececdcccccccdcdcdcd cdcdcdcdcdcdaf6a42383838383838383838416aafcececececececececececececece38010138 d0d2d3d4d6d0ccc8c4c0bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbec0c1c1c2cd dae3edf5f9fbfcfdffffffffffffffffffffff9191fffffffffffffcf8f3ede7e3dddad5d0cbc8 c6c4c1bebdbdbdbdbd33010133bdbdbdbdbdbdbdbdff bdbd33010133bdbdbdbdbdbec0c1c1c2c3c3c3c3c3c3ccdb7f53d9fdfdfdfdfefefeffffffffff fffffffffffffffefdfdfcfcfcfcfcfbf9efe4d9cbbdbdbebe6a6ac1c0bebebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8ccd23a010139d2d0ceced0d0d0d0d0d0cecececdcdcdcececece cececececdcececececececececececececececececececececececececececececece38010139 d1d3d4d5d6d1ccc8c5c1bebebdbdbdbdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbebec0c1c1cb d7e0e9f1f6f7f8fafcfdfdfefeffffffffffff9090fefefefefefefaf5efe9e3dedad6d2ccc9c6 c5c2c1bebdbdbdbdbd33010133bdbdbdbdbdbdbdbdff bdbd33010133bdbdbdbdbdbdbec0c1c1c2c2c2c2c2c2c9d9c75287fafafbfcfcfdfdfdfdfefeff fffffffffffffdfdfcfaf8f8f8f8f8f8f6ebe1d6c9bdbdbebe696ac0c0bebebdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8cdd23a01013ad2d0ced0d0d0d0d0d0d0d0cecececececececece cecececececececececececececececececececececececececececececececececece38010139 d2d3d4d6d6d2cdc9c5c1c0bebebdbdbdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbec0c0c1c9 d4dde6edf2f4f5f7f8f9fbfcfdfefffffffefe8f8ffdfdfdfdfdfdf8f3ece6dddbd6d3cecbc7c5 c4c2c1bdbdbdbdbdbd33010133bdbdbdbdbdbdbdbdff bdbd33010133bdbdbdbdbdbdbec0c0c1c1c1c1c1c1c1c8d5df8054d8f7f8f9fafbfcfcfdfdfdfe fefefffffffffdfbf9f7f5f5f5f4f4f4f1e7ddd4c8bdbdbda64269bebebebdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8cdd23a01013ad3d1d0d0d0d0d0d0d0d0d0d0cececececececece cececececececed0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d039010139 d2d3d4d6d6d2cdc9c5c2c1c0bebebdbdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbebebec0c8 d3dbe2e9eeeff2f3f4f6f8fafcfdfffffffefd8f8efbfbfcfcfcfcf6efe9e2dad6d3cecbc8c6c4 c2c1c0bdbdbdbdbdbd33010133bdbdbdbdbdbdbdbdff bdbd33010133bdbdbdbdbdbdbdbebec0c0c0c0c0c0c0c6d3dcc85285f3f5f7f8f9fafbfcfcfdfd fdfefefffffefcfaf7f4f1f1f0efefefede3dbd2c8bdbdbd6841a6bebdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8cdd33a01013ad3d1d0d0d0d0d0d1d0d0d0d0d0d0d0d0d0d0d0d0 d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d039010139 d3d4d5d6d7d3cec9c6c2c1c0c0bebdbdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbdbdbebec7 d0d7dee6e9ecedefeff1f4f8fafdfffffefdbd6c8df9f9f9fafafaf3ede6ddd5d2cecbc8c6c4c2 c2c1c0bdbdbdbdbdbd33010133bdbdbdbdbdbdbdbdff bdbd3301011fa1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc5d0d9e0cb0077f2f4f6f8f8f9fafcfcfd fdfdfefefffefbf8f4f1edececebebeae9dfd7d0c6bdbdbd6868bdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8cdb42401013ad3d1d0d0d0d0d1d1d1d0d0d0d0d0d0d0d0d0d0d0 d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d1d1d0d0d0d0d0d0d0d0d0d0d0d0d039010123 b4d4d5d6d7d3cecbc6c2c1c1c0bebdbdbdbdbdbdbdbdbdbdbd8e516bbdbdbdbdbdbdbdbdbdbdc5 cdd4dbe2e6e7e9e9ebedf0f5f8fcfefffefd8e6bb9f7f7f8f8f8f8f1e9e2dad0ccc9c8c6c4c2c1 c1c0bebdbdbdbdbda11f010133bdbdbdbdbdbdbdbdff bdbd3c01000462bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc4cdd6dde5e93962f2f4f6f7f8fafbfcfc fdfdfdfefffdfaf7f3efeae9e9e9e8e7e5ddd6cdc6bdbdbd00a6bdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdc4c8cd6e05000143d3d2d0d0d1d1d1d1d1d1d1d0d0d0d0d0d0d0d0d0 d0d0d0d0d0d0d0d0d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d143010004 6ed4d5d6d7d3cecbc7c3c2c1c0bebdbdbdbdbdbdbdbdbdbdbd6b518ebdbdbdbdbdbdbdbdbdbdc5 ccd3dadfe3e4e6e7e9e9eef3f8fbfefffebd6b8df6f6f6f6f6f7f7efe8dfd7cdc9c8c6c5c2c1c1 c0bebebdbdbdbdbd620500013cbdbdbdbdbdbdbdbdff bdbd620500013cbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc4ccd5dce3e8bf4f89b6f6f7f8fafbfcfc fdfdfefefffdfaf7f3eee9e9e8e7e6e6e3dbd4ccc5bdbd4d59bdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec5c8cd430100056ed3d2d1d1d1d1d2d2d2d2d1d1d1d1d1d1d1d1d1d1 d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d2d2d2d2d1d1d1d1d1d1d1d1d1d1d1d16d050001 43d4d6d6d7d3cecbc7c4c2c1c1c0bdbdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbdbdbdbdbdc5 cbd2d9dde2e3e4e6e7e9edf3f7fbfefffd8f6bbaf6f6f6f6f6f6f6eee7ded6ccc9c7c6c4c2c1c1 c0bebebdbdbdbdbd3c01000462bdbdbdbdbdbdbdbdff bdbda11f010133bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc3ccd4dbe1e6e9b267688bb9f8fafbfcfc fdfdfefefffdfaf6f2ede9e9e7e6e5e4e2dad4ccc58e6b3f9abdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec5c9cd39010124b5d4d3d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2 d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b3230101 3ad4d6d6d7d3cecbc8c4c2c2c1c0bebdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbdbdbdbdbdc4 cbd1d7dde0e2e3e5e7e8ecf2f7fbfdfffd8f8ef8f6f5f5f5f5f5f5ede6ddd6ccc8c6c5c4c2c1c1 c0bebebdbdbdbdbd3301011fa1bdbdbdbdbdbdbdbdff bdbdbd33010133bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc3cbd3dadfe4e9ecb38a6a6abaf9fbfcfd fdfdfefefffdfaf6f2ede9e7e6e5e4e2dfd9d3cba03f6b8ebdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec5c9cd3901013ad5d4d3d2d2d2d3d3d3d3d3d3d3d2d2d2d2d2d2d2d2 d2d2d2d2d2d2d2d3d3d3d3d3d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2390101 3ad4d6d6d7d3d0cbc8c5c3c2c1c0bebdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbdbdbdbdbdc4 c9d0d6dcdfe1e3e4e6e7ecf2f6fafdffce54bcf8f6f5f5f4f4f4f4ece5ddd5cbc8c6c5c4c2c1c1 c0bebebdbdbdbdbd33010133bdbdbdbdbdbdbdbdbdff bdbdbd3301011fa1bdbdbdbdbdbdbdbdbdbdbdbdbdbdc2cbd2d9dde2e7ebeff2b86a6a8d8ebdfd fdfdfefefffdfaf6f2ede9e7e5e4e2e0ddd7d1a5009abdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbebec5c9af2301013ad5d4d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3 d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3390101 23b6d6d6d7d3d0ccc8c5c3c2c1c0bebdbdbdbdbdbdbdbdbdbd6b6bbdbdbdbdbdbdbdbdbdbdbdc4 c9d0d6dbdddfe2e3e4e6ebf1f6fafdff7867faf8f5f5f4f4f4f3f3ebe4ddd4cbc8c6c5c3c2c1c1 c0bebebdbdbdbda11f010133bdbdbdbdbdbdbdbdbdff bdbdbd3c01000462bdbdbdbdbdbdbdbdbdbdbdbdbdbdc2c9d0d6dde0e6e9eef2f5b98d8d6c6c8f 8f8f909091befaf6f1ece8e6e4e3e1dfddd6a9279fbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbebec0c5c96a05000143d5d4d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3 d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3430100 046fd6d6d7d3d0ccc8c5c4c2c1c1bebdbdbdbdbdbdbdbdbdbd6b518ebdbdbdbdbdbdbdbdbdbdc3 c9ced4dadddee0e2e4e6eaf1f6fafdff407efaf8f5f4f4f3f3f3f2eae3dcd4c9c7c6c5c3c2c1c1 c0bebebdbdbdbd620500013cbdbdbdbdbdbdbdbdbdff c1c0bf630500013cbdbdbdbdbdbdbdbdbdbdbdbdbdbdc2c8ced4dadde3e7eaeff2f3f5f6ba8d8e 8e8e8e8f8f53657977747271706f6e6e6d6a00a3c3bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbebebec6c94201000570d7d6d5d4d4d4d4d4d4d5d5d5d5d5d5d5d5d5d5d5d5 d5d5d5d5d5d5d5d5d5d5d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d46e0500 0143d7d7d8d4d2cfccc9c7c5c3c1bfbdbdbdbdbdbdbdbdbdbd8e51518ebdbdbdbdbdbdbdbdbdc3 c8cdd3d7dadddddfe1e2e7edf2f6fa403ff8f6f4f2f1f0efefefefe7e0dad2c9c6c5c4c3c2c1c1 c0bebebdbdbdbd3c01000462bdbdbdbdbdbdbdbdbdff cdc9c6a52001011fa1bdbdbdbdbdbdbdbdbdbdbdbdbdc1c6cbced4d7dbdde2e5e8e9ebecedefef f0f1f1f2f2c46f7472706e6d6d6c6b6b6a67cbc6c2bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec7ae23010125bcdcdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbbb2401 0125bcdddddbdad8d6d4d2cdcac6c1bdbdbdbdbdbdbdbdbdbdbd8e51518ebdbdbdbdbdbdbdbdc2 c6c9cdd2d4d6d7d9dadbdee4e9ec3d3df0efeceae8e7e7e6e6e6e5dedad3ccc6c5c3c2c2c1c1c0 bebebdbdbdbda11f01011fa1bdbdbdbdbdbdbdbdbdff d6d0cbc53d01000462bdbdbdbdbdbdbdbdbdbdbdbdbdc1c4c7cbced1d4d7dadddedfe2e2e3e4e6 e6e6e7e7e8e7e3dfddd9d6d4d4d3d2d0cecbc7c5c1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec86b05000148e3e3e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2 e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e24801 000576e3e3e2e1e0dfdedbd5cfc8c1bdbdbdbdbdbdbdbdbdbdbdbd8e51518ebdbdbdbdbdbdbdc1 c4c6c9ccced0d1d3d3d4d7dcdf713ae9e6e4e3e0deddddddddddddd7d3cec9c5c3c2c1c1c1c0be bebebdbdbdbd620500013cbdbdbdbdbdbdbdbdbdbdff dfd7d0c8640500013cbdbdbdbdbd8e6b8ebdbdbdbdbdc0c2c5c6c9cbcdd0d1d3d5d6d7d7d9dada dbdbdbdbdcdbd9d6d3d0cecdcccccbc9c9c6c5c2c1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdca430100057aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea eaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea7a06 00014aeaeaeaeae9aeaee5dbd3ccc3bdbdbdbdbdbdbdbdbdbdbdbdbd8e6b3f61a6bdbdbdbdbdc0 c2c4c6c8c9c9cbcbccccd0d3d6376ddcdbdad7d6d5d5d4d4d4d4d3d0ccc8c6c2c1c1c1c0c0bebe bdbdbdbdbdbd3c01000462bdbdbdbdbdbdbdbdbdbdff e9dfd5cca51f01011fa1bdbdbdbd8e516bbdbdbdbdbdbec1c1c2c4c5c6c7c8c9c9cbcbcbcccccc cccdcdcdcecdcbc9c9c8c6c6c6c5c5c5c4c2c1c1bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbeac23010128cff3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3 f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3cf28 010128cff3f3f3f38a68b3e2d8cec5bdbdbdbdbdbdbdbdbdbdbdbdbdbdbd9a464168a6bdbdbdbe c1c1c2c3c4c5c5c5c5c6c7af0065cdcecdcccbcbc9c9c9c9c9c9c9c7c5c4c2c1c0c0bebea6a6bd bdbdbdbdbda11f01011fa1bdbdbdbdbdbdbdbdbdbdff f2e6dbcfc33c01000462bdbdbdbdbd6b518ebdbdbdbdbdbdbdbdbdbdbdbebebebebebebebebebe bebebebebebebebebebebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbe6a0500014ffdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd51 01000583fdfdfdfdbe6d8deaded2c7bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda668414168a6bdbd bdbdbdbdbdbdbdbdbdbda64269bebec0bebebebebebebebebebebebebdbdbdbdbdbdbdbd6868bd bdbdbdbdbd620500013cbdbdbdbdbdbdbdbdbdbdbdff f4eae0d6cc6705000125a1bdbdbdbd8e516bbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbec0c1c3c5aa2901000583ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85 07010232daffffffffc053c1e3d9cfc6c4c2c1bfbdbdbdbdbdbdbdbdbdbdbdbdbda66868006868 a6bdbdbdbdbdbdbdbd8e3841a6bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda64168bd bdbdbdbda12501000462bdbdbdbdbdbdbdbdbdbdbdff f7efe7dfd7b22801000462bdbdbdbdbd8e3f4dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbebebebebebe bebebebebebebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbd5fc4c8ccd06e06000130d8ffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda 3202010685ffffffffff6739e9e1d9d2cecac6c2bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbda66841 4168686868686868613f59a6bdbebebebebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd6841a6bd bdbdbdbd6205000125a1bdbdbdbdbdbdbdbdbdbdbdff f9f3ede7e1dd6f05000125a1bdbdbdbdbd9a2d5ebdbdbdbdbdbdbdbdbdbdbdbebebebebebebebe bec0c0c0c0c0bebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbd5e31c8ced4ba2b01000580fdffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 8507010232dafffffffffc3e3ce9e3ded7d1cbc5bfbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda6 68686868686868686f9abdbebebec0c0bebebebebdbdbdbebebebebdbdbdbdbdbdbdbd6868bdbd bdbdbda12501000462bdbdbdbdbdbdbdbdbdbdbdbdff fbf7f3efebe7bd2901000462bdbdbdbdbdbd5e30bdbdbdbdbdbdbdbdbdbdbebebec0c0c0c0c0c0 c0c0c0c1c1c1c0bebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbd3061ccd4dc7606000130d5feffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff da3202010685fffffffffdf83e78ece9e0d8d0c8c0bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbebebec0c0c0c0c0bebebebebebebebebebebebdbdbdbdbda64168bdbd bdbdbd6205000125a1bdbdbdbdbdbdbdbdbdbdbdbdff fdfbf9f8f6f3e67205000125a1bdbdbdbdbdbd305ebdbdbdbdbdbdbdbdbebebec0c0c0c0c0c0c0 c1c1c1c1c1c1c0c0bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbd5e30c4cfd9c22e01000582fcfeffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ff8507010232dafffffffefc7d3ff6f4e9dfd5cbc1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbebec0c0c1c1c1c0c0bebebebebebec0c0bebebdbdbdbda64141a6bdbd bdbda12501000462bdbdbdbdbdbdbdbdbdbdbdbdbdff fffffffffffcedc02901000462bdbdbdbdbdbd5e305ebdbdbdbdbdbdbdbebec0c0c1c1c1c1c1c1 c1c1c1c1c1c1c1c0bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbd305ec5d3df7a06010232daffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffda3202010685ffffffffffff4180fef1e5d9cdc1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbec0c0c1c1c1c1c1c0c0bebebec0c0c0c0bebebebdbdbd6841a6bdbdbd bdbd6205000125a1bdbdbdbdbdbdbdbdbdbdbdbdbdff fffffffffffcede16f05000125a1bdbdbdbdbdbd5e305ebdbdbdbdbdbdbdbebec0c0c0c0c0c0c0 c1c1c1c1c1c1c0c0bebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd c0c23232c9d0dbc32e01010685ffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffff8507010232daffffffffffff00dff1e5d9cdc1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbebec0c0c1c1c1c0c0bebebebebebebebebebebdbdbda64168bdbdbdbd bda12501000462bdbdbdbfc1c4c6c8c9c9c9c9c9c9ff fffffffffffcede1b6270100033ca1bdbdbdbdbdbd5e305ebdbdbdbdbdbdbebebebebec0c0c0c0 c0c0c0c0c1c0c0bebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd c33234d0d4dac24a04000232daffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffda3202010551daffffffffff8d4cb5e5d9cdc1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbebec0c0c0c0c0bebebebebebebebebebebdbdbda64141a6bdbdbdbd a13c03000125a1bdbdbdc1c6cacfd3d5d5d5d5d5d5ff fffffffffffcede1d568050000033ca1bdbdbdbdbdbd5e305ebdbdbdbdbdbdbebebebebebebebe bebec0c0c0c0bebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbe 3234d3d9dfc24a0400000785ffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffff850701010551daffffffffe0785075becdc1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbebebebec0bebebebdbdbdbdbdbebebebdbdbdbd6146a6bdbdbdbda1 3c0300000562bdbdbdbdc4cad0d7dde0e0e0e0e0e0ff fffffffffffcede1d5ab3c0300000562bdbdbdbdbdbdbd5e30bdbdbdbdbdbdbdbdbdbdbdbdbdbe bebebebebebebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd5e30 32d1d9e2ea7c0600000451daffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffda510501010785fffffffffffec45577cdc1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbebebebdbdbdbdbdbdbdbdbdbdbdbd8e243f9abdbdbdbdbd62 050000033ca1bdbdbdbdc6ced7dfe8ececececececff fffffffffffcede1d5c9a23c03000125a1bdbdbdbdbdbdbd5e00a6bdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd5e305f cbd6e0ebd13001000450daffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffda5105010232dafffffffffef1c900b4c1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd8e6b516bbdbdbdbdbdbda125 0100033ca1bdbdbdbdbdc8d3dde8f2f7f7f7f7f7f7ff fffffffffffceee2d6cbbfa2250100033ca1bdbdbdbdbdbdbd684168a6bdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd9a2d5fc0 cedae6ce5005010232daffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffda3202010551dafffffffef1e67847aabebebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd6b516b8ebdbdbdbdbda13c03 000125a1bdbdbdbebebecbd6e2eef9ffffffffffffff fffffffffffdf1e8dfd6cdca67050000033ca1bdbdbdbdbdbda6684141a6bdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd8f6e4152cacd d9e2c84d0401010785ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffff850701010551dafffffff4ebc64b48b2c8c5c2bfbdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd8e6b516bbdbdbdbdbdbda13c0300 000562bdbec1c4c7c9ccd6dfe8f1faffffffffffffff fffffffffffdf4ede6dfd8d3b03f030000033ca1bdbdbdbdbdbdbda6414168a6bdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd8e535598d0d5d8 e1c64b0400010551daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffda510501010551dafffff6efe8c54c4ab6cbc6c1bdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd8e51516b8ebdbdbdbdbda13c030000 033ca1bdbfc5c9ced3d7dfe6edf4fbffffffffffffff fffffffffffdf7f2ede8e3ddd6b03f030000033ca1bdbdbdbdbdbdbda6683959bdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd9a3f6e98d1d8dfe4 c84b0400000551daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffda510501010551dafff9f4efeac94e4b7ba4c3bdbdbdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd8e6b51518ebdbdbdbdbdbda13c03000003 3ca1bdbdbfc8cfd6dde3e8edf2f7fcffffffffffffff fffffffffffefaf7f4f2eee7ddd4ad3d030000033ca1bdbdbdbdbdbdbdbd8e3f9abdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda66868009ac5ced7e0e9cc 4c0400000451daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffda510501010551dafbf8f5f2efce7b6e44706b8ebdbdbdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd8e51516b8ebdbdbdbdbdbda13c030000033c a1bdbdbdc0cbd4dde6eef2f4f7fafdffffffffffffff fffffffffffffdfcfbfbfaf1e5d9cfa63c030000032562a1bdbdbdbdbdbdbd9a009abdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd593868a6bdc6d2ddc67e31 0400000451daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffda51050101053283d8fcfbfaf5e8dd9e7151516b8ebdbdbdbdbdbdbdbdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd8e6b51518ebdbdbdbdbdbda16225030000033ca1 bdbdbdbdc1cfd9e5effafbfbfcfdfeffffffffffffff fffffffffffffffffffffff5e9ded3c7a43c03000001053ca2bebdbdbdbdbdbd9a3f6b6b8ebdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda66868613f8fbfc0c0cad6c04b0602 01010551daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffda51050101020751dafffffaede1d6cb906d52526d6d6d6c6c6c6b6b8e bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd8e51516b8ebdbdbdbdbdbda13c05010000033ca1bd bebfbfc0c5d3dee9f4ffffffffffffffffffffffffff fffffffffffffffffffffff8eee5ddd4ceb04105010000033ea5bfbdbdbdbdbdbd8e6b51516b6b 8ebdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda6684141686f9dc5c8cbced6be49040001 020751daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffda51070201010551dafffbf1e8dfd7cece9b7575757572706e6d5151 6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b51518ebdbdbdbdbdbdbda13c03000001053ca1bdc0 c4c7cacdd2dde5eef7ffffffffffffffffffffffffff fffffffffffffffffffffff9f2ebe5dedadaba712a040000032664a1bdbdbdbdbdbdbd8e6b6b6b 3f4d5e599abdbdbdbdbdbdbdbdbdbdbdbdbdbda66868006868a6bdbec5cacfd4b9742d04000005 3285daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffda8532050101053285d7f4ede7e0dadadadadadad8d2cdc7c28e6b 6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b8ebdbdbdbdbdbda16225030000032562a1bdbdc3 c8cdd3d8dde5ebf2f9ffffffffffffffffffffffffff fffffffffffffffffffffffbf6f1ede8e5e5e5e5c34804000001052562a1bdbdbdbdbdbdbdbdbd 9a595e4d3f6b6b6b8ebdbdbdbdbdbdbdbda668414168a6bdbdbdbdbec7cfb6732c050100000451 daffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffda5105010102073180cfeeeae5e5e5e5e5e5e3dad3ccc4bdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda1622504010000033ca1bdbdbdbdc5 cdd4dbe3e7edf1f6faffffffffffffffffffffffffff fffffffffffffffffffffffcfaf7f5f2f1f1f1f1f1ce4a0601000001052562a1bdbdbdbdbdbdbd bdbdbdbd8e6b6b6b3f6168686868686868414168a6bdbdbdbdbdbdbfac6e2b05010000010650da ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffda510702010101063080cff1f1f1f1f1f1eee2d9d0c6bdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda162250401000001053ca1bdbdbdbdbdc8 d1dbe4edf2f5f7fafcffffffffffffffffffffffffff fffffffffffffffffffffffefefdfdfcfcfcfcfcfcfcd0782b0401000001052562a1bdbdbdbdbd bdbdbdbdbdbdbdbd9a6f6868686868686868a6bdbdbdbdbdbdbda163280501000001063184d9ff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffda85320602010001063183d7fcfcfcfcf9ebdfd4c8bdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda162250401000001052562a1bdbdbdbdbdbdca d6e1ecf8fcfdfdfefeffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff6e9bc6d260401000001051f3c62a1bdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda1623c1f0401000001063285daffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffda85320602010102072b5285dafffbece0d5c9bdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda1623c1f0401000001052562a1bdbdbdbdbdbdbdbdcb d7e3eefaffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff6e9ddd1a86225040100000101051f3c62 a1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda1623c1f040101000001062f84daffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffda8532060201010202072b5282c9e0d5c9bdbd bdbdbdbdbdbdbdbdbdbdbdbdbdbda1623c1f040101000001052562a1bdbdbdbdbdbdbdbdbdbdcb d7e3eefaffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff6e9ddd1c5bda162250401010000010105 1f33333c62a1bdbdbdbdbdbdbdbdbda1623c33331f04010100000101052a77cefeffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffda85320602020101020206273d3a4062a1 bdbdbdbdbdbdbdbdbda1623c33331f04010100000101052562a1bdbdbdbdbdbdbdbdbdbdbdbdcb d7e3eefaffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff6e9ddd1c5bdbdbda1623c1f0401010000 01010101051f3333333333333333331f040101010100000101051f3d6bbae6f2feffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffda85512b060202010001010101051f 3333333333333333331f040101010100000101051f3c62a1bdbdbdbdbdbdbdbdbdbdbdbdbdbdcb d7e3eefaffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff6e9ddd1c5bdbdbdbdbdbda1623c1f0401 01010100000101010101010101010101000001010101051f3c62a1bfcedae6f2feffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffda85512b0601010101000001 01010101010101010101000001010101051f3c62a1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcb d7e3eefaffffffffffffffffffffffffffffffffffff fffffffffffffffffffffffffffffffffffffffffffff6e9ddd1c5bdbdbdbdbdbdbdbdbda1623c 33331f0401010101010101010101010101051f33333c62a1bdbdbdbfcedae6f2feffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda854f403d23040101 0101010101010101010101051f33333c62a1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdcb d7e3eefaffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffda855146464646464646464646465285daffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda855146 464646464646464646465285daffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffff showpage %%Trailer end %%EOF moon-buggy-1.0.51/moon-buggy.info0000644000175000017500000002374610167521703013560 00000000000000Dies ist moon-buggy.info, hergestellt von Makeinfo Version 4.7 aus moon-buggy.texi. INFO-DIR-SECTION Games START-INFO-DIR-ENTRY * moon-buggy: (moon-buggy). Drive some car across the moon END-INFO-DIR-ENTRY This file documents moon-buggy, a simple character graphics game. Copyright 1999, 2000 Jochen Voss Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation.  File: moon-buggy.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir) Moon-buggy is a simple character graphics game, where you drive some kind of car across the moon's surface. Unfortunately there are dangerous craters there. Fortunately your car can jump over them! This edition (last updated 27 December 2004) of the manual applies to version 1.0.51 of the program. * Menu: * Introduction:: Introduction * Moon-buggy Invocation:: Moon-buggy Invocation * Playing the Game:: Keyboard commands * Shared Score Files:: Competition via the highscore table * Installation:: Installation and setup * References:: References  File: moon-buggy.info, Node: Introduction, Next: Moon-buggy Invocation, Prev: Top, Up: Top 1 Introduction ************** Moon-buggy is a simple character graphics game, where you drive some kind of car across the moon's surface. Unfortunately there are dangerous craters there. Fortunately your car can jump over them! Moon-Buggy comes with no warranty, to the extent permitted by law. You may redistribute copies of Moon-Buggy under the terms of the GNU General Public License. For more information about these matters, read the file `COPYING' of the source code distribution or press at moon-buggy's title screen. Please mail any suggestions and bug reports to . Your message should include the moon-buggy version number, as obtained by the command `moon-buggy -V'. New versions of Moon-buggy may be found on the sunsite ftp server or on the moon-buggy download page (*note References::).  File: moon-buggy.info, Node: Moon-buggy Invocation, Next: Playing the Game, Prev: Introduction, Up: Top 2 Moon-buggy Invocation *********************** Normal usage is to start `moon-buggy' without any options. Nevertheless there are some. The long options (starting with `--') are only supported on some system types. `-h' `--help' shows a short usage message. `-m' `--mesg' disable write access to your terminal by other users, so your boss can't disturb your game play with the help of "write" or "finger". `-n' `--no-title' skips the title screen. `-s' `--show-scores' shows the current highscore list and exits. `-V' `--version' prints the program's version to standard output and exits.  File: moon-buggy.info, Node: Playing the Game, Next: Shared Score Files, Prev: Moon-buggy Invocation, Up: Top 3 Playing the Game ****************** The game is controlled by a couple of keys, which are described near the bottom of the screen. Most important are the following keys. makes your car jump. The length of a jump is fixed and you can only start a new jump while the wheels have contact to the ground. fires the mining laser. The laser is used to remove stones, which may block your way. quits the game prematurely. But you still keep your score and may enter the highscore list. Moon-buggy can handle a wide range of screen sizes. But it runs best if the screen has at least 80 columns. If you run it on a screen with significantly less columns it may look strange and could be hard to play.  File: moon-buggy.info, Node: Shared Score Files, Next: Installation, Prev: Playing the Game, Up: Top 4 Shared Score Files ******************** Moon-buggy has two concepts of score files: the "global score file" is located somewhere in the installation directories and is shared between all players. The exact place in the file system can be controlled via `configure''s `--sharedstatedir' option. This highscore file is used whenever Moon-buggy has the permissions to access it. Otherwise the "local score file" is used. This file is located in the user's home directory, the file name is `.mbscore'. Thus, the local score file is not shared between different accounts. As the game is much more fun, when players can compete for the highest scores, the global score file should be writable for the moon-buggy program (but not for the user's text editor). Here is a list of possible policies: 1. The preferred solution is to make moon-buggy a setgid program. This means the following: you choose a group ID, which cannot be used by ordinary users, and allow only members of this group to write the score file. Many systems have a group `games' for this purpose (Check your `/etc/group' file). You make this group own the `moon-buggy' executable and set the file's setgid bit. This bit gives moon-buggy its file groups's access permissions and so the program is able to access the score file. You can use `configure''s `--with-setgid' option (*note Installation::) to properly set up access permissions for this model. 2. You could make moon-buggy a setuid program but for security reasons this is not recommended. The file `SECURITY' from the bsd-games distribution (*note References::) has some informations about this topic. 3. Another solution is to make the score file world writable. But then you have to trust your players: every player may open the score file with his favourite text editor and change it freely. So this is not recommended, too. 4. Finally you could do nothing. Then every account uses its local score file.  File: moon-buggy.info, Node: Installation, Next: References, Prev: Shared Score Files, Up: Top 5 Installation ************** Moon-buggy requires the curses library as a prerequisite. If curses is not installed on your system, you may use the free ncurses package (*note References::). The game does not work with BSD curses, thus on BSD systems you will need the ncurses package. When you unpack the moon-buggy distribution, you get one directory, which holds all the source files and the documentation. Generic installation instructions are in the file `INSTALL'. There are some points of interest: * By default, the program will be installed as `/usr/local/bin/moon-buggy'. You can specify an installation prefix other than `/usr/local' by giving `configure' the `--prefix=PATH' option. * You can choose the score file's location via `configure''s `--sharedstatedir=DIR' option. The score file then will be `DIR/moonbuggy/mbscore'. On GNU/Linux systems you should use --sharedstatedir=/var/games to comply with the Filesystem Hierarchy Standard (*note References::). * Moon-buggy supports shared score files. For details, see *Note Shared Score Files::. As explained there, you may want to make moon-buggy a setgid program. This can be done with the `--with-setgid' option. If you use --with-setgid=games then the installation process arranges everything for setgid usage. *Caution*: this introduces potential security risks. I tried to minimise these, but nevertheless be careful with this. And remember: moon-buggy comes with no warranty. * If your version of the curses library is not autodetected, you have to use some of the `--with-curses-includedir', `--with-curses-header', and `--with-curses-libs' options. For example you should use --with-curses-includedir=/usr/pkg/include if your curses header files are in `/usr/pkg/include/'. You may use --with-curses-header="" if your curses header is called `mycurses.h'. And you may use --with-curses-libs="-L/usr/pkg/lib -lncurses" if your curses library is called `ncurses.a' and is located in `/usr/pkg/lib/'. Example: On GNU/Linux systems you probably can use the following commands. For the last one you need root user permissions. ./configure --sharedstatedir=/var/games --with-setgid=games make make install  File: moon-buggy.info, Node: References, Prev: Installation, Up: Top 6 References ************ This chapter gives some references to resources mentioned in the manual. As the internet changes incessantly, the addresses below may be outdated. If you find this to happen, please report it as a bug. The latest version of *Moon-buggy* may be found on the sunsite archive in the directory `ftp://sunsite.unc.edu/pub/linux/games/arcade/'. I provide a *moon-buggy download page*, which is located at `http://seehuhn.de/comp/moon-buggy.html'. Version 2.0 of the *Filesystem Hierarchy Standard* (FHS 2.0) may be found on the internet at `ftp://sunsite.unc.edu/pub/linux/docs/fhs/fhs-2.0.tar.gz'. The *ncurses* package can be found on the GNU project's ftp server and its mirrors. The original site is `ftp://prep.ai.mit.edu/pub/gnu/ncurses/ncurses-4.2.tar.gz'. Hints about *security concerns* may be found in the file `SECURITY' from the bsd-games package. One location where to find it is `ftp://sunsite.unc.edu/pub/linux/games/bsd-games-2.7.tar.gz'.  Tag Table: Node: Top993 Node: Introduction1711 Node: Moon-buggy Invocation2647 Node: Playing the Game3385 Node: Shared Score Files4262 Node: Installation6416 Node: References8934  End Tag Table