flex-2.6.4/0000775000175000017500000000000013103432077007464 500000000000000flex-2.6.4/COPYING0000664000175000017500000000347713002262300010436 00000000000000Flex carries the copyright used for BSD software, slightly modified because it originated at the Lawrence Berkeley (not Livermore!) Laboratory, which operates under a contract with the Department of Energy: Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007 The Flex Project. Copyright (c) 1990, 1997 The Regents of the University of California. All rights reserved. This code is derived from software contributed to Berkeley by Vern Paxson. The United States Government has rights in this work pursuant to contract no. DE-AC03-76SF00098 between the United States Department of Energy and the University of California. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. This basically says "do whatever you please with this software except remove this notice or take advantage of the University's (or the flex authors') name". Note that the "flex.skl" scanner skeleton carries no copyright notice. You are free to do whatever you please with scanners generated using flex; for them, you are not even bound by the above copyright. flex-2.6.4/autogen.sh0000775000175000017500000000337613102416672011420 00000000000000#!/bin/sh # This file is part of flex. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE. # If you see no configure script, then run ./autogen.sh to create it # and procede with the "normal" build procedures. # use LIBTOOLIZE, if set LIBTOOLIZE_ORIG="$LIBTOOLIZE"; if test "x$LIBTOOLIZE" = "x"; then LIBTOOLIZE=libtoolize; fi # test libtoolize $LIBTOOLIZE --version 2>/dev/null if test "$?" -ne 0; then LIBTOOLIZE=glibtoolize $LIBTOOLIZE --version 2>/dev/null if test "$?" -ne 0; then echo "error: libtoolize not working, re-run with LIBTOOLIZE=/path/to/libtoolize" echo " LIBTOOLIZE is currently \"$LIBTOOLIZE_ORIG\"" exit 1 fi fi #if we pretend to have a ChangeLog, then automake is less #worried. (Don't worry, we *do* have a ChangeLog, we just need the #Makefile first.) if ! test -f ChangeLog; then touch ChangeLog fi "$LIBTOOLIZE" --install --force autoreconf --install --force flex-2.6.4/AUTHORS0000664000175000017500000000116013002262300010436 00000000000000 In 2001, Will Estes took over as maintainer of flex. John Millaway is a co-author of the current version of flex. He has contributed a large number of new features, fixed a large number of outstanding bugs and has made significant contributions to the flex documentation. Aaron Stone has contributed several bug fixes to the flex codebase. Vern Paxson wrote flex with the help of many ideas and much inspiration from Van Jacobson. Original version by Jef Poskanzer. The fast table representation is a partial implementation of a design done by Van Jacobson. The implementation was done by Kevin Gong and Vern Paxson. flex-2.6.4/build-aux/0000775000175000017500000000000013103432076011355 500000000000000flex-2.6.4/build-aux/mdate-sh0000755000175000017500000001372613103361145012732 00000000000000#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2015-04-09.19; # UTC # Copyright (C) 1995-2014 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, see . # 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 # . if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST fi 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 day of FILE, in the format: 1 January 1970 Report bugs to . EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # Use UTC to get reproducible result TZ=UTC export TZ # 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 # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" 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_command /` # Find which argument is the month. month= command= until test $month do test $# -gt 0 || error "failed parsing '$ls_command /' output" 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 test -n "$month" || error "failed parsing '$ls_command /' output" # 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: flex-2.6.4/build-aux/config.guess0000755000175000017500000012475313103361145013625 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-08-20' # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . 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 1992-2015 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 case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # 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 tuples: *-*-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=`(uname -p 2>/dev/null || \ /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 ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-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*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ 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 # Determine ABI tags. case "${UNAME_MACHINE_ARCH}" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` ;; 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/[-_].*//' | cut -d. -f1,2` ;; 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}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; *:Sortix:*:*) echo ${UNAME_MACHINE}-unknown-sortix 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'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; 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 ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; 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:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-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:*:[4567]) 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/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` 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 -q __LP64__ 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:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-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-${LIBC}`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/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} 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 -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; e2k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${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-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} 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.[02]*:*) 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 i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-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; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' 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; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; 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.[02]*:*) 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 ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku 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 ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-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 eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi 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 ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} 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 ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac 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: flex-2.6.4/build-aux/config.rpath0000755000175000017500000004401213103361131013575 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2010 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # 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. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case $cc_basename in xlc*) wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux* | k*bsd*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case $cc_basename in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) library_names_spec='$libname.a' ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd1*) ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; nto-qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <, 1996 # Copyright (C) 1996-2015 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. # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.6 Debian-2.4.6-0.1" package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 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. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 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. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname (GNU libtool) 2.4.6 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # 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+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: flex-2.6.4/build-aux/depcomp0000755000175000017500000005601613103361146012657 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 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, see . # 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 outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} 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" # Avoid interferences from the environment. gccflag= dashmflag= # 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 cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## 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). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # 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. ## 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. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -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 -ne 0; then 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 ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # 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 ;; 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. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # 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 ;; #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 "X$1" != 'X--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|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | 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 "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi 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. -arch) eat=yes ;; -*|$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" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | 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 "X$1" != 'X--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. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # 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 ;; 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: flex-2.6.4/build-aux/ylwrap0000755000175000017500000001531213103361146012540 00000000000000#! /bin/sh # ylwrap - wrapper for lex/yacc invocations. scriptversion=2013-01-12.17; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # Written by Tom Tromey . # # 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, see . # 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 # . get_dirname () { case $1 in */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';; # Otherwise, we want the empty string (not "."). esac } # guard FILE # ---------- # The CPP macro used to guard inclusion of FILE. guard () { printf '%s\n' "$1" \ | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \ -e 's/__*/_/g' } # quote_for_sed [STRING] # ---------------------- # Return STRING (or stdin) quoted to be used as a sed pattern. quote_for_sed () { case $# in 0) cat;; 1) printf '%s\n' "$1";; esac \ | sed -e 's|[][\\.*]|\\&|g' } case "$1" in '') echo "$0: No files given. Try '$0 --help' for more information." 1>&2 exit 1 ;; --basedir) basedir=$2 shift 2 ;; -h|--h*) cat <<\EOF Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... Wrapper for lex/yacc invocations, renaming files as desired. INPUT is the input file OUTPUT is one file PROG generates DESIRED is the file we actually want instead of OUTPUT PROGRAM is program to run ARGS are passed to PROG Any number of OUTPUT,DESIRED pairs may be used. Report bugs to . EOF exit $? ;; -v|--v*) echo "ylwrap $scriptversion" exit $? ;; esac # The input. input=$1 shift # We'll later need for a correct munging of "#line" directives. input_sub_rx=`get_dirname "$input" | quote_for_sed` case $input in [\\/]* | ?:[\\/]*) # Absolute path; do nothing. ;; *) # Relative path. Make it absolute. input=`pwd`/$input ;; esac input_rx=`get_dirname "$input" | quote_for_sed` # Since DOS filename conventions don't allow two dots, # the DOS version of Bison writes out y_tab.c instead of y.tab.c # and y_tab.h instead of y.tab.h. Test to see if this is the case. y_tab_nodot=false if test -f y_tab.c || test -f y_tab.h; then y_tab_nodot=true fi # The parser itself, the first file, is the destination of the .y.c # rule in the Makefile. parser=$1 # A sed program to s/FROM/TO/g for all the FROM/TO so that, for # instance, we rename #include "y.tab.h" into #include "parse.h" # during the conversion from y.tab.c to parse.c. sed_fix_filenames= # Also rename header guards, as Bison 2.7 for instance uses its header # guard in its implementation file. sed_fix_header_guards= while test $# -ne 0; do if test x"$1" = x"--"; then shift break fi from=$1 # Handle y_tab.c and y_tab.h output by DOS if $y_tab_nodot; then case $from in "y.tab.c") from=y_tab.c;; "y.tab.h") from=y_tab.h;; esac fi shift to=$1 shift sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;" sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;" done # The program to run. prog=$1 shift # Make any relative path in $prog absolute. case $prog in [\\/]* | ?:[\\/]*) ;; *[\\/]*) prog=`pwd`/$prog ;; esac dirname=ylwrap$$ do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 mkdir $dirname || exit 1 cd $dirname case $# in 0) "$prog" "$input" ;; *) "$prog" "$@" "$input" ;; esac ret=$? if test $ret -eq 0; then for from in * do to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"` if test -f "$from"; then # If $2 is an absolute path name, then just use that, # otherwise prepend '../'. case $to in [\\/]* | ?:[\\/]*) target=$to;; *) target=../$to;; esac # Do not overwrite unchanged header files to avoid useless # recompilations. Always update the parser itself: it is the # destination of the .y.c rule in the Makefile. Divert the # output of all other files to a temporary file so we can # compare them to existing versions. if test $from != $parser; then realtarget=$target target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'` fi # Munge "#line" or "#" directives. Don't let the resulting # debug information point at an absolute srcdir. Use the real # output file name, not yy.lex.c for instance. Adjust the # include guards too. sed -e "/^#/!b" \ -e "s|$input_rx|$input_sub_rx|" \ -e "$sed_fix_filenames" \ -e "$sed_fix_header_guards" \ "$from" >"$target" || ret=$? # Check whether files must be updated. if test "$from" != "$parser"; then if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then echo "$to is unchanged" rm -f "$target" else echo "updating $to" mv -f "$target" "$realtarget" fi fi else # A missing file is only an error for the parser. This is a # blatant hack to let us support using "yacc -d". If -d is not # specified, don't fail when the header file is "missing". if test "$from" = "$parser"; then ret=1 fi fi done fi # Remove the directory. cd .. rm -rf $dirname exit $ret # 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: flex-2.6.4/build-aux/missing0000755000175000017500000001533013103361145012672 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written 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, see . # 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 case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. 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 # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: flex-2.6.4/build-aux/compile0000755000175000017500000001624513103361145012657 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, see . # 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 # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: flex-2.6.4/build-aux/install-sh0000755000175000017500000003546313103361145013310 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2014-09-12.12; # UTC # 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. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly 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: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -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. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # 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 "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # $RANDOM is not portable (e.g. dash); use it when possible to # lower collision chance tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # As "mkdir -p" follows symlinks and we work in /tmp possibly; so # create the $tmpdir first (and fail if unsuccessful) to make sure # that nobody tries to guess the $tmpdir name. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: flex-2.6.4/build-aux/test-driver0000755000175000017500000001104013103361146013464 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2013-07-13.22; # UTC # Copyright (C) 2011-2014 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, see . # 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 # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: flex-2.6.4/build-aux/config.sub0000755000175000017500000010646013103361145013263 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-08-20' # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # 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. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # 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 1992-2015 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-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) 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 | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -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*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -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 \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-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-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # 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 ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; 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 ;; cr16 | cr16-*) basic_machine=cr16-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 ;; dicos) basic_machine=i686-pc os=-dicos ;; 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*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 ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; 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 ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; 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 ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; 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 ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; 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 | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) 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 | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; 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 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; 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 ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-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[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -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* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -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* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # 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 ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) 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 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; 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 ;; -cnk*|-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: flex-2.6.4/build-aux/texinfo.tex0000644000175000017500000116703613103361145013505 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{2013-02-01.11} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012, 2013 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 3 of the % License, 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 program. If not, see . % % 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 Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % http://www.gnu.org/software/texinfo/ (the Texinfo home page) % 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} \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\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % 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\putworderror\undefined \gdef\putworderror{error}\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 % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % 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 } % 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\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % 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} % 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 % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % 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). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \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. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \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 \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \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\relax \unvbox#1\relax \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\argtorun{#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 occurrence 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 % Do not use \next, perhaps the caller of \parsearg uses it; 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 \argtorun. % (Similarly, 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\argtorun\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 environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, 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 } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside 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. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % 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\*{\unskip\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 \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'. Not documented, written for gawk manual. % \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 } % @| 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). This command % is not documented, not supported, and doesn't work. % \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 }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \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\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \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 = {}% } % @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 being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % 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. % % See 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 what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient 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 \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \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. \indexnofonts \turnoffactive \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\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. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \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. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \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}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \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}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % 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}} % 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} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \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} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \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}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \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}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % 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{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #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}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % 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 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % 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 } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ptexslash \fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % 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 % @b, explicit bold. Also @strong. \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 % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \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 % reset spacefactor to 1000 } % 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 \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\normaldash{-} \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{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \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', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\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. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#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} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \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\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @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 % @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 setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\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}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % 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} % @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} % @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 \null % reset \spacefactor=1000 } % @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 \null % reset \spacefactor=1000 } % @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`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % 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 % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\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 \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % ctrl is no longer a Texinfo command, but leave this definition for fun. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \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\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \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 \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \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{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\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 \reducedsf \putworderror\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} % @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 } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = ectt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @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}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % 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\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \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 } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % 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 {\secfonts\rmisbold \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 -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @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{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % 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\thisisundefined \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\relax \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 % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @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. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % 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 again encounter the problem the 1sp was intended to solve. % --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: \obeylines \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'. \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. \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. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\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-\normaldash \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 executes 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}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @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 \relax % 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 unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % 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 \otherbackslash } % 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\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % 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\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\textdegree % % 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. % \def\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\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\abbr \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\image \definedummyword\indicateurl \definedummyword\inforef \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \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}% % All control words become @asis by default; overrides below. \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\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\lbracechar{|a}% % \def\}{|b}% \def\rbracechar{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % 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 } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \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}% % \safewhatsit\dosubindwrite }% \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/skips around a whatsit: % % 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 or \pdfdest 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} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip 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-\whatsitskip \fi % #1% % \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\whatsitpenalty>9999 \penalty\whatsitpenalty \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\whatsitskip \fi \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 \plainfrenchspacing \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 freezes 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 % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \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. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \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 plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\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{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \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. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. 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 these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \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 achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \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 < \unnlevel \chardef\unnlevel = \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 > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 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 % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \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 calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \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}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \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 \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \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} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \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{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection 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\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \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. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \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 \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip\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 \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% \nobreak\bigskip \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\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \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.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \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 \tocreadfilename } \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. \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 } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \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\partentry = \shortpartentry \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 \tocreadfilename\space \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, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % 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. % @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 @ character. \envdef\tex{% \setupmarkupstyle{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 \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \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 \expandafter \let\csname top\endcsname=\ptextop % outer \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% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \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. \newdimen\nonfillparindent \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 % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \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 } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % 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 % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#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 environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{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\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @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. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % 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 } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\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 \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % 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\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % 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}% \setupmarkupstyle{verb}% \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 % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % 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 \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \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 \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \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 \printdefunline, 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. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \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 \else \defunpenalty=10002 \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\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % 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 remaining 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 \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % 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}% \doingtypefntrue \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 {} } % Types: % @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{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category 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. We'll always have at % least two. \tempnum = 2 % % 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 % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at 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}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #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. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #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 } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets 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\thisisundefined \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 for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \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 \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % 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{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \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\margbackslash#1{\char`\#1 } \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\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \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}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % 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 some hook where the argument si to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % 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. % % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \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} \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } % \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing missing arguments are set to empty \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, 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 \ifnum\paramno<10\relax % at most 9 \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}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \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 % at most 9 \ifnum\paramno<10\relax \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}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \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\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. 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 \lastsection, % 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{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\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,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) 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 {\indexnofonts \turnoffactive \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \edef\pdfxrefdest{#1}% \ifx\pdfxrefdest\empty \def\pdfxrefdest{Top}% no empty targets \else \txiescapepdf\pdfxrefdest % escape PDF special chars \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\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\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox 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 \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (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 the macro below 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 \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % 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 {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \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{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\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 {\safexrefname}}% \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 % % Invoke rest of plain TeX footnote routine. \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. % Similarly, 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\thisisundefined \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 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 \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % 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 \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \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 \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \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 \lastsection 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\lastsection{\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 floating, 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 % \lastsection 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,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \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 very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, 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 % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \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{607.2pt}{6in}% that's 46 lines {\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}% {-.2in}{0in}% {\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{673.2pt}{160mm}% that's 51 lines {\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\relax \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.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % 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} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \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 % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % The story here is that in math mode, the \char of \backslashcurfont % ends up printing the roman \ from the math symbol font (because \char % in math mode uses the \mathcode, and plain.tex sets % \mathcode`\\="026E). It seems better for @backslashchar{} to always % print a typewriter backslash, hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. Also revert - to its normal character, in % case the active - from code has slipped in. % {@catcode`- = @active @gdef@normalturnoffactive{% @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % 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 (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @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 flex-2.6.4/README.md0000664000175000017500000001001013003665120010647 00000000000000This is flex, the fast lexical analyzer generator. flex is a tool for generating scanners: programs which recognize lexical patterns in text. The flex codebase is kept in [Git on GitHub.](https://github.com/westes/flex) Use GitHub's [issues](https://github.com/westes/flex/issues) and [pull request](https://github.com/westes/flex) features to file bugs and submit patches. There are several mailing lists available as well: * flex-announce@lists.sourceforge.net - where posts will be made announcing new releases of flex. * flex-help@lists.sourceforge.net - where you can post questions about using flex * flex-devel@lists.sourceforge.net - where you can discuss development of flex itself Find information on subscribing to the mailing lists at: http://sourceforge.net/mail/?group_id=97492 The flex distribution contains the following files which may be of interest: * README - This file. * NEWS - current version number and list of user-visible changes. * INSTALL - basic installation information. * ABOUT-NLS - description of internationalization support in flex. * COPYING - flex's copyright and license. * doc/ - user documentation. * examples/ - containing examples of some possible flex scanners and a few other things. See the file examples/README for more details. * tests/ - regression tests. See TESTS/README for details. * po/ - internationalization support files. You need the following tools to build flex from the maintainer's repository: * compiler suite - flex is built with gcc * bash, or a good Bourne-style shell * m4 - m4 -p needs to work; GNU m4 and a few others are suitable * GNU bison; to generate parse.c from parse.y * autoconf; for handling the build system * automake; for Makefile generation * gettext; for i18n support * help2man; to generate the flex man page * tar, gzip, lzip, etc.; for packaging of the source distribution * GNU texinfo; to build and test the flex manual. Note that if you want to build the dvi/ps/pdf versions of the documentation you will need texi2dvi and related programs, along with a sufficiently powerful implementation of TeX to process them. See your operating system documentation for how to achieve this. The printable versions of the manual are not built unless specifically requested, but the targets are included by automake. * GNU indent; for indenting the flex source the way we want it done In cases where the versions of the above tools matter, the file configure.ac will specify the minimum required versions. Once you have all the necessary tools installed, life becomes simple. To prepare the flex tree for building, run the script: ```bash ./autogen.sh ``` in the top level of the flex source tree. This script calls the various tools needed to get flex ready for the GNU-style configure script to be able to work. From this point on, building flex follows the usual routine: ```bash configure && make && make install ``` This file is part of flex. This code is derived from software contributed to Berkeley by Vern Paxson. The United States Government has rights in this work pursuant to contract no. DE-AC03-76SF00098 between the United States Department of Energy and the University of California. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. flex-2.6.4/ONEWS0000664000175000017500000013235613002262300010220 00000000000000Changes between release 2.5.4 (11Sep96) and release 2.5.3: - Fixed a bug introduced in 2.5.3 that blew it when a call to input() occurred at the end of an input file. - Fixed scanner skeleton so the example in the man page of scanning strings using exclusive start conditions works. - Minor Makefile tweaks. Changes between release 2.5.3 (29May96) and release 2.5.2: - Some serious bugs in yymore() have been fixed. In particular, when using AT&T-lex-compatibility or %array, you can intermix calls to input(), unput(), and yymore(). (This still doesn't work for %pointer, and isn't likely to in the future.) - A bug in handling NUL's in the input stream of scanners using REJECT has been fixed. - The default main() in libfl.a now repeatedly calls yylex() until it returns 0, rather than just calling it once. - Minor tweak for Windows NT Makefile, MISC/NT/Makefile. Changes between release 2.5.2 (25Apr95) and release 2.5.1: - The --prefix configuration option now works. - A bug that completely broke the "-Cf" table compression option has been fixed. - A major headache involving "const" declarators and Solaris systems has been fixed. - An octal escape sequence in a flex regular expression must now contain only the digits 0-7. - You can now use "--" on the flex command line to mark the end of flex options. - You can now specify the filename '-' as a synonym for stdin. - By default, the scanners generated by flex no longer statically initialize yyin and yyout to stdin and stdout. This change is necessary because in some ANSI environments, stdin and stdout are not compile-time constant. You can force the initialization using "%option stdinit" in the first section of your flex input. - "%option nounput" now correctly omits the unput() routine from the output. - "make clean" now removes config.log, config.cache, and the flex binary. The fact that it removes the flex binary means you should take care if making changes to scan.l, to make sure you don't wind up in a bootstrap problem. - In general, the Makefile has been reworked somewhat (thanks to Francois Pinard) for added flexibility - more changes will follow in subsequent releases. - The .texi and .info files in MISC/texinfo/ have been updated, thanks also to Francois Pinard. - The FlexLexer::yylex(istream* new_in, ostream* new_out) method now does not have a default for the first argument, to disambiguate it from FlexLexer::yylex(). - A bug in destructing a FlexLexer object before doing any scanning with it has been fixed. - A problem with including FlexLexer.h multiple times has been fixed. - The alloca() chud necessary to accommodate bison has grown even uglier, but hopefully more correct. - A portability tweak has been added to accommodate compilers that use char* generic pointers. - EBCDIC contact information in the file MISC/EBCDIC has been updated. - An OS/2 Makefile and config.h for flex 2.5 is now available in MISC/OS2/, contributed by Kai Uwe Rommel. - The descrip.mms file for building flex under VMS has been updated, thanks to Pat Rankin. - The notes on building flex for the Amiga have been updated for flex 2.5, contributed by Andreas Scherer. Changes between release 2.5.1 (28Mar95) and release 2.4.7: - A new concept of "start condition" scope has been introduced. A start condition scope is begun with: { where SCs is a list of one or more start conditions. Inside the start condition scope, every rule automatically has the prefix applied to it, until a '}' which matches the initial '{'. So, for example: { "\\n" return '\n'; "\\r" return '\r'; "\\f" return '\f'; "\\0" return '\0'; } is equivalent to: "\\n" return '\n'; "\\r" return '\r'; "\\f" return '\f'; "\\0" return '\0'; As indicated in this example, rules inside start condition scopes (and any rule, actually, other than the first) can be indented, to better show the extent of the scope. Start condition scopes may be nested. - The new %option directive can be used in the first section of a flex scanner to control scanner-generation options. Most options are given simply as names, optionally preceded by the word "no" (with no intervening whitespace) to negate their meaning. Some are equivalent to flex flags, so putting them in your scanner source is equivalent to always specifying the flag (%option's take precedence over flags): 7bit -7 option 8bit -8 option align -Ca option backup -b option batch -B option c++ -+ option caseful opposite of -i option (caseful is the default); case-sensitive same as above caseless -i option; case-insensitive same as above debug -d option default opposite of -s option ecs -Ce option fast -F option full -f option interactive -I option lex-compat -l option meta-ecs -Cm option perf-report -p option read -Cr option stdout -t option verbose -v option warn opposite of -w option (so use "%option nowarn" for -w) array equivalent to "%array" pointer equivalent to "%pointer" (default) Some provide new features: always-interactive generate a scanner which always considers its input "interactive" (no call to isatty() will be made when the scanner runs) main supply a main program for the scanner, which simply calls yylex(). Implies %option noyywrap. never-interactive generate a scanner which never considers its input "interactive" (no call to isatty() will be made when the scanner runs) stack if set, enable start condition stacks (see below) stdinit if unset ("%option nostdinit"), initialize yyin and yyout statically to nil FILE* pointers, instead of stdin and stdout yylineno if set, keep track of the current line number in global yylineno (this option is expensive in terms of performance). The line number is available to C++ scanning objects via the new member function lineno(). yywrap if unset ("%option noyywrap"), scanner does not call yywrap() upon EOF but simply assumes there are no more files to scan Flex scans your rule actions to determine whether you use the REJECT or yymore features (this is not new). Two %options can be used to override its decision, either by setting them to indicate the feature is indeed used, or unsetting them to indicate it actually is not used: reject yymore Three %option's take string-delimited values, offset with '=': outfile="" equivalent to -o prefix="" equivalent to -P yyclass="" set the name of the C++ scanning class (see below) A number of %option's are available for lint purists who want to suppress the appearance of unneeded routines in the generated scanner. Each of the following, if unset, results in the corresponding routine not appearing in the generated scanner: input, unput yy_push_state, yy_pop_state, yy_top_state yy_scan_buffer, yy_scan_bytes, yy_scan_string You can specify multiple options with a single %option directive, and multiple directives in the first section of your flex input file. - The new function: YY_BUFFER_STATE yy_scan_string( const char *str ) returns a YY_BUFFER_STATE (which also becomes the current input buffer) for scanning the given string, which occurs starting with the next call to yylex(). The string must be NUL-terminated. A related function: YY_BUFFER_STATE yy_scan_bytes( const char *bytes, int len ) creates a buffer for scanning "len" bytes (including possibly NUL's) starting at location "bytes". Note that both of these functions create and scan a *copy* of the string/bytes. (This may be desirable, since yylex() modifies the contents of the buffer it is scanning.) You can avoid the copy by using: YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size ) which scans in place the buffer starting at "base", consisting of "size" bytes, the last two bytes of which *must* be YY_END_OF_BUFFER_CHAR (these bytes are not scanned; thus, scanning consists of base[0] through base[size-2], inclusive). If you fail to set up "base" in this manner, yy_scan_buffer returns a nil pointer instead of creating a new input buffer. The type yy_size_t is an integral type to which you can cast an integer expression reflecting the size of the buffer. - Three new routines are available for manipulating stacks of start conditions: void yy_push_state( int new_state ) pushes the current start condition onto the top of the stack and BEGIN's "new_state" (recall that start condition names are also integers). void yy_pop_state() pops the top of the stack and BEGIN's to it, and int yy_top_state() returns the top of the stack without altering the stack's contents. The start condition stack grows dynamically and so has no built-in size limitation. If memory is exhausted, program execution is aborted. To use start condition stacks, your scanner must include a "%option stack" directive. - flex now supports POSIX character class expressions. These are expressions enclosed inside "[:" and ":]" delimiters (which themselves must appear between the '[' and ']' of a character class; other elements may occur inside the character class, too). The expressions flex recognizes are: [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:space:] [:upper:] [:xdigit:] These expressions all designate a set of characters equivalent to the corresponding isXXX function (for example, [:alnum:] designates those characters for which isalnum() returns true - i.e., any alphabetic or numeric). Some systems don't provide isblank(), so flex defines [:blank:] as a blank or a tab. For example, the following character classes are all equivalent: [[:alnum:]] [[:alpha:][:digit:] [[:alpha:]0-9] [a-zA-Z0-9] If your scanner is case-insensitive (-i flag), then [:upper:] and [:lower:] are equivalent to [:alpha:]. - The promised rewrite of the C++ FlexLexer class has not yet been done. Support for FlexLexer is limited at the moment to fixing show-stopper bugs, so, for example, the new functions yy_scan_string() & friends are not available to FlexLexer objects. - The new macro yy_set_interactive(is_interactive) can be used to control whether the current buffer is considered "interactive". An interactive buffer is processed more slowly, but must be used when the scanner's input source is indeed interactive to avoid problems due to waiting to fill buffers (see the discussion of the -I flag in flex.1). A non-zero value in the macro invocation marks the buffer as interactive, a zero value as non-interactive. Note that use of this macro overrides "%option always-interactive" or "%option never-interactive". yy_set_interactive() must be invoked prior to beginning to scan the buffer. - The new macro yy_set_bol(at_bol) can be used to control whether the current buffer's scanning context for the next token match is done as though at the beginning of a line (non-zero macro argument; makes '^' anchored rules active) or not at the beginning of a line (zero argument, '^' rules inactive). - Related to this change, the mechanism for determining when a scan is starting at the beginning of a line has changed. It used to be that '^' was active iff the character prior to that at which the scan started was a newline. The mechanism now is that '^' is active iff the last token ended in a newline (or the last call to input() returned a newline). For most users, the difference in mechanisms is negligible. Where it will make a difference, however, is if unput() or yyless() is used to alter the input stream. When in doubt, use yy_set_bol(). - The new beginning-of-line mechanism involved changing some fairly twisted code, so it may have introduced bugs - beware ... - The macro YY_AT_BOL() returns true if the next token scanned from the current buffer will have '^' rules active, false otherwise. - The new function void yy_flush_buffer( struct yy_buffer_state* b ) flushes the contents of the current buffer (i.e., next time the scanner attempts to match a token using b as the current buffer, it will begin by invoking YY_INPUT to fill the buffer). This routine is also available to C++ scanners (unlike some of the other new routines). The related macro YY_FLUSH_BUFFER flushes the contents of the current buffer. - A new "-ooutput" option writes the generated scanner to "output". If used with -t, the scanner is still written to stdout, but its internal #line directives (see previous item) use "output". - Flex now generates #line directives relating the code it produces to the output file; this means that error messages in the flex-generated code should be correctly pinpointed. - When generating #line directives, filenames with embedded '\'s have those characters escaped (i.e., turned into '\\'). This feature helps with reporting filenames for some MS-DOS and OS/2 systems. - The FlexLexer class includes two new public member functions: virtual void switch_streams( istream* new_in = 0, ostream* new_out = 0 ) reassigns yyin to new_in (if non-nil) and yyout to new_out (ditto), deleting the previous input buffer if yyin is reassigned. It is used by: int yylex( istream* new_in = 0, ostream* new_out = 0 ) which first calls switch_streams() and then returns the value of calling yylex(). - C++ scanners now have yy_flex_debug as a member variable of FlexLexer rather than a global, and member functions for testing and setting it. - When generating a C++ scanning class, you can now use %option yyclass="foo" to inform flex that you have derived "foo" as a subclass of yyFlexLexer, so flex will place your actions in the member function foo::yylex() instead of yyFlexLexer::yylex(). It also generates a yyFlexLexer::yylex() member function that generates a run-time error if called (by invoking yyFlexLexer::LexerError()). This feature is necessary if your subclass "foo" introduces some additional member functions or variables that you need to access from yylex(). - Current texinfo files in MISC/texinfo, contributed by Francois Pinard. - You can now change the name "flex" to something else (e.g., "lex") by redefining $(FLEX) in the Makefile. - Two bugs (one serious) that could cause "bigcheck" to fail have been fixed. - A number of portability/configuration changes have been made for easier portability. - You can use "YYSTATE" in your scanner as an alias for YY_START (for AT&T lex compatibility). - input() now maintains yylineno. - input() no longer trashes yytext. - interactive scanners now read characters in YY_INPUT up to a newline, a large performance gain. - C++ scanner objects now work with the -P option. You include once per scanner - see comments in (or flex.1) for details. - C++ FlexLexer objects now use the "cerr" stream to report -d output instead of stdio. - The -c flag now has its full glorious POSIX interpretation (do nothing), rather than being interpreted as an old-style -C flag. - Scanners generated by flex now include two #define's giving the major and minor version numbers (YY_FLEX_MAJOR_VERSION, YY_FLEX_MINOR_VERSION). These can then be tested to see whether certain flex features are available. - Scanners generated using -l lex compatibility now have the symbol YY_FLEX_LEX_COMPAT #define'd. - When initializing (i.e., yy_init is non-zero on entry to yylex()), generated scanners now set yy_init to zero before executing YY_USER_INIT. This means that you can set yy_init back to a non-zero value in YY_USER_INIT if you need the scanner to be reinitialized on the next call. - You can now use "#line" directives in the first section of your scanner specification. - When generating full-table scanners (-Cf), flex now puts braces around each row of the 2-d array initialization, to silence warnings on over-zealous compilers. - Improved support for MS-DOS. The flex sources have been successfully built, unmodified, for Borland 4.02 (all that's required is a Borland Makefile and config.h file, which are supplied in MISC/Borland - contributed by Terrence O Kane). - Improved support for Macintosh using Think C - the sources should build for this platform "out of the box". Contributed by Scott Hofmann. - Improved support for VMS, in MISC/VMS/, contributed by Pat Rankin. - Support for the Amiga, in MISC/Amiga/, contributed by Andreas Scherer. Note that the contributed files were developed for flex 2.4 and have not been tested with flex 2.5. - Some notes on support for the NeXT, in MISC/NeXT, contributed by Raf Schietekat. - The MISC/ directory now includes a preformatted version of flex.1 in flex.man, and pre-yacc'd versions of parse.y in parse.{c,h}. - The flex.1 and flexdoc.1 manual pages have been merged. There is now just one document, flex.1, which includes an overview at the beginning to help you find the section you need. - Documentation now clarifies that start conditions persist across switches to new input files or different input buffers. If you want to e.g., return to INITIAL, you must explicitly do so. - The "Performance Considerations" section of the manual has been updated. - Documented the "yy_act" variable, which when YY_USER_ACTION is invoked holds the number of the matched rule, and added an example of using yy_act to profile how often each rule is matched. - Added YY_NUM_RULES, a definition that gives the total number of rules in the file, including the default rule (even if you use -s). - Documentation now clarifies that you can pass a nil FILE* pointer to yy_create_buffer() or yyrestart() if you've arrange YY_INPUT to not need yyin. - Documentation now clarifies that YY_BUFFER_STATE is a pointer to an opaque "struct yy_buffer_state". - Documentation now stresses that you gain the benefits of removing backing-up states only if you remove *all* of them. - Documentation now points out that traditional lex allows you to put the action on a separate line from the rule pattern if the pattern has trailing whitespace (ugh!), but flex doesn't support this. - A broken example in documentation of the difference between inclusive and exclusive start conditions is now fixed. - Usage (-h) report now goes to stdout. - Version (-V) info now goes to stdout. - More #ifdef chud has been added to the parser in attempt to deal with bison's use of alloca(). - "make clean" no longer deletes emacs backup files (*~). - Some memory leaks have been fixed. - A bug was fixed in which dynamically-expanded buffers were reallocated a couple of bytes too small. - A bug was fixed which could cause flex to read and write beyond the end of the input buffer. - -S will not be going away. Changes between release 2.4.7 (03Aug94) and release 2.4.6: - Fixed serious bug in reading multiple files. - Fixed bug in scanning NUL's. - Fixed bug in input() returning 8-bit characters. - Fixed bug in matching text with embedded NUL's when using %array or lex compatibility. - Fixed multiple invocations of YY_USER_ACTION when using '|' continuation action. - Minor prototyping fixes. Changes between release 2.4.6 (04Jan94) and release 2.4.5: - Linking with -lfl no longer required if your program includes its own yywrap() and main() functions. (This change will cause problems if you have a non-ANSI compiler on a system for which sizeof(int) != sizeof(void*) or sizeof(int) != sizeof(size_t).) - The use of 'extern "C++"' in FlexLexer.h has been modified to get around an incompatibility with g++'s header files. Changes between release 2.4.5 (11Dec93) and release 2.4.4: - Fixed bug breaking C++ scanners that use REJECT or variable trailing context. - Fixed serious input problem for interactive scanners on systems for which char is unsigned. - Fixed bug in incorrectly treating '$' operator as variable trailing context. - Fixed bug in -CF table representation that could lead to corrupt tables. - Fixed fairly benign memory leak. - Added `extern "C++"' wrapper to FlexLexer.h header. This should overcome the g++ 2.5.X problems mentioned in the NEWS for release 2.4.3. - Changed #include of FlexLexer.h to use <> instead of "". - Added feature to control whether the scanner attempts to refill the input buffer once it's exhausted. This feature will be documented in the 2.5 release. Changes between release 2.4.4 (07Dec93) and release 2.4.3: - Fixed two serious bugs in scanning 8-bit characters. - Fixed bug in YY_USER_ACTION that caused it to be executed inappropriately (on the scanner's own internal actions, and with incorrect yytext/yyleng values). - Fixed bug in pointing yyin at a new file and resuming scanning. - Portability fix regarding min/max/abs macros conflicting with function definitions in standard header files. - Added a virtual LexerError() method to the C++ yyFlexLexer class for reporting error messages instead of always using cerr. - Added warning in flexdoc that the C++ scanning class is presently experimental and subject to considerable change between major releases. Changes between release 2.4.3 (03Dec93) and release 2.4.2: - Fixed bug causing fatal scanner messages to fail to print. - Fixed things so FlexLexer.h can be included in other C++ sources. One side-effect of this change is that -+ and -CF are now incompatible. - libfl.a now supplies private versions of the the / string routines needed by flex and the scanners it generates, to enhance portability to some BSD systems. - More robust solution to 2.4.2's flexfatal() bug fix. - Added ranlib of installed libfl.a. - Some lint tweaks. - NOTE: problems have been encountered attempting to build flex C++ scanners using g++ version 2.5.X. The problem is due to an unfortunate heuristic in g++ 2.5.X that attempts to discern between C and C++ headers. Because FlexLexer.h is installed (by default) in /usr/local/include and not /usr/local/lib/g++-include, g++ 2.5.X decides that it's a C header :-(. So if you have problems, install the header in /usr/local/lib/g++-include instead. Changes between release 2.4.2 (01Dec93) and release 2.4.1: - Fixed bug in libfl.a referring to non-existent "flexfatal" function. - Modified to produce both compress'd and gzip'd tar files for distributions (you probably don't care about this change!). Changes between release 2.4.1 (30Nov93) and release 2.3.8: - The new '-+' flag instructs flex to generate a C++ scanner class (thanks to Kent Williams). flex writes an implementation of the class defined in FlexLexer.h to lex.yy.cc. You may include multiple scanner classes in your program using the -P flag. Note that the scanner class also provides a mechanism for creating reentrant scanners. The scanner class uses C++ streams for I/O instead of FILE*'s (thanks to Tom Epperly). If the flex executable's name ends in '+' then the '-+' flag is automatically on, so creating a symlink or copy of "flex" to "flex++" results in a version of flex that can be used exclusively for C++ scanners. Note that without the '-+' flag, flex-generated scanners can still be compiled using C++ compilers, though they use FILE*'s for I/O instead of streams. See the "GENERATING C++ SCANNERS" section of flexdoc for details. - The new '-l' flag turns on maximum AT&T lex compatibility. In particular, -l includes support for "yylineno" and makes yytext be an array instead of a pointer. It does not, however, do away with all incompatibilities. See the "INCOMPATIBILITIES WITH LEX AND POSIX" section of flexdoc for details. - The new '-P' option specifies a prefix to use other than "yy" for the scanner's globally-visible variables, and for the "lex.yy.c" filename. Using -P you can link together multiple flex scanners in the same executable. - The distribution includes a "texinfo" version of flexdoc.1, contributed by Roland Pesch (thanks also to Marq Kole, who contributed another version). It has not been brought up to date, but reflects version 2.3. See MISC/flex.texinfo. The flex distribution will soon include G.T. Nicol's flex manual; he is presently bringing it up-to-date for version 2.4. - yywrap() is now a function, and you now *must* link flex scanners with libfl.a. - Site-configuration is now done via an autoconf-generated "configure" script contributed by Francois Pinard. - Scanners now use fread() (or getc(), if interactive) and not read() for input. A new "table compression" option, -Cr, overrides this change and causes the scanner to use read() (because read() is a bit faster than fread()). -f and -F are now equivalent to -Cfr and -CFr; i.e., they imply the -Cr option. - In the blessed name of POSIX compliance, flex supports "%array" and "%pointer" directives in the definitions (first) section of the scanner specification. The former specifies that yytext should be an array (of size YYLMAX), the latter, that it should be a pointer. The array version of yytext is universally slower than the pointer version, but has the advantage that its contents remain unmodified across calls to input() and unput() (the pointer version of yytext is, still, trashed by such calls). "%array" cannot be used with the '-+' C++ scanner class option. - The new '-Ca' option directs flex to trade off memory for natural alignment when generating a scanner's tables. In particular, table entries that would otherwise be "short" become "long". - The new '-h' option produces a summary of the flex flags. - The new '-V' option reports the flex version number and exits. - The new scanner macro YY_START returns an integer value corresponding to the current start condition. You can return to that start condition by passing the value to a subsequent "BEGIN" action. You also can implement "start condition stacks" by storing the values in an integer stack. - You can now redefine macros such as YY_INPUT by just #define'ing them to some other value in the first section of the flex input; no need to first #undef them. - flex now generates warnings for rules that can't be matched. These warnings can be turned off using the new '-w' flag. If your scanner uses REJECT then you will not get these warnings. - If you specify the '-s' flag but the default rule can be matched, flex now generates a warning. - "yyleng" is now a global, and may be modified by the user (though doing so and then using yymore() will yield weird results). - Name definitions in the first section of a scanner specification can now include a leading '^' or trailing '$' operator. In this case, the definition is *not* pushed back inside of parentheses. - Scanners with compressed tables are now "interactive" (-I option) by default. You can suppress this attribute (which makes them run slightly slower) using the new '-B' flag. - Flex now generates 8-bit scanners by default, unless you use the -Cf or -CF compression options (-Cfe and -CFe result in 8-bit scanners). You can force it to generate a 7-bit scanner using the new '-7' flag. You can build flex to generate 8-bit scanners for -Cf and -CF, too, by adding -DDEFAULT_CSIZE=256 to CFLAGS in the Makefile. - You no longer need to call the scanner routine yyrestart() to inform the scanner that you have switched to a new file after having seen an EOF on the current input file. Instead, just point yyin at the new file and continue scanning. - You no longer need to invoke YY_NEW_FILE in an <> action to indicate you wish to continue scanning. Simply point yyin at a new file. - A leading '#' no longer introduces a comment in a flex input. - flex no longer considers formfeed ('\f') a whitespace character. - %t, I'm happy to report, has been nuked. - The '-p' option may be given twice ('-pp') to instruct flex to report minor performance problems as well as major ones. - The '-v' verbose output no longer includes start/finish time information. - Newlines in flex inputs can optionally include leading or trailing carriage-returns ('\r'), in support of several PC/Mac run-time libraries that automatically include these. - A start condition of the form "<*>" makes the following rule active in every start condition, whether exclusive or inclusive. - The following items have been corrected in the flex documentation: - '-C' table compression options *are* cumulative. - You may modify yytext but not lengthen it by appending characters to the end. Modifying its final character will affect '^' anchoring for the next rule matched if the character is changed to or from a newline. - The term "backtracking" has been renamed "backing up", since it is a one-time repositioning and not a repeated search. What used to be the "lex.backtrack" file is now "lex.backup". - Unindented "/* ... */" comments are allowed in the first flex input section, but not in the second. - yyless() can only be used in the flex input source, not externally. - You can use "yyrestart(yyin)" to throw away the current contents of the input buffer. - To write high-speed scanners, attempt to match as much text as possible with each rule. See MISC/fastwc/README for more information. - Using the beginning-of-line operator ('^') is fairly cheap. Using unput() is expensive. Using yyless() is cheap. - An example of scanning strings with embedded escape sequences has been added. - The example of backing-up in flexdoc was erroneous; it has been corrected. - A flex scanner's internal buffer now dynamically grows if needed to match large tokens. Note that growing the buffer presently requires rescanning the (large) token, so consuming a lot of text this way is a slow process. Also note that presently the buffer does *not* grow if you unput() more text than can fit into the buffer. - The MISC/ directory has been reorganized; see MISC/README for details. - yyless() can now be used in the third (user action) section of a scanner specification, thanks to Ceriel Jacobs. yyless() remains a macro and cannot be used outside of the scanner source. - The skeleton file is no longer opened at run-time, but instead compiled into a large string array (thanks to John Gilmore and friends at Cygnus). You can still use the -S flag to point flex at a different skeleton file. - flex no longer uses a temporary file to store the scanner's actions. - A number of changes have been made to decrease porting headaches. In particular, flex no longer uses memset() or ctime(), and provides a single simple mechanism for dealing with C compilers that still define malloc() as returning char* instead of void*. - Flex now detects if the scanner specification requires the -8 flag but the flag was not given or on by default. - A number of table-expansion fencepost bugs have been fixed, making flex more robust for generating large scanners. - flex more consistently identifies the location of errors in its input. - YY_USER_ACTION is now invoked only for "real" actions, not for internal actions used by the scanner for things like filling the buffer or handling EOF. - The rule "[^]]" now matches any character other than a ']'; formerly it matched any character at all followed by a ']'. This change was made for compatibility with AT&T lex. - A large number of miscellaneous bugs have been found and fixed thanks to Gerhard Wilhelms. - The source code has been heavily reformatted, making patches relative to previous flex releases no longer accurate. Changes between 2.3 Patch #8 (21Feb93) and 2.3 Patch #7: - Fixed bugs in dynamic memory allocation leading to grievous fencepost problems when generating large scanners. - Fixed bug causing infinite loops on character classes with 8-bit characters in them. - Fixed bug in matching repetitions with a lower bound of 0. - Fixed bug in scanning NUL characters using an "interactive" scanner. - Fixed bug in using yymore() at the end of a file. - Fixed bug in misrecognizing rules with variable trailing context. - Fixed bug compiling flex on Suns using gcc 2. - Fixed bug in not recognizing that input files with the character ASCII 128 in them require the -8 flag. - Fixed bug that could cause an infinite loop writing out error messages. - Fixed bug in not recognizing old-style lex % declarations if followed by a tab instead of a space. - Fixed potential crash when flex terminated early (usually due to a bad flag) and the -v flag had been given. - Added some missing declarations of void functions. - Changed to only use '\a' for __STDC__ compilers. - Updated mailing addresses. Changes between 2.3 Patch #7 (28Mar91) and 2.3 Patch #6: - Fixed out-of-bounds array access that caused bad tables to be produced on machines where the bad reference happened to yield a 1. This caused problems installing or running flex on some Suns, in particular. Changes between 2.3 Patch #6 (29Aug90) and 2.3 Patch #5: - Fixed a serious bug in yymore() which basically made it completely broken. Thanks goes to Jean Christophe of the Nethack development team for finding the problem and passing along the fix. Changes between 2.3 Patch #5 (16Aug90) and 2.3 Patch #4: - An up-to-date version of initscan.c so "make test" will work after applying the previous patches Changes between 2.3 Patch #4 (14Aug90) and 2.3 Patch #3: - Fixed bug in hexadecimal escapes which allowed only digits, not letters, in escapes - Fixed bug in previous "Changes" file! Changes between 2.3 Patch #3 (03Aug90) and 2.3 Patch #2: - Correction to patch #2 for gcc compilation; thanks goes to Paul Eggert for catching this. Changes between 2.3 Patch #2 (02Aug90) and original 2.3 release: - Fixed (hopefully) headaches involving declaring malloc() and free() for gcc, which defines __STDC__ but (often) doesn't come with the standard include files such as . Reordered #ifdef maze in the scanner skeleton in the hope of getting the declarations right for cfront and g++, too. - Note that this patch supercedes patch #1 for release 2.3, which was never announced but was available briefly for anonymous ftp. Changes between 2.3 (full) release of 28Jun90 and 2.2 (alpha) release: User-visible: - A lone <> rule (that is, one which is not qualified with a list of start conditions) now specifies the EOF action for *all* start conditions which haven't already had <> actions given. To specify an end-of-file action for just the initial state, use <>. - -d debug output is now contigent on the global yy_flex_debug being set to a non-zero value, which it is by default. - A new macro, YY_USER_INIT, is provided for the user to specify initialization action to be taken on the first call to the scanner. This action is done before the scanner does its own initialization. - yy_new_buffer() has been added as an alias for yy_create_buffer() - Comments beginning with '#' and extending to the end of the line now work, but have been deprecated (in anticipation of making flex recognize #line directives). - The funky restrictions on when semi-colons could follow the YY_NEW_FILE and yyless macros have been removed. They now behave identically to functions. - A bug in the sample redefinition of YY_INPUT in the documentation has been corrected. - A bug in the sample simple tokener in the documentation has been corrected. - The documentation on the incompatibilities between flex and lex has been reordered so that the discussion of yylineno and input() come first, as it's anticipated that these will be the most common source of headaches. Things which didn't used to be documented but now are: - flex interprets "^foo|bar" differently from lex. flex interprets it as "match either a 'foo' or a 'bar', providing it comes at the beginning of a line", whereas lex interprets it as "match either a 'foo' at the beginning of a line, or a 'bar' anywhere". - flex initializes the global "yyin" on the first call to the scanner, while lex initializes it at compile-time. - yy_switch_to_buffer() can be used in the yywrap() macro/routine. - flex scanners do not use stdio for their input, and hence when writing an interactive scanner one must explictly call fflush() after writing out a prompt. - flex scanner can be made reentrant (after a fashion) by using "yyrestart( yyin );". This is useful for interactive scanners which have interrupt handlers that long-jump out of the scanner. - a defense of why yylineno is not supported is included, along with a suggestion on how to convert scanners which rely on it. Other changes: - Prototypes and proper declarations of void routines have been added to the flex source code, courtesy of Kevin B. Kenny. - Routines dealing with memory allocation now use void* pointers instead of char* - see Makefile for porting implications. - Error-checking is now done when flex closes a file. - Various lint tweaks were added to reduce the number of gripes. - Makefile has been further parameterized to aid in porting. - Support for SCO Unix added. - Flex now sports the latest & greatest UC copyright notice (which is only slightly different from the previous one). - A note has been added to flexdoc.1 mentioning work in progress on modifying flex to generate straight C code rather than a table-driven automaton, with an email address of whom to contact if you are working along similar lines. Changes between 2.2 Patch #3 (30Mar90) and 2.2 Patch #2: - fixed bug which caused -I scanners to bomb Changes between 2.2 Patch #2 (27Mar90) and 2.2 Patch #1: - fixed bug writing past end of input buffer in yyunput() - fixed bug detecting NUL's at the end of a buffer Changes between 2.2 Patch #1 (23Mar90) and 2.2 (alpha) release: - Makefile fixes: definition of MAKE variable for systems which don't have it; installation of flexdoc.1 along with flex.1; fixed two bugs which could cause "bigtest" to fail. - flex.skel fix for compiling with g++. - README and flexdoc.1 no longer list an out-of-date BITNET address for contacting me. - minor typos and formatting changes to flex.1 and flexdoc.1. Changes between 2.2 (alpha) release of March '90 and previous release: User-visible: - Full user documentation now available. - Support for 8-bit scanners. - Scanners now accept NUL's. - A facility has been added for dealing with multiple input buffers. - Two manual entries now. One which fully describes flex (rather than just its differences from lex), and the other for quick(er) reference. - A number of changes to bring flex closer into compliance with the latest POSIX lex draft: %t support flex now accepts multiple input files and concatenates them together to form its input previous -c (compress) flag renamed -C do-nothing -c and -n flags added Any indented code or code within %{}'s in section 2 is now copied to the output - yyleng is now a bona fide global integer. - -d debug information now gives the line number of the matched rule instead of which number rule it was from the beginning of the file. - -v output now includes a summary of the flags used to generate the scanner. - unput() and yyrestart() are now globally callable. - yyrestart() no longer closes the previous value of yyin. - C++ support; generated scanners can be compiled with C++ compiler. - Primitive -lfl library added, containing default main() which calls yylex(). A number of routines currently living in the scanner skeleton will probably migrate to here in the future (in particular, yywrap() will probably cease to be a macro and instead be a function in the -lfl library). - Hexadecimal (\x) escape sequences added. - Support for MS-DOS, VMS, and Turbo-C integrated. - The %used/%unused operators have been deprecated. They may go away soon. Other changes: - Makefile enhanced for easier testing and installation. - The parser has been tweaked to detect some erroneous constructions which previously were missed. - Scanner input buffer overflow is now detected. - Bugs with missing "const" declarations fixed. - Out-of-date Minix/Atari patches provided. - Scanners no longer require printf() unless FLEX_DEBUG is being used. - A subtle input() bug has been fixed. - Line numbers for "continued action" rules (those following the special '|' action) are now correct. - unput() bug fixed; had been causing problems porting flex to VMS. - yymore() handling rewritten to fix bug with interaction between yymore() and trailing context. - EOF in actions now generates an error message. - Bug involving -CFe and generating equivalence classes fixed. - Bug which made -CF be treated as -Cf fixed. - Support for SysV tmpnam() added. - Unused #define's for scanner no longer generated. - Error messages which are associated with a particular input line are now all identified with their input line in standard format. - % directives which are valid to lex but not to flex are now ignored instead of generating warnings. - -DSYS_V flag can now also be specified -DUSG for System V compilation. Changes between 2.1 beta-test release of June '89 and previous release: User-visible: - -p flag generates a performance report to stderr. The report consists of comments regarding features of the scanner rules which result in slower scanners. - -b flag generates backtracking information to lex.backtrack. This is a list of scanner states which require backtracking and the characters on which they do so. By adding rules one can remove backtracking states. If all backtracking states are eliminated, the generated scanner will run faster. Backtracking is not yet documented in the manual entry. - Variable trailing context now works, i.e., one can have rules like "(foo)*/[ \t]*bletch". Some trailing context patterns still cannot be properly matched and generate error messages. These are patterns where the ending of the first part of the rule matches the beginning of the second part, such as "zx*/xy*", where the 'x*' matches the 'x' at the beginning of the trailing context. Lex won't get these patterns right either. - Faster scanners. - End-of-file rules. The special rule "<>" indicates actions which are to be taken when an end-of-file is encountered and yywrap() returns non-zero (i.e., indicates no further files to process). See manual entry for example. - The -r (reject used) flag is gone. flex now scans the input for occurrences of the string "REJECT" to determine if the action is needed. It tries to be intelligent about this but can be fooled. One can force the presence or absence of REJECT by adding a line in the first section of the form "%used REJECT" or "%unused REJECT". - yymore() has been implemented. Similarly to REJECT, flex detects the use of yymore(), which can be overridden using "%used" or "%unused". - Patterns like "x{0,3}" now work (i.e., with lower-limit == 0). - Removed '\^x' for ctrl-x misfeature. - Added '\a' and '\v' escape sequences. - \ now works for octal escape sequences; previously \0 was required. - Better error reporting; line numbers are associated with rules. - yyleng is a macro; it cannot be accessed outside of the scanner source file. - yytext and yyleng should not be modified within a flex action. - Generated scanners #define the name FLEX_SCANNER. - Rules are internally separated by YY_BREAK in lex.yy.c rather than break, to allow redefinition. - The macro YY_USER_ACTION can be redefined to provide an action which is always executed prior to the matched rule's action. - yyrestart() is a new action which can be used to restart the scanner after it has seen an end-of-file (a "real" one, that is, one for which yywrap() returned non-zero). It takes a FILE* argument indicating a new file to scan and sets things up so that a subsequent call to yylex() will start scanning that file. - Internal scanner names all preceded by "yy_" - lex.yy.c is deleted if errors are encountered during processing. - Comments may be put in the first section of the input by preceding them with '#'. Other changes: - Some portability-related bugs fixed, in particular for machines with unsigned characters or sizeof( int* ) != sizeof( int ). Also, tweaks for VMS and Microsoft C (MS-DOS), and identifiers all trimmed to be 31 or fewer characters. Shortened file names for dinosaur OS's. Checks for allocating > 64K memory on 16 bit'ers. Amiga tweaks. Compiles using gcc on a Sun-3. - Compressed and fast scanner skeletons merged. - Skeleton header files done away with. - Generated scanner uses prototypes and "const" for __STDC__. - -DSV flag is now -DSYS_V for System V compilation. - Removed all references to FTL language. - Software now covered by BSD Copyright. - flex will replace lex in subsequent BSD releases. flex-2.6.4/examples/0000775000175000017500000000000013103432075011300 500000000000000flex-2.6.4/examples/debflex.awk0000664000175000017500000000536013002262300013327 00000000000000# Clarify the flex debug trace by substituting first line of each rule. # Francois Pinard , July 1990. # # Rewritten to process correctly \n's in scanner input. # BEGIN section modified to correct a collection of rules. # Michal Jaegermann , December 1993 # # Sample usage: # flex -d PROGRAM.l # gcc -o PROGRAM PROGRAM.c -lfl # PROGRAM 2>&1 | gawk -f debflex.awk PROGRAM.l # # (VP's note: this script presently does not work with either "old" or # "new" awk; fixes so it does will be welcome) BEGIN { # Insure proper usage. if (ARGC != 2) { print "usage: gawk -f debflex.awk FLEX_SOURCE > { printf( "%8d %8d %8d\n", lc, wc, cc ); yyterminate(); } flex-2.6.4/examples/fastwc/wc3.l0000664000175000017500000000103013002262300013340 00000000000000/* Somewhat faster still: potentially match a lot of text with each rule */ ws [ \t] nonws [^ \t\n] word {ws}*{nonws}+ words {word}{ws}+ %option main noyywrap %% int cc = 0, wc = 0, lc = 0; {word}{ws}* cc += yyleng; ++wc; {word}{ws}*\n cc += yyleng; ++wc; ++lc; {words}{word}{ws}* cc += yyleng; wc += 2; {words}{2}{word}{ws}* cc += yyleng; wc += 3; {words}{3}{word}{ws}* cc += yyleng; wc += 4; {ws}+ cc += yyleng; \n+ cc += yyleng; lc += yyleng; <> { printf( "%8d %8d %8d\n", lc, wc, cc ); yyterminate(); } flex-2.6.4/examples/fastwc/Makefile.in0000664000175000017500000003407013103361145014557 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of flex. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = examples/fastwc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HELP2MAN = @HELP2MAN@ INDENT = @INDENT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ M4 = @M4@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2DVI = @TEXI2DVI@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARNINGFLAGS = @WARNINGFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ wc5.l \ wc4.l \ wc3.l \ wc2.l \ wc1.l \ mywc.c \ README all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/fastwc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/fastwc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # 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: flex-2.6.4/examples/fastwc/wc1.l0000664000175000017500000000041513002262300013344 00000000000000/* First cut at a flex-based "wc" tool. */ ws [ \t] nonws [^ \t\n] %option main noyywrap %% int cc = 0, wc = 0, lc = 0; {nonws}+ cc += yyleng; ++wc; {ws}+ cc += yyleng; \n ++lc; ++cc; <> { printf( "%8d %8d %8d\n", lc, wc, cc ); yyterminate(); } flex-2.6.4/examples/fastwc/wc5.l0000664000175000017500000000102013002262300013341 00000000000000/* Oops; slight change from wc3.l introduces backtracking */ ws [ \t] nonws [^ \t\n] word {ws}*{nonws}+ words {word}{ws}+ %option main noyywrap %% int cc = 0, wc = 0, lc = 0; {word}{ws}* cc += yyleng; ++wc; {word}{ws}*\n cc += yyleng; ++wc; ++lc; {words}{word} cc += yyleng; wc += 2; /* oops */ {words}{2}{word}{ws}* cc += yyleng; wc += 3; {words}{3}{word}{ws}* cc += yyleng; wc += 4; {ws}+ cc += yyleng; \n+ cc += yyleng; lc += yyleng; <> { printf( "%8d %8d %8d\n", lc, wc, cc ); yyterminate(); } flex-2.6.4/examples/fastwc/mywc.c0000664000175000017500000000063113002262300013620 00000000000000/* A simple but fairly efficient C version of the Unix "wc" tool */ #include #include main() { int c, cc = 0, wc = 0, lc = 0; FILE *f = stdin; while ((c = getc(f)) != EOF) { ++cc; if (isgraph(c)) { ++wc; do { c = getc(f); if (c == EOF) goto done; ++cc; } while (isgraph(c)); } if (c == '\n') ++lc; } done: printf( "%8d%8d%8d\n", lc, wc, cc ); } flex-2.6.4/examples/fastwc/Makefile.am0000664000175000017500000000175413002262300014540 00000000000000# This file is part of flex. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE. EXTRA_DIST = \ wc5.l \ wc4.l \ wc3.l \ wc2.l \ wc1.l \ mywc.c \ README flex-2.6.4/examples/fastwc/wc4.l0000664000175000017500000000125013002262300013345 00000000000000/* Fastest version of wc: add rules to pick up newlines, too */ ws [ \t] nonws [^ \t\n] word {ws}*{nonws}+ words {word}{ws}+ %option main noyywrap %% int cc = 0, wc = 0, lc = 0; {word}{ws}* ++wc; cc += yyleng; {word}{ws}*\n ++wc; cc += yyleng; ++lc; {words}{word}{ws}* wc += 2; cc += yyleng; {words}{word}{ws}*\n wc += 2; cc += yyleng; ++lc; {words}{2}{word}{ws}* wc += 3; cc += yyleng; {words}{2}{word}{ws}*\n wc += 3; cc += yyleng; ++lc; {words}{3}{word}{ws}* wc += 4; cc += yyleng; {words}{3}{word}{ws}*\n wc += 4; cc += yyleng; ++lc; {ws}+ cc += yyleng; \n+ cc += yyleng; lc += yyleng; <> { printf( "%8d %8d %8d\n", lc, wc, cc ); yyterminate(); } flex-2.6.4/examples/fastwc/README0000664000175000017500000000353313002262300013361 00000000000000This directory contains some examples illustrating techniques for extracting high-performance from flex scanners. Each program implements a simplified version of the Unix "wc" tool: read text from stdin and print the number of characters, words, and lines present in the text. All programs were compiled using gcc (version unavailable, sorry) with the -O flag, and run on a SPARCstation 1+. The input used was a PostScript file, mainly containing figures, with the following "wc" counts: lines words characters 214217 635954 2592172 The basic principles illustrated by these programs are: - match as much text with each rule as possible - adding rules does not slow you down! - avoid backing up and the big caveat that comes with them is: - you buy performance with decreased maintainability; make sure you really need it before applying the above techniques. See the "Performance Considerations" section of flexdoc for more details regarding these principles. The different versions of "wc": mywc.c a simple but fairly efficient C version wc1.l a naive flex "wc" implementation wc2.l somewhat faster; adds rules to match multiple tokens at once wc3.l faster still; adds more rules to match longer runs of tokens wc4.l fastest; still more rules added; hard to do much better using flex (or, I suspect, hand-coding) wc5.l identical to wc3.l except one rule has been slightly shortened, introducing backing-up Timing results (all times in user CPU seconds): program time notes ------- ---- ----- wc1 16.4 default flex table compression (= -Cem) wc1 6.7 -Cf compression option /bin/wc 5.8 Sun's standard "wc" tool mywc 4.6 simple but better C implementation! wc2 4.6 as good as C implementation; built using -Cf wc3 3.8 -Cf wc4 3.3 -Cf wc5 5.7 -Cf; ouch, backing up is expensive flex-2.6.4/examples/Makefile.in0000664000175000017500000005043013103361145013266 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of flex. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = examples ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HELP2MAN = @HELP2MAN@ INDENT = @INDENT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ M4 = @M4@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2DVI = @TEXI2DVI@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARNINGFLAGS = @WARNINGFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ testxxLexer.l \ debflex.awk \ README SUBDIRS = \ manual \ fastwc all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # 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: flex-2.6.4/examples/testxxLexer.l0000664000175000017500000000153413002262300013725 00000000000000 // An example of using the flex C++ scanner class. %option C++ noyywrap %{ int mylineno = 0; %} string \"[^\n"]+\" ws [ \t]+ alpha [A-Za-z] dig [0-9] name ({alpha}|{dig}|\$)({alpha}|{dig}|\_|\.|\-|\/|\$)* num1 [-+]?{dig}+\.?([eE][-+]?{dig}+)? num2 [-+]?{dig}*\.{dig}+([eE][-+]?{dig}+)? number {num1}|{num2} %% {ws} /* skip blanks and tabs */ "/*" { int c; while((c = yyinput()) != 0) { if(c == '\n') ++mylineno; else if(c == '*') { if((c = yyinput()) == '/') break; else unput(c); } } } {number} std::cout << "number " << YYText() << '\n'; \n mylineno++; {name} std::cout << "name " << YYText() << '\n'; {string} std::cout << "string " << YYText() << '\n'; %% int main( int /* argc */, char** /* argv */ ) { FlexLexer* lexer = new yyFlexLexer; while(lexer->yylex() != 0) ; return 0; } flex-2.6.4/examples/manual/0000775000175000017500000000000013103432075012555 500000000000000flex-2.6.4/examples/manual/cat.lex0000664000175000017500000000152113002262300013743 00000000000000/* * cat.lex: A demonstration of YY_NEW_FILE. */ %{ #include char **names = NULL; int current = 1; %} %% <> { current += 1; if(names[current] != NULL){ yyin = fopen(names[current],"r"); if(yyin == NULL){ fprintf(stderr,"cat: unable to open %s\n", names[current]); yyterminate(); } YY_NEW_FILE; } else { yyterminate(); } } %% int main(int argc, char **argv) { if(argc < 2){ fprintf(stderr,"Usage: cat files....\n"); exit(1); } names = argv; yyin = fopen(names[current],"r"); if(yyin == NULL){ fprintf(stderr,"cat: unable to open %s\n", names[current]); yyterminate(); } yylex(); } flex-2.6.4/examples/manual/datetest.dat0000664000175000017500000000052713002262300014776 00000000000000short 1989:12:23 1989:11:12 23:12:1989 11:12:1989 1989/12/23 1989/11/12 23/12/1989 11/12/1989 1989-12-23 1989-11-12 23-12-1989 11-12-1989 long Friday the 5th of January, 1989 Friday, 5th of January, 1989 Friday, January 5th, 1989 Fri, January 5th, 1989 Fri, Jan 5th, 1989 Fri, Jan 5, 1989 FriJan 5, 1989 FriJan5, 1989 FriJan51989 Jan51989 flex-2.6.4/examples/manual/yymoretest.dat0000664000175000017500000000016313002262300015401 00000000000000"This is a test \ of multi-line string \ scanning in flex. \ This may be breaking some law \ of usage though..." flex-2.6.4/examples/manual/myname.txt0000664000175000017500000000025213002262300014511 00000000000000Hello, my name name is %NAME. Actually "%NAME" isn't my real name, it is the alias I use when I'm on %HOST, which is the %HOSTTYPE I use. My HOME directory is %HOME. flex-2.6.4/examples/manual/eof_test02.txt0000664000175000017500000000015013002262300015172 00000000000000INCLUDE #2 This is the second file that will be included. >>> Foo are GNU? #include "eof_test03.txt" flex-2.6.4/examples/manual/front.y0000664000175000017500000000512513002262300014010 00000000000000/* C code supplied at the beginning of the file. */ %{ #include #include extern int yylexlinenum; /* these are in YYlex */ extern char *yytext; /* current token */ %} /* Keywords and reserved words begin here. */ %union{ /* this is the data union */ char name[128]; /* names */ } /*-------------------- the reserved words -----------------------------*/ %token PERIOD %token NEWLINE %token POSITIONAL %token VERB %token ADVERB %token PROPER_NOUN %token NOUN %token DECLARATIVE %token CONDITIONAL %type declarative %type verb_phrase %type noun_phrase %type position_phrase %type adverb %type POSITIONAL VERB ADVERB PROPER_NOUN %type NOUN DECLARATIVE CONDITIONAL %% sentence_list : sentence | sentence_list NEWLINE sentence ; sentence : verb_phrase noun_phrase position_phrase adverb period { printf("I understand that sentence.\n"); printf("VP = %s \n",$1); printf("NP = %s \n",$2); printf("PP = %s \n",$3); printf("AD = %s \n",$4); } | { yyerror("That's a strange sentence !!"); } ; position_phrase : POSITIONAL declarative PROPER_NOUN { sprintf($$,"%s %s %s",$1,$2,$3); } | /* empty */ { strcpy($$,""); } ; verb_phrase : VERB { strcpy($$,$1); strcat($$," "); } | adverb VERB { sprintf($$,"%s %s",$1,$2); } ; adverb : ADVERB { strcpy($$,$1); } | /* empty */ { strcpy($$,""); } ; noun_phrase : DECLARATIVE NOUN { sprintf($$,"%s %s",$1,$2); } | CONDITIONAL declarative NOUN { sprintf($$,"%s %s %s",$1,$2,$3); } | NOUN { strcpy($$,$1); strcat($$," "); } ; declarative : DECLARATIVE { strcpy($$,$1); } | /* empty */ { strcpy($$,""); } ; period : /* empty */ | PERIOD ; %% /* Supplied main() and yyerror() functions. */ int main(int argc, char *argv[]) { yyparse(); /* parse the file */ return(0); } int yyerror(char *message) { extern FILE *yyout; fprintf(yyout,"\nError at line %5d. (%s) \n", yylexlinenum,message); } flex-2.6.4/examples/manual/myname.lex0000664000175000017500000000043713002262300014467 00000000000000/* * * myname.lex : A sample Flex program * that does token replacement. */ %% %NAME { printf("%s",getenv("LOGNAME")); } %HOST { printf("%s",getenv("HOST")); } %HOSTTYPE { printf("%s",getenv("HOSTTYPE"));} %HOME { printf("%s",getenv("HOME")); } %% flex-2.6.4/examples/manual/userinit.lex0000664000175000017500000000100213002262300015030 00000000000000%{ #define YY_USER_INIT open_input_file() extern FILE *yyin; void open_input_file(void) { char *file_name,buffer[1024]; yyin = NULL; while(yyin == NULL){ printf("Input file: "); file_name = fgets(buffer,1024,stdin); if(file_name){ file_name[strlen(file_name)-1] = '\0'; yyin = fopen(file_name,"r"); if(yyin == NULL){ printf("Unable to open \"%s\"\n",file_name); } } else { printf("stdin\n"); yyin = stdin; break; } } } %} %% flex-2.6.4/examples/manual/ChangeLog0000664000175000017500000000130513002262300014234 00000000000000Tue Oct 5 21:51:59 1993 Vern Paxson * Removed FILTER/ subdirectory. * Removed alloca.c. * Changed Makefile definition of CC to just "gcc -g", removed assumption of alloca being present. * Added pointer to MISC/fastwc/ to wc.lex. Tue Jun 8 15:47:39 1993 Gavin Thomas Nicol (nick at sillybugs) * Changed main() in wc.lex extensively. The old version would not work correctly without the YY_NEW_FILE. (lex handles the older version OK though). * Added a rule to expr.lex to handle whitespace. The old version reported an illegal character. * Added -traditional to the gcc flags because the flex definition for free() clashes with some systems that have old header files. flex-2.6.4/examples/manual/eof_rules.lex0000664000175000017500000000246513002262300015167 00000000000000/* * eof_rules.lex : An example of using multiple buffers * EOF rules, and start states */ %{ #define MAX_NEST 10 YY_BUFFER_STATE include_stack[MAX_NEST]; int include_count = -1; %} %x INCLUDE %% ^"#include"[ \t]*\" BEGIN(INCLUDE); \" BEGIN(INITIAL); [^\"]+ { /* get the include file name */ if ( include_count >= MAX_NEST){ fprintf( stderr, "Too many include files" ); exit( 1 ); } include_stack[++include_count] = YY_CURRENT_BUFFER; yyin = fopen( yytext, "r" ); if ( ! yyin ){ fprintf( stderr, "Unable to open \"%s\"\n",yytext); exit( 1 ); } yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE)); BEGIN(INITIAL); } <> { fprintf( stderr, "EOF in include" ); yyterminate(); } <> { if ( include_count <= 0 ){ yyterminate(); } else { yy_delete_buffer(include_stack[include_count--] ); yy_switch_to_buffer(include_stack[include_count] ); BEGIN(INCLUDE); } } [a-z]+ ECHO; .|\n ECHO; flex-2.6.4/examples/manual/string2.lex0000664000175000017500000000600413002262300014565 00000000000000/* * string2.lex: An example of using scanning strings * by using start states. */ %{ #include #include #define isodigit(x) ((x) >= '0' && (x) <= '7') #define hextoint(x) (isdigit((x)) ? (x) - '0' : ((x) - 'A') + 10) char *buffer = NULL; int buffer_size = 0; void yyerror(char *message) { printf("\nError: %s\n",message); } %} %x STRING hex (x|X)[0-9a-fA-F]{1,2} oct [0-7]{1,3} %% \" { buffer = malloc(1); buffer_size = 1; strcpy(buffer,""); BEGIN(STRING); } \n { yyerror("Unterminated string"); free(buffer); BEGIN(INITIAL); } <> { yyerror("EOF in string"); free(buffer); BEGIN(INITIAL); } [^\\\n"] { buffer = realloc(buffer,buffer_size+yyleng+1); buffer_size += yyleng; strcat(buffer,yytext); } \\\n /* ignore this */ \\{hex} { int temp =0,loop = 0; for(loop=yyleng-2; loop>0; loop--){ temp <<= 4; temp += hextoint(toupper(yytext[yyleng-loop])); } buffer = realloc(buffer,buffer_size+1); buffer[buffer_size-1] = temp; buffer[buffer_size] = '\0'; buffer_size += 1; } \\{oct} { int temp =0,loop = 0; for(loop=yyleng-1; loop>0; loop--){ temp <<= 3; temp += (yytext[yyleng-loop] - '0'); } buffer = realloc(buffer,buffer_size+1); buffer[buffer_size-1] = temp; buffer[buffer_size] = '\0'; buffer_size += 1; } \\[^\n] { buffer = realloc(buffer,buffer_size+1); switch(yytext[yyleng-1]){ case 'b' : buffer[buffer_size-1] = '\b'; break; case 't' : buffer[buffer_size-1] = '\t'; break; case 'n' : buffer[buffer_size-1] = '\n'; break; case 'v' : buffer[buffer_size-1] = '\v'; break; case 'f' : buffer[buffer_size-1] = '\f'; break; case 'r' : buffer[buffer_size-1] = '\r'; break; default : buffer[buffer_size-1] = yytext[yyleng-1]; } buffer[buffer_size] = '\0'; buffer_size += 1; } \" { printf("string = \"%s\"",buffer); free(buffer); BEGIN(INITIAL); } %% flex-2.6.4/examples/manual/yymore.lex0000664000175000017500000000106613002262300014524 00000000000000/* * yymore.lex: An example of using yymore() * to good effect. */ %{ #include void yyerror(char *message) { printf("Error: %s\n",message); } %} %x STRING %% \" BEGIN(STRING); [^\\\n"]* yymore(); <> yyerror("EOF in string."); BEGIN(INITIAL); \n yyerror("Unterminated string."); BEGIN(INITIAL); \\\n yymore(); \" { yytext[yyleng-1] = '\0'; printf("string = \"%s\"",yytext); BEGIN(INITIAL); } %% flex-2.6.4/examples/manual/expr.lex0000664000175000017500000000115313002262300014153 00000000000000/* * expr.lex : Scanner for a simple * expression parser. */ %{ #include "y.tab.h" %} %% [0-9]+ { yylval.val = atol(yytext); return(NUMBER); } [0-9]+\.[0-9]+ { sscanf(yytext,"%f",&yylval.val); return(NUMBER); } "+" return(PLUS); "-" return(MINUS); "*" return(MULT); "/" return(DIV); "^" return(EXPON); "(" return(LB); ")" return(RB); \n return(EOL); [\t ]* /* throw away whitespace */ . { yyerror("Illegal character"); return(EOL); } %% flex-2.6.4/examples/manual/front.lex0000664000175000017500000000233413002262300014327 00000000000000%{ #include #include #include "y.tab.h" /* this comes from bison */ #define TRUE 1 #define FALSE 0 #define copy_and_return(token_type) { strcpy(yylval.name,yytext); \ return(token_type); } int yylexlinenum = 0; /* so we can count lines */ %} %% /* Lexical scanning rules begin from here. */ MEN|WOMEN|STOCKS|TREES copy_and_return(NOUN) MISTAKES|GNUS|EMPLOYEES copy_and_return(NOUN) LOSERS|USERS|CARS|WINDOWS copy_and_return(NOUN) DATABASE|NETWORK|FSF|GNU copy_and_return(PROPER_NOUN) COMPANY|HOUSE|OFFICE|LPF copy_and_return(PROPER_NOUN) THE|THIS|THAT|THOSE copy_and_return(DECLARATIVE) ALL|FIRST|LAST copy_and_return(CONDITIONAL) FIND|SEARCH|SORT|ERASE|KILL copy_and_return(VERB) ADD|REMOVE|DELETE|PRINT copy_and_return(VERB) QUICKLY|SLOWLY|CAREFULLY copy_and_return(ADVERB) IN|AT|ON|AROUND|INSIDE|ON copy_and_return(POSITIONAL) "." return(PERIOD); "\n" yylexlinenum++; return(NEWLINE); . %% flex-2.6.4/examples/manual/user_act.lex0000664000175000017500000000045713002262300015010 00000000000000%{ #include void user_action(void); #define YY_USER_ACTION user_action(); %} %% .* ECHO; \n ECHO; %% void user_action(void) { int loop; for(loop=0; loop #define UNSIGNED_LONG_SYM 1 #define SIGNED_LONG_SYM 2 #define UNSIGNED_SYM 3 #define SIGNED_SYM 4 #define LONG_DOUBLE_SYM 5 #define FLOAT_SYM 6 union _yylval { long double ylong_double; float yfloat; unsigned long yunsigned_long; unsigned yunsigned; long ysigned_long; int ysigned; } yylval; %} digit [0-9] hex_digit [0-9a-fA-F] oct_digit [0-7] exponent [eE][+-]?{digit}+ i {digit}+ float_constant ({i}\.{i}?|{i}?\.{i}){exponent}? hex_constant 0[xX]{hex_digit}+ oct_constant 0{oct_digit}* int_constant {digit}+ long_ext [lL] unsigned_ext [uU] float_ext [fF] ulong_ext {long_ext}{unsigned_ext}|{unsigned_ext}{long_ext} %% {hex_constant}{ulong_ext} { /* we need to skip the "0x" part */ sscanf(&yytext[2],"%lx",&yylval.yunsigned_long); return(UNSIGNED_LONG_SYM); } {hex_constant}{long_ext} { sscanf(&yytext[2],"%lx",&yylval.ysigned_long); return(SIGNED_LONG_SYM); } {hex_constant}{unsigned_ext} { sscanf(&yytext[2],"%x",&yylval.yunsigned); return(UNSIGNED_SYM); } {hex_constant} { /* use %lx to protect against overflow */ sscanf(&yytext[2],"%lx",&yylval.ysigned_long); return(SIGNED_LONG_SYM); } {oct_constant}{ulong_ext} { sscanf(yytext,"%lo",&yylval.yunsigned_long); return(UNSIGNED_LONG_SYM); } {oct_constant}{long_ext} { sscanf(yytext,"%lo",&yylval.ysigned_long); return(SIGNED_LONG_SYM); } {oct_constant}{unsigned_ext} { sscanf(yytext,"%o",&yylval.yunsigned); return(UNSIGNED_SYM); } {oct_constant} { /* use %lo to protect against overflow */ sscanf(yytext,"%lo",&yylval.ysigned_long); return(SIGNED_LONG_SYM); } {int_constant}{ulong_ext} { sscanf(yytext,"%ld",&yylval.yunsigned_long); return(UNSIGNED_LONG_SYM); } {int_constant}{long_ext} { sscanf(yytext,"%ld",&yylval.ysigned_long); return(SIGNED_LONG_SYM); } {int_constant}{unsigned_ext} { sscanf(yytext,"%d",&yylval.yunsigned); return(UNSIGNED_SYM); } {int_constant} { /* use %ld to protect against overflow */ sscanf(yytext,"%ld",&yylval.ysigned_long); return(SIGNED_LONG_SYM); } {float_constant}{long_ext} { sscanf(yytext,"%lf",&yylval.ylong_double); return(LONG_DOUBLE_SYM); } {float_constant}{float_ext} { sscanf(yytext,"%f",&yylval.yfloat); return(FLOAT_SYM); } {float_constant} { /* use %lf to protect against overflow */ sscanf(yytext,"%lf",&yylval.ylong_double); return(LONG_DOUBLE_SYM); } %% int main(void) { int code; while((code = yylex())){ printf("yytext : %s\n",yytext); switch(code){ case UNSIGNED_LONG_SYM: printf("Type of number : UNSIGNED LONG\n"); printf("Value of number : %lu\n",yylval.yunsigned_long); break; case SIGNED_LONG_SYM: printf("Type of number : SIGNED LONG\n"); printf("Value of number : %ld\n",yylval.ysigned_long); break; case UNSIGNED_SYM: printf("Type of number : UNSIGNED\n"); printf("Value of number : %u\n",yylval.yunsigned); break; case SIGNED_SYM: printf("Type of number : SIGNED\n"); printf("Value of number : %d\n",yylval.ysigned); break; case LONG_DOUBLE_SYM: printf("Type of number : LONG DOUBLE\n"); printf("Value of number : %lf\n",yylval.ylong_double); break; case FLOAT_SYM: printf("Type of number : FLOAT\n"); printf("Value of number : %f\n",yylval.yfloat); break; default: printf("Type of number : UNDEFINED\n"); printf("Value of number : UNDEFINED\n"); break; } } return(0); } flex-2.6.4/examples/manual/wc.lex0000664000175000017500000000526013002262300013611 00000000000000%{ /* * wc.lex : A simple example of using FLEX * to create a wc-like utility. * * See MISC/fastwc/ in the flex distribution for examples * of how to write this scanner for maximum performance. */ int numchars = 0; int numwords = 0; int numlines = 0; int totchars = 0; int totwords = 0; int totlines = 0; /* * rules start from here */ %} %% [\n] { numchars++; numlines++; } [\r] { numchars++; } [^ \t\n]+ { numwords++; numchars += yyleng; } . { numchars++; } %% /* * additional C code start from here. This supplies * all the argument processing etc. */ int main(int argc, char *argv[]) { int loop,first=1; int lflag = 0; /* 1 if we count # of lines */ int wflag = 0; /* 1 if we count # of words */ int cflag = 0; /* 1 if we count # of characters */ int fflag = 0; /* 1 if we have a file name */ for(loop=1; loop #include "y.tab.h" int line_number = 0; void yyerror(char *message); %} %x COMMENT1 COMMENT2 white_space [ \t]* digit [0-9] alpha [A-Za-z_] alpha_num ({alpha}|{digit}) hex_digit [0-9A-F] identifier {alpha}{alpha_num}* unsigned_integer {digit}+ hex_integer ${hex_digit}{hex_digit}* exponent e[+-]?{digit}+ i {unsigned_integer} real ({i}\.{i}?|{i}?\.{i}){exponent}? string \'([^'\n]|\'\')+\' bad_string \'([^'\n]|\'\')+ %% "{" BEGIN(COMMENT1); [^}\n]+ \n ++line_number; <> yyerror("EOF in comment"); "}" BEGIN(INITIAL); "(*" BEGIN(COMMENT2); [^)*\n]+ \n ++line_number; <> yyerror("EOF in comment"); "*)" BEGIN(INITIAL); [*)] /* note that FILE and BEGIN are already * defined in FLEX or C so they can't * be used. This can be overcome in * a cleaner way by defining all the * tokens to start with TOK_ or some * other prefix. */ and return(AND); array return(ARRAY); begin return(_BEGIN); case return(CASE); const return(CONST); div return(DIV); do return(DO); downto return(DOWNTO); else return(ELSE); end return(END); file return(_FILE); for return(FOR); function return(FUNCTION); goto return(GOTO); if return(IF); in return(IN); label return(LABEL); mod return(MOD); nil return(NIL); not return(NOT); of return(OF); packed return(PACKED); procedure return(PROCEDURE); program return(PROGRAM); record return(RECORD); repeat return(REPEAT); set return(SET); then return(THEN); to return(TO); type return(TYPE); until return(UNTIL); var return(VAR); while return(WHILE); with return(WITH); "<="|"=<" return(LEQ); "=>"|">=" return(GEQ); "<>" return(NEQ); "=" return(EQ); ".." return(DOUBLEDOT); {unsigned_integer} return(UNSIGNED_INTEGER); {real} return(REAL); {hex_integer} return(HEX_INTEGER); {string} return{STRING}; {bad_string} yyerror("Unterminated string"); {identifier} return(IDENTIFIER); [*/+\-,^.;:()\[\]] return(yytext[0]); {white_space} /* do nothing */ \n line_number += 1; . yyerror("Illegal input"); %% void yyerror(char *message) { fprintf(stderr,"Error: \"%s\" in line %d. Token = %s\n", message,line_number,yytext); exit(1); } flex-2.6.4/examples/manual/dates.lex0000664000175000017500000000546613002262300014310 00000000000000/* * dates.lex: An example of using start states to * distinguish between different date formats. */ %{ #include char month[20],dow[20],day[20],year[20]; %} skip of|the|[ \t,]* mon (mon(day)?) tue (tue(sday)?) wed (wed(nesday)?) thu (thu(rsday)?) fri (fri(day)?) sat (sat(urday)?) sun (sun(day)?) day_of_the_week ({mon}|{tue}|{wed}|{thu}|{fri}|{sat}|{sun}) jan (jan(uary)?) feb (feb(ruary)?) mar (mar(ch)?) apr (apr(il)?) may (may) jun (jun(e)?) jul (jul(y)?) aug (aug(ust)?) sep (sep(tember)?) oct (oct(ober)?) nov (nov(ember)?) dec (dec(ember)?) first_half ({jan}|{feb}|{mar}|{apr}|{may}|{jun}) second_half ({jul}|{aug}|{sep}|{oct}|{nov}|{dec}) month {first_half}|{second_half} nday [1-9]|[1-2][0-9]|3[0-1] nmonth [1-9]|1[0-2] nyear [0-9]{1,4} year_ext (ad|AD|bc|BC)? day_ext (st|nd|rd|th)? %s LONG SHORT %s DAY DAY_FIRST YEAR_FIRST YEAR_LAST YFMONTH YLMONTH %% /* the default is month-day-year */ {day_of_the_week} strcpy(dow,yytext); {month} strcpy(month,yytext); BEGIN(DAY); /* handle the form: day-month-year */ {nday}{day_ext} strcpy(day,yytext); BEGIN(DAY_FIRST); {month} strcpy(month,yytext); BEGIN(LONG); {nday}{day_ext} strcpy(day,yytext); BEGIN(LONG); {nyear}{year_ext} { printf("Long:\n"); printf(" DOW : %s \n",dow); printf(" Day : %s \n",day); printf(" Month : %s \n",month); printf(" Year : %s \n",yytext); strcpy(dow,""); strcpy(day,""); strcpy(month,""); } /* handle dates of the form: day-month-year */ {nday} strcpy(day,yytext); BEGIN(YEAR_LAST); {nmonth} strcpy(month,yytext);BEGIN(YLMONTH); {nyear} strcpy(year,yytext); BEGIN(SHORT); /* handle dates of the form: year-month-day */ {nyear} strcpy(year,yytext); BEGIN(YEAR_FIRST); {nmonth} strcpy(month,yytext);BEGIN(YFMONTH); {nday} strcpy(day,yytext); BEGIN(SHORT); \n { printf("Short:\n"); printf(" Day : %s \n",day); printf(" Month : %s \n",month); printf(" Year : %s \n",year); strcpy(year,""); strcpy(day,""); strcpy(month,""); } long\n BEGIN(LONG); short\n BEGIN(SHORT); {skip}* \n . flex-2.6.4/examples/manual/replace.lex0000664000175000017500000000102113002262300014602 00000000000000/* * replace.lex : A simple filter for renaming * parts of flex of bison generated * scanners or parsers. */ %{ #include char lower_replace[1024]; char upper_replace[1024]; %} %% "yy" printf("%s",lower_replace); "YY" printf("%s",upper_replace); , ECHO; %% int main(int argc, char *argv[]) { if(argc < 2){ printf("Usage %s lower UPPER\n",argv[0]); exit(1); } strcpy(lower_replace,argv[1]); strcpy(upper_replace,argv[2]); yylex(); return(0); } flex-2.6.4/examples/manual/pas_include.lex0000664000175000017500000000320613002262300015464 00000000000000/* * eof_rules.lex : An example of using multiple buffers * EOF rules, and start states */ %{ #define MAX_NEST 10 YY_BUFFER_STATE include_stack[MAX_NEST]; int include_count = -1; %} %x INCLUDE %x COMMENT %% "{" BEGIN(COMMENT); "}" BEGIN(INITIAL); "$include"[ \t]*"(" BEGIN(INCLUDE); [ \t]* /* skip whitespace */ ")" BEGIN(COMMENT); [ \t]* /* skip whitespace */ [^ \t\n() ]+ { /* get the include file name */ if ( include_count >= MAX_NEST){ fprintf( stderr, "Too many include files" ); exit( 1 ); } include_stack[++include_count] = YY_CURRENT_BUFFER; yyin = fopen( yytext, "r" ); if ( ! yyin ){ fprintf( stderr, "Unable to open %s",yytext); exit( 1 ); } yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE)); BEGIN(INITIAL); } <> { fprintf( stderr, "EOF in include" ); yyterminate(); } <> { fprintf( stderr, "EOF in comment" ); yyterminate(); } <> { if ( include_count <= 0 ){ yyterminate(); } else { yy_delete_buffer(include_stack[include_count--] ); yy_switch_to_buffer(include_stack[include_count] ); BEGIN(INCLUDE); } } [a-z]+ ECHO; .|\n ECHO; flex-2.6.4/examples/manual/expr.y0000664000175000017500000000173413002262300013640 00000000000000/* * expr.y : A simple yacc expression parser * Based on the Bison manual example. */ %{ #include #include %} %union { float val; } %token NUMBER %token PLUS MINUS MULT DIV EXPON %token EOL %token LB RB %left MINUS PLUS %left MULT DIV %right EXPON %type exp NUMBER %% input : | input line ; line : EOL | exp EOL { printf("%g\n",$1);} exp : NUMBER { $$ = $1; } | exp PLUS exp { $$ = $1 + $3; } | exp MINUS exp { $$ = $1 - $3; } | exp MULT exp { $$ = $1 * $3; } | exp DIV exp { $$ = $1 / $3; } | MINUS exp %prec MINUS { $$ = -$2; } | exp EXPON exp { $$ = pow($1,$3);} | LB exp RB { $$ = $2; } ; %% yyerror(char *message) { printf("%s\n",message); } int main(int argc, char *argv[]) { yyparse(); return(0); } flex-2.6.4/examples/manual/Makefile.in0000664000175000017500000003474213103361145014553 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of flex. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = examples/manual ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in ChangeLog README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HELP2MAN = @HELP2MAN@ INDENT = @INDENT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ M4 = @M4@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2DVI = @TEXI2DVI@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARNINGFLAGS = @WARNINGFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ ChangeLog \ Makefile.examples \ README \ cat.lex \ dates.lex \ datetest.dat \ eof_rules.lex \ eof_test01.txt \ eof_test02.txt \ eof_test03.txt \ expr.lex \ expr.y \ front.lex \ front.y \ j2t.lex \ myname.lex \ myname.txt \ myname2.lex \ numbers.lex \ pas_include.lex \ pascal.lex \ reject.lex \ replace.lex \ string1.lex \ string2.lex \ strtest.dat \ unput.lex \ user_act.lex \ userinit.lex \ wc.lex \ yymore.lex \ yymore2.lex \ yymoretest.dat all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/manual/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign examples/manual/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # 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: flex-2.6.4/examples/manual/strtest.dat0000664000175000017500000000133513002262300014667 00000000000000"This is a string" "The next string will be empty" "" "This is a string with a \b(\\b) in it" "This is a string with a \t(\\t) in it" "This is a string with a \n(\\n) in it" "This is a string with a \v(\\v) in it" "This is a string with a \f(\\f) in it" "This is a string with a \r(\\r) in it" "This is a string with a \"(\\\") in it" "This is a string with a \z(\\z) in it" "This is a string with a \X4a(\\X4a) in it" "This is a string with a \x4a(\\x4a) in it" "This is a string with a \x7(\\x7) in it" "This is a string with a \112(\\112) in it" "This is a string with a \043(\\043) in it" "This is a string with a \7(\\7) in it" "This is a multi-line \ string" "This is an unterminated string "This is an unterminated string too flex-2.6.4/examples/manual/j2t.lex0000664000175000017500000003007613002262300013702 00000000000000/* * j2t.lex : An example of the use (possibly abuse!) * of start states. */ %{ #define MAX_STATES 1024 #define TRUE 1 #define FALSE 0 #define CHAPTER "@chapter" #define SECTION "@section" #define SSECTION "@subsection" #define SSSECTION "@subsubsection" int states[MAX_STATES]; int statep = 0; int need_closing = FALSE; char buffer[YY_BUF_SIZE]; extern char *yytext; /* * set up the head of the *.texinfo file the program * will produce. This is a standard texinfo header. */ void print_header(void) { printf("\\input texinfo @c -*-texinfo-*-\n"); printf("@c %c**start of header\n",'%'); printf("@setfilename jargon.info\n"); printf("@settitle The New Hackers Dictionary\n"); printf("@synindex fn cp\n"); printf("@synindex vr cp\n"); printf("@c %c**end of header\n",'%'); printf("@setchapternewpage odd\n"); printf("@finalout\n"); printf("@c @smallbook\n"); printf("\n"); printf("@c ==========================================================\n\n"); printf("@c This file was produced by j2t. Any mistakes are *not* the\n"); printf("@c fault of the jargon file editors. \n"); printf("@c ==========================================================\n\n"); printf("@titlepage\n"); printf("@title The New Hackers Dictionary\n"); printf("@subtitle Version 2.9.10\n"); printf("@subtitle Generated by j2t\n"); printf("@author Eric S. Raymond, Guy L. Steel, Mark Crispin et al.\n"); printf("@end titlepage\n"); printf("@page\n"); printf("\n@c ==========================================================\n"); printf("\n\n"); printf("@unnumbered Preface\n"); printf("@c *******\n"); } /* * create the tail of the texinfo file produced. */ void print_trailer(void) { printf("\n@c ==========================================================\n"); printf("@contents\n"); /* print the table of contents */ printf("@bye\n\n"); } /* * write an underline under a section * or chapter so we can find it later. */ void write_underline(int len, int space, char ch) { int loop; printf("@c "); for(loop=3; loop"@" printf("@@"); "{" printf("@{"); "}" printf("@}"); /* * reproduce @example code */ ":"\n+[^\n0-9*]+\n" "[^ ] { int loop; int len; int cnt; printf(":\n\n@example \n"); strcpy(buffer,yytext); len = strlen(buffer); cnt = 0; for(loop=len; loop > 0;loop--){ if(buffer[loop] == '\n') cnt++; if(cnt == 2) break; } yyless(loop+1); statep++; states[statep] = EXAMPLE2; BEGIN(EXAMPLE2); } ^\n { printf("@end example\n\n"); statep--; BEGIN(states[statep]); } /* * repoduce @enumerate lists */ ":"\n+[ \t]*[0-9]+"." { int loop; int len; printf(":\n\n@enumerate \n"); strcpy(buffer,yytext); len = strlen(buffer); for(loop=len; loop > 0;loop--){ if(buffer[loop] == '\n') break; } yyless(loop); statep++; states[statep] = ENUM; BEGIN(ENUM); } "@" printf("@@"); ":"\n+" "[^0-9] { printf(":\n\n@example\n"); statep++; states[statep] = EXAMPLE; BEGIN(EXAMPLE); } \n[ \t]+[0-9]+"." { printf("\n\n@item "); } ^[^ ] | \n\n\n[ \t]+[^0-9] { printf("\n\n@end enumerate\n\n"); statep--; BEGIN(states[statep]); } /* * reproduce one kind of @itemize list */ ":"\n+":" { int loop; int len; printf(":\n\n@itemize @bullet \n"); yyless(2); statep++; states[statep] = LITEM2; BEGIN(LITEM2); } ^":".+":" { (void)check_and_convert(&yytext[1]); buffer[strlen(buffer)-1]='\0'; printf("@item @b{%s:}\n",buffer); } \n\n\n+[^:\n] { printf("\n\n@end itemize\n\n"); ECHO; statep--; BEGIN(states[statep]); } /* * create a list out of the revision history part. * We need the "Version" for this because it * clashes with other rules otherwise. */ :[\n]+"Version"[^:\n*]+":" { int loop; int len; printf(":\n\n@itemize @bullet \n"); strcpy(buffer,yytext); len = strlen(buffer); for(loop=len; loop > 0;loop--){ if(buffer[loop] == '\n') break; } yyless(loop); statep++; states[statep] = LITEM; BEGIN(LITEM); } ^.+":" { (void)check_and_convert(yytext); buffer[strlen(buffer)-1]='\0'; printf("@item @b{%s}\n\n",buffer); } ^[^:\n]+\n\n[^:\n]+\n { int loop; strcpy(buffer,yytext); for(loop=0; buffer[loop] != '\n'; loop++); buffer[loop] = '\0'; printf("%s\n",buffer); printf("@end itemize\n\n"); printf("%s",&buffer[loop+1]); statep--; BEGIN(states[statep]); } /* * reproduce @itemize @bullet lists */ ":"\n[ ]*"*" { int loop; int len; printf(":\n\n@itemize @bullet \n"); len = strlen(buffer); for(loop=0; loop < len;loop++){ if(buffer[loop] == '\n') break; } yyless((len-loop)+2); statep++; states[statep] = BITEM; BEGIN(BITEM); } ^" "*"*" { printf("@item"); statep++; states[statep] = BITEM_ITEM; BEGIN(BITEM_ITEM); } "@" printf("@@"); ^\n { printf("@end itemize\n\n"); statep--; BEGIN(states[statep]); } [^\:]* { printf(" @b{%s}\n\n",check_and_convert(yytext)); } ":" { statep--; BEGIN(states[statep]); } /* * recreate @chapter, @section etc. */ ^:[^:]* { (void)check_and_convert(&yytext[1]); statep++; states[statep] = HEADING; BEGIN(HEADING); } :[^\n] { printf("@item @b{%s}\n",buffer); write_underline(strlen(buffer),6,'~'); statep--; BEGIN(states[statep]); } :\n"*"* { if(need_closing == TRUE){ printf("@end table\n\n\n"); need_closing = FALSE; } printf("@chapter %s\n",buffer); write_underline(strlen(buffer),9,'*'); statep--; BEGIN(states[statep]); } :\n"="* { if(need_closing == TRUE){ printf("@end table\n\n\n"); need_closing = FALSE; } printf("@section %s\n",buffer); write_underline(strlen(buffer),9,'='); statep--; BEGIN(states[statep]); } "@" printf("@@"); :\n"-"* { if(need_closing == TRUE){ printf("@end table\n\n\n"); need_closing = FALSE; } printf("@subsection %s\n",buffer); write_underline(strlen(buffer),12,'-'); statep--; BEGIN(states[statep]); } /* * recreate @example text */ ^" " { printf("@example\n"); statep++; states[statep] = EXAMPLE; BEGIN(EXAMPLE); } ^" " . ECHO; %% /* * initialise and go. */ int main(int argc, char *argv[]) { states[0] = INITIAL; statep = 0; print_header(); yylex(); print_trailer(); return(0); } flex-2.6.4/examples/manual/eof_test01.txt0000664000175000017500000000055713002262300015204 00000000000000This is test file #1 ------------------------------------------------- We will now include test #2 in a standard way. #include "eof_test02.txt" ------------------------------------------------- And now we will include test # 2 with a different format #include "eof_test02.txt" ------------------------------------------------- and this is the end of the test. flex-2.6.4/examples/manual/eof_test03.txt0000664000175000017500000000012713002262300015177 00000000000000INCLUDE #3 This is the third file that will be included. >>> echo "I am `whoami`!!" flex-2.6.4/examples/manual/unput.lex0000664000175000017500000000065513002262300014356 00000000000000/* * unput.l : An example of what *not* * to do with unput(). */ %{ #include void putback_yytext(void); %} %% foobar putback_yytext(); raboof putback_yytext(); %% void putback_yytext(void) { int i; int l = strlen(yytext); char buffer[YY_BUF_SIZE]; strcpy(buffer,yytext); printf("Got: %s\n",yytext); for(i=0; i %} %x STRING %% \" ECHO; BEGIN(STRING); [^\"\n]* ECHO; \" ECHO; BEGIN(INITIAL); %NAME { printf("%s",getenv("LOGNAME")); } %HOST { printf("%s",getenv("HOST")); } %HOSTTYPE { printf("%s",getenv("HOSTTYPE"));} %HOME { printf("%s",getenv("HOME")); } flex-2.6.4/examples/manual/Makefile.am0000664000175000017500000000261413002262300014522 00000000000000# This file is part of flex. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE. EXTRA_DIST = \ ChangeLog \ Makefile.examples \ README \ cat.lex \ dates.lex \ datetest.dat \ eof_rules.lex \ eof_test01.txt \ eof_test02.txt \ eof_test03.txt \ expr.lex \ expr.y \ front.lex \ front.y \ j2t.lex \ myname.lex \ myname.txt \ myname2.lex \ numbers.lex \ pas_include.lex \ pascal.lex \ reject.lex \ replace.lex \ string1.lex \ string2.lex \ strtest.dat \ unput.lex \ user_act.lex \ userinit.lex \ wc.lex \ yymore.lex \ yymore2.lex \ yymoretest.dat flex-2.6.4/examples/manual/string1.lex0000664000175000017500000000500513002262300014564 00000000000000/* * string1.lex: Handling strings by using input() */ %{ #include #include #define ALLOC_SIZE 32 /* for (re)allocating the buffer */ #define isodigit(x) ((x) >= '0' && (x) <= '7') #define hextoint(x) (isdigit((x)) ? (x) - '0' : ((x) - 'A') + 10) void yyerror(char *message) { printf("\nError: %s\n",message); } %} %% \" { int inch,count,max_size; char *buffer; int temp; buffer = malloc(ALLOC_SIZE); max_size = ALLOC_SIZE; inch = input(); count = 0; while(inch != EOF && inch != '"' && inch != '\n'){ if(inch == '\\'){ inch = input(); switch(inch){ case '\n': inch = input(); break; case 'b' : inch = '\b'; break; case 't' : inch = '\t'; break; case 'n' : inch = '\n'; break; case 'v' : inch = '\v'; break; case 'f' : inch = '\f'; break; case 'r' : inch = '\r'; break; case 'X' : case 'x' : inch = input(); if(isxdigit(inch)){ temp = hextoint(toupper(inch)); inch = input(); if(isxdigit(inch)){ temp = (temp << 4) + hextoint(toupper(inch)); } else { unput(inch); } inch = temp; } else { unput(inch); inch = 'x'; } break; default: if(isodigit(inch)){ temp = inch - '0'; inch = input(); if(isodigit(inch)){ temp = (temp << 3) + (inch - '0'); } else { unput(inch); goto done; } inch = input(); if(isodigit(inch)){ temp = (temp << 3) + (inch - '0'); } else { unput(inch); } done: inch = temp; } } } buffer[count++] = inch; if(count >= max_size){ buffer = realloc(buffer,max_size + ALLOC_SIZE); max_size += ALLOC_SIZE; } inch = input(); } if(inch == EOF || inch == '\n'){ yyerror("Unterminated string."); } buffer[count] = '\0'; printf("String = \"%s\"\n",buffer); free(buffer); } . \n %% flex-2.6.4/examples/manual/Makefile.examples0000664000175000017500000000355613002262300015751 00000000000000############################################################# # # Makefile : Makefile for Flex examples. # Author : G.T.Nicol # Last Updated : 1993/10/05 # # If you use bison, you may have to supply an alloca # ############################################################# CC = gcc -g LEX = flex -i -I YACC = bison -d -y ALLOCA = ############################################################ # # DO NOT CHANGE ANYTHING FROM HERE ON !!!!!!!!! # ############################################################ all: expr front myname eof wc replace user_act string1\ string2 yymore numbers dates cat expr: expr.y expr.lex $(YACC) expr.y $(LEX) expr.lex $(CC) -o expr lex.yy.c y.tab.c $(ALLOCA) -ll -lm front: front.y front.lex $(YACC) front.y $(LEX) front.lex $(CC) -o front lex.yy.c y.tab.c $(ALLOCA) -ll -lm numbers: numbers.lex $(LEX) numbers.lex $(CC) lex.yy.c -o numbers dates: dates.lex $(LEX) dates.lex $(CC) lex.yy.c -o dates -ll yymore: yymore.lex $(LEX) yymore.lex $(CC) lex.yy.c -o yymore -ll string1: string1.lex $(LEX) string1.lex $(CC) lex.yy.c -o string1 -ll string2: string2.lex $(LEX) string2.lex $(CC) lex.yy.c -o string2 -ll myname: myname.lex $(LEX) myname.lex $(CC) lex.yy.c -o myname -ll myname2: myname2.lex $(LEX) myname2.lex $(CC) lex.yy.c -o myname2 -ll eof: eof_rules.lex $(LEX) eof_rules.lex $(CC) lex.yy.c -o eof -ll wc: wc.lex $(LEX) wc.lex $(CC) lex.yy.c -o wc -ll cat: cat.lex $(LEX) cat.lex $(CC) lex.yy.c -o cat -ll replace: replace.lex $(LEX) replace.lex $(CC) lex.yy.c -o replace -ll user_act: expr.y expr.lex $(LEX) user_act.lex $(CC) -o user_act lex.yy.c -ll clean: rm -f *.BAK *.o core *~* *.a rm -f *.tab.h *.tab.c rm -f myname expr lex.yy.c *.out eof wc yymore rm -f replace front user_act string1 string2 rm -f dates numbers cat flex-2.6.4/examples/manual/reject.lex0000664000175000017500000000036513002262300014455 00000000000000/* * reject.lex: An example of REJECT and unput() * misuse. */ %% UNIX { unput('U'); unput('N'); unput('G'); unput('\0'); REJECT; } GNU printf("GNU is Not Unix!\n"); %% flex-2.6.4/examples/manual/README0000664000175000017500000000053513002262300013346 00000000000000This directory contains the example programs from the manual, and a few other things as well. To make all the programs, simply type "make -f Makefile.examples", and assuming you have flex and gcc, all will be well. To build the programs individually, type make -f Makefile.examples program_name For example: make -f Makefile.examples expr flex-2.6.4/examples/manual/yymore2.lex0000664000175000017500000000132013002262300014577 00000000000000/* * yymore.lex: An example of using yymore() * to good effect. */ %{ #include void yyerror(char *message) { printf("Error: %s\n",message); } %} %x STRING %% \" BEGIN(STRING); [^\\\n"]* yymore(); <> yyerror("EOF in string."); BEGIN(INITIAL); \n yyerror("Unterminated string."); BEGIN(INITIAL); \\\n { bcopy(yytext,yytext+2,yyleng-2); yytext += 2; yyleng -= 2; yymore(); } \" { yyleng -= 1; yytext[yyleng] = '\0'; printf("string = \"%s\"",yytext); BEGIN(INITIAL); } %% flex-2.6.4/examples/Makefile.am0000664000175000017500000000176413002262300013252 00000000000000# This file is part of flex. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE. EXTRA_DIST = \ testxxLexer.l \ debflex.awk \ README SUBDIRS = \ manual \ fastwc flex-2.6.4/examples/README0000664000175000017500000000122013002262300012061 00000000000000This directory contains some examples of what you can do with flex. These files are not tested regularly so you might have to tinker a bit before they work for you. Updates, new files and patches are welcome. - debflex.awk, an awk script for anotating flex debug output. It presently only works with gawk and mawk, not with "old" or "new" awk. - testxxLexer.l, a sample C++ program that uses flex's scanner class option ("-+"). - fastwc/, a subdirectory containing examples of how to use flex to write progressively higher-performance versions of the Unix "wc" utility. This certainly should work with 2.5, but hasn't been tested. flex-2.6.4/tests/0000775000175000017500000000000013103432077010626 500000000000000flex-2.6.4/tests/c_cxx_r.lll0000664000175000017500000000307013002262300012664 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". The scanner is not really important -- we only care if it compiles under a c++ compiler, and runs. */ #include #include #include "config.h" /*#include "parser.h" */ %} %option 8bit prefix="test" %option nounput nomain noyywrap %option warn reentrant %% . { } %% int main(void); int main () { yyscan_t lexer; testlex_init( &lexer ); testset_out ( stdout,lexer); testset_in ( stdin, lexer); while( testlex(lexer) ) { } testlex_destroy( lexer ); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/cxx_yywrap.ll0000664000175000017500000000332213002262300013300 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ #include "config.h" #include %} %option 8bit prefix="test" %option nounput nomain %option warn c++ %% . { } %% #define MAX_FILES 10 char *files[MAX_FILES] = { 0 }; int filecounter = 0; int testFlexLexer::yywrap() { if (filecounter-- > 0) { std::cout << "NOW WRAPPING TO READ " << files[filecounter] << std::endl; std::ifstream *ifs = new std::ifstream(files[filecounter]); switch_streams(ifs); return 0; } return 1; } int main (int argc, char *argv[]) { for (int i = 1; i < argc && i <= MAX_FILES; i++) { files[i-1] = argv[i]; filecounter++; } testFlexLexer* f = new testFlexLexer; f->yywrap(); f->yylex(); std::cout << "TEST RETURNING OK." << std::endl; return 0; } flex-2.6.4/tests/include_by_buffer.direct.txt0000664000175000017500000000017413002262300016214 00000000000000Beginning of "include_by_buffer.direct.txt" #include End of "include_by_buffer.direct.txt" flex-2.6.4/tests/cxx_basic.ll0000664000175000017500000000240613002262300013030 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ #include "config.h" %} %option 8bit prefix="test" %option warn c++ %option nounput nomain noinput noyywrap %% . { } %% int main(void); int main (void) { yyFlexLexer f; f.switch_streams(&std::cin, &std::cout); f.yylex(); std::cout << "TEST RETURNING OK." << std::endl; return 0; } flex-2.6.4/tests/include_by_buffer.direct.l0000664000175000017500000000522713002262300015634 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions f * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A scanner file to build "scanner.c". Input language is any text. "#include " causes a buffer switch. */ #include #include #include "config.h" int error = 0; %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn %x GET_FILENAME %{ #define MAX_INCLUDE_DEPTH 10 YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH]; int include_stack_ptr = 0; %} %% { ^"#include"[[:blank:]]+"<" { BEGIN(GET_FILENAME); } .|\n { ECHO; } } { [[:alnum:]_.-]+> { /* recurse */ yytext[yyleng-1]='\0'; include_stack[include_stack_ptr++] = YY_CURRENT_BUFFER; if((yyin=fopen(yytext,"r"))==NULL) { fprintf(stderr,"*** Error: Could not open include file \"%s\".\n",yytext); error = 1; yyterminate(); } yy_switch_to_buffer( yy_create_buffer( yyin, YY_BUF_SIZE )); BEGIN(0); } .|\n { fprintf(stderr,"Invalid input \"%s\".\n", yytext); error = 1; yyterminate(); } } <> { if ( --include_stack_ptr < 0 ) { yyterminate(); } else { fclose(yyin); yy_delete_buffer( YY_CURRENT_BUFFER ); yy_switch_to_buffer( include_stack[include_stack_ptr] ); } } %% int main(int argc, char** argv); int main ( int argc, char** argv ) { FILE * fp; if( argc != 2 ) { fprintf(stderr,"*** Error: Must specify one filename.\n"); exit(-1); } if((fp=fopen(argv[1],"r"))==NULL) { fprintf(stderr,"*** Error: fopen(%s) failed.\n",argv[1]); exit(-1); } yyin = fp; yyout = stdout; yylex(); if (!error) printf("TEST RETURNING OK.\n"); else exit(-1); return 0; } flex-2.6.4/tests/posix.l0000664000175000017500000000377313002262300012063 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* The goal of this test is to verify that we are getting the counter-intuitive * posix behavior of the repeat operator `{}'. * * ab{3} - In traditional flex, this matches "abbb". * In posix, this matches "ababab". */ #include #include #include "config.h" #define NUM_TESTS 1 char * tests[NUM_TESTS] = { "ababab"}; int main(void); int tests_ok[NUM_TESTS] = { 0 }; %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn posix-compat %% ab{3} tests_ok[0] = 1; return 0; .|\n return 0; %% int main (void) { YY_BUFFER_STATE state; int i; yyin = stdin; yyout = stdout; /* Run the tests */ for (i=0; i < NUM_TESTS; i++){ printf("Testing: test_scan_string(%s): ", tests[i]); state = test_scan_string(tests[i]); testlex(); yy_delete_buffer(state); printf("... %s\n", tests_ok[i] ? "OK" : "FAILED"); } for (i=0; i < NUM_TESTS; i++) if (!tests_ok[i]) exit(1); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/mem_nr.txt0000664000175000017500000000525013002262300012552 00000000000000First we push a lot on the stack by nesting parenthesis: (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((((((((((((( (should be 200 states pushed here) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ))))))))))))))))))))))))))))))))))))))))))) Now we match progressively bigger tokens to increase the read buffer: len=1 0 len=2 00 len=4 0000 len=8 00000000 len=16 0000000000000000 len=32 00000000000000000000000000000000 len=64 0000000000000000000000000000000000000000000000000000000000000000 len=128 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 len=256 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 len=512 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 len=1024 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 flex-2.6.4/tests/include_by_reentrant.direct_2.txt0000664000175000017500000000021313002262300017160 00000000000000Beginning of "include_by_reentrant.direct_2.txt". #include End of "include_by_reentrant.direct_2.txt". flex-2.6.4/tests/lineno_nr.l0000664000175000017500000000435013002262300012674 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". Run as: test-lineno-nr # report flex's yylineno test-lineno-nr 1 # report count_newlines(stdin) */ #include #include #include "config.h" %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput yylineno %option warn WORD [[:alpha:]]+ DIGIT [[:digit:]] %% /* The goal here is to test the yylineno processing by: - providing some rules than CAN match newlines and other rules that can NOT match newlines, - matching several newlines in one rule, - directly modifying yylineno. */ "yylineno++" yylineno++; "yylineno--" yylineno--; [[:blank:]]+ {WORD} {DIGIT}+(\n{DIGIT}+)* \n . <> { printf("%d\n", yylineno); yyterminate(); } %% /* returns number of '\n' characters in input, plus one. This is what flex does, essentially. */ static int count_newlines (FILE* in) { int n=1,c; while ((c=fgetc(in)) != EOF) if( c == '\n') n++; return n; } int main ( int, char**); int main ( int argc, char **argv ) { (void)argv; if( argc > 1 ) printf("%d\n", count_newlines(stdin)); else{ yyin = stdin; yyout = stdout; yylex(); } return 0; } flex-2.6.4/tests/basic_nr.txt0000664000175000017500000000007213002262300013052 00000000000000# this is a comment foo = "bar" num = 43 setting = false flex-2.6.4/tests/c_cxx_nr.lll0000664000175000017500000000270513002262300013046 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". The scanner is not really important -- we only care if it compiles under a c++ compiler, and runs. */ #include #include #include "config.h" /*#include "parser.h" */ %} %option 8bit prefix="test" %option nounput nomain noyywrap %option warn %% . { } %% int main(void); int main () { testin = stdin; testout = stdout; testlex(); testlex_destroy(); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/array_r.txt0000664000175000017500000000006613002262300012734 000000000000000000 foo 1111 foo 0000 bar 0000 foo 1111 foo 0000 bar flex-2.6.4/tests/string_nr.l0000664000175000017500000000516713002262300012725 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". */ #include #include #include "config.h" #define NUMBER 200 #define WORD 201 %} %option 8bit prefix="test" %option nounput nomain nodefault noyywrap noinput %option warn %% [[:space:]]+ { } [[:digit:]]+ { printf("NUMBER "); fflush(stdout);} [[:alpha:]]+ { printf("WORD "); fflush(stdout);} . { fprintf(stderr,"*** Error: Unrecognized character '%c' while scanning.\n", yytext[0]); yyterminate(); } <> { printf("<>\n"); yyterminate();} %% #define INPUT_STRING_1 "1234 foo bar" #define INPUT_STRING_2 "1234 foo bar *@&@&###@^$#&#*" int main(void); int main (void) { char * buf; size_t len; YY_BUFFER_STATE state; /* Scan a good string. */ printf("Testing: test_scan_string(%s): ",INPUT_STRING_1); fflush(stdout); state = test_scan_string ( INPUT_STRING_1 ); testlex(); yy_delete_buffer(state); /* Scan only the first 12 chars of a string. */ printf("Testing: test_scan_bytes(%s): ",INPUT_STRING_2); fflush(stdout); state = test_scan_bytes ( INPUT_STRING_2, 12 ); testlex(); test_delete_buffer(state); /* Scan directly from a buffer. We make a copy, since the buffer will be modified by flex.*/ printf("Testing: test_scan_buffer(%s): ",INPUT_STRING_1); fflush(stdout); len = strlen(INPUT_STRING_1) + 2; buf = malloc(len); strcpy( buf, INPUT_STRING_1); buf[ len -2 ] = 0; /* Flex requires two NUL bytes at end of buffer. */ buf[ len -1 ] =0; state = test_scan_buffer( buf, len ); testlex(); test_delete_buffer(state); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/lineno_r.l0000664000175000017500000000452413002262300012521 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". Run as: test-lineno-r # report flex's yylineno test-lineno-r 1 # report count_newlines(stdin) */ #include #include #include "config.h" %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput yylineno reentrant %option warn WORD [[:alpha:]]+ DIGIT [[:digit:]] %% /* The goal here is to test the yylineno processing by: - providing some rules than CAN match newlines and other rules that can NOT match newlines, - matching several newlines in one rule, - directly modifying yylineno. */ "yylineno++" yylineno++; "yylineno--" yylineno--; [[:blank:]]+ {WORD} {DIGIT}+(\n{DIGIT}+)* \n . <> { printf("%d\n", yylineno); yyterminate(); } %% /* returns number of '\n' characters in input, plus one. This is what flex does, essentially. */ static int count_newlines (FILE* in) { int n=1,c; while ((c=fgetc(in)) != EOF) if( c == '\n') n++; return n; } int main ( int argc, char** argv ); int main (int argc, char **argv) { (void)argv; if( argc > 1 ) printf("%d\n", count_newlines(stdin)); else{ yyscan_t s; testlex_init(&s); testset_in(stdin,s); testset_out(stdout,s); testlex(s); testlex_destroy(s); } return 0; } flex-2.6.4/tests/bison_yylval_scanner.l0000664000175000017500000000434613002262300015141 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* The scanner expects to link to bison yylval . */ #include #include #include "bison_yylval_parser.h" #include "config.h" static char* STRDUP(char* s1); enum yesno_t { no=0, yes=1 }; #define YY_EXTRA_TYPE enum yesno_t %} %option 8bit prefix="test" %option reentrant bison-bridge %option header="bison_yylval_scanner.h" %option noyywrap nomain nounput noyy_top_state noyywrap nodefault noinput warn %option stack %x IN_TAG %x DISCARD_THRU_GT %% #define YY_USER_INIT yyextra = no; #define NEED_TAG_NAME yyextra { "str = STRDUP(yytext); return TEXT;} } { ">" { yy_pop_state( yyscanner ); return GT; } [[:alpha:]][[:alnum:]]* { if( NEED_TAG_NAME == yes){ NEED_TAG_NAME=no; yylval->str = STRDUP(yytext); return TAGNAME; } } .|\r|\n { } } { [^>]{1,512} { } ">" { yy_pop_state(yyscanner);} } %% static char* STRDUP(char* s1) { char* s2 = malloc(strlen(s1)+1); sprintf(s2,"%s",s1); return s2; } flex-2.6.4/tests/options.cn0000775000175000017500000000016013037547325012574 00000000000000#!/bin/sh # Test that flex handles the grouped noop options -c and -n properly. echo %% | $1 -cn -o /dev/null flex-2.6.4/tests/tableopts.am0000664000175000017500000003035313102435245013065 00000000000000tableopts_opt_nr_Ca_opt_SOURCES = tableopts.l4 tableopts_opt_nr-Ca.opt$(EXEEXT): tableopts_opt_nr-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr_Ce_opt_SOURCES = tableopts.l4 tableopts_opt_nr-Ce.opt$(EXEEXT): tableopts_opt_nr-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr_Cf_opt_SOURCES = tableopts.l4 tableopts_opt_nr-Cf.opt$(EXEEXT): tableopts_opt_nr-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr_CF_opt_SOURCES = tableopts.l4 tableopts_opt_nr-CF.opt$(EXEEXT): tableopts_opt_nr-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr_Cm_opt_SOURCES = tableopts.l4 tableopts_opt_nr-Cm.opt$(EXEEXT): tableopts_opt_nr-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr_Cem_opt_SOURCES = tableopts.l4 tableopts_opt_nr-Cem.opt$(EXEEXT): tableopts_opt_nr-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr_Cae_opt_SOURCES = tableopts.l4 tableopts_opt_nr-Cae.opt$(EXEEXT): tableopts_opt_nr-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr_Caef_opt_SOURCES = tableopts.l4 tableopts_opt_nr-Caef.opt$(EXEEXT): tableopts_opt_nr-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr_CaeF_opt_SOURCES = tableopts.l4 tableopts_opt_nr-CaeF.opt$(EXEEXT): tableopts_opt_nr-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr_Cam_opt_SOURCES = tableopts.l4 tableopts_opt_nr-Cam.opt$(EXEEXT): tableopts_opt_nr-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr_Caem_opt_SOURCES = tableopts.l4 tableopts_opt_nr-Caem.opt$(EXEEXT): tableopts_opt_nr-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r_Ca_opt_SOURCES = tableopts.l4 tableopts_opt_r-Ca.opt$(EXEEXT): tableopts_opt_r-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r_Ce_opt_SOURCES = tableopts.l4 tableopts_opt_r-Ce.opt$(EXEEXT): tableopts_opt_r-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r_Cf_opt_SOURCES = tableopts.l4 tableopts_opt_r-Cf.opt$(EXEEXT): tableopts_opt_r-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r_CF_opt_SOURCES = tableopts.l4 tableopts_opt_r-CF.opt$(EXEEXT): tableopts_opt_r-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r_Cm_opt_SOURCES = tableopts.l4 tableopts_opt_r-Cm.opt$(EXEEXT): tableopts_opt_r-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r_Cem_opt_SOURCES = tableopts.l4 tableopts_opt_r-Cem.opt$(EXEEXT): tableopts_opt_r-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r_Cae_opt_SOURCES = tableopts.l4 tableopts_opt_r-Cae.opt$(EXEEXT): tableopts_opt_r-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r_Caef_opt_SOURCES = tableopts.l4 tableopts_opt_r-Caef.opt$(EXEEXT): tableopts_opt_r-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r_CaeF_opt_SOURCES = tableopts.l4 tableopts_opt_r-CaeF.opt$(EXEEXT): tableopts_opt_r-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r_Cam_opt_SOURCES = tableopts.l4 tableopts_opt_r-Cam.opt$(EXEEXT): tableopts_opt_r-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r_Caem_opt_SOURCES = tableopts.l4 tableopts_opt_r-Caem.opt$(EXEEXT): tableopts_opt_r-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr_Ca_ser_SOURCES = tableopts.l4 tableopts_ser_nr-Ca.ser$(EXEEXT): tableopts_ser_nr-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr_Ce_ser_SOURCES = tableopts.l4 tableopts_ser_nr-Ce.ser$(EXEEXT): tableopts_ser_nr-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr_Cf_ser_SOURCES = tableopts.l4 tableopts_ser_nr-Cf.ser$(EXEEXT): tableopts_ser_nr-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr_CF_ser_SOURCES = tableopts.l4 tableopts_ser_nr-CF.ser$(EXEEXT): tableopts_ser_nr-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr_Cm_ser_SOURCES = tableopts.l4 tableopts_ser_nr-Cm.ser$(EXEEXT): tableopts_ser_nr-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr_Cem_ser_SOURCES = tableopts.l4 tableopts_ser_nr-Cem.ser$(EXEEXT): tableopts_ser_nr-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr_Cae_ser_SOURCES = tableopts.l4 tableopts_ser_nr-Cae.ser$(EXEEXT): tableopts_ser_nr-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr_Caef_ser_SOURCES = tableopts.l4 tableopts_ser_nr-Caef.ser$(EXEEXT): tableopts_ser_nr-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr_CaeF_ser_SOURCES = tableopts.l4 tableopts_ser_nr-CaeF.ser$(EXEEXT): tableopts_ser_nr-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr_Cam_ser_SOURCES = tableopts.l4 tableopts_ser_nr-Cam.ser$(EXEEXT): tableopts_ser_nr-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr_Caem_ser_SOURCES = tableopts.l4 tableopts_ser_nr-Caem.ser$(EXEEXT): tableopts_ser_nr-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r_Ca_ser_SOURCES = tableopts.l4 tableopts_ser_r-Ca.ser$(EXEEXT): tableopts_ser_r-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r_Ce_ser_SOURCES = tableopts.l4 tableopts_ser_r-Ce.ser$(EXEEXT): tableopts_ser_r-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r_Cf_ser_SOURCES = tableopts.l4 tableopts_ser_r-Cf.ser$(EXEEXT): tableopts_ser_r-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r_CF_ser_SOURCES = tableopts.l4 tableopts_ser_r-CF.ser$(EXEEXT): tableopts_ser_r-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r_Cm_ser_SOURCES = tableopts.l4 tableopts_ser_r-Cm.ser$(EXEEXT): tableopts_ser_r-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r_Cem_ser_SOURCES = tableopts.l4 tableopts_ser_r-Cem.ser$(EXEEXT): tableopts_ser_r-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r_Cae_ser_SOURCES = tableopts.l4 tableopts_ser_r-Cae.ser$(EXEEXT): tableopts_ser_r-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r_Caef_ser_SOURCES = tableopts.l4 tableopts_ser_r-Caef.ser$(EXEEXT): tableopts_ser_r-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r_CaeF_ser_SOURCES = tableopts.l4 tableopts_ser_r-CaeF.ser$(EXEEXT): tableopts_ser_r-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r_Cam_ser_SOURCES = tableopts.l4 tableopts_ser_r-Cam.ser$(EXEEXT): tableopts_ser_r-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r_Caem_ser_SOURCES = tableopts.l4 tableopts_ser_r-Caem.ser$(EXEEXT): tableopts_ser_r-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr_Ca_ver_SOURCES = tableopts.l4 tableopts_ver_nr-Ca.ver$(EXEEXT): tableopts_ver_nr-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr_Ce_ver_SOURCES = tableopts.l4 tableopts_ver_nr-Ce.ver$(EXEEXT): tableopts_ver_nr-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr_Cf_ver_SOURCES = tableopts.l4 tableopts_ver_nr-Cf.ver$(EXEEXT): tableopts_ver_nr-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr_CF_ver_SOURCES = tableopts.l4 tableopts_ver_nr-CF.ver$(EXEEXT): tableopts_ver_nr-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr_Cm_ver_SOURCES = tableopts.l4 tableopts_ver_nr-Cm.ver$(EXEEXT): tableopts_ver_nr-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr_Cem_ver_SOURCES = tableopts.l4 tableopts_ver_nr-Cem.ver$(EXEEXT): tableopts_ver_nr-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr_Cae_ver_SOURCES = tableopts.l4 tableopts_ver_nr-Cae.ver$(EXEEXT): tableopts_ver_nr-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr_Caef_ver_SOURCES = tableopts.l4 tableopts_ver_nr-Caef.ver$(EXEEXT): tableopts_ver_nr-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr_CaeF_ver_SOURCES = tableopts.l4 tableopts_ver_nr-CaeF.ver$(EXEEXT): tableopts_ver_nr-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr_Cam_ver_SOURCES = tableopts.l4 tableopts_ver_nr-Cam.ver$(EXEEXT): tableopts_ver_nr-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr_Caem_ver_SOURCES = tableopts.l4 tableopts_ver_nr-Caem.ver$(EXEEXT): tableopts_ver_nr-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r_Ca_ver_SOURCES = tableopts.l4 tableopts_ver_r-Ca.ver$(EXEEXT): tableopts_ver_r-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r_Ce_ver_SOURCES = tableopts.l4 tableopts_ver_r-Ce.ver$(EXEEXT): tableopts_ver_r-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r_Cf_ver_SOURCES = tableopts.l4 tableopts_ver_r-Cf.ver$(EXEEXT): tableopts_ver_r-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r_CF_ver_SOURCES = tableopts.l4 tableopts_ver_r-CF.ver$(EXEEXT): tableopts_ver_r-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r_Cm_ver_SOURCES = tableopts.l4 tableopts_ver_r-Cm.ver$(EXEEXT): tableopts_ver_r-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r_Cem_ver_SOURCES = tableopts.l4 tableopts_ver_r-Cem.ver$(EXEEXT): tableopts_ver_r-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r_Cae_ver_SOURCES = tableopts.l4 tableopts_ver_r-Cae.ver$(EXEEXT): tableopts_ver_r-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r_Caef_ver_SOURCES = tableopts.l4 tableopts_ver_r-Caef.ver$(EXEEXT): tableopts_ver_r-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r_CaeF_ver_SOURCES = tableopts.l4 tableopts_ver_r-CaeF.ver$(EXEEXT): tableopts_ver_r-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r_Cam_ver_SOURCES = tableopts.l4 tableopts_ver_r-Cam.ver$(EXEEXT): tableopts_ver_r-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r_Caem_ver_SOURCES = tableopts.l4 tableopts_ver_r-Caem.ver$(EXEEXT): tableopts_ver_r-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< TABLEOPTS_TESTS = tableopts_opt_nr-Ca.opt tableopts_opt_nr-Ce.opt tableopts_opt_nr-Cf.opt tableopts_opt_nr-CF.opt tableopts_opt_nr-Cm.opt tableopts_opt_nr-Cem.opt tableopts_opt_nr-Cae.opt tableopts_opt_nr-Caef.opt tableopts_opt_nr-CaeF.opt tableopts_opt_nr-Cam.opt tableopts_opt_nr-Caem.opt tableopts_opt_r-Ca.opt tableopts_opt_r-Ce.opt tableopts_opt_r-Cf.opt tableopts_opt_r-CF.opt tableopts_opt_r-Cm.opt tableopts_opt_r-Cem.opt tableopts_opt_r-Cae.opt tableopts_opt_r-Caef.opt tableopts_opt_r-CaeF.opt tableopts_opt_r-Cam.opt tableopts_opt_r-Caem.opt tableopts_ser_nr-Ca.ser tableopts_ser_nr-Ce.ser tableopts_ser_nr-Cf.ser tableopts_ser_nr-CF.ser tableopts_ser_nr-Cm.ser tableopts_ser_nr-Cem.ser tableopts_ser_nr-Cae.ser tableopts_ser_nr-Caef.ser tableopts_ser_nr-CaeF.ser tableopts_ser_nr-Cam.ser tableopts_ser_nr-Caem.ser tableopts_ser_r-Ca.ser tableopts_ser_r-Ce.ser tableopts_ser_r-Cf.ser tableopts_ser_r-CF.ser tableopts_ser_r-Cm.ser tableopts_ser_r-Cem.ser tableopts_ser_r-Cae.ser tableopts_ser_r-Caef.ser tableopts_ser_r-CaeF.ser tableopts_ser_r-Cam.ser tableopts_ser_r-Caem.ser tableopts_ver_nr-Ca.ver tableopts_ver_nr-Ce.ver tableopts_ver_nr-Cf.ver tableopts_ver_nr-CF.ver tableopts_ver_nr-Cm.ver tableopts_ver_nr-Cem.ver tableopts_ver_nr-Cae.ver tableopts_ver_nr-Caef.ver tableopts_ver_nr-CaeF.ver tableopts_ver_nr-Cam.ver tableopts_ver_nr-Caem.ver tableopts_ver_r-Ca.ver tableopts_ver_r-Ce.ver tableopts_ver_r-Cf.ver tableopts_ver_r-CF.ver tableopts_ver_r-Cm.ver tableopts_ver_r-Cem.ver tableopts_ver_r-Cae.ver tableopts_ver_r-Caef.ver tableopts_ver_r-CaeF.ver tableopts_ver_r-Cam.ver tableopts_ver_r-Caem.ver tableopts_tables = tableopts_ser_nr-Ca.ser.tables tableopts_ser_nr-Ce.ser.tables tableopts_ser_nr-Cf.ser.tables tableopts_ser_nr-CF.ser.tables tableopts_ser_nr-Cm.ser.tables tableopts_ser_nr-Cem.ser.tables tableopts_ser_nr-Cae.ser.tables tableopts_ser_nr-Caef.ser.tables tableopts_ser_nr-CaeF.ser.tables tableopts_ser_nr-Cam.ser.tables tableopts_ser_nr-Caem.ser.tables tableopts_ser_r-Ca.ser.tables tableopts_ser_r-Ce.ser.tables tableopts_ser_r-Cf.ser.tables tableopts_ser_r-CF.ser.tables tableopts_ser_r-Cm.ser.tables tableopts_ser_r-Cem.ser.tables tableopts_ser_r-Cae.ser.tables tableopts_ser_r-Caef.ser.tables tableopts_ser_r-CaeF.ser.tables tableopts_ser_r-Cam.ser.tables tableopts_ser_r-Caem.ser.tables tableopts_ver_nr-Ca.ver.tables tableopts_ver_nr-Ce.ver.tables tableopts_ver_nr-Cf.ver.tables tableopts_ver_nr-CF.ver.tables tableopts_ver_nr-Cm.ver.tables tableopts_ver_nr-Cem.ver.tables tableopts_ver_nr-Cae.ver.tables tableopts_ver_nr-Caef.ver.tables tableopts_ver_nr-CaeF.ver.tables tableopts_ver_nr-Cam.ver.tables tableopts_ver_nr-Caem.ver.tables tableopts_ver_r-Ca.ver.tables tableopts_ver_r-Ce.ver.tables tableopts_ver_r-Cf.ver.tables tableopts_ver_r-CF.ver.tables tableopts_ver_r-Cm.ver.tables tableopts_ver_r-Cem.ver.tables tableopts_ver_r-Cae.ver.tables tableopts_ver_r-Caef.ver.tables tableopts_ver_r-CaeF.ver.tables tableopts_ver_r-Cam.ver.tables tableopts_ver_r-Caem.ver.tables flex-2.6.4/tests/testwrapper-direct.sh0000775000175000017500000000062013037547325014744 00000000000000#!/bin/sh set -vx set -euvx # testwrapper-direct.sh: run some specialized flex tests that care where # they're run from. while getopts :b:s: OPTION ; do case $OPTION in b) BINARY_DIR=$OPTARG ;; s) SOURCE_DIR=$OPTARG ;; esac done shift $(($OPTIND-1)) TESTNAME=$1 INPUT_NAME=`basename "${TESTNAME%.exe}"`.txt cd ${SOURCE_DIR} && ${BINARY_DIR}/${TESTNAME} ${INPUT_NAME} flex-2.6.4/tests/debug_nr.txt0000664000175000017500000000013013002262300013052 00000000000000Any input will do for this test. We are only testing if it actually runs in debug mode. flex-2.6.4/tests/mem_r.l0000664000175000017500000001125213002262300012007 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". * The whole idea is to cause memory realloc by * 1. pushing a lot on the condition stack, and * 2. eating input greater than YY_BUF_SIZE */ #include #include #include "config.h" /* Insanely small read buffer. This pretty much guarantees at least one realloc. */ #ifdef YY_BUF_SIZE #undef YY_BUF_SIZE #endif #define YY_BUF_SIZE 8 %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput noyy_top_state %option warn stack nodefault reentrant %option noyyalloc noyyrealloc noyyfree %x parens %% { "(" { printf("yy_push_state(parens)\n"); yy_push_state(parens,yyscanner); } len=[0-9]+ { printf("About read token where %s\n",yytext); } 0+ { } .|\n { } } { "(" { printf("yy_push_state(parens)\n"); yy_push_state(parens,yyscanner); } ")" { printf("yy_pop_state()\n");yy_pop_state(yyscanner);} [^()\n]+ { } .|\n { } } %% /* total memory allocated */ static size_t total_mem=0; /* track the amount of memory for ptr. */ struct memsz { void* p; size_t sz; }; static struct memsz * ptrs=0; /* Array of pairs. */ static int nptrs=0; /* Number of pairs in array. */ static int arrsz=0; /* Capacity of array. */ static void dump_mem(FILE* fp){ int i; fprintf(fp,"\tptrs[%d] = {", nptrs); for (i=0; i < arrsz; i++) fprintf(fp," {%#lx,%ld},", (long)ptrs[i].p, (long)ptrs[i].sz); fprintf(fp,"}\n"); } void * testalloc(yy_size_t n , void* yyscanner) { (void)yyscanner; void * p; int i; total_mem += n; p = malloc(n); if( nptrs >= arrsz){ /* increase array size by 1 */ arrsz++; ptrs = realloc(ptrs, (size_t) arrsz * sizeof(struct memsz)); ptrs[nptrs].p = 0; ptrs[nptrs].sz = 0; } /* find a null slot */ for(i=0; i < arrsz ; i++) if (ptrs[i].p == 0) { ptrs[i].p = p; ptrs[i].sz = n; } nptrs++; printf("yyflex_alloc(%8ld) total=%8ld return=%#10lx\n",(long)n,(long)total_mem,(long)p); dump_mem(stdout); return p; } void * testrealloc(void* p, yy_size_t n , void* yyscanner) { (void)yyscanner; int i; for (i=0; i < arrsz; i++) if ( ptrs[i].p == p){ total_mem -= ptrs[i].sz; total_mem += n; ptrs[i].p = realloc(p, n); ptrs[i].sz = n; printf("yyflex_realloc(%#10lx,%8ld) total=%8ld return=%8lx\n", (long)p,(long)n,(long)total_mem,(long)ptrs[i].p); dump_mem(stdout); return ptrs[i].p; } fprintf(stderr,"ERROR: yyflex_realloc could not locate pointer %#lx.\n",(long)p); dump_mem(stdout); exit(1); } void testfree(void* p , void* yyscanner) { (void)yyscanner; int i; for (i=0; i < arrsz; i++) if ( ptrs[i].p == p){ total_mem -= ptrs[i].sz; free(p); ptrs[i].p = 0; ptrs[i].sz = 0; nptrs--; printf("yyflex_free(%#10lx) total=%8ld\n",(long)p,(long)total_mem); dump_mem(stdout); return; } fprintf(stderr,"ERROR: yyflex_free could not locate pointer %#lx.\n",(long)p); dump_mem(stdout); exit(1); } int main(void); int main (void) { yyscan_t scanner; arrsz = 1; ptrs = calloc(1, sizeof(struct memsz)); nptrs = 0; testlex_init(&scanner); testset_in(stdin,scanner); testset_out(stdout,scanner); testlex(scanner); testlex_destroy(scanner); free(ptrs); if ( nptrs > 0 || total_mem > 0){ fprintf(stderr,"Oops. Looks like a memory leak: nptrs=%d, unfreed memory=%ld\n",nptrs,(long)total_mem); exit(1); } printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/include_by_push.direct_3.txt0000664000175000017500000000012213002262300016135 00000000000000Beginning of "include_by_push.direct_3.txt" End of "include_by_push.direct_3.txt" flex-2.6.4/tests/bison_yylval.txt0000664000175000017500000000010513002262300014001 00000000000000 This is a test flex-2.6.4/tests/cxx_multiple_scanners_main.cc0000664000175000017500000000306213002262300016457 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #include #undef yyFlexLexer #define yyFlexLexer S1_FlexLexer #include #undef yyFlexLexer #define yyFlexLexer S2_FlexLexer #include int main ( int argc, char** argv ) { int S1_ok=1, S2_ok=1; S1_FlexLexer* S1 = new S1_FlexLexer; S2_FlexLexer* S2 = new S2_FlexLexer; // scan simultaneously. while(S1_ok || S2_ok) { if (S1_ok) S1_ok = S1->yylex(); if (S2_ok) S2_ok = S2->yylex(); } printf("TEST RETURNING OK.\n"); delete S1; delete S2; return 0; } /* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ flex-2.6.4/tests/header_r_scanner.l0000664000175000017500000000242713002262300014176 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* Build "scanner.c". The scanner is not important. This test is really about compilation. See "main.c". */ #include #include #include "config.h" %} %option reentrant %option 8bit prefix="test" header="header_r_scanner.h" %option nounput nomain noyywrap noinput %option warn %% .|\n { } %% flex-2.6.4/tests/reject.txt0000664000175000017500000000006613002262300012551 000000000000000000 foo 1111 foo 0000 bar 0000 foo 1111 foo 0000 bar flex-2.6.4/tests/posixly_correct.l0000664000175000017500000000375613002262300014152 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* The goal of this test is to verify that we are getting the counter-intuitive * posix behavior of the repeat operator `{}'. * * ab{3} - In traditional flex, this matches "abbb". * In posix, this matches "ababab". */ #include #include #include "config.h" #define NUM_TESTS 1 char * tests[NUM_TESTS] = { "ababab"}; int main(void); int tests_ok[NUM_TESTS] = { 0 }; %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn %% ab{3} tests_ok[0] = 1; return 0; .|\n return 0; %% int main (void) { YY_BUFFER_STATE state; int i; yyin = stdin; yyout = stdout; /* Run the tests */ for (i=0; i < NUM_TESTS; i++){ printf("Testing: test_scan_string(%s): ", tests[i]); state = test_scan_string(tests[i]); testlex(); yy_delete_buffer(state); printf("... %s\n", tests_ok[i] ? "OK" : "FAILED"); } for (i=0; i < NUM_TESTS; i++) if (!tests_ok[i]) exit(1); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/quotes.txt0000664000175000017500000000006613002262300012615 000000000000000000 foo 1111 foo 0000 bar 0000 foo 1111 foo 0000 bar flex-2.6.4/tests/array_nr.l0000664000175000017500000000251213002262300012524 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". */ #include #include #include "config.h" /*#include "parser.h" */ %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn array %% .|\n { } %% int main (void); int main (void) { yyin = stdin; yyout = stdout; yylex(); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/prefix_r.txt0000664000175000017500000000001513002262300013105 00000000000000Dummy input. flex-2.6.4/tests/multiple_scanners_r_2.l0000664000175000017500000000271513002262300015205 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner-2.c" and "scanner-2.h". */ #include #include #include "config.h" %} %option header="multiple_scanners_r_2.h" %option 8bit prefix="S2_" %option nounput nomain noyywrap noinput %option warn stack reentrant noyy_top_state %x OFF %x ON %% { on yy_push_state(ON, yyscanner); return 3; off yy_push_state(OFF, yyscanner); return 4; .|\n return 5; } .|\n yy_pop_state(yyscanner); return 6; .|\n yy_pop_state(yyscanner); return 7; %% flex-2.6.4/tests/quotes.l0000664000175000017500000001017513007216657012256 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ /* The point of this test is to be sure our M4 madness does not * interfere with user code. I particular, we are looking * for instances of M4 quotes, [[ and ]], in here to make it through the flex * machinery unscathed. */ /* sect 1 [ 1 ] TEST_XXX */ /* sect 1 [[ 2 ]] TEST_XXX */ /* sect 1 [[[ 3 ]]] TEST_XXX */ /* sect 1 [[[[ 4 ]]]] TEST_XXX */ /* sect 1 ]] unmatched [[ TEST_XXX */ %{ /* A template scanner file to build "scanner.c". */ #include #include #include "config.h" #include /*#include "parser.h" */ /* sect 1 block [ 1 ] TEST_XXX */ /* sect 1 block [[ 2 ]] TEST_XXX */ /* sect 1 block [[[ 3 ]]] TEST_XXX */ /* sect 1 block [[[[ 4 ]]]] TEST_XXX */ /* sect 1 block ]] unmatched [[ TEST_XXX */ static int a[1] = {0}; static int b[1] = {0}; static int c[1] = {0}; static int foo (int i){ return a[b[c[i]]]; /* sect 1 code TEST_XXX */ } %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn %% /* indented code [ 1 ] */ /* indented code [[ 2 ]] */ /* indented code [[[ 3 ]]] */ /* indented code [[[[ 4 ]]]] */ /* indented code ]] unmatched [[ */ %{ // non-indented code [ 1 ] // non-indented code [[ 2 ]] // non-indented code [[[ 3 ]]] // non-indented code [[[[ 4 ]]]] %} a /* action comment [ 1 ] */ ; b /* action comment [[ 2 ]] */ ; c /* action comment [[[ 3 ]]] */ ; d /* action comment [[[[ 4 ]]]] */ ; e /* action comment ]] unmatched [[ */ ; f return 1+foo(a[b[c[0]]]); .|\n { #if 0 action code [ 1 ] TEST_XXX action code [[ 2 ]] TEST_XXX action code [[[ 3 ]]] TEST_XXX action code [[[[ 4 ]]]] TEST_XXX action code ]] unmatched [[ TEST_XXX #endif /* action block [ 1 ] TEST_XXX */ /* action block [[ 2 ]] TEST_XXX */ /* action block [[[ 3 ]]] TEST_XXX */ /* action block [[[[ 4 ]]]] TEST_XXX */ /* action block ]] unmatched [[ TEST_XXX */ assert(!strcmp("[[ 2 ]]", "[""[ 2 ]""]")); assert(!strcmp("[[[ 3 ]]]", "[""[""[ 3 ]""]""]")); assert(!strcmp("[[[[ 4 ]]]]", "[""[""[""[ 4 ]""]""]""]")); assert(!strcmp("]] unmatched [[", "]""] unmatched [""[")); assert(!strcmp("]]m4_define(alpha, beta)[[", "]""]m4_""define(alpha, beta)[""[")); return 1+foo(a[b[c[0]]]); /* TEST_XXX */ } %% /* sect 3 [ 1 ] TEST_XXX */ /* sect 3 [[ 2 ]] TEST_XXX */ /* sect 3 [[[ 3 ]]] TEST_XXX */ /* sect 3 [[[[ 4 ]]]] TEST_XXX */ /* sect 3 ]] unmatched [[ TEST_XXX */ static int bar (int i){ return c[b[a[i]]]; /* sect 3 code TEST_XXX */ } int main(void); #define CONCAT_IDENTS(a, b) a##b int main (void) { /* m4_m4exit(100) */ FILE *M4_YY_NOT_IN_HEADER = stdin; yyin = CONCAT_IDENTS(M4_, YY_NOT_IN_HEADER); yyout = stdout; while (yylex()) ; assert(!strcmp("YY_G( alpha)", "Y""Y_G( alpha)")); printf("TEST RETURNING OK.\n"); return bar(0); } flex-2.6.4/tests/tableopts.txt0000664000175000017500000000010413002262300013263 000000000000000000 foo 1111 foo 0000 bar foobar 0000 foo 1111 foo 0000 bar foobar flex-2.6.4/tests/basic_r.l0000664000175000017500000000353713002262300012321 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ /* A reentrant scanner. This file will not compile under flex version <= 2.5.4. Sample Input: # this is a comment foo = true bar = "string value" integer = 43 */ %{ #include "config.h" %} %option prefix="test" %option nounput noyywrap noyylineno warn nodefault noinput %option reentrant IDENT [[:alnum:]_-] WS [[:blank:]] %% ^{IDENT}+{WS}*={WS}*(true|false){WS}*\r?\n { return 100;} ^{IDENT}+{WS}*={WS}*\"[^\"\n\r]*\"{WS}*\r?\n { return 101;} ^{IDENT}+{WS}*={WS}*[[:digit:]]+{WS}*\r?\n { return 102;} ^{WS}*#.*\r?\n { } ^{WS}*\r?\n { } .|\n { fprintf(stderr,"Invalid line.\n"); exit(-1);} %% int main(void); int main (void) { yyscan_t lexer; testlex_init( &lexer ); testset_out ( stdout,lexer); testset_in ( stdin, lexer); while( testlex(lexer) ) { } testlex_destroy( lexer ); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/bison_yylloc_main.c0000664000175000017500000000246713002262300014420 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #include "bison_yylloc_parser.h" #include "bison_yylloc_scanner.h" int main ( int argc, char** argv ) { yyscan_t scanner; (void)argc; (void)argv; /*yydebug =1;*/ testlex_init ( &scanner ); testset_in(stdin,scanner); testparse ( scanner ); testlex_destroy ( scanner ); return 0; } /* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ flex-2.6.4/tests/bison_yylval_parser.y0000664000175000017500000000407313002262300015016 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ /* Accepts html-like input. How to compile: bison --defines --output-file="parser.c" --name-prefix="test" parser.y */ %parse-param { void* scanner } %lex-param { void* scanner } %{ #include #include #include #include "config.h" #include "bison_yylval_parser.h" #include "bison_yylval_scanner.h" #define YYERROR_VERBOSE 1 int yyerror(void* scanner, const char* msg); /* A dummy function. A check against seg-faults in yylval->str. */ static int process_text(char* s) { int total =0; while(*s) { total += (int) *s; ++s; } return total; } %} %pure-parser %union { long unused; char * str; } %token TAGNAME TEXT %token LT %token GT %token LTSLASH " #include #include "config.h" %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn debug reentrant %% .+ { } \n { } %% int main(void); int main (void) { yyscan_t lexer; testlex_init( &lexer ); testset_out ( stdout,lexer); testset_in ( stdin, lexer); /* Just see if the next line compiles. */ testset_debug (testget_debug(lexer), lexer); while( testlex(lexer) ) { } testlex_destroy( lexer ); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/bison_yylloc_scanner.l0000664000175000017500000000345013002262300015127 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* The scanner expects to link to bison yylval . */ #include #include #include "bison_yylloc_parser.h" #include "config.h" static char* STRDUP(char* s1); #define YY_EXTRA_TYPE int %} %option 8bit prefix="test" %option reentrant bison-bridge bison-locations yylineno %option header="bison_yylloc_scanner.h" %option nomain nounput noyy_top_state noyywrap nodefault noinput warn %% if ( !yyextra) yyextra = 1; ^[[:digit:]]+ { yylval->lineno = yyextra++; yylloc->first_line = (int)strtol(yytext,NULL,10); return LINENO; } ":" { return COLON; } " " { return SPACE; } "=" { return EQUAL; } [[:alnum:]_]+ { yylval->str = STRDUP(yytext); return IDENT;} \r|\n { } . { yyterminate();} %% static char* STRDUP(char* s1) { char* s2 = malloc(strlen(s1)+1); sprintf(s2,"%s",s1); return s2; } flex-2.6.4/tests/header_r.txt0000664000175000017500000000007513002262300013046 00000000000000Any input is ok for this scanner. We only care if it links. flex-2.6.4/tests/top.txt0000664000175000017500000000007513002262300012077 00000000000000Any input is ok for this scanner. We only care if it links. flex-2.6.4/tests/rescan_nr.direct.l0000664000175000017500000000335513002262300014140 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". */ #include #include %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn stack never-interactive %x STATE_1 %% { 0 yy_push_state (STATE_1); .|\n return 1; } { 1 yy_pop_state(); .|\n return yy_top_state() + 1; } %% int main (int argc, char* const argv[]) { FILE* fp; int i; (void)argc; if ((fp = fopen(argv[1],"r")) == NULL){ perror("Failed to open input file."); return 1; } testset_out ( stdout); for (i=0; i < 4; ++i){ rewind(fp); testset_in ( fp); while( testlex() ) ; testlex_destroy(); } printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/debug_r.txt0000664000175000017500000000013013002262300012674 00000000000000Any input will do for this test. We are only testing if it actually runs in debug mode. flex-2.6.4/tests/top_main.c0000664000175000017500000000361513002262300012511 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #include #include "top.h" /* The scanner itself is not important here. * We simply try to use all the functions that are exported in the * header, to see if we get any compiler warnings. */ int main ( int argc, char** argv ) { (void)argc; (void)argv; yyscan_t scanner; FILE *fp; char * extra = "EXTRA"; testlex_init(&scanner); testset_in(stdin,scanner); testset_out(stdout,scanner); testset_extra(extra,scanner); fp = testget_in(scanner); assert(fp == stdin); fp = testget_out(scanner); assert(fp == stdout); while(testlex(scanner)) { char * text; int line; line = testget_lineno(scanner); text = testget_text(scanner); if( (char*)testget_extra(scanner) != extra) break; if ( !text || line < 0) continue; } testlex_destroy(scanner); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/cxx_restart.txt0000664000175000017500000000006613002262300013643 000000000000000000 foo 1111 foo 0000 bar 0000 foo 1111 foo 0000 bar flex-2.6.4/tests/extended.l0000664000175000017500000000341513002262300012512 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* This test is for correctness of extended (?...) patterns. */ #include #include #include "config.h" %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn %% /* Output should match the input. */ abc(?# Single Line Comment )def ECHO; ghi(?# multi-line comment )jkl ECHO; mno(?# multi-line // comment with ## ~~!@#$ %^&*(@-_+=\|,.<>/ ?: ; punctuation )pqr ECHO; (?# Start of a rule.)stu ECHO; vwxyz(?#End of a rule.) ECHO; A(?x: B /* comment */ C D) ECHO; \n ECHO; %% int main(void); int main (void) { yyin = stdin; yyout = stdout; yylex(); //printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/prefix_r.l0000664000175000017500000000472713002262300012537 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* Builds "scanner.c". */ /* The scanner itself is a no-op. A successful compilation is all we want. */ #include #include #include "config.h" %} %option reentrant %option 8bit prefix="FOO" %option nounput nomain noyywrap noinput %option warn %% .|\n|\r { /* Compile, but do not execute the following code. */ if( 0 ) { FOO_create_buffer( (FILE*)0, 0, yyscanner); FOO_delete_buffer( (YY_BUFFER_STATE)0, yyscanner); FOO_flush_buffer( (YY_BUFFER_STATE)0, yyscanner); FOO_init_buffer( (YY_BUFFER_STATE)0, (FILE*)0, yyscanner); FOO_load_buffer_state( yyscanner); FOO_scan_buffer( (char*)0, (yy_size_t)0, yyscanner); FOO_scan_bytes( (yyconst char*)0, 0, yyscanner); FOO_scan_string( (yyconst char*)0, yyscanner); FOO_switch_to_buffer( (YY_BUFFER_STATE)0, yyscanner); FOOrestart( (FILE*)0, (yyscan_t )0); FOOget_extra( (yyscan_t )0 ); FOOget_in( (yyscan_t )0 ); FOOget_leng( (yyscan_t )0 ); FOOget_out( (yyscan_t )0 ); FOOget_text( (yyscan_t )0 ); FOOlex( (yyscan_t )0 ); FOOlex_destroy( (yyscan_t )0 ); FOOlex_init( (yyscan_t *)0 ); FOOset_extra( (void *)0, (yyscan_t )0 ); FOOset_in( (FILE*)0, (yyscan_t )0 ); FOOset_out( (FILE*)0, (yyscan_t )0 ); } } %% int main(void); int main (void) { yyscan_t scanner; FOOlex_init( &scanner); FOOlex( scanner); FOOlex_destroy( scanner); printf( "TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/reject.l40000664000175000017500000000410313002262300012245 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ #include #include #include "config.h" %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn reject %% . { REJECT; } .|\n ; %% int main ( int argc, char** argv ) { FILE* fp = NULL; void *yyscanner=0; M4_YY_DECL_GUTS_VAR(); #ifdef TEST_IS_REENTRANT testlex_init(&yyscanner); #else (void)yyscanner; #endif #ifdef TEST_HAS_TABLES_EXTERNAL if((fp = fopen(argv[1],"rb"))== NULL) YY_FATAL_ERROR("could not open tables file for reading"); if(yytables_fload(fp M4_YY_CALL_LAST_ARG) < 0) YY_FATAL_ERROR("yytables_fload returned < 0"); if(M4_YY_TABLES_VERIFY) exit(0); #endif if(argc > 2){ if((fp = fopen(argv[2],"r"))== NULL) YY_FATAL_ERROR("could not open input file for reading"); yyin = fp; } while(testlex(M4_YY_CALL_ONLY_ARG) != 0) ; #ifdef TEST_HAS_TABLES_EXTERNAL testtables_destroy(M4_YY_CALL_ONLY_ARG); #endif testlex_destroy(M4_YY_CALL_ONLY_ARG); if(argc < 0) /* silence the compiler */ yyscanner = (void*)fp; return 0; } flex-2.6.4/tests/include_by_reentrant.direct.txt0000664000175000017500000000020713002262300016742 00000000000000Beginning of "include_by_reentrant.direct.txt". #include End of "include_by_reentrant.direct.txt". flex-2.6.4/tests/ccl.l0000664000175000017500000000740213002262300011453 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". */ #include #include #include "config.h" /*#include "parser.h" */ #define err_abort() do{printf("ERROR: flex line %d. input line %d.\n", __LINE__, yylineno); abort();} while(0) #define a_ok() do{printf("OK: flex line %d. input line %d.\n", __LINE__, yylineno); return 1;}while(0) %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn %% ^"^alpha:"[[:^alpha:]]+@alpha@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"^digit:"[[:^digit:]]+@digit@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"^alnum:"[[:^alnum:]]+@alnum@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"^upper:"[[:^upper:]]+@upper@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"^lower:"[[:^lower:]]+@lower@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"^space:"[[:^space:]]+@space@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"^blank:"[[:^blank:]]+@blank@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"^punct:"[[:^punct:]]+@punct@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"^cntrl:"[[:^cntrl:]]+@cntrl@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"^xdigit:"[[:^xdigit:]]+@xdigit@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"a-d:"[[:alpha:]]{-}[[:digit:]]+@a-d@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"l-xyz:"([[:lower:]]{-}[xyz])+@l-xyz@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"abcd-bc:"([abcd]{-}[bc])+@abcd-bc@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"abcde-b-c:"([abcde]{-}[b]{-}[c])+@abcde-b-c@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"^XY-^XYZ:"([^XY]{-}[^XYZ])+@^XY-^XYZ@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"a+d:"([[:alpha:]]{+}[[:digit:]])+"@a+d@"\n a_ok(); ^"a-u+Q:"([[:alpha:]]{-}[[:upper:]]{+}[Q])+"@a-u+Q@"\n a_ok(); ^"ia:"(?i:a)+@ia@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"iabc:"(?i:abc)+@iabc@\n printf("OK: %s", yytext); ++yylineno; return 1; ^"ia-c:"(?i:[a-c]+)@ia-c@\n printf("OK: %s", yytext); ++yylineno; return 1; /* We don't want this one to match. */ ^"check-a:"(?i:(?-i:A))@\n err_abort(); ^"check-a:"(?i:(?-i:(?i:A)))@\n printf("OK: %s", yytext); ++yylineno; return 1; /* We don't want this one to match. */ ^"dot-all-1:"(?-s:XXX.*)@dot-all-1@\n err_abort(); ^"dot-all-1:"(?s:XXX.*)@dot-all-1@\n a_ok(); ^"x1:"(?x: a | b )+@x1@\n a_ok(); ^"x2:"(?x: a | (?# Comment ) b )+@x2@\n a_ok(); .|\n { err_abort(); } %% int main(void); int main (void) { yyin = stdin; yyout = stdout; while (yylex()) ; printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/tableopts.l40000664000175000017500000000420213002262300012766 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". */ #include #include #include "config.h" %} %option 8bit %option nounput nomain noyywrap noinput %option warn yylineno %% foo|bar ; [[:digit:]]+ ; [[:blank:]]+ ; .|\n ; %% int main ( int argc, char** argv ) { FILE* fp = NULL; void *yyscanner=0; M4_YY_DECL_GUTS_VAR(); #ifdef TEST_IS_REENTRANT yylex_init(&yyscanner); #else (void)yyscanner; #endif #ifdef TEST_HAS_TABLES_EXTERNAL if((fp = fopen(argv[1],"rb"))== NULL) YY_FATAL_ERROR("could not open tables file for reading"); if(yytables_fload(fp M4_YY_CALL_LAST_ARG) < 0) YY_FATAL_ERROR("yytables_fload returned < 0"); if(M4_YY_TABLES_VERIFY) exit(0); #endif if(argc > 2){ if((fp = fopen(argv[2],"r"))== NULL) YY_FATAL_ERROR("could not open input file for reading"); yyin = fp; } while(yylex(M4_YY_CALL_ONLY_ARG) != 0) ; #ifdef TEST_HAS_TABLES_EXTERNAL yytables_destroy(M4_YY_CALL_ONLY_ARG); #endif yylex_destroy(M4_YY_CALL_ONLY_ARG); if(argc < 0) /* silence the compiler */ yyscanner = (void*)fp; return 0; } flex-2.6.4/tests/include_by_buffer.direct_3.txt0000664000175000017500000000012613002262300016433 00000000000000Beginning of "include_by_buffer.direct_3.txt" End of "include_by_buffer.direct_3.txt" flex-2.6.4/tests/lineno_trailing.l0000664000175000017500000000424113002262300014065 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". Run as: test-lineno-trailing # report flex's yylineno test-lineno-trailing 1 # report count_newlines(stdin) */ #include #include #include "config.h" %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput yylineno %option warn WORD [[:alpha:]]+ %% /* The goal here is to test the yylineno in the context of trailing-contexts. Using rules that have newlines in look-ahead. */ "Fixed_trailing:"/[\n]"test"[\n] {} "Var_trailing:"{WORD}/[\n] {} "Var_prefix_and_trailing:"{WORD}":"/(\n{WORD})* {} \n {} . {} <> { printf("%d\n", yylineno); yyterminate(); } %% /* returns number of '\n' characters in input, plus one. This is what flex does, essentially. */ static int count_newlines (FILE* in) { int n=1,c; while ((c=fgetc(in)) != EOF) if( c == '\n') n++; return n; } int main ( int, char**); int main ( int argc, char **argv ) { (void)argv; if( argc > 1 ) printf("%d\n", count_newlines(stdin)); else{ yyin = stdin; yyout = stdout; yylex(); } return 0; } flex-2.6.4/tests/bison_yylloc_parser.y0000664000175000017500000000447513002262300015017 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %parse-param { void* scanner } %lex-param { void* scanner } /* How to compile: bison --defines --output-file="bison_yylloc_parser.c" --name-prefix="test" parser.y */ %{ #include #include #include #include "config.h" #include "bison_yylloc_parser.h" #include "bison_yylloc_scanner.h" int yyerror(YYLTYPE *location, void* scanner, const char* msg); #define YYERROR_VERBOSE 1 /* A dummy function. A check against seg-faults in yylval->str. */ static int process_text(char* s) { int total =0; while(*s) { total += (int) *s; ++s; } return total; } %} %pure-parser %union { int lineno; char * str; } %token IDENT %token LINENO %token EQUAL "=" %token COLON ":" %token SPACE " " %% file: line | file line ; line: LINENO COLON SPACE IDENT EQUAL IDENT { process_text($4); process_text($6); /* Check lineno. */ if( $1 != @1.first_line || $1 != testget_lineno(scanner)) { yyerror(0, 0, "Parse failed: Line numbers do not match."); YYABORT; } /* Recreate the line to stdout. */ printf ( "%04d: %s=%s\n", @1.first_line, $4, $6); } ; %% int yyerror(YYLTYPE *location, void* scanner, const char* msg) { (void)location; (void)scanner; fprintf(stderr,"%s\n",msg); return 0; } flex-2.6.4/tests/yyextra.txt0000664000175000017500000011123513002262300013003 00000000000000 THE UNITED STATES CONSTITUTION _________________________________________________________________ (See Note 1) We the People of the United States, in Order to form a more perfect Union, establish Justice, insure domestic Tranquility, provide for the common defence, promote the general Welfare, and secure the Blessings of Liberty to ourselves and our Posterity, do ordain and establish this Constitution for the United States of America. Article. I. Section 1. All legislative Powers herein granted shall be vested in a Congress of the United States, which shall consist of a Senate and House of Representatives. Section. 2. Clause 1: The House of Representatives shall be composed of Members chosen every second Year by the People of the several States, and the Electors in each State shall have the Qualifications requisite for Electors of the most numerous Branch of the State Legislature. Clause 2: No Person shall be a Representative who shall not have attained to the Age of twenty five Years, and been seven Years a Citizen of the United States, and who shall not, when elected, be an Inhabitant of that State in which he shall be chosen. Clause 3: Representatives and direct Taxes shall be apportioned among the several States which may be included within this Union, according to their respective Numbers, which shall be determined by adding to the whole Number of free Persons, including those bound to Service for a Term of Years, and excluding Indians not taxed, three fifths of all other Persons. (See Note 2) The actual Enumeration shall be made within three Years after the first Meeting of the Congress of the United States, and within every subsequent Term of ten Years, in such Manner as they shall by Law direct. The Number of Representatives shall not exceed one for every thirty Thousand, but each State shall have at Least one Representative; and until such enumeration shall be made, the State of New Hampshire shall be entitled to chuse three, Massachusetts eight, Rhode-Island and Providence Plantations one, Connecticut five, New-York six, New Jersey four, Pennsylvania eight, Delaware one, Maryland six, Virginia ten, North Carolina five, South Carolina five, and Georgia three. Clause 4: When vacancies happen in the Representation from any State, the Executive Authority thereof shall issue Writs of Election to fill such Vacancies. Clause 5: The House of Representatives shall chuse their Speaker and other Officers; and shall have the sole Power of Impeachment. Section. 3. Clause 1: The Senate of the United States shall be composed of two Senators from each State, chosen by the Legislature thereof, (See Note 3) for six Years; and each Senator shall have one Vote. Clause 2: Immediately after they shall be assembled in Consequence of the first Election, they shall be divided as equally as may be into three Classes. The Seats of the Senators of the first Class shall be vacated at the Expiration of the second Year, of the second Class at the Expiration of the fourth Year, and of the third Class at the Expiration of the sixth Year, so that one third may be chosen every second Year; and if Vacancies happen by Resignation, or otherwise, during the Recess of the Legislature of any State, the Executive thereof may make temporary Appointments until the next Meeting of the Legislature, which shall then fill such Vacancies. (See Note 4) Clause 3: No Person shall be a Senator who shall not have attained to the Age of thirty Years, and been nine Years a Citizen of the United States, and who shall not, when elected, be an Inhabitant of that State for which he shall be chosen. Clause 4: The Vice President of the United States shall be President of the Senate, but shall have no Vote, unless they be equally divided. Clause 5: The Senate shall chuse their other Officers, and also a President pro tempore, in the Absence of the Vice President, or when he shall exercise the Office of President of the United States. Clause 6: The Senate shall have the sole Power to try all Impeachments. When sitting for that Purpose, they shall be on Oath or Affirmation. When the President of the United States is tried, the Chief Justice shall preside: And no Person shall be convicted without the Concurrence of two thirds of the Members present. Clause 7: Judgment in Cases of Impeachment shall not extend further than to removal from Office, and disqualification to hold and enjoy any Office of honor, Trust or Profit under the United States: but the Party convicted shall nevertheless be liable and subject to Indictment, Trial, Judgment and Punishment, according to Law. Section. 4. Clause 1: The Times, Places and Manner of holding Elections for Senators and Representatives, shall be prescribed in each State by the Legislature thereof; but the Congress may at any time by Law make or alter such Regulations, except as to the Places of chusing Senators. Clause 2: The Congress shall assemble at least once in every Year, and such Meeting shall be on the first Monday in December, (See Note 5) unless they shall by Law appoint a different Day. Section. 5. Clause 1: Each House shall be the Judge of the Elections, Returns and Qualifications of its own Members, and a Majority of each shall constitute a Quorum to do Business; but a smaller Number may adjourn from day to day, and may be authorized to compel the Attendance of absent Members, in such Manner, and under such Penalties as each House may provide. Clause 2: Each House may determine the Rules of its Proceedings, punish its Members for disorderly Behaviour, and, with the Concurrence of two thirds, expel a Member. Clause 3: Each House shall keep a Journal of its Proceedings, and from time to time publish the same, excepting such Parts as may in their Judgment require Secrecy; and the Yeas and Nays of the Members of either House on any question shall, at the Desire of one fifth of those Present, be entered on the Journal. Clause 4: Neither House, during the Session of Congress, shall, without the Consent of the other, adjourn for more than three days, nor to any other Place than that in which the two Houses shall be sitting. Section. 6. Clause 1: The Senators and Representatives shall receive a Compensation for their Services, to be ascertained by Law, and paid out of the Treasury of the United States. (See Note 6) They shall in all Cases, except Treason, Felony and Breach of the Peace, beprivileged from Arrest during their Attendance at the Session of their respective Houses, and in going to and returning from the same; and for any Speech or Debate in either House, they shall not be questioned in any other Place. Clause 2: No Senator or Representative shall, during the Time for which he was elected, be appointed to any civil Office under the Authority of the United States, which shall have been created, or the Emoluments whereof shall have been encreased during such time; and no Person holding any Office under the United States, shall be a Member of either House during his Continuance in Office. Section. 7. Clause 1: All Bills for raising Revenue shall originate in the House of Representatives; but the Senate may propose or concur with Amendments as on other Bills. Clause 2: Every Bill which shall have passed the House of Representatives and the Senate, shall, before it become a Law, be presented to the President of the United States; If he approve he shall sign it, but if not he shall return it, with his Objections to that House in which it shall have originated, who shall enter the Objections at large on their Journal, and proceed to reconsider it. If after such Reconsideration two thirds of that House shall agree to pass the Bill, it shall be sent, together with the Objections, to the other House, by which it shall likewise be reconsidered, and if approved by two thirds of that House, it shall become a Law. But in all such Cases the Votes of both Houses shall be determined by yeas and Nays, and the Names of the Persons voting for and against the Bill shall be entered on the Journal of each House respectively. If any Bill shall not be returned by the President within ten Days (Sundays excepted) after it shall have been presented to him, the Same shall be a Law, in like Manner as if he had signed it, unless the Congress by their Adjournment prevent its Return, in which Case it shall not be a Law. Clause 3: Every Order, Resolution, or Vote to which the Concurrence of the Senate and House of Representatives may be necessary (except on a question of Adjournment) shall be presented to the President of the United States; and before the Same shall take Effect, shall be approved by him, or being disapproved by him, shall be repassed by two thirds of the Senate and House of Representatives, according to the Rules and Limitations prescribed in the Case of a Bill. Section. 8. Clause 1: The Congress shall have Power To lay and collect Taxes, Duties, Imposts and Excises, to pay the Debts and provide for the common Defence and general Welfare of the United States; but all Duties, Imposts and Excises shall be uniform throughout the United States; Clause 2: To borrow Money on the credit of the United States; Clause 3: To regulate Commerce with foreign Nations, and among the several States, and with the Indian Tribes; Clause 4: To establish an uniform Rule of Naturalization, and uniform Laws on the subject of Bankruptcies throughout the United States; Clause 5: To coin Money, regulate the Value thereof, and of foreign Coin, and fix the Standard of Weights and Measures; Clause 6: To provide for the Punishment of counterfeiting the Securities and current Coin of the United States; Clause 7: To establish Post Offices and post Roads; Clause 8: To promote the Progress of Science and useful Arts, by securing for limited Times to Authors and Inventors the exclusive Right to their respective Writings and Discoveries; Clause 9: To constitute Tribunals inferior to the supreme Court; Clause 10: To define and punish Piracies and Felonies committed on the high Seas, and Offences against the Law of Nations; Clause 11: To declare War, grant Letters of Marque and Reprisal, and make Rules concerning Captures on Land and Water; Clause 12: To raise and support Armies, but no Appropriation of Money to that Use shall be for a longer Term than two Years; Clause 13: To provide and maintain a Navy; Clause 14: To make Rules for the Government and Regulation of the land and naval Forces; Clause 15: To provide for calling forth the Militia to execute the Laws of the Union, suppress Insurrections and repel Invasions; Clause 16: To provide for organizing, arming, and disciplining, the Militia, and for governing such Part of them as may be employed in the Service of the United States, reserving to the States respectively, the Appointment of the Officers, and the Authority of training the Militia according to the discipline prescribed by Congress; Clause 17: To exercise exclusive Legislation in all Cases whatsoever, over such District (not exceeding ten Miles square) as may, byCession of particular States, and the Acceptance of Congress, become the Seat of the Government of the United States, and to exercise like Authority over all Places purchased by the Consent of the Legislature of the State in which the Same shall be, for the Erection of Forts, Magazines, Arsenals, dock-Yards, and other needful Buildings;--And Clause 18: To make all Laws which shall be necessary and proper for carrying into Execution the foregoing Powers, and all other Powers vested by this Constitution in the Government of the United States, or in any Department or Officer thereof. Section. 9. Clause 1: The Migration or Importation of such Persons as any of the States now existing shall think proper to admit, shall not be prohibited by the Congress prior to the Year one thousand eight hundred and eight, but a Tax or duty may be imposed on such Importation, not exceeding ten dollars for each Person. Clause 2: The Privilege of the Writ of Habeas Corpus shall not be suspended, unless when in Cases of Rebellion or Invasion the public Safety may require it. Clause 3: No Bill of Attainder or ex post facto Law shall be passed. Clause 4: No Capitation, or other direct, Tax shall be laid, unless in Proportion to the Census or Enumeration herein before directed to be taken. (See Note 7) Clause 5: No Tax or Duty shall be laid on Articles exported from any State. Clause 6: No Preference shall be given by any Regulation of Commerce or Revenue to the Ports of one State over those of another: nor shall Vessels bound to, or from, one State, be obliged to enter, clear, or pay Duties in another. Clause 7: No Money shall be drawn from the Treasury, but in Consequence of Appropriations made by Law; and a regular Statement and Account of the Receipts and Expenditures of all public Money shall be published from time to time. Clause 8: No Title of Nobility shall be granted by the United States: And no Person holding any Office of Profit or Trust under them, shall, without the Consent of the Congress, accept of any present, Emolument, Office, or Title, of any kind whatever, from any King, Prince, or foreign State. Section. 10. Clause 1: No State shall enter into any Treaty, Alliance, or Confederation; grant Letters of Marque and Reprisal; coin Money; emit Bills of Credit; make any Thing but gold and silver Coin a Tender in Payment of Debts; pass any Bill of Attainder, ex post facto Law, or Law impairing the Obligation of Contracts, or grant any Title of Nobility. Clause 2: No State shall, without the Consent of the Congress, lay any Imposts or Duties on Imports or Exports, except what may be absolutely necessary for executing it's inspection Laws: and the net Produce of all Duties and Imposts, laid by any State on Imports or Exports, shall be for the Use of the Treasury of the United States; and all such Laws shall be subject to the Revision and Controul of the Congress. Clause 3: No State shall, without the Consent of Congress, lay any Duty of Tonnage, keep Troops, or Ships of War in time of Peace, enter into any Agreement or Compact with another State, or with a foreign Power, or engage in War, unless actually invaded, or in such imminent Danger as will not admit of delay. Article. II. Section. 1. Clause 1: The executive Power shall be vested in a President of the United States of America. He shall hold his Office during the Term of four Years, and, together with the Vice President, chosen for the same Term, be elected, as follows Clause 2: Each State shall appoint, in such Manner as the Legislature thereof may direct, a Number of Electors, equal to the whole Number of Senators and Representatives to which the State may be entitled in the Congress: but no Senator or Representative, or Person holding an Office of Trust or Profit under the United States, shall be appointed an Elector. Clause 3: The Electors shall meet in their respective States, and vote by Ballot for two Persons, of whom one at least shall not be an Inhabitant of the same State with themselves. And they shall make a List of all the Persons voted for, and of the Number of Votes for each; which List they shall sign and certify, and transmit sealed to the Seat of the Government of the United States, directed to the President of the Senate. The President of the Senate shall, in the Presence of the Senate and House of Representatives, open all the Certificates, and the Votes shall then be counted. The Person having the greatest Number of Votes shall be the President, if such Number be a Majority of the whole Number of Electors appointed; and if there be more than one who have such Majority, and have an equal Number of Votes, then the House of Representatives shall immediately chuse by Ballot one of them for President; and if no Person have a Majority, then from the five highest on the List the said House shall in like Manner chuse the President. But in chusing the President, the Votes shall be taken by States, the Representation from each State having one Vote; A quorum for this Purpose shall consist of a Member or Members from two thirds of the States, and a Majority of all the States shall be necessary to a Choice. In every Case, after the Choice of the President, the Person having the greatest Number of Votes of the Electors shall be the Vice President. But if there should remain two or more who have equal Votes, the Senate shall chuse from them by Ballot the Vice President. (See Note 8) Clause 4: The Congress may determine the Time of chusing the Electors, and the Day on which they shall give their Votes; which Day shall be the same throughout the United States. Clause 5: No Person except a natural born Citizen, or a Citizen of the United States, at the time of the Adoption of this Constitution, shall be eligible to the Office of President; neither shall any Person be eligible to that Office who shall not have attained to the Age of thirty five Years, and been fourteen Years a Resident within the United States. Clause 6: In Case of the Removal of the President from Office, or of his Death, Resignation, or Inability to discharge the Powers and Duties of the said Office, (See Note 9) the Same shall devolve on the VicePresident, and the Congress may by Law provide for the Case of Removal, Death, Resignation or Inability, both of the President and Vice President, declaring what Officer shall then act as President, and such Officer shall act accordingly, until the Disability be removed, or a President shall be elected. Clause 7: The President shall, at stated Times, receive for his Services, a Compensation, which shall neither be encreased nor diminished during the Period for which he shall have been elected, and he shall not receive within that Period any other Emolument from the United States, or any of them. Clause 8: Before he enter on the Execution of his Office, he shall take the following Oath or Affirmation:--"I do solemnly swear (or affirm) that I will faithfully execute the Office of President of the United States, and will to the best of my Ability, preserve, protect and defend the Constitution of the United States." Section. 2. Clause 1: The President shall be Commander in Chief of the Army and Navy of the United States, and of the Militia of the several States, when called into the actual Service of the United States; he may require the Opinion, in writing, of the principal Officer in each of the executive Departments, upon any Subject relating to the Duties of their respective Offices, and he shall have Power to grant Reprieves and Pardons for Offences against the United States, except in Cases of Impeachment. Clause 2: He shall have Power, by and with the Advice and Consent of the Senate, to make Treaties, provided two thirds of the Senators present concur; and he shall nominate, and by and with the Advice and Consent of the Senate, shall appoint Ambassadors, other public Ministers and Consuls, Judges of the supreme Court, and all other Officers of the United States, whose Appointments are not herein otherwise provided for, and which shall be established by Law: but the Congress may by Law vest the Appointment of such inferior Officers, as they think proper, in the President alone, in the Courts of Law, or in the Heads of Departments. Clause 3: The President shall have Power to fill up all Vacancies that may happen during the Recess of the Senate, by granting Commissions which shall expire at the End of their next Session. Section. 3. He shall from time to time give to the Congress Information of the State of the Union, and recommend to their Consideration such Measures as he shall judge necessary and expedient; he may, on extraordinary Occasions, convene both Houses, or either of them, and in Case of Disagreement between them, with Respect to the Time of Adjournment, he may adjourn them to such Time as he shall think proper; he shall receive Ambassadors and other public Ministers; he shall take Care that the Laws be faithfully executed, and shall Commission all the Officers of the United States. Section. 4. The President, Vice President and all civil Officers of the United States, shall be removed from Office on Impeachment for, and Conviction of, Treason, Bribery, or other high Crimes and Misdemeanors. Article. III. Section. 1. The judicial Power of the United States, shall be vested in one supreme Court, and in such inferior Courts as the Congress may from time to time ordain and establish. The Judges, both of the supreme and inferior Courts, shall hold their Offices during good Behaviour, and shall, at stated Times, receive for their Services, a Compensation, which shall not be diminished during their Continuance in Office. Section. 2. Clause 1: The judicial Power shall extend to all Cases, in Law and Equity, arising under this Constitution, the Laws of the United States, and Treaties made, or which shall be made, under their Authority;--to all Cases affecting Ambassadors, other public Ministers and Consuls;--to all Cases of admiralty and maritime Jurisdiction;--to Controversies to which the United States shall be a Party;--to Controversies between two or more States;--between a State and Citizens of another State; (See Note 10)--between Citizens of different States, --between Citizens of the same State claiming Lands under Grants of different States, and between a State, or the Citizens thereof, and foreign States, Citizens or Subjects. Clause 2: In all Cases affecting Ambassadors, other public Ministers and Consuls, and those in which a State shall be Party, the supreme Court shall have original Jurisdiction. In all the other Cases before mentioned, the supreme Court shall have appellate Jurisdiction, both as to Law and Fact, with such Exceptions, and under such Regulations as the Congress shall make. Clause 3: The Trial of all Crimes, except in Cases of Impeachment, shall be by Jury; and such Trial shall be held in the State where the said Crimes shall have been committed; but when not committed within any State, the Trial shall be at such Place or Places as the Congress may by Law have directed. Section. 3. Clause 1: Treason against the United States, shall consist only in levying War against them, or in adhering to their Enemies, giving them Aid and Comfort. No Person shall be convicted of Treason unless on the Testimony of two Witnesses to the same overt Act, or on Confession in open Court. Clause 2: The Congress shall have Power to declare the Punishment of Treason, but no Attainder of Treason shall work Corruption of Blood, or Forfeiture except during the Life of the Person attainted. Article. IV. Section. 1. Full Faith and Credit shall be given in each State to the public Acts, Records, and judicial Proceedings of every other State. And the Congress may by general Laws prescribe the Manner in which such Acts, Records and Proceedings shall be proved, and the Effect thereof. Section. 2. Clause 1: The Citizens of each State shall be entitled to all Privileges and Immunities of Citizens in the several States. Clause 2: A Person charged in any State with Treason, Felony, or other Crime, who shall flee from Justice, and be found in another State, shall on Demand of the executive Authority of the State from which he fled, be delivered up, to be removed to the State having Jurisdiction of the Crime. Clause 3: No Person held to Service or Labour in one State, under the Laws thereof, escaping into another, shall, in Consequence of any Law or Regulation therein, be discharged from such Service or Labour, but shall be delivered up on Claim of the Party to whom such Service or Labour may be due. (See Note 11) Section. 3. Clause 1: New States may be admitted by the Congress into this Union; but no new State shall be formed or erected within the Jurisdiction of any other State; nor any State be formed by the Junction of two or more States, or Parts of States, without the Consent of the Legislatures of the States concerned as well as of the Congress. Clause 2: The Congress shall have Power to dispose of and make all needful Rules and Regulations respecting the Territory or other Property belonging to the United States; and nothing in this Constitution shall be so construed as to Prejudice any Claims of the United States, or of any particular State. Section. 4. The United States shall guarantee to every State in this Union a Republican Form of Government, and shall protect each of them against Invasion; and on Application of the Legislature, or of the Executive (when the Legislature cannot be convened) against domestic Violence. Article. V. The Congress, whenever two thirds of both Houses shall deem it necessary, shall propose [1]Amendments to this Constitution, or, on the Application of the Legislatures of two thirds of the several States, shall call a Convention for proposing Amendments, which, in either Case, shall be valid to all Intents and Purposes, as Part of this Constitution, when ratified by the Legislatures of three fourths of the several States, or by Conventions in three fourths thereof, as the one or the other Mode of Ratification may be proposed by the Congress; Provided that no Amendment which may be made prior to the Year One thousand eight hundred and eight shall in any Manner affect the first and fourth Clauses in the Ninth Section of the first Article; and that no State, without its Consent, shall be deprived of its equal Suffrage in the Senate. Article. VI. Clause 1: All Debts contracted and Engagements entered into, before the Adoption of this Constitution, shall be as valid against the United States under this Constitution, as under the Confederation. Clause 2: This Constitution, and the Laws of the United States which shall be made in Pursuance thereof; and all Treaties made, or which shall be made, under the Authority of the United States, shall be the supreme Law of the Land; and the Judges in every State shall be bound thereby, any Thing in the Constitution or Laws of any State to the Contrary notwithstanding. Clause 3: The Senators and Representatives before mentioned, and the Members of the several State Legislatures, and all executive and judicial Officers, both of the United States and of the several States, shall be bound by Oath or Affirmation, to support this Constitution; but no religious Test shall ever be required as a Qualification to any Office or public Trust under the United States. Article. VII. The Ratification of the Conventions of nine States, shall be sufficient for the Establishment of this Constitution between the States so ratifying the Same. done in Convention by the Unanimous Consent of the States present the Seventeenth Day of September in the Year of our Lord one thousand seven hundred and Eighty seven and of the Independence of the United States of America the Twelfth In witness whereof We have hereunto subscribed our Names, GO WASHINGTON--Presidt. and deputy from Virginia [Signed also by the deputies of twelve States.] Delaware Geo: Read Gunning Bedford jun John Dickinson Richard Bassett Jaco: Broom Maryland James MCHenry Dan of ST ThoS. Jenifer DanL Carroll. Virginia John Blair-- James Madison Jr. North Carolina WM Blount RichD. Dobbs Spaight. Hu Williamson South Carolina J. Rutledge Charles 1ACotesworth Pinckney Charles Pinckney Pierce Butler. Georgia William Few Abr Baldwin New Hampshire John Langdon Nicholas Gilman Massachusetts Nathaniel Gorham Rufus King Connecticut WM. SamL. Johnson Roger Sherman New York Alexander Hamilton New Jersey Wil: Livingston David Brearley. WM. Paterson. Jona: Dayton Pennsylvania B Franklin Thomas Mifflin RobT Morris Geo. Clymer ThoS. FitzSimons Jared Ingersoll James Wilson. Gouv Morris Attest William Jackson Secretary NOTES Note 1: This text of the Constitution follows the engrossed copy signed by Gen. Washington and the deputies from 12 States. The small superior figures preceding the paragraphs designate Clauses, and were not in the original and have no reference to footnotes. The Constitution was adopted by a convention of the States on September 17, 1787, and was subsequently ratified by the several States, on the following dates: Delaware, December 7, 1787; Pennsylvania, December 12, 1787; New Jersey, December 18, 1787; Georgia, January 2, 1788; Connecticut, January 9, 1788; Massachusetts, February 6, 1788; Maryland, April 28, 1788; South Carolina, May 23, 1788; New Hampshire, June 21, 1788. Ratification was completed on June 21, 1788. The Constitution was subsequently ratified by Virginia, June 25, 1788; New York, July 26, 1788; North Carolina, November 21, 1789; Rhode Island, May 29, 1790; and Vermont, January 10, 1791. In May 1785, a committee of Congress made a report recommending an alteration in the Articles of Confederation, but no action was taken on it, and it was left to the State Legislatures to proceed in the matter. In January 1786, the Legislature of Virginia passed a resolution providing for the appointment of five commissioners, who, or any three of them, should meet such commissioners as might be appointed in the other States of the Union, at a time and place to be agreed upon, to take into consideration the trade of the United States; to consider how far a uniform system in their commercial regulations may be necessary to their common interest and their permanent harmony; and to report to the several States such an act, relative to this great object, as, when ratified by them, will enable the United States in Congress effectually to provide for the same. The Virginia commissioners, after some correspondence, fixed the first Monday in September as the time, and the city of Annapolis as the place for the meeting, but only four other States were represented, viz: Delaware, New York, New Jersey, and Pennsylvania; the commissioners appointed by Massachusetts, New Hampshire, North Carolina, and Rhode Island failed to attend. Under the circumstances of so partial a representation, the commissioners present agreed upon a report, (drawn by Mr. Hamilton, of New York,) expressing their unanimous conviction that it might essentially tend to advance the interests of the Union if the States by which they were respectively delegated would concur, and use their endeavors to procure the concurrence of the other States, in the appointment of commissioners to meet at Philadelphia on the Second Monday of May following, to take into consideration the situation of the United States; to devise such further provisions as should appear to them necessary to render the Constitution of the Federal Government adequate to the exigencies of the Union; and to report such an act for that purpose to the United States in Congress assembled as, when agreed to by them and afterwards confirmed by the Legislatures of every State, would effectually provide for the same. Congress, on the 21st of February, 1787, adopted a resolution in favor of a convention, and the Legislatures of those States which had not already done so (with the exception of Rhode Island) promptly appointed delegates. On the 25th of May, seven States having convened, George Washington, of Virginia, was unanimously elected President, and the consideration of the proposed constitution was commenced. On the 17th of September, 1787, the Constitution as engrossed and agreed upon was signed by all the members present, except Mr. Gerry of Massachusetts, and Messrs. Mason and Randolph, of Virginia. The president of the convention transmitted it to Congress, with a resolution stating how the proposed Federal Government should be put in operation, and an explanatory letter. Congress, on the 28th of September, 1787, directed the Constitution so framed, with the resolutions and letter concerning the same, to "be transmitted to the several Legislatures in order to be submitted to a convention of delegates chosen in each State by the people thereof, in conformity to the resolves of the convention." On the 4th of March, 1789, the day which had been fixed for commencing the operations of Government under the new Constitution, it had been ratified by the conventions chosen in each State to consider it, as follows: Delaware, December 7, 1787; Pennsylvania, December 12, 1787; New Jersey, December 18, 1787; Georgia, January 2, 1788; Connecticut, January 9, 1788; Massachusetts, February 6, 1788; Maryland, April 28, 1788; South Carolina, May 23, 1788; New Hampshire, June 21, 1788; Virginia, June 25, 1788; and New York, July 26, 1788. The President informed Congress, on the 28th of January, 1790, that North Carolina had ratified the Constitution November 21, 1789; and he informed Congress on the 1st of June, 1790, that Rhode Island had ratified the Constitution May 29, 1790. Vermont, in convention, ratified the Constitution January 10, 1791, and was, by an act of Congress approved February 18, 1791, "received and admitted into this Union as a new and entire member of the United States." Note 2: The part of this Clause relating to the mode of apportionment of representatives among the several States has been affected by Section 2 of amendment XIV, and as to taxes on incomes without apportionment by amendment XVI. Note 3: This Clause has been affected by Clause 1 of amendment XVII. Note 4: This Clause has been affected by Clause 2 of amendment XVIII. Note 5: This Clause has been affected by amendment XX. Note 6: This Clause has been affected by amendment XXVII. Note 7: This Clause has been affected by amendment XVI. Note 8: This Clause has been superseded by amendment XII. Note 9: This Clause has been affected by amendment XXV. Note 10: This Clause has been affected by amendment XI. Note 11: This Clause has been affected by amendment XIII. Note 12: The first ten amendments to the Constitution of the United States (and two others, one of which failed of ratification and the other which later became the 27th amendment) were proposed to the legislatures of the several States by the First Congress on September 25, 1789. The first ten amendments were ratified by the following States, and the notifications of ratification by the Governors thereof were successively communicated by the President to Congress: New Jersey, November 20, 1789; Maryland, December 19, 1789; North Carolina, December 22, 1789; South Carolina, January 19, 1790; New Hampshire, January 25, 1790; Delaware, January 28, 1790; New York, February 24, 1790; Pennsylvania, March 10, 1790; Rhode Island, June 7, 1790; Vermont, November 3, 1791; and Virginia, December 15, 1791. Ratification was completed on December 15, 1791. The amendments were subsequently ratified by the legislatures of Massachusetts, March 2, 1939; Georgia, March 18, 1939; and Connecticut, April 19, 1939. Note 13: Only the 13th, 14th, 15th, and 16th articles of amendment had numbers assigned to them at the time of ratification. Note 14: This sentence has been superseded by section 3 of amendment XX. Note 15: See amendment XIX and section 1 of amendment XXVI. Note 16: Repealed by section 1 of amendment XXI. References 1. http://www.house.gov/Constitution/Amend.html flex-2.6.4/tests/prefix_nr.txt0000664000175000017500000000001513002262300013263 00000000000000Dummy input. flex-2.6.4/tests/string_r.l0000664000175000017500000000562213002262300012543 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". */ #include #include #include "config.h" #define NUMBER 200 #define WORD 201 %} %option 8bit prefix="test" %option nounput nomain nodefault noyywrap noinput %option warn reentrant %% [[:space:]]+ { } [[:digit:]]+ { printf("NUMBER "); fflush(stdout);} [[:alpha:]]+ { printf("WORD "); fflush(stdout);} . { fprintf(stderr,"*** Error: Unrecognized character '%c' while scanning.\n", yytext[0]); yyterminate(); } <> { printf("<>\n"); yyterminate();} %% #define INPUT_STRING_1 "1234 foo bar" #define INPUT_STRING_2 "1234 foo bar *@&@&###@^$#&#*" int main(void); int main (void) { char * buf; size_t len; YY_BUFFER_STATE state; yyscan_t scanner=NULL; /* Scan a good string. */ printf("Testing: test_scan_string(%s): ",INPUT_STRING_1); fflush(stdout); testlex_init(&scanner); state = test_scan_string ( INPUT_STRING_1 ,scanner); testlex(scanner); test_delete_buffer(state, scanner); testlex_destroy(scanner); /* Scan only the first 12 chars of a string. */ printf("Testing: test_scan_bytes(%s): ",INPUT_STRING_2); fflush(stdout); testlex_init(&scanner); state = test_scan_bytes ( INPUT_STRING_2, 12 ,scanner); testlex(scanner); test_delete_buffer(state,scanner); testlex_destroy(scanner); /* Scan directly from a buffer. We make a copy, since the buffer will be modified by flex.*/ printf("Testing: test_scan_buffer(%s): ",INPUT_STRING_1); fflush(stdout); len = strlen(INPUT_STRING_1) + 2; buf = malloc(len); strcpy( buf, INPUT_STRING_1); buf[ len -2 ] = 0; /* Flex requires two NUL bytes at end of buffer. */ buf[ len -1 ] =0; testlex_init(&scanner); state = test_scan_buffer( buf, len ,scanner); testlex(scanner); test_delete_buffer(state,scanner); testlex_destroy(scanner); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/mem_r.txt0000664000175000017500000000525013002262300012374 00000000000000First we push a lot on the stack by nesting parenthesis: (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( (((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ((((((((((((((((((((((((((((((((((((((((((( (should be 200 states pushed here) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ))))))))))))))))))))))))))))))))))))))))))) Now we match progressively bigger tokens to increase the read buffer: len=1 0 len=2 00 len=4 0000 len=8 00000000 len=16 0000000000000000 len=32 00000000000000000000000000000000 len=64 0000000000000000000000000000000000000000000000000000000000000000 len=128 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 len=256 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 len=512 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 len=1024 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 flex-2.6.4/tests/bison_nr_parser.y0000664000175000017500000000427313002262300014117 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ /* How to compile: bison --defines --output-file="parser.c" --name-prefix="test" parser.y */ %{ #include #include #include #include "config.h" #include "bison_nr_parser.h" #include "bison_nr_scanner.h" #define YYERROR_VERBOSE 1 /* #define YYPARSE_PARAM scanner */ /* #define YYLEX_PARAM scanner */ int yyerror(const char* msg); /* A dummy function. A check against seg-faults in yylval->str. */ static int process_text(char* s) { int total =0; while(*s) { total += (int) *s; ++s; } return total; } %} %pure-parser %union { int lineno; char * str; } %token IDENT %token LINENO %token EQUAL "=" %token COLON ":" %token SPACE " " %% file: line | file line ; line: LINENO COLON SPACE IDENT EQUAL IDENT { process_text($4); process_text($6); /* Check lineno. */ if( $1 != @1.first_line || $1 != testget_lineno()) { yyerror("Parse failed: Line numbers do not match."); YYABORT; } /* Recreate the line to stdout. */ printf ( "%04d: %s=%s\n", @1.first_line, $4, $6); } ; %% int yyerror(const char* msg) { fprintf(stderr,"%s\n",msg); return 0; } flex-2.6.4/tests/include_by_reentrant.direct_3.txt0000664000175000017500000000013613002262300017165 00000000000000Beginning of "include_by_reentrant.direct_3.txt". End of "include_by_reentrant.direct_3.txt". flex-2.6.4/tests/multiple_scanners_nr_main.c0000664000175000017500000000306113002262300016130 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #include "multiple_scanners_nr_1.h" #include "multiple_scanners_nr_2.h" int main ( int argc, char** argv ) { (void)argc; (void)argv; int S1_ok=1, S2_ok=1; YY_BUFFER_STATE buff1, buff2; S1_out = S2_out = stdout; buff1 = S1__scan_string("foo on bar off"); buff2 = S2__scan_string("on blah blah off foo on bar off"); /* scan simultaneously. */ while(S1_ok || S2_ok) { if (S1_ok) S1_ok = S1_lex(); if (S2_ok) S2_ok = S2_lex(); } S1__delete_buffer(buff1); S2__delete_buffer(buff2); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/cxx_yywrap.txt0000664000175000017500000000006613002262300013512 000000000000000000 foo 1111 foo 0000 bar 0000 foo 1111 foo 0000 bar flex-2.6.4/tests/include_by_reentrant.direct.l0000664000175000017500000000505213002262300016361 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A scanner file to build "scanner.c". Input language is any text. "#include " causes a new scanner to be created. */ #include #include #include "config.h" int error = 0; %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option reentrant %option warn %x GET_FILENAME %% { ^"#include"[[:blank:]]+"<" { BEGIN(GET_FILENAME); } .|\n { ECHO; } } { [[:alnum:]_.-]+> { /* recurse */ yyscan_t scanner; FILE * fp; yytext[yyleng-1]='\0'; if((fp=fopen(yytext,"r"))==NULL) { fprintf(stderr,"*** Error: Could not open include file \"%s\".\n", yytext); error = 1; yyterminate(); } testlex_init(&scanner); testset_in( fp, scanner); testset_out( stdout, scanner); testlex(scanner); testlex_destroy(scanner); BEGIN(0); } .|\n { fprintf(stderr,"Invalid input \"%s\".\n", yytext); error = 1; yyterminate(); } } <> { fclose(yyin); yyterminate();} %% int main (int argc, char** argv); int main ( int argc, char **argv ) { FILE * fp; yyscan_t scanner; if( argc != 2 ) { fprintf(stderr,"*** Error: Must specify one filename.\n"); exit(-1); } if((fp=fopen(argv[1],"r"))==NULL) { fprintf(stderr,"*** Error: fopen(%s) failed.\n",argv[1]); exit(-1); } testlex_init(&scanner); testset_in( fp, scanner); testset_out( stdout, scanner); testlex(scanner); testlex_destroy(scanner); if (!error) printf("TEST RETURNING OK.\n"); else exit(-1); return 0; } flex-2.6.4/tests/quote_in_comment.l0000664000175000017500000000030013010410070014243 00000000000000%option 8bit noyywrap %% .|\n { ECHO; //' " } %% int main (void) { yyin = stdin; yyout = stdout; while (yylex()) ; printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/basic_r.txt0000664000175000017500000000007113002262300012673 00000000000000# this is a comment foo = "bar" num = 43 setting = false flex-2.6.4/tests/pthread_5.txt0000664000175000017500000021030313002262300013145 00000000000000Many lines of numbers and words 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar flex-2.6.4/tests/tableopts.sh0000775000175000017500000000277513102435245013114 00000000000000#!/bin/sh set -eu # IFS=$'\n\t' IFS=' '' ' # This script is present to generate the automake _SOURCES variables # for the tableopts_* tests. It also generates the linking rules for # each test since automake isn't able to handle the pattern rules that # would be natural to use. Output is written to standard output for # inclusion in a Makefile.am, typically by redirecting the output and # then an automake include directive. TABLEOPTS_TESTS="" tableopts_tables="" for kind in opt ser ver ; do for threading in nr r ; do for opt in -Ca -Ce -Cf -CF -Cm -Cem -Cae -Caef -CaeF -Cam -Caem ; do testname=tableopts_${kind}_${threading}${opt}.${kind} if [ "${TABLEOPTS_TESTS}" = "" ] ;then TABLEOPTS_TESTS=${testname} if [ "$kind" = "ser" ] || [ "$kind" = "ver" ] ; then tableopts_tables=${testname}.tables fi else TABLEOPTS_TESTS="${TABLEOPTS_TESTS} ${testname}" if [ "$kind" = "ser" ] || [ "$kind" = "ver" ] ; then tableopts_tables="${tableopts_tables} ${testname}.tables" fi fi bare_opt=${opt#-} cat << EOF tableopts_${kind}_${threading}_${bare_opt}_${kind}_SOURCES = tableopts.l4 ${testname}\$(EXEEXT): tableopts_${kind}_${threading}${opt}.\$(OBJEXT) \$(AM_V_CCLD)\$(LINK) -o \$@ \$< EOF done done done echo TABLEOPTS_TESTS = ${TABLEOPTS_TESTS} echo echo tableopts_tables = ${tableopts_tables} flex-2.6.4/tests/lineno_nr.one.txt0000664000175000017500000000045313002262300014040 00000000000000These words are separated by newlines and sometimes spaces too. The next three lines are numbers with only intervening newlines 01123 581321 34 And now for some blank lines.... Finally, we directly modify yylineno, but then change it back afterwards (see scanner.l): yylineno++ yylineno-- flex-2.6.4/tests/alloc_extra.txt0000664000175000017500000011123513002262300013573 00000000000000 THE UNITED STATES CONSTITUTION _________________________________________________________________ (See Note 1) We the People of the United States, in Order to form a more perfect Union, establish Justice, insure domestic Tranquility, provide for the common defence, promote the general Welfare, and secure the Blessings of Liberty to ourselves and our Posterity, do ordain and establish this Constitution for the United States of America. Article. I. Section 1. All legislative Powers herein granted shall be vested in a Congress of the United States, which shall consist of a Senate and House of Representatives. Section. 2. Clause 1: The House of Representatives shall be composed of Members chosen every second Year by the People of the several States, and the Electors in each State shall have the Qualifications requisite for Electors of the most numerous Branch of the State Legislature. Clause 2: No Person shall be a Representative who shall not have attained to the Age of twenty five Years, and been seven Years a Citizen of the United States, and who shall not, when elected, be an Inhabitant of that State in which he shall be chosen. Clause 3: Representatives and direct Taxes shall be apportioned among the several States which may be included within this Union, according to their respective Numbers, which shall be determined by adding to the whole Number of free Persons, including those bound to Service for a Term of Years, and excluding Indians not taxed, three fifths of all other Persons. (See Note 2) The actual Enumeration shall be made within three Years after the first Meeting of the Congress of the United States, and within every subsequent Term of ten Years, in such Manner as they shall by Law direct. The Number of Representatives shall not exceed one for every thirty Thousand, but each State shall have at Least one Representative; and until such enumeration shall be made, the State of New Hampshire shall be entitled to chuse three, Massachusetts eight, Rhode-Island and Providence Plantations one, Connecticut five, New-York six, New Jersey four, Pennsylvania eight, Delaware one, Maryland six, Virginia ten, North Carolina five, South Carolina five, and Georgia three. Clause 4: When vacancies happen in the Representation from any State, the Executive Authority thereof shall issue Writs of Election to fill such Vacancies. Clause 5: The House of Representatives shall chuse their Speaker and other Officers; and shall have the sole Power of Impeachment. Section. 3. Clause 1: The Senate of the United States shall be composed of two Senators from each State, chosen by the Legislature thereof, (See Note 3) for six Years; and each Senator shall have one Vote. Clause 2: Immediately after they shall be assembled in Consequence of the first Election, they shall be divided as equally as may be into three Classes. The Seats of the Senators of the first Class shall be vacated at the Expiration of the second Year, of the second Class at the Expiration of the fourth Year, and of the third Class at the Expiration of the sixth Year, so that one third may be chosen every second Year; and if Vacancies happen by Resignation, or otherwise, during the Recess of the Legislature of any State, the Executive thereof may make temporary Appointments until the next Meeting of the Legislature, which shall then fill such Vacancies. (See Note 4) Clause 3: No Person shall be a Senator who shall not have attained to the Age of thirty Years, and been nine Years a Citizen of the United States, and who shall not, when elected, be an Inhabitant of that State for which he shall be chosen. Clause 4: The Vice President of the United States shall be President of the Senate, but shall have no Vote, unless they be equally divided. Clause 5: The Senate shall chuse their other Officers, and also a President pro tempore, in the Absence of the Vice President, or when he shall exercise the Office of President of the United States. Clause 6: The Senate shall have the sole Power to try all Impeachments. When sitting for that Purpose, they shall be on Oath or Affirmation. When the President of the United States is tried, the Chief Justice shall preside: And no Person shall be convicted without the Concurrence of two thirds of the Members present. Clause 7: Judgment in Cases of Impeachment shall not extend further than to removal from Office, and disqualification to hold and enjoy any Office of honor, Trust or Profit under the United States: but the Party convicted shall nevertheless be liable and subject to Indictment, Trial, Judgment and Punishment, according to Law. Section. 4. Clause 1: The Times, Places and Manner of holding Elections for Senators and Representatives, shall be prescribed in each State by the Legislature thereof; but the Congress may at any time by Law make or alter such Regulations, except as to the Places of chusing Senators. Clause 2: The Congress shall assemble at least once in every Year, and such Meeting shall be on the first Monday in December, (See Note 5) unless they shall by Law appoint a different Day. Section. 5. Clause 1: Each House shall be the Judge of the Elections, Returns and Qualifications of its own Members, and a Majority of each shall constitute a Quorum to do Business; but a smaller Number may adjourn from day to day, and may be authorized to compel the Attendance of absent Members, in such Manner, and under such Penalties as each House may provide. Clause 2: Each House may determine the Rules of its Proceedings, punish its Members for disorderly Behaviour, and, with the Concurrence of two thirds, expel a Member. Clause 3: Each House shall keep a Journal of its Proceedings, and from time to time publish the same, excepting such Parts as may in their Judgment require Secrecy; and the Yeas and Nays of the Members of either House on any question shall, at the Desire of one fifth of those Present, be entered on the Journal. Clause 4: Neither House, during the Session of Congress, shall, without the Consent of the other, adjourn for more than three days, nor to any other Place than that in which the two Houses shall be sitting. Section. 6. Clause 1: The Senators and Representatives shall receive a Compensation for their Services, to be ascertained by Law, and paid out of the Treasury of the United States. (See Note 6) They shall in all Cases, except Treason, Felony and Breach of the Peace, beprivileged from Arrest during their Attendance at the Session of their respective Houses, and in going to and returning from the same; and for any Speech or Debate in either House, they shall not be questioned in any other Place. Clause 2: No Senator or Representative shall, during the Time for which he was elected, be appointed to any civil Office under the Authority of the United States, which shall have been created, or the Emoluments whereof shall have been encreased during such time; and no Person holding any Office under the United States, shall be a Member of either House during his Continuance in Office. Section. 7. Clause 1: All Bills for raising Revenue shall originate in the House of Representatives; but the Senate may propose or concur with Amendments as on other Bills. Clause 2: Every Bill which shall have passed the House of Representatives and the Senate, shall, before it become a Law, be presented to the President of the United States; If he approve he shall sign it, but if not he shall return it, with his Objections to that House in which it shall have originated, who shall enter the Objections at large on their Journal, and proceed to reconsider it. If after such Reconsideration two thirds of that House shall agree to pass the Bill, it shall be sent, together with the Objections, to the other House, by which it shall likewise be reconsidered, and if approved by two thirds of that House, it shall become a Law. But in all such Cases the Votes of both Houses shall be determined by yeas and Nays, and the Names of the Persons voting for and against the Bill shall be entered on the Journal of each House respectively. If any Bill shall not be returned by the President within ten Days (Sundays excepted) after it shall have been presented to him, the Same shall be a Law, in like Manner as if he had signed it, unless the Congress by their Adjournment prevent its Return, in which Case it shall not be a Law. Clause 3: Every Order, Resolution, or Vote to which the Concurrence of the Senate and House of Representatives may be necessary (except on a question of Adjournment) shall be presented to the President of the United States; and before the Same shall take Effect, shall be approved by him, or being disapproved by him, shall be repassed by two thirds of the Senate and House of Representatives, according to the Rules and Limitations prescribed in the Case of a Bill. Section. 8. Clause 1: The Congress shall have Power To lay and collect Taxes, Duties, Imposts and Excises, to pay the Debts and provide for the common Defence and general Welfare of the United States; but all Duties, Imposts and Excises shall be uniform throughout the United States; Clause 2: To borrow Money on the credit of the United States; Clause 3: To regulate Commerce with foreign Nations, and among the several States, and with the Indian Tribes; Clause 4: To establish an uniform Rule of Naturalization, and uniform Laws on the subject of Bankruptcies throughout the United States; Clause 5: To coin Money, regulate the Value thereof, and of foreign Coin, and fix the Standard of Weights and Measures; Clause 6: To provide for the Punishment of counterfeiting the Securities and current Coin of the United States; Clause 7: To establish Post Offices and post Roads; Clause 8: To promote the Progress of Science and useful Arts, by securing for limited Times to Authors and Inventors the exclusive Right to their respective Writings and Discoveries; Clause 9: To constitute Tribunals inferior to the supreme Court; Clause 10: To define and punish Piracies and Felonies committed on the high Seas, and Offences against the Law of Nations; Clause 11: To declare War, grant Letters of Marque and Reprisal, and make Rules concerning Captures on Land and Water; Clause 12: To raise and support Armies, but no Appropriation of Money to that Use shall be for a longer Term than two Years; Clause 13: To provide and maintain a Navy; Clause 14: To make Rules for the Government and Regulation of the land and naval Forces; Clause 15: To provide for calling forth the Militia to execute the Laws of the Union, suppress Insurrections and repel Invasions; Clause 16: To provide for organizing, arming, and disciplining, the Militia, and for governing such Part of them as may be employed in the Service of the United States, reserving to the States respectively, the Appointment of the Officers, and the Authority of training the Militia according to the discipline prescribed by Congress; Clause 17: To exercise exclusive Legislation in all Cases whatsoever, over such District (not exceeding ten Miles square) as may, byCession of particular States, and the Acceptance of Congress, become the Seat of the Government of the United States, and to exercise like Authority over all Places purchased by the Consent of the Legislature of the State in which the Same shall be, for the Erection of Forts, Magazines, Arsenals, dock-Yards, and other needful Buildings;--And Clause 18: To make all Laws which shall be necessary and proper for carrying into Execution the foregoing Powers, and all other Powers vested by this Constitution in the Government of the United States, or in any Department or Officer thereof. Section. 9. Clause 1: The Migration or Importation of such Persons as any of the States now existing shall think proper to admit, shall not be prohibited by the Congress prior to the Year one thousand eight hundred and eight, but a Tax or duty may be imposed on such Importation, not exceeding ten dollars for each Person. Clause 2: The Privilege of the Writ of Habeas Corpus shall not be suspended, unless when in Cases of Rebellion or Invasion the public Safety may require it. Clause 3: No Bill of Attainder or ex post facto Law shall be passed. Clause 4: No Capitation, or other direct, Tax shall be laid, unless in Proportion to the Census or Enumeration herein before directed to be taken. (See Note 7) Clause 5: No Tax or Duty shall be laid on Articles exported from any State. Clause 6: No Preference shall be given by any Regulation of Commerce or Revenue to the Ports of one State over those of another: nor shall Vessels bound to, or from, one State, be obliged to enter, clear, or pay Duties in another. Clause 7: No Money shall be drawn from the Treasury, but in Consequence of Appropriations made by Law; and a regular Statement and Account of the Receipts and Expenditures of all public Money shall be published from time to time. Clause 8: No Title of Nobility shall be granted by the United States: And no Person holding any Office of Profit or Trust under them, shall, without the Consent of the Congress, accept of any present, Emolument, Office, or Title, of any kind whatever, from any King, Prince, or foreign State. Section. 10. Clause 1: No State shall enter into any Treaty, Alliance, or Confederation; grant Letters of Marque and Reprisal; coin Money; emit Bills of Credit; make any Thing but gold and silver Coin a Tender in Payment of Debts; pass any Bill of Attainder, ex post facto Law, or Law impairing the Obligation of Contracts, or grant any Title of Nobility. Clause 2: No State shall, without the Consent of the Congress, lay any Imposts or Duties on Imports or Exports, except what may be absolutely necessary for executing it's inspection Laws: and the net Produce of all Duties and Imposts, laid by any State on Imports or Exports, shall be for the Use of the Treasury of the United States; and all such Laws shall be subject to the Revision and Controul of the Congress. Clause 3: No State shall, without the Consent of Congress, lay any Duty of Tonnage, keep Troops, or Ships of War in time of Peace, enter into any Agreement or Compact with another State, or with a foreign Power, or engage in War, unless actually invaded, or in such imminent Danger as will not admit of delay. Article. II. Section. 1. Clause 1: The executive Power shall be vested in a President of the United States of America. He shall hold his Office during the Term of four Years, and, together with the Vice President, chosen for the same Term, be elected, as follows Clause 2: Each State shall appoint, in such Manner as the Legislature thereof may direct, a Number of Electors, equal to the whole Number of Senators and Representatives to which the State may be entitled in the Congress: but no Senator or Representative, or Person holding an Office of Trust or Profit under the United States, shall be appointed an Elector. Clause 3: The Electors shall meet in their respective States, and vote by Ballot for two Persons, of whom one at least shall not be an Inhabitant of the same State with themselves. And they shall make a List of all the Persons voted for, and of the Number of Votes for each; which List they shall sign and certify, and transmit sealed to the Seat of the Government of the United States, directed to the President of the Senate. The President of the Senate shall, in the Presence of the Senate and House of Representatives, open all the Certificates, and the Votes shall then be counted. The Person having the greatest Number of Votes shall be the President, if such Number be a Majority of the whole Number of Electors appointed; and if there be more than one who have such Majority, and have an equal Number of Votes, then the House of Representatives shall immediately chuse by Ballot one of them for President; and if no Person have a Majority, then from the five highest on the List the said House shall in like Manner chuse the President. But in chusing the President, the Votes shall be taken by States, the Representation from each State having one Vote; A quorum for this Purpose shall consist of a Member or Members from two thirds of the States, and a Majority of all the States shall be necessary to a Choice. In every Case, after the Choice of the President, the Person having the greatest Number of Votes of the Electors shall be the Vice President. But if there should remain two or more who have equal Votes, the Senate shall chuse from them by Ballot the Vice President. (See Note 8) Clause 4: The Congress may determine the Time of chusing the Electors, and the Day on which they shall give their Votes; which Day shall be the same throughout the United States. Clause 5: No Person except a natural born Citizen, or a Citizen of the United States, at the time of the Adoption of this Constitution, shall be eligible to the Office of President; neither shall any Person be eligible to that Office who shall not have attained to the Age of thirty five Years, and been fourteen Years a Resident within the United States. Clause 6: In Case of the Removal of the President from Office, or of his Death, Resignation, or Inability to discharge the Powers and Duties of the said Office, (See Note 9) the Same shall devolve on the VicePresident, and the Congress may by Law provide for the Case of Removal, Death, Resignation or Inability, both of the President and Vice President, declaring what Officer shall then act as President, and such Officer shall act accordingly, until the Disability be removed, or a President shall be elected. Clause 7: The President shall, at stated Times, receive for his Services, a Compensation, which shall neither be encreased nor diminished during the Period for which he shall have been elected, and he shall not receive within that Period any other Emolument from the United States, or any of them. Clause 8: Before he enter on the Execution of his Office, he shall take the following Oath or Affirmation:--"I do solemnly swear (or affirm) that I will faithfully execute the Office of President of the United States, and will to the best of my Ability, preserve, protect and defend the Constitution of the United States." Section. 2. Clause 1: The President shall be Commander in Chief of the Army and Navy of the United States, and of the Militia of the several States, when called into the actual Service of the United States; he may require the Opinion, in writing, of the principal Officer in each of the executive Departments, upon any Subject relating to the Duties of their respective Offices, and he shall have Power to grant Reprieves and Pardons for Offences against the United States, except in Cases of Impeachment. Clause 2: He shall have Power, by and with the Advice and Consent of the Senate, to make Treaties, provided two thirds of the Senators present concur; and he shall nominate, and by and with the Advice and Consent of the Senate, shall appoint Ambassadors, other public Ministers and Consuls, Judges of the supreme Court, and all other Officers of the United States, whose Appointments are not herein otherwise provided for, and which shall be established by Law: but the Congress may by Law vest the Appointment of such inferior Officers, as they think proper, in the President alone, in the Courts of Law, or in the Heads of Departments. Clause 3: The President shall have Power to fill up all Vacancies that may happen during the Recess of the Senate, by granting Commissions which shall expire at the End of their next Session. Section. 3. He shall from time to time give to the Congress Information of the State of the Union, and recommend to their Consideration such Measures as he shall judge necessary and expedient; he may, on extraordinary Occasions, convene both Houses, or either of them, and in Case of Disagreement between them, with Respect to the Time of Adjournment, he may adjourn them to such Time as he shall think proper; he shall receive Ambassadors and other public Ministers; he shall take Care that the Laws be faithfully executed, and shall Commission all the Officers of the United States. Section. 4. The President, Vice President and all civil Officers of the United States, shall be removed from Office on Impeachment for, and Conviction of, Treason, Bribery, or other high Crimes and Misdemeanors. Article. III. Section. 1. The judicial Power of the United States, shall be vested in one supreme Court, and in such inferior Courts as the Congress may from time to time ordain and establish. The Judges, both of the supreme and inferior Courts, shall hold their Offices during good Behaviour, and shall, at stated Times, receive for their Services, a Compensation, which shall not be diminished during their Continuance in Office. Section. 2. Clause 1: The judicial Power shall extend to all Cases, in Law and Equity, arising under this Constitution, the Laws of the United States, and Treaties made, or which shall be made, under their Authority;--to all Cases affecting Ambassadors, other public Ministers and Consuls;--to all Cases of admiralty and maritime Jurisdiction;--to Controversies to which the United States shall be a Party;--to Controversies between two or more States;--between a State and Citizens of another State; (See Note 10)--between Citizens of different States, --between Citizens of the same State claiming Lands under Grants of different States, and between a State, or the Citizens thereof, and foreign States, Citizens or Subjects. Clause 2: In all Cases affecting Ambassadors, other public Ministers and Consuls, and those in which a State shall be Party, the supreme Court shall have original Jurisdiction. In all the other Cases before mentioned, the supreme Court shall have appellate Jurisdiction, both as to Law and Fact, with such Exceptions, and under such Regulations as the Congress shall make. Clause 3: The Trial of all Crimes, except in Cases of Impeachment, shall be by Jury; and such Trial shall be held in the State where the said Crimes shall have been committed; but when not committed within any State, the Trial shall be at such Place or Places as the Congress may by Law have directed. Section. 3. Clause 1: Treason against the United States, shall consist only in levying War against them, or in adhering to their Enemies, giving them Aid and Comfort. No Person shall be convicted of Treason unless on the Testimony of two Witnesses to the same overt Act, or on Confession in open Court. Clause 2: The Congress shall have Power to declare the Punishment of Treason, but no Attainder of Treason shall work Corruption of Blood, or Forfeiture except during the Life of the Person attainted. Article. IV. Section. 1. Full Faith and Credit shall be given in each State to the public Acts, Records, and judicial Proceedings of every other State. And the Congress may by general Laws prescribe the Manner in which such Acts, Records and Proceedings shall be proved, and the Effect thereof. Section. 2. Clause 1: The Citizens of each State shall be entitled to all Privileges and Immunities of Citizens in the several States. Clause 2: A Person charged in any State with Treason, Felony, or other Crime, who shall flee from Justice, and be found in another State, shall on Demand of the executive Authority of the State from which he fled, be delivered up, to be removed to the State having Jurisdiction of the Crime. Clause 3: No Person held to Service or Labour in one State, under the Laws thereof, escaping into another, shall, in Consequence of any Law or Regulation therein, be discharged from such Service or Labour, but shall be delivered up on Claim of the Party to whom such Service or Labour may be due. (See Note 11) Section. 3. Clause 1: New States may be admitted by the Congress into this Union; but no new State shall be formed or erected within the Jurisdiction of any other State; nor any State be formed by the Junction of two or more States, or Parts of States, without the Consent of the Legislatures of the States concerned as well as of the Congress. Clause 2: The Congress shall have Power to dispose of and make all needful Rules and Regulations respecting the Territory or other Property belonging to the United States; and nothing in this Constitution shall be so construed as to Prejudice any Claims of the United States, or of any particular State. Section. 4. The United States shall guarantee to every State in this Union a Republican Form of Government, and shall protect each of them against Invasion; and on Application of the Legislature, or of the Executive (when the Legislature cannot be convened) against domestic Violence. Article. V. The Congress, whenever two thirds of both Houses shall deem it necessary, shall propose [1]Amendments to this Constitution, or, on the Application of the Legislatures of two thirds of the several States, shall call a Convention for proposing Amendments, which, in either Case, shall be valid to all Intents and Purposes, as Part of this Constitution, when ratified by the Legislatures of three fourths of the several States, or by Conventions in three fourths thereof, as the one or the other Mode of Ratification may be proposed by the Congress; Provided that no Amendment which may be made prior to the Year One thousand eight hundred and eight shall in any Manner affect the first and fourth Clauses in the Ninth Section of the first Article; and that no State, without its Consent, shall be deprived of its equal Suffrage in the Senate. Article. VI. Clause 1: All Debts contracted and Engagements entered into, before the Adoption of this Constitution, shall be as valid against the United States under this Constitution, as under the Confederation. Clause 2: This Constitution, and the Laws of the United States which shall be made in Pursuance thereof; and all Treaties made, or which shall be made, under the Authority of the United States, shall be the supreme Law of the Land; and the Judges in every State shall be bound thereby, any Thing in the Constitution or Laws of any State to the Contrary notwithstanding. Clause 3: The Senators and Representatives before mentioned, and the Members of the several State Legislatures, and all executive and judicial Officers, both of the United States and of the several States, shall be bound by Oath or Affirmation, to support this Constitution; but no religious Test shall ever be required as a Qualification to any Office or public Trust under the United States. Article. VII. The Ratification of the Conventions of nine States, shall be sufficient for the Establishment of this Constitution between the States so ratifying the Same. done in Convention by the Unanimous Consent of the States present the Seventeenth Day of September in the Year of our Lord one thousand seven hundred and Eighty seven and of the Independence of the United States of America the Twelfth In witness whereof We have hereunto subscribed our Names, GO WASHINGTON--Presidt. and deputy from Virginia [Signed also by the deputies of twelve States.] Delaware Geo: Read Gunning Bedford jun John Dickinson Richard Bassett Jaco: Broom Maryland James MCHenry Dan of ST ThoS. Jenifer DanL Carroll. Virginia John Blair-- James Madison Jr. North Carolina WM Blount RichD. Dobbs Spaight. Hu Williamson South Carolina J. Rutledge Charles 1ACotesworth Pinckney Charles Pinckney Pierce Butler. Georgia William Few Abr Baldwin New Hampshire John Langdon Nicholas Gilman Massachusetts Nathaniel Gorham Rufus King Connecticut WM. SamL. Johnson Roger Sherman New York Alexander Hamilton New Jersey Wil: Livingston David Brearley. WM. Paterson. Jona: Dayton Pennsylvania B Franklin Thomas Mifflin RobT Morris Geo. Clymer ThoS. FitzSimons Jared Ingersoll James Wilson. Gouv Morris Attest William Jackson Secretary NOTES Note 1: This text of the Constitution follows the engrossed copy signed by Gen. Washington and the deputies from 12 States. The small superior figures preceding the paragraphs designate Clauses, and were not in the original and have no reference to footnotes. The Constitution was adopted by a convention of the States on September 17, 1787, and was subsequently ratified by the several States, on the following dates: Delaware, December 7, 1787; Pennsylvania, December 12, 1787; New Jersey, December 18, 1787; Georgia, January 2, 1788; Connecticut, January 9, 1788; Massachusetts, February 6, 1788; Maryland, April 28, 1788; South Carolina, May 23, 1788; New Hampshire, June 21, 1788. Ratification was completed on June 21, 1788. The Constitution was subsequently ratified by Virginia, June 25, 1788; New York, July 26, 1788; North Carolina, November 21, 1789; Rhode Island, May 29, 1790; and Vermont, January 10, 1791. In May 1785, a committee of Congress made a report recommending an alteration in the Articles of Confederation, but no action was taken on it, and it was left to the State Legislatures to proceed in the matter. In January 1786, the Legislature of Virginia passed a resolution providing for the appointment of five commissioners, who, or any three of them, should meet such commissioners as might be appointed in the other States of the Union, at a time and place to be agreed upon, to take into consideration the trade of the United States; to consider how far a uniform system in their commercial regulations may be necessary to their common interest and their permanent harmony; and to report to the several States such an act, relative to this great object, as, when ratified by them, will enable the United States in Congress effectually to provide for the same. The Virginia commissioners, after some correspondence, fixed the first Monday in September as the time, and the city of Annapolis as the place for the meeting, but only four other States were represented, viz: Delaware, New York, New Jersey, and Pennsylvania; the commissioners appointed by Massachusetts, New Hampshire, North Carolina, and Rhode Island failed to attend. Under the circumstances of so partial a representation, the commissioners present agreed upon a report, (drawn by Mr. Hamilton, of New York,) expressing their unanimous conviction that it might essentially tend to advance the interests of the Union if the States by which they were respectively delegated would concur, and use their endeavors to procure the concurrence of the other States, in the appointment of commissioners to meet at Philadelphia on the Second Monday of May following, to take into consideration the situation of the United States; to devise such further provisions as should appear to them necessary to render the Constitution of the Federal Government adequate to the exigencies of the Union; and to report such an act for that purpose to the United States in Congress assembled as, when agreed to by them and afterwards confirmed by the Legislatures of every State, would effectually provide for the same. Congress, on the 21st of February, 1787, adopted a resolution in favor of a convention, and the Legislatures of those States which had not already done so (with the exception of Rhode Island) promptly appointed delegates. On the 25th of May, seven States having convened, George Washington, of Virginia, was unanimously elected President, and the consideration of the proposed constitution was commenced. On the 17th of September, 1787, the Constitution as engrossed and agreed upon was signed by all the members present, except Mr. Gerry of Massachusetts, and Messrs. Mason and Randolph, of Virginia. The president of the convention transmitted it to Congress, with a resolution stating how the proposed Federal Government should be put in operation, and an explanatory letter. Congress, on the 28th of September, 1787, directed the Constitution so framed, with the resolutions and letter concerning the same, to "be transmitted to the several Legislatures in order to be submitted to a convention of delegates chosen in each State by the people thereof, in conformity to the resolves of the convention." On the 4th of March, 1789, the day which had been fixed for commencing the operations of Government under the new Constitution, it had been ratified by the conventions chosen in each State to consider it, as follows: Delaware, December 7, 1787; Pennsylvania, December 12, 1787; New Jersey, December 18, 1787; Georgia, January 2, 1788; Connecticut, January 9, 1788; Massachusetts, February 6, 1788; Maryland, April 28, 1788; South Carolina, May 23, 1788; New Hampshire, June 21, 1788; Virginia, June 25, 1788; and New York, July 26, 1788. The President informed Congress, on the 28th of January, 1790, that North Carolina had ratified the Constitution November 21, 1789; and he informed Congress on the 1st of June, 1790, that Rhode Island had ratified the Constitution May 29, 1790. Vermont, in convention, ratified the Constitution January 10, 1791, and was, by an act of Congress approved February 18, 1791, "received and admitted into this Union as a new and entire member of the United States." Note 2: The part of this Clause relating to the mode of apportionment of representatives among the several States has been affected by Section 2 of amendment XIV, and as to taxes on incomes without apportionment by amendment XVI. Note 3: This Clause has been affected by Clause 1 of amendment XVII. Note 4: This Clause has been affected by Clause 2 of amendment XVIII. Note 5: This Clause has been affected by amendment XX. Note 6: This Clause has been affected by amendment XXVII. Note 7: This Clause has been affected by amendment XVI. Note 8: This Clause has been superseded by amendment XII. Note 9: This Clause has been affected by amendment XXV. Note 10: This Clause has been affected by amendment XI. Note 11: This Clause has been affected by amendment XIII. Note 12: The first ten amendments to the Constitution of the United States (and two others, one of which failed of ratification and the other which later became the 27th amendment) were proposed to the legislatures of the several States by the First Congress on September 25, 1789. The first ten amendments were ratified by the following States, and the notifications of ratification by the Governors thereof were successively communicated by the President to Congress: New Jersey, November 20, 1789; Maryland, December 19, 1789; North Carolina, December 22, 1789; South Carolina, January 19, 1790; New Hampshire, January 25, 1790; Delaware, January 28, 1790; New York, February 24, 1790; Pennsylvania, March 10, 1790; Rhode Island, June 7, 1790; Vermont, November 3, 1791; and Virginia, December 15, 1791. Ratification was completed on December 15, 1791. The amendments were subsequently ratified by the legislatures of Massachusetts, March 2, 1939; Georgia, March 18, 1939; and Connecticut, April 19, 1939. Note 13: Only the 13th, 14th, 15th, and 16th articles of amendment had numbers assigned to them at the time of ratification. Note 14: This sentence has been superseded by section 3 of amendment XX. Note 15: See amendment XIX and section 1 of amendment XXVI. Note 16: Repealed by section 1 of amendment XXI. References 1. http://www.house.gov/Constitution/Amend.html flex-2.6.4/tests/quote_in_comment.txt0000664000175000017500000000000513010410070014631 00000000000000test flex-2.6.4/tests/array_nr.txt0000664000175000017500000000006613002262300013112 000000000000000000 foo 1111 foo 0000 bar 0000 foo 1111 foo 0000 bar flex-2.6.4/tests/lineno_trailing.one.txt0000664000175000017500000000026313002262300015231 00000000000000We are testing rules with trailing contexts containing newlines (see scanner.l): Fixed_trailing: test Var_trailing:word test Var_prefix_and_trailing:word: more text comes here flex-2.6.4/tests/bison_nr.txt0000664000175000017500000000014013002262300013077 000000000000000001: FIRSTNAME=firstname 0002: MIDDLENAME=middle 0003: LASTNAME=lastname 0004: ADDRESS=address flex-2.6.4/tests/pthread_4.txt0000664000175000017500000021030313002262300013144 00000000000000Many lines of numbers and words 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar flex-2.6.4/tests/top.l0000664000175000017500000000253613002262300011517 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* Build "scanner.c". The scanner is not important. This test is really about compilation. See "main.c". */ #include #include #include "config.h" #ifndef DEFINE_ME #error "DEFINE_ME undefined!" #endif %} %top{ #define DEFINE_ME 1 } %option reentrant %option 8bit header="top.h" prefix="test" %option nounput nomain noyywrap noinput %option warn %% .|\n { } %% flex-2.6.4/tests/bison_nr_main.c0000664000175000017500000000230013002262300013506 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #include "bison_nr_parser.h" #include "bison_nr_scanner.h" int main ( int argc, char** argv ) { (void)argc; (void)argv; /*yydebug =1;*/ testin = stdin; testparse ( ); return 0; } /* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ flex-2.6.4/tests/header_nr.txt0000664000175000017500000000007513002262300013224 00000000000000Any input is ok for this scanner. We only care if it links. flex-2.6.4/tests/prefix_nr.l0000664000175000017500000000372613002262300012713 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* Builds "scanner.c". */ /* The scanner itself is a no-op. A successful compilation is all we want. */ #include #include #include "config.h" %} %option 8bit prefix="FOO" %option nounput nomain noyywrap noinput %option warn %% .|\n|\r { /* Compile, but do not execute the following code. */ if( 0) { FOO_create_buffer((FILE*)0,0); FOO_delete_buffer((YY_BUFFER_STATE)0); FOO_flush_buffer((YY_BUFFER_STATE)0); FOO_init_buffer((YY_BUFFER_STATE)0,(FILE*)0); FOO_load_buffer_state(); FOO_scan_buffer((char*)0,(yy_size_t)0); FOO_scan_bytes((yyconst char*)0, 0); FOO_scan_string((yyconst char*)0); FOO_switch_to_buffer((YY_BUFFER_STATE)0); yyin = (FILE*)0; yyout = (FILE*)0; yyleng = 0; yylex(); yyrestart((FILE*)0); yytext = (char*)0; } } %% int main(void); int main (void) { yyin = stdin; yyout = stdout; FOOlex(); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/pthread_3.txt0000664000175000017500000021030313002262300013143 00000000000000Many lines of numbers and words 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar flex-2.6.4/tests/header_nr_scanner.l0000664000175000017500000000230613002262300014350 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". */ #include #include #include "config.h" %} %option 8bit prefix="test" header="header_nr_scanner.h" %option nounput nomain noyywrap noinput %option warn %% .|\n { } %% flex-2.6.4/tests/include_by_push.direct.txt0000664000175000017500000000016613002262300015723 00000000000000Beginning of "include_by_push.direct.txt" #include End of "include_by_push.direct.txt" flex-2.6.4/tests/lineno_r.one.txt0000664000175000017500000000045313002262300013662 00000000000000These words are separated by newlines and sometimes spaces too. The next three lines are numbers with only intervening newlines 01123 581321 34 And now for some blank lines.... Finally, we directly modify yylineno, but then change it back afterwards (see scanner.l): yylineno++ yylineno-- flex-2.6.4/tests/mem_nr.l0000664000175000017500000001065213002262300012170 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". * The whole idea is to cause memory realloc by * 1. pushing a lot on the condition stack, and * 2. eating input greater than YY_BUF_SIZE */ #include #include #include "config.h" /* Insanely small read buffer. This pretty much guarantees at least one realloc. */ #ifdef YY_BUF_SIZE #undef YY_BUF_SIZE #endif #define YY_BUF_SIZE 8 %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput noyy_top_state %option warn stack nodefault %option noyyalloc noyyrealloc noyyfree %x parens %% { "(" { printf("yy_push_state(parens)\n"); yy_push_state(parens); } len=[0-9]+ { printf("About read token where %s\n",yytext); } 0+ { } .|\n { } } { "(" { printf("yy_push_state(parens)\n"); yy_push_state(parens); } ")" { printf("yy_pop_state()\n");yy_pop_state();} [^()\n]+ { } .|\n { } } %% /* total memory allocated */ static size_t total_mem=0; /* track the amount of memory for ptr. */ struct memsz { void* p; size_t sz; }; static struct memsz * ptrs=0; /* Array of pairs. */ static int nptrs=0; /* Number of pairs in array. */ static int arrsz=0; /* Capacity of array. */ static void dump_mem(FILE* fp){ int i; fprintf(fp,"\tptrs[%d] = {", nptrs); for (i=0; i < arrsz; i++) fprintf(fp," {%#lx,%ld},", (long)ptrs[i].p, (long)ptrs[i].sz); fprintf(fp,"}\n"); } void * yyalloc(yy_size_t n) { void * p; int i; total_mem += n; p = malloc(n); if( nptrs >= arrsz){ /* increase array size by 1 */ arrsz++; ptrs = realloc(ptrs, (size_t) arrsz * sizeof(struct memsz)); ptrs[nptrs].p = 0; ptrs[nptrs].sz = 0; } /* find a null slot */ for(i=0; i < arrsz ; i++) if (ptrs[i].p == 0) { ptrs[i].p = p; ptrs[i].sz = n; } nptrs++; printf("yyflex_alloc(%8ld) total=%8ld return=%#10lx\n",(long)n,(long)total_mem,(long)p); dump_mem(stdout); return p; } void * yyrealloc(void* p, yy_size_t n) { int i; for (i=0; i < arrsz; i++) if ( ptrs[i].p == p){ total_mem -= ptrs[i].sz; total_mem += n; ptrs[i].p = realloc(p,n); ptrs[i].sz = n; printf("yyflex_realloc(%#10lx,%8ld) total=%8ld return=%8lx\n", (long)p,(long)n,(long)total_mem,(long)ptrs[i].p); dump_mem(stdout); return ptrs[i].p; } fprintf(stderr,"ERROR: yyflex_realloc could not locate pointer %#lx.\n",(long)p); dump_mem(stdout); exit(1); } void yyfree(void* p) { int i; for (i=0; i < arrsz; i++) if ( ptrs[i].p == p){ total_mem -= ptrs[i].sz; free(p); ptrs[i].p = 0; ptrs[i].sz = 0; nptrs--; printf("yyflex_free(%#10lx) total=%8ld\n",(long)p,(long)total_mem); dump_mem(stdout); return; } fprintf(stderr,"ERROR: yyflex_free could not locate pointer %#lx.\n",(long)p); dump_mem(stdout); exit(1); } int main(void); int main (void) { arrsz = 1; ptrs = calloc(1, sizeof(struct memsz)); nptrs = 0; yyin = stdin; yyout = stdout; testlex(); testlex_destroy(); free(ptrs); if ( nptrs > 0 || total_mem > 0){ fprintf(stderr,"Oops. Looks like a memory leak: nptrs=%d, unfreed memory=%ld\n",nptrs,(long)total_mem); exit(1); } printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/include_by_push.direct_2.txt0000664000175000017500000000017213002262300016141 00000000000000Beginning of "include_by_push.direct_2.txt" #include End of "include_by_push.direct_2.txt" flex-2.6.4/tests/cxx_basic.txt0000664000175000017500000000006613002262300013240 000000000000000000 foo 1111 foo 0000 bar 0000 foo 1111 foo 0000 bar flex-2.6.4/tests/bison_nr_scanner.l0000664000175000017500000000336613002262300014241 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* The scanner expects to link to bison yylval . */ #include #include #include "bison_nr_parser.h" #include "config.h" static char* STRDUP(char* s1); #define YY_EXTRA_TYPE int %} %option 8bit prefix="test" %option bison-locations yylineno %option prefix="test" header="bison_nr_scanner.h" yylineno %option nomain nounput noyy_top_state noyywrap nodefault noinput warn %% ^[[:digit:]]+ { yylval->lineno = yylineno; yylloc->first_line = (int)strtol(yytext,NULL,10); return LINENO; } ":" { return COLON; } " " { return SPACE; } "=" { return EQUAL; } [[:alnum:]_]+ { yylval->str = STRDUP(yytext); return IDENT;} \r|\n { } . { yyterminate();} %% static char* STRDUP(char* s1) { char* s2 = malloc(strlen(s1)+1); sprintf(s2,"%s",s1); return s2; } flex-2.6.4/tests/Makefile.in0000664000175000017500000037156513103361146012632 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # This file is part of flex. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ check_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \ $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \ $(am__EXEEXT_7) $(am__EXEEXT_8) subdir = tests ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_prog_cc_for_build.m4 \ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_check_SCRIPTS) \ $(dist_noinst_SCRIPTS) $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__EXEEXT_1 = alloc_extra$(EXEEXT) array_nr$(EXEEXT) array_r$(EXEEXT) \ basic_nr$(EXEEXT) basic_r$(EXEEXT) bison_nr$(EXEEXT) \ bison_yylloc$(EXEEXT) bison_yylval$(EXEEXT) c_cxx_nr$(EXEEXT) \ c_cxx_r$(EXEEXT) ccl$(EXEEXT) cxx_basic$(EXEEXT) \ cxx_multiple_scanners$(EXEEXT) cxx_restart$(EXEEXT) \ debug_nr$(EXEEXT) debug_r$(EXEEXT) extended$(EXEEXT) \ header_nr$(EXEEXT) header_r$(EXEEXT) mem_nr$(EXEEXT) \ mem_r$(EXEEXT) multiple_scanners_nr$(EXEEXT) \ multiple_scanners_r$(EXEEXT) posix$(EXEEXT) \ posixly_correct$(EXEEXT) prefix_nr$(EXEEXT) prefix_r$(EXEEXT) \ quote_in_comment$(EXEEXT) quotes$(EXEEXT) string_nr$(EXEEXT) \ string_r$(EXEEXT) top$(EXEEXT) yyextra$(EXEEXT) am__EXEEXT_2 = reject_nr.reject$(EXEEXT) reject_r.reject$(EXEEXT) am__EXEEXT_3 = reject_ver.table$(EXEEXT) reject_ser.table$(EXEEXT) am__EXEEXT_4 = include_by_buffer.direct$(EXEEXT) \ include_by_push.direct$(EXEEXT) \ include_by_reentrant.direct$(EXEEXT) rescan_nr.direct$(EXEEXT) \ rescan_r.direct$(EXEEXT) am__EXEEXT_5 = cxx_yywrap.i3$(EXEEXT) am__EXEEXT_6 = pthread.pthread$(EXEEXT) am__EXEEXT_7 = lineno_nr.one$(EXEEXT) lineno_r.one$(EXEEXT) \ lineno_trailing.one$(EXEEXT) am__EXEEXT_8 = tableopts_opt_nr-Ca.opt$(EXEEXT) \ tableopts_opt_nr-Ce.opt$(EXEEXT) \ tableopts_opt_nr-Cf.opt$(EXEEXT) \ tableopts_opt_nr-CF.opt$(EXEEXT) \ tableopts_opt_nr-Cm.opt$(EXEEXT) \ tableopts_opt_nr-Cem.opt$(EXEEXT) \ tableopts_opt_nr-Cae.opt$(EXEEXT) \ tableopts_opt_nr-Caef.opt$(EXEEXT) \ tableopts_opt_nr-CaeF.opt$(EXEEXT) \ tableopts_opt_nr-Cam.opt$(EXEEXT) \ tableopts_opt_nr-Caem.opt$(EXEEXT) \ tableopts_opt_r-Ca.opt$(EXEEXT) \ tableopts_opt_r-Ce.opt$(EXEEXT) \ tableopts_opt_r-Cf.opt$(EXEEXT) \ tableopts_opt_r-CF.opt$(EXEEXT) \ tableopts_opt_r-Cm.opt$(EXEEXT) \ tableopts_opt_r-Cem.opt$(EXEEXT) \ tableopts_opt_r-Cae.opt$(EXEEXT) \ tableopts_opt_r-Caef.opt$(EXEEXT) \ tableopts_opt_r-CaeF.opt$(EXEEXT) \ tableopts_opt_r-Cam.opt$(EXEEXT) \ tableopts_opt_r-Caem.opt$(EXEEXT) \ tableopts_ser_nr-Ca.ser$(EXEEXT) \ tableopts_ser_nr-Ce.ser$(EXEEXT) \ tableopts_ser_nr-Cf.ser$(EXEEXT) \ tableopts_ser_nr-CF.ser$(EXEEXT) \ tableopts_ser_nr-Cm.ser$(EXEEXT) \ tableopts_ser_nr-Cem.ser$(EXEEXT) \ tableopts_ser_nr-Cae.ser$(EXEEXT) \ tableopts_ser_nr-Caef.ser$(EXEEXT) \ tableopts_ser_nr-CaeF.ser$(EXEEXT) \ tableopts_ser_nr-Cam.ser$(EXEEXT) \ tableopts_ser_nr-Caem.ser$(EXEEXT) \ tableopts_ser_r-Ca.ser$(EXEEXT) \ tableopts_ser_r-Ce.ser$(EXEEXT) \ tableopts_ser_r-Cf.ser$(EXEEXT) \ tableopts_ser_r-CF.ser$(EXEEXT) \ tableopts_ser_r-Cm.ser$(EXEEXT) \ tableopts_ser_r-Cem.ser$(EXEEXT) \ tableopts_ser_r-Cae.ser$(EXEEXT) \ tableopts_ser_r-Caef.ser$(EXEEXT) \ tableopts_ser_r-CaeF.ser$(EXEEXT) \ tableopts_ser_r-Cam.ser$(EXEEXT) \ tableopts_ser_r-Caem.ser$(EXEEXT) \ tableopts_ver_nr-Ca.ver$(EXEEXT) \ tableopts_ver_nr-Ce.ver$(EXEEXT) \ tableopts_ver_nr-Cf.ver$(EXEEXT) \ tableopts_ver_nr-CF.ver$(EXEEXT) \ tableopts_ver_nr-Cm.ver$(EXEEXT) \ tableopts_ver_nr-Cem.ver$(EXEEXT) \ tableopts_ver_nr-Cae.ver$(EXEEXT) \ tableopts_ver_nr-Caef.ver$(EXEEXT) \ tableopts_ver_nr-CaeF.ver$(EXEEXT) \ tableopts_ver_nr-Cam.ver$(EXEEXT) \ tableopts_ver_nr-Caem.ver$(EXEEXT) \ tableopts_ver_r-Ca.ver$(EXEEXT) \ tableopts_ver_r-Ce.ver$(EXEEXT) \ tableopts_ver_r-Cf.ver$(EXEEXT) \ tableopts_ver_r-CF.ver$(EXEEXT) \ tableopts_ver_r-Cm.ver$(EXEEXT) \ tableopts_ver_r-Cem.ver$(EXEEXT) \ tableopts_ver_r-Cae.ver$(EXEEXT) \ tableopts_ver_r-Caef.ver$(EXEEXT) \ tableopts_ver_r-CaeF.ver$(EXEEXT) \ tableopts_ver_r-Cam.ver$(EXEEXT) \ tableopts_ver_r-Caem.ver$(EXEEXT) am_alloc_extra_OBJECTS = alloc_extra.$(OBJEXT) alloc_extra_OBJECTS = $(am_alloc_extra_OBJECTS) alloc_extra_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_array_nr_OBJECTS = array_nr.$(OBJEXT) array_nr_OBJECTS = $(am_array_nr_OBJECTS) array_nr_LDADD = $(LDADD) am_array_r_OBJECTS = array_r.$(OBJEXT) array_r_OBJECTS = $(am_array_r_OBJECTS) array_r_LDADD = $(LDADD) am_basic_nr_OBJECTS = basic_nr.$(OBJEXT) basic_nr_OBJECTS = $(am_basic_nr_OBJECTS) basic_nr_LDADD = $(LDADD) am_basic_r_OBJECTS = basic_r.$(OBJEXT) basic_r_OBJECTS = $(am_basic_r_OBJECTS) basic_r_LDADD = $(LDADD) am__bison_nr_SOURCES_DIST = no_bison_stub.c bison_nr_scanner.l \ bison_nr_parser.y bison_nr_main.c @HAVE_BISON_FALSE@am_bison_nr_OBJECTS = no_bison_stub.$(OBJEXT) @HAVE_BISON_TRUE@am_bison_nr_OBJECTS = bison_nr_scanner.$(OBJEXT) \ @HAVE_BISON_TRUE@ bison_nr_parser.$(OBJEXT) \ @HAVE_BISON_TRUE@ bison_nr_main.$(OBJEXT) nodist_bison_nr_OBJECTS = bison_nr_OBJECTS = $(am_bison_nr_OBJECTS) $(nodist_bison_nr_OBJECTS) bison_nr_LDADD = $(LDADD) am__bison_yylloc_SOURCES_DIST = no_bison_stub.c bison_yylloc_scanner.l \ bison_yylloc_parser.y bison_yylloc_main.c @HAVE_BISON_FALSE@am_bison_yylloc_OBJECTS = no_bison_stub.$(OBJEXT) @HAVE_BISON_TRUE@am_bison_yylloc_OBJECTS = \ @HAVE_BISON_TRUE@ bison_yylloc_scanner.$(OBJEXT) \ @HAVE_BISON_TRUE@ bison_yylloc_parser.$(OBJEXT) \ @HAVE_BISON_TRUE@ bison_yylloc_main.$(OBJEXT) nodist_bison_yylloc_OBJECTS = bison_yylloc_OBJECTS = $(am_bison_yylloc_OBJECTS) \ $(nodist_bison_yylloc_OBJECTS) bison_yylloc_LDADD = $(LDADD) am__bison_yylval_SOURCES_DIST = no_bison_stub.c bison_yylval_scanner.l \ bison_yylval_parser.y bison_yylval_main.c @HAVE_BISON_FALSE@am_bison_yylval_OBJECTS = no_bison_stub.$(OBJEXT) @HAVE_BISON_TRUE@am_bison_yylval_OBJECTS = \ @HAVE_BISON_TRUE@ bison_yylval_scanner.$(OBJEXT) \ @HAVE_BISON_TRUE@ bison_yylval_parser.$(OBJEXT) \ @HAVE_BISON_TRUE@ bison_yylval_main.$(OBJEXT) nodist_bison_yylval_OBJECTS = bison_yylval_OBJECTS = $(am_bison_yylval_OBJECTS) \ $(nodist_bison_yylval_OBJECTS) bison_yylval_LDADD = $(LDADD) am_c_cxx_nr_OBJECTS = c_cxx_nr.$(OBJEXT) c_cxx_nr_OBJECTS = $(am_c_cxx_nr_OBJECTS) c_cxx_nr_LDADD = $(LDADD) am_c_cxx_r_OBJECTS = c_cxx_r.$(OBJEXT) c_cxx_r_OBJECTS = $(am_c_cxx_r_OBJECTS) c_cxx_r_LDADD = $(LDADD) am_ccl_OBJECTS = ccl.$(OBJEXT) ccl_OBJECTS = $(am_ccl_OBJECTS) ccl_LDADD = $(LDADD) am_cxx_basic_OBJECTS = cxx_basic.$(OBJEXT) cxx_basic_OBJECTS = $(am_cxx_basic_OBJECTS) cxx_basic_LDADD = $(LDADD) am_cxx_multiple_scanners_OBJECTS = \ cxx_multiple_scanners_main.$(OBJEXT) \ cxx_multiple_scanners_1.$(OBJEXT) \ cxx_multiple_scanners_2.$(OBJEXT) cxx_multiple_scanners_OBJECTS = $(am_cxx_multiple_scanners_OBJECTS) cxx_multiple_scanners_LDADD = $(LDADD) am_cxx_restart_OBJECTS = cxx_restart.$(OBJEXT) cxx_restart_OBJECTS = $(am_cxx_restart_OBJECTS) cxx_restart_LDADD = $(LDADD) am_cxx_yywrap_i3_OBJECTS = cxx_yywrap.$(OBJEXT) cxx_yywrap_i3_OBJECTS = $(am_cxx_yywrap_i3_OBJECTS) cxx_yywrap_i3_LDADD = $(LDADD) am_debug_nr_OBJECTS = debug_nr.$(OBJEXT) debug_nr_OBJECTS = $(am_debug_nr_OBJECTS) debug_nr_LDADD = $(LDADD) am_debug_r_OBJECTS = debug_r.$(OBJEXT) debug_r_OBJECTS = $(am_debug_r_OBJECTS) debug_r_LDADD = $(LDADD) am_extended_OBJECTS = extended.$(OBJEXT) extended_OBJECTS = $(am_extended_OBJECTS) extended_LDADD = $(LDADD) am_header_nr_OBJECTS = header_nr_scanner.$(OBJEXT) \ header_nr_main.$(OBJEXT) nodist_header_nr_OBJECTS = header_nr_OBJECTS = $(am_header_nr_OBJECTS) \ $(nodist_header_nr_OBJECTS) header_nr_LDADD = $(LDADD) am_header_r_OBJECTS = header_r_scanner.$(OBJEXT) \ header_r_main.$(OBJEXT) nodist_header_r_OBJECTS = header_r_OBJECTS = $(am_header_r_OBJECTS) $(nodist_header_r_OBJECTS) header_r_LDADD = $(LDADD) am_include_by_buffer_direct_OBJECTS = \ include_by_buffer.direct.$(OBJEXT) include_by_buffer_direct_OBJECTS = \ $(am_include_by_buffer_direct_OBJECTS) include_by_buffer_direct_LDADD = $(LDADD) am_include_by_push_direct_OBJECTS = include_by_push.direct.$(OBJEXT) include_by_push_direct_OBJECTS = $(am_include_by_push_direct_OBJECTS) include_by_push_direct_LDADD = $(LDADD) am_include_by_reentrant_direct_OBJECTS = \ include_by_reentrant.direct.$(OBJEXT) include_by_reentrant_direct_OBJECTS = \ $(am_include_by_reentrant_direct_OBJECTS) include_by_reentrant_direct_LDADD = $(LDADD) am_lineno_nr_one_OBJECTS = lineno_nr.$(OBJEXT) lineno_nr_one_OBJECTS = $(am_lineno_nr_one_OBJECTS) lineno_nr_one_LDADD = $(LDADD) am_lineno_r_one_OBJECTS = lineno_r.$(OBJEXT) lineno_r_one_OBJECTS = $(am_lineno_r_one_OBJECTS) lineno_r_one_LDADD = $(LDADD) am_lineno_trailing_one_OBJECTS = lineno_trailing.$(OBJEXT) lineno_trailing_one_OBJECTS = $(am_lineno_trailing_one_OBJECTS) lineno_trailing_one_LDADD = $(LDADD) am_mem_nr_OBJECTS = mem_nr.$(OBJEXT) mem_nr_OBJECTS = $(am_mem_nr_OBJECTS) mem_nr_LDADD = $(LDADD) am_mem_r_OBJECTS = mem_r.$(OBJEXT) mem_r_OBJECTS = $(am_mem_r_OBJECTS) mem_r_LDADD = $(LDADD) am_multiple_scanners_nr_OBJECTS = multiple_scanners_nr_main.$(OBJEXT) \ multiple_scanners_nr_1.$(OBJEXT) \ multiple_scanners_nr_2.$(OBJEXT) nodist_multiple_scanners_nr_OBJECTS = multiple_scanners_nr_OBJECTS = $(am_multiple_scanners_nr_OBJECTS) \ $(nodist_multiple_scanners_nr_OBJECTS) multiple_scanners_nr_LDADD = $(LDADD) am_multiple_scanners_r_OBJECTS = multiple_scanners_r_main.$(OBJEXT) \ multiple_scanners_r_1.$(OBJEXT) \ multiple_scanners_r_2.$(OBJEXT) nodist_multiple_scanners_r_OBJECTS = multiple_scanners_r_OBJECTS = $(am_multiple_scanners_r_OBJECTS) \ $(nodist_multiple_scanners_r_OBJECTS) multiple_scanners_r_LDADD = $(LDADD) am_posix_OBJECTS = posix.$(OBJEXT) posix_OBJECTS = $(am_posix_OBJECTS) posix_LDADD = $(LDADD) am_posixly_correct_OBJECTS = posixly_correct.$(OBJEXT) posixly_correct_OBJECTS = $(am_posixly_correct_OBJECTS) posixly_correct_LDADD = $(LDADD) am_prefix_nr_OBJECTS = prefix_nr.$(OBJEXT) prefix_nr_OBJECTS = $(am_prefix_nr_OBJECTS) prefix_nr_LDADD = $(LDADD) am_prefix_r_OBJECTS = prefix_r.$(OBJEXT) prefix_r_OBJECTS = $(am_prefix_r_OBJECTS) prefix_r_LDADD = $(LDADD) am_pthread_pthread_OBJECTS = pthread.$(OBJEXT) pthread_pthread_OBJECTS = $(am_pthread_pthread_OBJECTS) pthread_pthread_DEPENDENCIES = am_quote_in_comment_OBJECTS = quote_in_comment.$(OBJEXT) quote_in_comment_OBJECTS = $(am_quote_in_comment_OBJECTS) quote_in_comment_LDADD = $(LDADD) am_quotes_OBJECTS = quotes.$(OBJEXT) quotes_OBJECTS = $(am_quotes_OBJECTS) quotes_LDADD = $(LDADD) am_reject_nr_reject_OBJECTS = reject_nr_reject_OBJECTS = $(am_reject_nr_reject_OBJECTS) reject_nr_reject_LDADD = $(LDADD) am_reject_r_reject_OBJECTS = reject_r_reject_OBJECTS = $(am_reject_r_reject_OBJECTS) reject_r_reject_LDADD = $(LDADD) am_reject_ser_table_OBJECTS = reject_ser_table_OBJECTS = $(am_reject_ser_table_OBJECTS) reject_ser_table_LDADD = $(LDADD) am_reject_ver_table_OBJECTS = reject_ver_table_OBJECTS = $(am_reject_ver_table_OBJECTS) reject_ver_table_LDADD = $(LDADD) am_rescan_nr_direct_OBJECTS = rescan_nr.direct.$(OBJEXT) rescan_nr_direct_OBJECTS = $(am_rescan_nr_direct_OBJECTS) rescan_nr_direct_LDADD = $(LDADD) am_rescan_r_direct_OBJECTS = rescan_r.direct.$(OBJEXT) rescan_r_direct_OBJECTS = $(am_rescan_r_direct_OBJECTS) rescan_r_direct_LDADD = $(LDADD) am_string_nr_OBJECTS = string_nr.$(OBJEXT) string_nr_OBJECTS = $(am_string_nr_OBJECTS) string_nr_LDADD = $(LDADD) am_string_r_OBJECTS = string_r.$(OBJEXT) string_r_OBJECTS = $(am_string_r_OBJECTS) string_r_LDADD = $(LDADD) am_tableopts_opt_nr_CF_opt_OBJECTS = tableopts_opt_nr_CF_opt_OBJECTS = \ $(am_tableopts_opt_nr_CF_opt_OBJECTS) tableopts_opt_nr_CF_opt_LDADD = $(LDADD) am_tableopts_opt_nr_Ca_opt_OBJECTS = tableopts_opt_nr_Ca_opt_OBJECTS = \ $(am_tableopts_opt_nr_Ca_opt_OBJECTS) tableopts_opt_nr_Ca_opt_LDADD = $(LDADD) am_tableopts_opt_nr_Cae_opt_OBJECTS = tableopts_opt_nr_Cae_opt_OBJECTS = \ $(am_tableopts_opt_nr_Cae_opt_OBJECTS) tableopts_opt_nr_Cae_opt_LDADD = $(LDADD) am_tableopts_opt_nr_CaeF_opt_OBJECTS = tableopts_opt_nr_CaeF_opt_OBJECTS = \ $(am_tableopts_opt_nr_CaeF_opt_OBJECTS) tableopts_opt_nr_CaeF_opt_LDADD = $(LDADD) am_tableopts_opt_nr_Caef_opt_OBJECTS = tableopts_opt_nr_Caef_opt_OBJECTS = \ $(am_tableopts_opt_nr_Caef_opt_OBJECTS) tableopts_opt_nr_Caef_opt_LDADD = $(LDADD) am_tableopts_opt_nr_Caem_opt_OBJECTS = tableopts_opt_nr_Caem_opt_OBJECTS = \ $(am_tableopts_opt_nr_Caem_opt_OBJECTS) tableopts_opt_nr_Caem_opt_LDADD = $(LDADD) am_tableopts_opt_nr_Cam_opt_OBJECTS = tableopts_opt_nr_Cam_opt_OBJECTS = \ $(am_tableopts_opt_nr_Cam_opt_OBJECTS) tableopts_opt_nr_Cam_opt_LDADD = $(LDADD) am_tableopts_opt_nr_Ce_opt_OBJECTS = tableopts_opt_nr_Ce_opt_OBJECTS = \ $(am_tableopts_opt_nr_Ce_opt_OBJECTS) tableopts_opt_nr_Ce_opt_LDADD = $(LDADD) am_tableopts_opt_nr_Cem_opt_OBJECTS = tableopts_opt_nr_Cem_opt_OBJECTS = \ $(am_tableopts_opt_nr_Cem_opt_OBJECTS) tableopts_opt_nr_Cem_opt_LDADD = $(LDADD) am_tableopts_opt_nr_Cf_opt_OBJECTS = tableopts_opt_nr_Cf_opt_OBJECTS = \ $(am_tableopts_opt_nr_Cf_opt_OBJECTS) tableopts_opt_nr_Cf_opt_LDADD = $(LDADD) am_tableopts_opt_nr_Cm_opt_OBJECTS = tableopts_opt_nr_Cm_opt_OBJECTS = \ $(am_tableopts_opt_nr_Cm_opt_OBJECTS) tableopts_opt_nr_Cm_opt_LDADD = $(LDADD) am_tableopts_opt_r_CF_opt_OBJECTS = tableopts_opt_r_CF_opt_OBJECTS = $(am_tableopts_opt_r_CF_opt_OBJECTS) tableopts_opt_r_CF_opt_LDADD = $(LDADD) am_tableopts_opt_r_Ca_opt_OBJECTS = tableopts_opt_r_Ca_opt_OBJECTS = $(am_tableopts_opt_r_Ca_opt_OBJECTS) tableopts_opt_r_Ca_opt_LDADD = $(LDADD) am_tableopts_opt_r_Cae_opt_OBJECTS = tableopts_opt_r_Cae_opt_OBJECTS = \ $(am_tableopts_opt_r_Cae_opt_OBJECTS) tableopts_opt_r_Cae_opt_LDADD = $(LDADD) am_tableopts_opt_r_CaeF_opt_OBJECTS = tableopts_opt_r_CaeF_opt_OBJECTS = \ $(am_tableopts_opt_r_CaeF_opt_OBJECTS) tableopts_opt_r_CaeF_opt_LDADD = $(LDADD) am_tableopts_opt_r_Caef_opt_OBJECTS = tableopts_opt_r_Caef_opt_OBJECTS = \ $(am_tableopts_opt_r_Caef_opt_OBJECTS) tableopts_opt_r_Caef_opt_LDADD = $(LDADD) am_tableopts_opt_r_Caem_opt_OBJECTS = tableopts_opt_r_Caem_opt_OBJECTS = \ $(am_tableopts_opt_r_Caem_opt_OBJECTS) tableopts_opt_r_Caem_opt_LDADD = $(LDADD) am_tableopts_opt_r_Cam_opt_OBJECTS = tableopts_opt_r_Cam_opt_OBJECTS = \ $(am_tableopts_opt_r_Cam_opt_OBJECTS) tableopts_opt_r_Cam_opt_LDADD = $(LDADD) am_tableopts_opt_r_Ce_opt_OBJECTS = tableopts_opt_r_Ce_opt_OBJECTS = $(am_tableopts_opt_r_Ce_opt_OBJECTS) tableopts_opt_r_Ce_opt_LDADD = $(LDADD) am_tableopts_opt_r_Cem_opt_OBJECTS = tableopts_opt_r_Cem_opt_OBJECTS = \ $(am_tableopts_opt_r_Cem_opt_OBJECTS) tableopts_opt_r_Cem_opt_LDADD = $(LDADD) am_tableopts_opt_r_Cf_opt_OBJECTS = tableopts_opt_r_Cf_opt_OBJECTS = $(am_tableopts_opt_r_Cf_opt_OBJECTS) tableopts_opt_r_Cf_opt_LDADD = $(LDADD) am_tableopts_opt_r_Cm_opt_OBJECTS = tableopts_opt_r_Cm_opt_OBJECTS = $(am_tableopts_opt_r_Cm_opt_OBJECTS) tableopts_opt_r_Cm_opt_LDADD = $(LDADD) am_tableopts_ser_nr_CF_ser_OBJECTS = tableopts_ser_nr_CF_ser_OBJECTS = \ $(am_tableopts_ser_nr_CF_ser_OBJECTS) tableopts_ser_nr_CF_ser_LDADD = $(LDADD) am_tableopts_ser_nr_Ca_ser_OBJECTS = tableopts_ser_nr_Ca_ser_OBJECTS = \ $(am_tableopts_ser_nr_Ca_ser_OBJECTS) tableopts_ser_nr_Ca_ser_LDADD = $(LDADD) am_tableopts_ser_nr_Cae_ser_OBJECTS = tableopts_ser_nr_Cae_ser_OBJECTS = \ $(am_tableopts_ser_nr_Cae_ser_OBJECTS) tableopts_ser_nr_Cae_ser_LDADD = $(LDADD) am_tableopts_ser_nr_CaeF_ser_OBJECTS = tableopts_ser_nr_CaeF_ser_OBJECTS = \ $(am_tableopts_ser_nr_CaeF_ser_OBJECTS) tableopts_ser_nr_CaeF_ser_LDADD = $(LDADD) am_tableopts_ser_nr_Caef_ser_OBJECTS = tableopts_ser_nr_Caef_ser_OBJECTS = \ $(am_tableopts_ser_nr_Caef_ser_OBJECTS) tableopts_ser_nr_Caef_ser_LDADD = $(LDADD) am_tableopts_ser_nr_Caem_ser_OBJECTS = tableopts_ser_nr_Caem_ser_OBJECTS = \ $(am_tableopts_ser_nr_Caem_ser_OBJECTS) tableopts_ser_nr_Caem_ser_LDADD = $(LDADD) am_tableopts_ser_nr_Cam_ser_OBJECTS = tableopts_ser_nr_Cam_ser_OBJECTS = \ $(am_tableopts_ser_nr_Cam_ser_OBJECTS) tableopts_ser_nr_Cam_ser_LDADD = $(LDADD) am_tableopts_ser_nr_Ce_ser_OBJECTS = tableopts_ser_nr_Ce_ser_OBJECTS = \ $(am_tableopts_ser_nr_Ce_ser_OBJECTS) tableopts_ser_nr_Ce_ser_LDADD = $(LDADD) am_tableopts_ser_nr_Cem_ser_OBJECTS = tableopts_ser_nr_Cem_ser_OBJECTS = \ $(am_tableopts_ser_nr_Cem_ser_OBJECTS) tableopts_ser_nr_Cem_ser_LDADD = $(LDADD) am_tableopts_ser_nr_Cf_ser_OBJECTS = tableopts_ser_nr_Cf_ser_OBJECTS = \ $(am_tableopts_ser_nr_Cf_ser_OBJECTS) tableopts_ser_nr_Cf_ser_LDADD = $(LDADD) am_tableopts_ser_nr_Cm_ser_OBJECTS = tableopts_ser_nr_Cm_ser_OBJECTS = \ $(am_tableopts_ser_nr_Cm_ser_OBJECTS) tableopts_ser_nr_Cm_ser_LDADD = $(LDADD) am_tableopts_ser_r_CF_ser_OBJECTS = tableopts_ser_r_CF_ser_OBJECTS = $(am_tableopts_ser_r_CF_ser_OBJECTS) tableopts_ser_r_CF_ser_LDADD = $(LDADD) am_tableopts_ser_r_Ca_ser_OBJECTS = tableopts_ser_r_Ca_ser_OBJECTS = $(am_tableopts_ser_r_Ca_ser_OBJECTS) tableopts_ser_r_Ca_ser_LDADD = $(LDADD) am_tableopts_ser_r_Cae_ser_OBJECTS = tableopts_ser_r_Cae_ser_OBJECTS = \ $(am_tableopts_ser_r_Cae_ser_OBJECTS) tableopts_ser_r_Cae_ser_LDADD = $(LDADD) am_tableopts_ser_r_CaeF_ser_OBJECTS = tableopts_ser_r_CaeF_ser_OBJECTS = \ $(am_tableopts_ser_r_CaeF_ser_OBJECTS) tableopts_ser_r_CaeF_ser_LDADD = $(LDADD) am_tableopts_ser_r_Caef_ser_OBJECTS = tableopts_ser_r_Caef_ser_OBJECTS = \ $(am_tableopts_ser_r_Caef_ser_OBJECTS) tableopts_ser_r_Caef_ser_LDADD = $(LDADD) am_tableopts_ser_r_Caem_ser_OBJECTS = tableopts_ser_r_Caem_ser_OBJECTS = \ $(am_tableopts_ser_r_Caem_ser_OBJECTS) tableopts_ser_r_Caem_ser_LDADD = $(LDADD) am_tableopts_ser_r_Cam_ser_OBJECTS = tableopts_ser_r_Cam_ser_OBJECTS = \ $(am_tableopts_ser_r_Cam_ser_OBJECTS) tableopts_ser_r_Cam_ser_LDADD = $(LDADD) am_tableopts_ser_r_Ce_ser_OBJECTS = tableopts_ser_r_Ce_ser_OBJECTS = $(am_tableopts_ser_r_Ce_ser_OBJECTS) tableopts_ser_r_Ce_ser_LDADD = $(LDADD) am_tableopts_ser_r_Cem_ser_OBJECTS = tableopts_ser_r_Cem_ser_OBJECTS = \ $(am_tableopts_ser_r_Cem_ser_OBJECTS) tableopts_ser_r_Cem_ser_LDADD = $(LDADD) am_tableopts_ser_r_Cf_ser_OBJECTS = tableopts_ser_r_Cf_ser_OBJECTS = $(am_tableopts_ser_r_Cf_ser_OBJECTS) tableopts_ser_r_Cf_ser_LDADD = $(LDADD) am_tableopts_ser_r_Cm_ser_OBJECTS = tableopts_ser_r_Cm_ser_OBJECTS = $(am_tableopts_ser_r_Cm_ser_OBJECTS) tableopts_ser_r_Cm_ser_LDADD = $(LDADD) am_tableopts_ver_nr_CF_ver_OBJECTS = tableopts_ver_nr_CF_ver_OBJECTS = \ $(am_tableopts_ver_nr_CF_ver_OBJECTS) tableopts_ver_nr_CF_ver_LDADD = $(LDADD) am_tableopts_ver_nr_Ca_ver_OBJECTS = tableopts_ver_nr_Ca_ver_OBJECTS = \ $(am_tableopts_ver_nr_Ca_ver_OBJECTS) tableopts_ver_nr_Ca_ver_LDADD = $(LDADD) am_tableopts_ver_nr_Cae_ver_OBJECTS = tableopts_ver_nr_Cae_ver_OBJECTS = \ $(am_tableopts_ver_nr_Cae_ver_OBJECTS) tableopts_ver_nr_Cae_ver_LDADD = $(LDADD) am_tableopts_ver_nr_CaeF_ver_OBJECTS = tableopts_ver_nr_CaeF_ver_OBJECTS = \ $(am_tableopts_ver_nr_CaeF_ver_OBJECTS) tableopts_ver_nr_CaeF_ver_LDADD = $(LDADD) am_tableopts_ver_nr_Caef_ver_OBJECTS = tableopts_ver_nr_Caef_ver_OBJECTS = \ $(am_tableopts_ver_nr_Caef_ver_OBJECTS) tableopts_ver_nr_Caef_ver_LDADD = $(LDADD) am_tableopts_ver_nr_Caem_ver_OBJECTS = tableopts_ver_nr_Caem_ver_OBJECTS = \ $(am_tableopts_ver_nr_Caem_ver_OBJECTS) tableopts_ver_nr_Caem_ver_LDADD = $(LDADD) am_tableopts_ver_nr_Cam_ver_OBJECTS = tableopts_ver_nr_Cam_ver_OBJECTS = \ $(am_tableopts_ver_nr_Cam_ver_OBJECTS) tableopts_ver_nr_Cam_ver_LDADD = $(LDADD) am_tableopts_ver_nr_Ce_ver_OBJECTS = tableopts_ver_nr_Ce_ver_OBJECTS = \ $(am_tableopts_ver_nr_Ce_ver_OBJECTS) tableopts_ver_nr_Ce_ver_LDADD = $(LDADD) am_tableopts_ver_nr_Cem_ver_OBJECTS = tableopts_ver_nr_Cem_ver_OBJECTS = \ $(am_tableopts_ver_nr_Cem_ver_OBJECTS) tableopts_ver_nr_Cem_ver_LDADD = $(LDADD) am_tableopts_ver_nr_Cf_ver_OBJECTS = tableopts_ver_nr_Cf_ver_OBJECTS = \ $(am_tableopts_ver_nr_Cf_ver_OBJECTS) tableopts_ver_nr_Cf_ver_LDADD = $(LDADD) am_tableopts_ver_nr_Cm_ver_OBJECTS = tableopts_ver_nr_Cm_ver_OBJECTS = \ $(am_tableopts_ver_nr_Cm_ver_OBJECTS) tableopts_ver_nr_Cm_ver_LDADD = $(LDADD) am_tableopts_ver_r_CF_ver_OBJECTS = tableopts_ver_r_CF_ver_OBJECTS = $(am_tableopts_ver_r_CF_ver_OBJECTS) tableopts_ver_r_CF_ver_LDADD = $(LDADD) am_tableopts_ver_r_Ca_ver_OBJECTS = tableopts_ver_r_Ca_ver_OBJECTS = $(am_tableopts_ver_r_Ca_ver_OBJECTS) tableopts_ver_r_Ca_ver_LDADD = $(LDADD) am_tableopts_ver_r_Cae_ver_OBJECTS = tableopts_ver_r_Cae_ver_OBJECTS = \ $(am_tableopts_ver_r_Cae_ver_OBJECTS) tableopts_ver_r_Cae_ver_LDADD = $(LDADD) am_tableopts_ver_r_CaeF_ver_OBJECTS = tableopts_ver_r_CaeF_ver_OBJECTS = \ $(am_tableopts_ver_r_CaeF_ver_OBJECTS) tableopts_ver_r_CaeF_ver_LDADD = $(LDADD) am_tableopts_ver_r_Caef_ver_OBJECTS = tableopts_ver_r_Caef_ver_OBJECTS = \ $(am_tableopts_ver_r_Caef_ver_OBJECTS) tableopts_ver_r_Caef_ver_LDADD = $(LDADD) am_tableopts_ver_r_Caem_ver_OBJECTS = tableopts_ver_r_Caem_ver_OBJECTS = \ $(am_tableopts_ver_r_Caem_ver_OBJECTS) tableopts_ver_r_Caem_ver_LDADD = $(LDADD) am_tableopts_ver_r_Cam_ver_OBJECTS = tableopts_ver_r_Cam_ver_OBJECTS = \ $(am_tableopts_ver_r_Cam_ver_OBJECTS) tableopts_ver_r_Cam_ver_LDADD = $(LDADD) am_tableopts_ver_r_Ce_ver_OBJECTS = tableopts_ver_r_Ce_ver_OBJECTS = $(am_tableopts_ver_r_Ce_ver_OBJECTS) tableopts_ver_r_Ce_ver_LDADD = $(LDADD) am_tableopts_ver_r_Cem_ver_OBJECTS = tableopts_ver_r_Cem_ver_OBJECTS = \ $(am_tableopts_ver_r_Cem_ver_OBJECTS) tableopts_ver_r_Cem_ver_LDADD = $(LDADD) am_tableopts_ver_r_Cf_ver_OBJECTS = tableopts_ver_r_Cf_ver_OBJECTS = $(am_tableopts_ver_r_Cf_ver_OBJECTS) tableopts_ver_r_Cf_ver_LDADD = $(LDADD) am_tableopts_ver_r_Cm_ver_OBJECTS = tableopts_ver_r_Cm_ver_OBJECTS = $(am_tableopts_ver_r_Cm_ver_OBJECTS) tableopts_ver_r_Cm_ver_LDADD = $(LDADD) am_top_OBJECTS = top.$(OBJEXT) top_main.$(OBJEXT) nodist_top_OBJECTS = top_OBJECTS = $(am_top_OBJECTS) $(nodist_top_OBJECTS) top_LDADD = $(LDADD) am_yyextra_OBJECTS = yyextra.$(OBJEXT) yyextra_OBJECTS = $(am_yyextra_OBJECTS) yyextra_LDADD = $(LDADD) SCRIPTS = $(dist_noinst_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS) AM_V_LEX = $(am__v_LEX_@AM_V@) am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@) am__v_LEX_0 = @echo " LEX " $@; am__v_LEX_1 = YLWRAP = $(top_srcdir)/build-aux/ylwrap am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) AM_V_YACC = $(am__v_YACC_@AM_V@) am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) am__v_YACC_0 = @echo " YACC " $@; am__v_YACC_1 = SOURCES = $(alloc_extra_SOURCES) $(array_nr_SOURCES) \ $(array_r_SOURCES) $(basic_nr_SOURCES) $(basic_r_SOURCES) \ $(bison_nr_SOURCES) $(nodist_bison_nr_SOURCES) \ $(bison_yylloc_SOURCES) $(nodist_bison_yylloc_SOURCES) \ $(bison_yylval_SOURCES) $(nodist_bison_yylval_SOURCES) \ $(c_cxx_nr_SOURCES) $(c_cxx_r_SOURCES) $(ccl_SOURCES) \ $(cxx_basic_SOURCES) $(cxx_multiple_scanners_SOURCES) \ $(cxx_restart_SOURCES) $(cxx_yywrap_i3_SOURCES) \ $(debug_nr_SOURCES) $(debug_r_SOURCES) $(extended_SOURCES) \ $(header_nr_SOURCES) $(nodist_header_nr_SOURCES) \ $(header_r_SOURCES) $(nodist_header_r_SOURCES) \ $(include_by_buffer_direct_SOURCES) \ $(include_by_push_direct_SOURCES) \ $(include_by_reentrant_direct_SOURCES) \ $(lineno_nr_one_SOURCES) $(lineno_r_one_SOURCES) \ $(lineno_trailing_one_SOURCES) $(mem_nr_SOURCES) \ $(mem_r_SOURCES) $(multiple_scanners_nr_SOURCES) \ $(nodist_multiple_scanners_nr_SOURCES) \ $(multiple_scanners_r_SOURCES) \ $(nodist_multiple_scanners_r_SOURCES) $(posix_SOURCES) \ $(posixly_correct_SOURCES) $(prefix_nr_SOURCES) \ $(prefix_r_SOURCES) $(pthread_pthread_SOURCES) \ $(quote_in_comment_SOURCES) $(quotes_SOURCES) \ $(reject_nr_reject_SOURCES) $(reject_r_reject_SOURCES) \ $(reject_ser_table_SOURCES) $(reject_ver_table_SOURCES) \ $(rescan_nr_direct_SOURCES) $(rescan_r_direct_SOURCES) \ $(string_nr_SOURCES) $(string_r_SOURCES) \ $(tableopts_opt_nr_CF_opt_SOURCES) \ $(tableopts_opt_nr_Ca_opt_SOURCES) \ $(tableopts_opt_nr_Cae_opt_SOURCES) \ $(tableopts_opt_nr_CaeF_opt_SOURCES) \ $(tableopts_opt_nr_Caef_opt_SOURCES) \ $(tableopts_opt_nr_Caem_opt_SOURCES) \ $(tableopts_opt_nr_Cam_opt_SOURCES) \ $(tableopts_opt_nr_Ce_opt_SOURCES) \ $(tableopts_opt_nr_Cem_opt_SOURCES) \ $(tableopts_opt_nr_Cf_opt_SOURCES) \ $(tableopts_opt_nr_Cm_opt_SOURCES) \ $(tableopts_opt_r_CF_opt_SOURCES) \ $(tableopts_opt_r_Ca_opt_SOURCES) \ $(tableopts_opt_r_Cae_opt_SOURCES) \ $(tableopts_opt_r_CaeF_opt_SOURCES) \ $(tableopts_opt_r_Caef_opt_SOURCES) \ $(tableopts_opt_r_Caem_opt_SOURCES) \ $(tableopts_opt_r_Cam_opt_SOURCES) \ $(tableopts_opt_r_Ce_opt_SOURCES) \ $(tableopts_opt_r_Cem_opt_SOURCES) \ $(tableopts_opt_r_Cf_opt_SOURCES) \ $(tableopts_opt_r_Cm_opt_SOURCES) \ $(tableopts_ser_nr_CF_ser_SOURCES) \ $(tableopts_ser_nr_Ca_ser_SOURCES) \ $(tableopts_ser_nr_Cae_ser_SOURCES) \ $(tableopts_ser_nr_CaeF_ser_SOURCES) \ $(tableopts_ser_nr_Caef_ser_SOURCES) \ $(tableopts_ser_nr_Caem_ser_SOURCES) \ $(tableopts_ser_nr_Cam_ser_SOURCES) \ $(tableopts_ser_nr_Ce_ser_SOURCES) \ $(tableopts_ser_nr_Cem_ser_SOURCES) \ $(tableopts_ser_nr_Cf_ser_SOURCES) \ $(tableopts_ser_nr_Cm_ser_SOURCES) \ $(tableopts_ser_r_CF_ser_SOURCES) \ $(tableopts_ser_r_Ca_ser_SOURCES) \ $(tableopts_ser_r_Cae_ser_SOURCES) \ $(tableopts_ser_r_CaeF_ser_SOURCES) \ $(tableopts_ser_r_Caef_ser_SOURCES) \ $(tableopts_ser_r_Caem_ser_SOURCES) \ $(tableopts_ser_r_Cam_ser_SOURCES) \ $(tableopts_ser_r_Ce_ser_SOURCES) \ $(tableopts_ser_r_Cem_ser_SOURCES) \ $(tableopts_ser_r_Cf_ser_SOURCES) \ $(tableopts_ser_r_Cm_ser_SOURCES) \ $(tableopts_ver_nr_CF_ver_SOURCES) \ $(tableopts_ver_nr_Ca_ver_SOURCES) \ $(tableopts_ver_nr_Cae_ver_SOURCES) \ $(tableopts_ver_nr_CaeF_ver_SOURCES) \ $(tableopts_ver_nr_Caef_ver_SOURCES) \ $(tableopts_ver_nr_Caem_ver_SOURCES) \ $(tableopts_ver_nr_Cam_ver_SOURCES) \ $(tableopts_ver_nr_Ce_ver_SOURCES) \ $(tableopts_ver_nr_Cem_ver_SOURCES) \ $(tableopts_ver_nr_Cf_ver_SOURCES) \ $(tableopts_ver_nr_Cm_ver_SOURCES) \ $(tableopts_ver_r_CF_ver_SOURCES) \ $(tableopts_ver_r_Ca_ver_SOURCES) \ $(tableopts_ver_r_Cae_ver_SOURCES) \ $(tableopts_ver_r_CaeF_ver_SOURCES) \ $(tableopts_ver_r_Caef_ver_SOURCES) \ $(tableopts_ver_r_Caem_ver_SOURCES) \ $(tableopts_ver_r_Cam_ver_SOURCES) \ $(tableopts_ver_r_Ce_ver_SOURCES) \ $(tableopts_ver_r_Cem_ver_SOURCES) \ $(tableopts_ver_r_Cf_ver_SOURCES) \ $(tableopts_ver_r_Cm_ver_SOURCES) $(top_SOURCES) \ $(nodist_top_SOURCES) $(yyextra_SOURCES) DIST_SOURCES = $(alloc_extra_SOURCES) $(array_nr_SOURCES) \ $(array_r_SOURCES) $(basic_nr_SOURCES) $(basic_r_SOURCES) \ $(am__bison_nr_SOURCES_DIST) $(am__bison_yylloc_SOURCES_DIST) \ $(am__bison_yylval_SOURCES_DIST) $(c_cxx_nr_SOURCES) \ $(c_cxx_r_SOURCES) $(ccl_SOURCES) $(cxx_basic_SOURCES) \ $(cxx_multiple_scanners_SOURCES) $(cxx_restart_SOURCES) \ $(cxx_yywrap_i3_SOURCES) $(debug_nr_SOURCES) \ $(debug_r_SOURCES) $(extended_SOURCES) $(header_nr_SOURCES) \ $(header_r_SOURCES) $(include_by_buffer_direct_SOURCES) \ $(include_by_push_direct_SOURCES) \ $(include_by_reentrant_direct_SOURCES) \ $(lineno_nr_one_SOURCES) $(lineno_r_one_SOURCES) \ $(lineno_trailing_one_SOURCES) $(mem_nr_SOURCES) \ $(mem_r_SOURCES) $(multiple_scanners_nr_SOURCES) \ $(multiple_scanners_r_SOURCES) $(posix_SOURCES) \ $(posixly_correct_SOURCES) $(prefix_nr_SOURCES) \ $(prefix_r_SOURCES) $(pthread_pthread_SOURCES) \ $(quote_in_comment_SOURCES) $(quotes_SOURCES) \ $(reject_nr_reject_SOURCES) $(reject_r_reject_SOURCES) \ $(reject_ser_table_SOURCES) $(reject_ver_table_SOURCES) \ $(rescan_nr_direct_SOURCES) $(rescan_r_direct_SOURCES) \ $(string_nr_SOURCES) $(string_r_SOURCES) \ $(tableopts_opt_nr_CF_opt_SOURCES) \ $(tableopts_opt_nr_Ca_opt_SOURCES) \ $(tableopts_opt_nr_Cae_opt_SOURCES) \ $(tableopts_opt_nr_CaeF_opt_SOURCES) \ $(tableopts_opt_nr_Caef_opt_SOURCES) \ $(tableopts_opt_nr_Caem_opt_SOURCES) \ $(tableopts_opt_nr_Cam_opt_SOURCES) \ $(tableopts_opt_nr_Ce_opt_SOURCES) \ $(tableopts_opt_nr_Cem_opt_SOURCES) \ $(tableopts_opt_nr_Cf_opt_SOURCES) \ $(tableopts_opt_nr_Cm_opt_SOURCES) \ $(tableopts_opt_r_CF_opt_SOURCES) \ $(tableopts_opt_r_Ca_opt_SOURCES) \ $(tableopts_opt_r_Cae_opt_SOURCES) \ $(tableopts_opt_r_CaeF_opt_SOURCES) \ $(tableopts_opt_r_Caef_opt_SOURCES) \ $(tableopts_opt_r_Caem_opt_SOURCES) \ $(tableopts_opt_r_Cam_opt_SOURCES) \ $(tableopts_opt_r_Ce_opt_SOURCES) \ $(tableopts_opt_r_Cem_opt_SOURCES) \ $(tableopts_opt_r_Cf_opt_SOURCES) \ $(tableopts_opt_r_Cm_opt_SOURCES) \ $(tableopts_ser_nr_CF_ser_SOURCES) \ $(tableopts_ser_nr_Ca_ser_SOURCES) \ $(tableopts_ser_nr_Cae_ser_SOURCES) \ $(tableopts_ser_nr_CaeF_ser_SOURCES) \ $(tableopts_ser_nr_Caef_ser_SOURCES) \ $(tableopts_ser_nr_Caem_ser_SOURCES) \ $(tableopts_ser_nr_Cam_ser_SOURCES) \ $(tableopts_ser_nr_Ce_ser_SOURCES) \ $(tableopts_ser_nr_Cem_ser_SOURCES) \ $(tableopts_ser_nr_Cf_ser_SOURCES) \ $(tableopts_ser_nr_Cm_ser_SOURCES) \ $(tableopts_ser_r_CF_ser_SOURCES) \ $(tableopts_ser_r_Ca_ser_SOURCES) \ $(tableopts_ser_r_Cae_ser_SOURCES) \ $(tableopts_ser_r_CaeF_ser_SOURCES) \ $(tableopts_ser_r_Caef_ser_SOURCES) \ $(tableopts_ser_r_Caem_ser_SOURCES) \ $(tableopts_ser_r_Cam_ser_SOURCES) \ $(tableopts_ser_r_Ce_ser_SOURCES) \ $(tableopts_ser_r_Cem_ser_SOURCES) \ $(tableopts_ser_r_Cf_ser_SOURCES) \ $(tableopts_ser_r_Cm_ser_SOURCES) \ $(tableopts_ver_nr_CF_ver_SOURCES) \ $(tableopts_ver_nr_Ca_ver_SOURCES) \ $(tableopts_ver_nr_Cae_ver_SOURCES) \ $(tableopts_ver_nr_CaeF_ver_SOURCES) \ $(tableopts_ver_nr_Caef_ver_SOURCES) \ $(tableopts_ver_nr_Caem_ver_SOURCES) \ $(tableopts_ver_nr_Cam_ver_SOURCES) \ $(tableopts_ver_nr_Ce_ver_SOURCES) \ $(tableopts_ver_nr_Cem_ver_SOURCES) \ $(tableopts_ver_nr_Cf_ver_SOURCES) \ $(tableopts_ver_nr_Cm_ver_SOURCES) \ $(tableopts_ver_r_CF_ver_SOURCES) \ $(tableopts_ver_r_Ca_ver_SOURCES) \ $(tableopts_ver_r_Cae_ver_SOURCES) \ $(tableopts_ver_r_CaeF_ver_SOURCES) \ $(tableopts_ver_r_Caef_ver_SOURCES) \ $(tableopts_ver_r_Caem_ver_SOURCES) \ $(tableopts_ver_r_Cam_ver_SOURCES) \ $(tableopts_ver_r_Ce_ver_SOURCES) \ $(tableopts_ver_r_Cem_ver_SOURCES) \ $(tableopts_ver_r_Cf_ver_SOURCES) \ $(tableopts_ver_r_Cm_ver_SOURCES) $(top_SOURCES) \ $(yyextra_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) am__test_logs3 = $(am__test_logs2:.reject.log=.log) REJECT_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver REJECT_LOG_COMPILE = $(REJECT_LOG_COMPILER) $(AM_REJECT_LOG_FLAGS) \ $(REJECT_LOG_FLAGS) am__test_logs4 = $(am__test_logs3:.table.log=.log) TABLE_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TABLE_LOG_COMPILE = $(TABLE_LOG_COMPILER) $(AM_TABLE_LOG_FLAGS) \ $(TABLE_LOG_FLAGS) am__test_logs5 = $(am__test_logs4:.direct.log=.log) DIRECT_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver DIRECT_LOG_COMPILE = $(DIRECT_LOG_COMPILER) $(AM_DIRECT_LOG_FLAGS) \ $(DIRECT_LOG_FLAGS) am__test_logs6 = $(am__test_logs5:.cn.log=.log) CN_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver CN_LOG_COMPILE = $(CN_LOG_COMPILER) $(AM_CN_LOG_FLAGS) $(CN_LOG_FLAGS) am__test_logs7 = $(am__test_logs6:.i3.log=.log) I3_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver I3_LOG_COMPILE = $(I3_LOG_COMPILER) $(AM_I3_LOG_FLAGS) $(I3_LOG_FLAGS) am__test_logs8 = $(am__test_logs7:.pthread.log=.log) PTHREAD_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver PTHREAD_LOG_COMPILE = $(PTHREAD_LOG_COMPILER) $(AM_PTHREAD_LOG_FLAGS) \ $(PTHREAD_LOG_FLAGS) am__test_logs9 = $(am__test_logs8:.one.log=.log) ONE_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver ONE_LOG_COMPILE = $(ONE_LOG_COMPILER) $(AM_ONE_LOG_FLAGS) \ $(ONE_LOG_FLAGS) am__test_logs10 = $(am__test_logs9:.opt.log=.log) OPT_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver OPT_LOG_COMPILE = $(OPT_LOG_COMPILER) $(AM_OPT_LOG_FLAGS) \ $(OPT_LOG_FLAGS) am__test_logs11 = $(am__test_logs10:.ser.log=.log) SER_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver SER_LOG_COMPILE = $(SER_LOG_COMPILER) $(AM_SER_LOG_FLAGS) \ $(SER_LOG_FLAGS) TEST_LOGS = $(am__test_logs11:.ver.log=.log) VER_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver VER_LOG_COMPILE = $(VER_LOG_COMPILER) $(AM_VER_LOG_FLAGS) \ $(VER_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/tableopts.am \ $(top_srcdir)/build-aux/depcomp \ $(top_srcdir)/build-aux/test-driver \ $(top_srcdir)/build-aux/ylwrap README alloc_extra.c array_nr.c \ array_r.c basic_nr.c basic_r.c bison_nr_parser.c \ bison_nr_parser.h bison_nr_scanner.c bison_yylloc_parser.c \ bison_yylloc_parser.h bison_yylloc_scanner.c \ bison_yylval_parser.c bison_yylval_parser.h \ bison_yylval_scanner.c ccl.c cxx_basic.cc \ cxx_multiple_scanners_1.cc cxx_multiple_scanners_2.cc \ cxx_restart.cc cxx_yywrap.cc debug_nr.c debug_r.c extended.c \ header_nr_scanner.c header_r_scanner.c \ include_by_buffer.direct.c include_by_push.direct.c \ include_by_reentrant.direct.c lineno_nr.c lineno_r.c \ lineno_trailing.c mem_nr.c mem_r.c multiple_scanners_nr_1.c \ multiple_scanners_nr_2.c multiple_scanners_r_1.c \ multiple_scanners_r_2.c posix.c posixly_correct.c prefix_nr.c \ prefix_r.c pthread.c quote_in_comment.c quotes.c \ rescan_nr.direct.c rescan_r.direct.c string_nr.c string_r.c \ top.c yyextra.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_EXEEXT = @BUILD_EXEEXT@ BUILD_OBJEXT = @BUILD_OBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@ CPP_FOR_BUILD = @CPP_FOR_BUILD@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ HELP2MAN = @HELP2MAN@ INDENT = @INDENT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBPTHREAD = @LIBPTHREAD@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ M4 = @M4@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ SHELL = @SHELL@ STRIP = @STRIP@ TEXI2DVI = @TEXI2DVI@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARNINGFLAGS = @WARNINGFLAGS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CC_FOR_BUILD = @ac_ct_CC_FOR_BUILD@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = $(WARNINGFLAGS) TESTS = $(check_PROGRAMS) options.cn # The script testwrapper.sh will run most tests as is. A couple tests # in the suite end in .reject, .table and the like so that we can pass # different arguments to the test runner. We list those extensions so # automake knows how to distinguish between the various kinds of tests # we have. TEST_EXTENSIONS = .reject .table .direct .cn .i3 .pthread .one .opt .ser .ver LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_LOG_FLAGS = -d $(srcdir) -r REJECT_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_REJECT_LOG_FLAGS = -d $(srcdir) -i $(srcdir)/reject.txt -r TABLE_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_TABLE_LOG_FLAGS = -d $(builddir) -i $(srcdir)/reject.txt -t DIRECT_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper-direct.sh AM_DIRECT_LOG_FLAGS = -b $(abs_builddir) -s $(srcdir) CN_LOG_COMPILER = $(SHELL) $(srcdir)/options.cn AM_CN_LOG_FLAGS = $(FLEX) I3_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_I3_LOG_FLAGS = -i $(srcdir)/cxx_yywrap.txt -i $(srcdir)/cxx_yywrap.txt -i $(srcdir)/cxx_yywrap.txt PTHREAD_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_PTHREAD_LOG_FLAGS = -i $(srcdir)/pthread_1.txt -i $(srcdir)/pthread_2.txt -i $(srcdir)/pthread_3.txt -i $(srcdir)/pthread_4.txt -i $(srcdir)/pthread_5.txt ONE_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_ONE_LOG_FLAGS = -1 -d $(srcdir) AM_YFLAGS = -d -p test AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src simple_tests = \ alloc_extra \ array_nr \ array_r \ basic_nr \ basic_r \ bison_nr \ bison_yylloc \ bison_yylval \ c_cxx_nr \ c_cxx_r \ ccl \ cxx_basic \ cxx_multiple_scanners \ cxx_restart \ debug_nr \ debug_r \ extended \ header_nr \ header_r \ mem_nr \ mem_r \ multiple_scanners_nr \ multiple_scanners_r \ posix \ posixly_correct \ prefix_nr \ prefix_r \ quote_in_comment \ quotes \ string_nr \ string_r \ top \ yyextra reject_tests = \ reject_nr.reject \ reject_r.reject TABLE_TESTS = \ reject_ver.table \ reject_ser.table DIRECT_TESTS = \ include_by_buffer.direct \ include_by_push.direct \ include_by_reentrant.direct \ rescan_nr.direct \ rescan_r.direct I3_TESTS = \ cxx_yywrap.i3 PTHREAD_TESTS = \ pthread.pthread ONE_TESTS = \ lineno_nr.one \ lineno_r.one \ lineno_trailing.one quote_in_comment_SOURCES = quote_in_comment.l alloc_extra_SOURCES = alloc_extra.l array_nr_SOURCES = array_nr.l array_r_SOURCES = array_r.l basic_nr_SOURCES = basic_nr.l basic_r_SOURCES = basic_r.l @HAVE_BISON_FALSE@bison_nr_SOURCES = no_bison_stub.c @HAVE_BISON_TRUE@bison_nr_SOURCES = bison_nr_scanner.l bison_nr_parser.y bison_nr_main.c @HAVE_BISON_TRUE@nodist_bison_nr_SOURCES = bison_nr_parser.h bison_nr_scanner.h @HAVE_BISON_FALSE@bison_yylloc_SOURCES = no_bison_stub.c @HAVE_BISON_TRUE@bison_yylloc_SOURCES = bison_yylloc_scanner.l bison_yylloc_parser.y bison_yylloc_main.c @HAVE_BISON_TRUE@nodist_bison_yylloc_SOURCES = bison_yylloc_parser.h bison_yylloc_scanner.h @HAVE_BISON_FALSE@bison_yylval_SOURCES = no_bison_stub.c @HAVE_BISON_TRUE@bison_yylval_SOURCES = bison_yylval_scanner.l bison_yylval_parser.y bison_yylval_main.c @HAVE_BISON_TRUE@nodist_bison_yylval_SOURCES = bison_yylval_parser.h bison_yylval_scanner.h c_cxx_nr_SOURCES = c_cxx_nr.lll c_cxx_r_SOURCES = c_cxx_r.lll ccl_SOURCES = ccl.l cxx_basic_SOURCES = cxx_basic.ll cxx_restart_SOURCES = cxx_restart.ll cxx_multiple_scanners_SOURCES = cxx_multiple_scanners_main.cc cxx_multiple_scanners_1.ll cxx_multiple_scanners_2.ll cxx_yywrap_i3_SOURCES = cxx_yywrap.ll debug_nr_SOURCES = debug_nr.l debug_r_SOURCES = debug_r.l extended_SOURCES = extended.l header_nr_SOURCES = header_nr_scanner.l header_nr_main.c nodist_header_nr_SOURCES = header_nr_scanner.h header_r_SOURCES = header_r_scanner.l header_r_main.c nodist_header_r_SOURCES = header_r_scanner.h include_by_buffer_direct_SOURCES = include_by_buffer.direct.l include_by_push_direct_SOURCES = include_by_push.direct.l include_by_reentrant_direct_SOURCES = include_by_reentrant.direct.l lineno_nr_one_SOURCES = lineno_nr.l lineno_r_one_SOURCES = lineno_r.l lineno_trailing_one_SOURCES = lineno_trailing.l mem_nr_SOURCES = mem_nr.l mem_r_SOURCES = mem_r.l multiple_scanners_nr_SOURCES = multiple_scanners_nr_main.c multiple_scanners_nr_1.l multiple_scanners_nr_2.l nodist_multiple_scanners_nr_SOURCES = multiple_scanners_nr_1.h multiple_scanners_nr_2.h multiple_scanners_r_SOURCES = multiple_scanners_r_main.c multiple_scanners_r_1.l multiple_scanners_r_2.l nodist_multiple_scanners_r_SOURCES = multiple_scanners_nr_1.h multiple_scanners_nr_2.h posix_SOURCES = posix.l posixly_correct_SOURCES = posixly_correct.l prefix_nr_SOURCES = prefix_nr.l prefix_r_SOURCES = prefix_r.l pthread_pthread_SOURCES = pthread.l quotes_SOURCES = quotes.l reject_nr_reject_SOURCES = reject.l4 reject_r_reject_SOURCES = reject.l4 reject_ver_table_SOURCES = reject.l4 reject_ser_table_SOURCES = reject.l4 rescan_nr_direct_SOURCES = rescan_nr.direct.l rescan_r_direct_SOURCES = rescan_r.direct.l string_nr_SOURCES = string_nr.l string_r_SOURCES = string_r.l top_SOURCES = top.l top_main.c nodist_top_SOURCES = top.h yyextra_SOURCES = yyextra.l # Normally, automake would distribute files built by flex. Since the # point of the test suite is to test the files that flex builds, and # since anyone who has the flex distribution can build a flex binary # without having a flex binary, we want to not distribute the files # built by flex in the test suite. The dist-hook target accomplishes # this goal. It's also handy to have the list of files to clean since # automake doesn't know about the whacky ways in which we're abusing # it. CLEANFILES = \ alloc_extra.c \ array_nr.c \ array_r.c \ basic_nr.c \ basic_r.c \ bison_nr_parser.c \ bison_nr_parser.h \ bison_nr_scanner.c \ bison_nr_scanner.h \ bison_yylloc_parser.c \ bison_yylloc_parser.h \ bison_yylloc_scanner.c \ bison_yylloc_scanner.h \ bison_yylval_parser.c \ bison_yylval_parser.h \ bison_yylval_scanner.c \ bison_yylval_scanner.h \ c_cxx_nr.cc \ c_cxx_r.cc \ ccl.c \ cxx_basic.cc \ cxx_multiple_scanners_1.cc \ cxx_multiple_scanners_2.cc \ cxx_restart.cc \ cxx_yywrap.cc \ debug_nr.c \ debug_r.c \ extended.c \ header_nr_scanner.c \ header_nr_scanner.h \ header_r_scanner.c \ header_r_scanner.h \ include_by_buffer.direct.c \ include_by_push.direct.c \ include_by_reentrant.direct.c \ lineno_nr.c \ lineno_r.c \ lineno_trailing.c \ mem_nr.c \ mem_r.c \ multiple_scanners_nr_1.c \ multiple_scanners_nr_1.h \ multiple_scanners_nr_2.c \ multiple_scanners_nr_2.h \ multiple_scanners_r_1.c \ multiple_scanners_r_1.h \ multiple_scanners_r_2.c \ multiple_scanners_r_2.h \ posix.c \ posixly_correct.c \ prefix_nr.c \ prefix_r.c \ pthread.c \ quote_in_comment.c \ quotes.c \ reject_nr.reject.c \ reject_r.reject.c \ reject_ser.table.c \ reject_ser.table.tables \ reject_ver.table.c \ reject_ver.table.tables \ rescan_nr.direct.c \ rescan_r.direct.c \ string_nr.c \ string_r.c \ top.c \ top.h \ yyextra.c \ $(tableopts_c) \ $(tableopts_tables) EXTRA_DIST = \ README \ alloc_extra.txt \ array_nr.txt \ array_r.txt \ basic_nr.txt \ basic_r.txt \ bison_nr.txt \ bison_yylloc.txt \ bison_yylval.txt \ c_cxx_nr.txt \ c_cxx_r.txt \ ccl.txt \ cxx_basic.txt \ cxx_multiple_scanners.txt \ cxx_restart.txt \ cxx_yywrap.txt \ debug_nr.txt \ debug_r.txt \ extended.txt \ header_nr.txt \ header_r.txt \ include_by_buffer.direct.txt \ include_by_buffer.direct_2.txt \ include_by_buffer.direct_3.txt \ include_by_push.direct.txt \ include_by_push.direct_2.txt \ include_by_push.direct_3.txt \ include_by_reentrant.direct.txt \ include_by_reentrant.direct_2.txt \ include_by_reentrant.direct_3.txt \ lineno_nr.one.txt \ lineno_r.one.txt \ lineno_trailing.one.txt \ mem_nr.txt \ mem_r.txt \ prefix_nr.txt \ prefix_r.txt \ pthread_1.txt \ pthread_2.txt \ pthread_3.txt \ pthread_4.txt \ pthread_5.txt \ reject.txt \ rescan_nr.direct.txt \ rescan_r.direct.txt \ quote_in_comment.txt \ quotes.txt \ top.txt \ yyextra.txt \ tableopts.txt dist_noinst_SCRIPTS = \ tableopts.sh dist_check_SCRIPTS = \ options.cn \ testwrapper-direct.sh \ testwrapper.sh pthread_pthread_LDADD = @LIBPTHREAD@ # specify how to process .l files in order to test the flex built by make all FLEX = $(top_builddir)/src/flex tableopts_opt_nr_Ca_opt_SOURCES = tableopts.l4 tableopts_opt_nr_Ce_opt_SOURCES = tableopts.l4 tableopts_opt_nr_Cf_opt_SOURCES = tableopts.l4 tableopts_opt_nr_CF_opt_SOURCES = tableopts.l4 tableopts_opt_nr_Cm_opt_SOURCES = tableopts.l4 tableopts_opt_nr_Cem_opt_SOURCES = tableopts.l4 tableopts_opt_nr_Cae_opt_SOURCES = tableopts.l4 tableopts_opt_nr_Caef_opt_SOURCES = tableopts.l4 tableopts_opt_nr_CaeF_opt_SOURCES = tableopts.l4 tableopts_opt_nr_Cam_opt_SOURCES = tableopts.l4 tableopts_opt_nr_Caem_opt_SOURCES = tableopts.l4 tableopts_opt_r_Ca_opt_SOURCES = tableopts.l4 tableopts_opt_r_Ce_opt_SOURCES = tableopts.l4 tableopts_opt_r_Cf_opt_SOURCES = tableopts.l4 tableopts_opt_r_CF_opt_SOURCES = tableopts.l4 tableopts_opt_r_Cm_opt_SOURCES = tableopts.l4 tableopts_opt_r_Cem_opt_SOURCES = tableopts.l4 tableopts_opt_r_Cae_opt_SOURCES = tableopts.l4 tableopts_opt_r_Caef_opt_SOURCES = tableopts.l4 tableopts_opt_r_CaeF_opt_SOURCES = tableopts.l4 tableopts_opt_r_Cam_opt_SOURCES = tableopts.l4 tableopts_opt_r_Caem_opt_SOURCES = tableopts.l4 tableopts_ser_nr_Ca_ser_SOURCES = tableopts.l4 tableopts_ser_nr_Ce_ser_SOURCES = tableopts.l4 tableopts_ser_nr_Cf_ser_SOURCES = tableopts.l4 tableopts_ser_nr_CF_ser_SOURCES = tableopts.l4 tableopts_ser_nr_Cm_ser_SOURCES = tableopts.l4 tableopts_ser_nr_Cem_ser_SOURCES = tableopts.l4 tableopts_ser_nr_Cae_ser_SOURCES = tableopts.l4 tableopts_ser_nr_Caef_ser_SOURCES = tableopts.l4 tableopts_ser_nr_CaeF_ser_SOURCES = tableopts.l4 tableopts_ser_nr_Cam_ser_SOURCES = tableopts.l4 tableopts_ser_nr_Caem_ser_SOURCES = tableopts.l4 tableopts_ser_r_Ca_ser_SOURCES = tableopts.l4 tableopts_ser_r_Ce_ser_SOURCES = tableopts.l4 tableopts_ser_r_Cf_ser_SOURCES = tableopts.l4 tableopts_ser_r_CF_ser_SOURCES = tableopts.l4 tableopts_ser_r_Cm_ser_SOURCES = tableopts.l4 tableopts_ser_r_Cem_ser_SOURCES = tableopts.l4 tableopts_ser_r_Cae_ser_SOURCES = tableopts.l4 tableopts_ser_r_Caef_ser_SOURCES = tableopts.l4 tableopts_ser_r_CaeF_ser_SOURCES = tableopts.l4 tableopts_ser_r_Cam_ser_SOURCES = tableopts.l4 tableopts_ser_r_Caem_ser_SOURCES = tableopts.l4 tableopts_ver_nr_Ca_ver_SOURCES = tableopts.l4 tableopts_ver_nr_Ce_ver_SOURCES = tableopts.l4 tableopts_ver_nr_Cf_ver_SOURCES = tableopts.l4 tableopts_ver_nr_CF_ver_SOURCES = tableopts.l4 tableopts_ver_nr_Cm_ver_SOURCES = tableopts.l4 tableopts_ver_nr_Cem_ver_SOURCES = tableopts.l4 tableopts_ver_nr_Cae_ver_SOURCES = tableopts.l4 tableopts_ver_nr_Caef_ver_SOURCES = tableopts.l4 tableopts_ver_nr_CaeF_ver_SOURCES = tableopts.l4 tableopts_ver_nr_Cam_ver_SOURCES = tableopts.l4 tableopts_ver_nr_Caem_ver_SOURCES = tableopts.l4 tableopts_ver_r_Ca_ver_SOURCES = tableopts.l4 tableopts_ver_r_Ce_ver_SOURCES = tableopts.l4 tableopts_ver_r_Cf_ver_SOURCES = tableopts.l4 tableopts_ver_r_CF_ver_SOURCES = tableopts.l4 tableopts_ver_r_Cm_ver_SOURCES = tableopts.l4 tableopts_ver_r_Cem_ver_SOURCES = tableopts.l4 tableopts_ver_r_Cae_ver_SOURCES = tableopts.l4 tableopts_ver_r_Caef_ver_SOURCES = tableopts.l4 tableopts_ver_r_CaeF_ver_SOURCES = tableopts.l4 tableopts_ver_r_Cam_ver_SOURCES = tableopts.l4 tableopts_ver_r_Caem_ver_SOURCES = tableopts.l4 TABLEOPTS_TESTS = tableopts_opt_nr-Ca.opt tableopts_opt_nr-Ce.opt \ tableopts_opt_nr-Cf.opt tableopts_opt_nr-CF.opt \ tableopts_opt_nr-Cm.opt tableopts_opt_nr-Cem.opt \ tableopts_opt_nr-Cae.opt tableopts_opt_nr-Caef.opt \ tableopts_opt_nr-CaeF.opt tableopts_opt_nr-Cam.opt \ tableopts_opt_nr-Caem.opt tableopts_opt_r-Ca.opt \ tableopts_opt_r-Ce.opt tableopts_opt_r-Cf.opt \ tableopts_opt_r-CF.opt tableopts_opt_r-Cm.opt \ tableopts_opt_r-Cem.opt tableopts_opt_r-Cae.opt \ tableopts_opt_r-Caef.opt tableopts_opt_r-CaeF.opt \ tableopts_opt_r-Cam.opt tableopts_opt_r-Caem.opt \ tableopts_ser_nr-Ca.ser tableopts_ser_nr-Ce.ser \ tableopts_ser_nr-Cf.ser tableopts_ser_nr-CF.ser \ tableopts_ser_nr-Cm.ser tableopts_ser_nr-Cem.ser \ tableopts_ser_nr-Cae.ser tableopts_ser_nr-Caef.ser \ tableopts_ser_nr-CaeF.ser tableopts_ser_nr-Cam.ser \ tableopts_ser_nr-Caem.ser tableopts_ser_r-Ca.ser \ tableopts_ser_r-Ce.ser tableopts_ser_r-Cf.ser \ tableopts_ser_r-CF.ser tableopts_ser_r-Cm.ser \ tableopts_ser_r-Cem.ser tableopts_ser_r-Cae.ser \ tableopts_ser_r-Caef.ser tableopts_ser_r-CaeF.ser \ tableopts_ser_r-Cam.ser tableopts_ser_r-Caem.ser \ tableopts_ver_nr-Ca.ver tableopts_ver_nr-Ce.ver \ tableopts_ver_nr-Cf.ver tableopts_ver_nr-CF.ver \ tableopts_ver_nr-Cm.ver tableopts_ver_nr-Cem.ver \ tableopts_ver_nr-Cae.ver tableopts_ver_nr-Caef.ver \ tableopts_ver_nr-CaeF.ver tableopts_ver_nr-Cam.ver \ tableopts_ver_nr-Caem.ver tableopts_ver_r-Ca.ver \ tableopts_ver_r-Ce.ver tableopts_ver_r-Cf.ver \ tableopts_ver_r-CF.ver tableopts_ver_r-Cm.ver \ tableopts_ver_r-Cem.ver tableopts_ver_r-Cae.ver \ tableopts_ver_r-Caef.ver tableopts_ver_r-CaeF.ver \ tableopts_ver_r-Cam.ver tableopts_ver_r-Caem.ver tableopts_tables = tableopts_ser_nr-Ca.ser.tables \ tableopts_ser_nr-Ce.ser.tables tableopts_ser_nr-Cf.ser.tables \ tableopts_ser_nr-CF.ser.tables tableopts_ser_nr-Cm.ser.tables \ tableopts_ser_nr-Cem.ser.tables \ tableopts_ser_nr-Cae.ser.tables \ tableopts_ser_nr-Caef.ser.tables \ tableopts_ser_nr-CaeF.ser.tables \ tableopts_ser_nr-Cam.ser.tables \ tableopts_ser_nr-Caem.ser.tables tableopts_ser_r-Ca.ser.tables \ tableopts_ser_r-Ce.ser.tables tableopts_ser_r-Cf.ser.tables \ tableopts_ser_r-CF.ser.tables tableopts_ser_r-Cm.ser.tables \ tableopts_ser_r-Cem.ser.tables tableopts_ser_r-Cae.ser.tables \ tableopts_ser_r-Caef.ser.tables \ tableopts_ser_r-CaeF.ser.tables tableopts_ser_r-Cam.ser.tables \ tableopts_ser_r-Caem.ser.tables tableopts_ver_nr-Ca.ver.tables \ tableopts_ver_nr-Ce.ver.tables tableopts_ver_nr-Cf.ver.tables \ tableopts_ver_nr-CF.ver.tables tableopts_ver_nr-Cm.ver.tables \ tableopts_ver_nr-Cem.ver.tables \ tableopts_ver_nr-Cae.ver.tables \ tableopts_ver_nr-Caef.ver.tables \ tableopts_ver_nr-CaeF.ver.tables \ tableopts_ver_nr-Cam.ver.tables \ tableopts_ver_nr-Caem.ver.tables tableopts_ver_r-Ca.ver.tables \ tableopts_ver_r-Ce.ver.tables tableopts_ver_r-Cf.ver.tables \ tableopts_ver_r-CF.ver.tables tableopts_ver_r-Cm.ver.tables \ tableopts_ver_r-Cem.ver.tables tableopts_ver_r-Cae.ver.tables \ tableopts_ver_r-Caef.ver.tables \ tableopts_ver_r-CaeF.ver.tables tableopts_ver_r-Cam.ver.tables \ tableopts_ver_r-Caem.ver.tables tableopts := -Ca -Ce -Cf -CF -Cm -Cem -Cae -Caef -CaeF -Cam -Caem tableopts_opt_tests := $(foreach opt,$(tableopts), tableopts_opt_nr$(opt) tableopts_opt_r$(opt)) tableopts_sertests := $(foreach opt,$(tableopts), tableopts_ser_nr$(opt) tableopts_ser_r$(opt)) tableopts_vertests := $(foreach opt,$(tableopts), tableopts_ver_nr$(opt) tableopts_ver_r$(opt)) tableopts_tests := $(tableopts_opttests) $(tableopts_vertests) $(tableopts_sertests) tableopts_c := $(addsuffix .c,$(tableopts_tests)) OPT_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_OPT_LOG_FLAGS = -d $(srcdir) -i $(srcdir)/tableopts.txt -r SER_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_SER_LOG_FLAGS = -d $(builddir) -i $(srcdir)/tableopts.txt -r -t VER_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_VER_LOG_FLAGS = -d $(builddir) -i $(srcdir)/tableopts.txt -r -t all: all-am .SUFFIXES: .SUFFIXES: .c .cc .cn .cn$(EXEEXT) .direct .direct$(EXEEXT) .i3 .i3$(EXEEXT) .l .ll .lll .lo .log .o .obj .one .one$(EXEEXT) .opt .opt$(EXEEXT) .pthread .pthread$(EXEEXT) .reject .reject$(EXEEXT) .ser .ser$(EXEEXT) .table .table$(EXEEXT) .trs .ver .ver$(EXEEXT) .y $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/tableopts.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign tests/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(srcdir)/tableopts.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list alloc_extra$(EXEEXT): $(alloc_extra_OBJECTS) $(alloc_extra_DEPENDENCIES) $(EXTRA_alloc_extra_DEPENDENCIES) @rm -f alloc_extra$(EXEEXT) $(AM_V_CCLD)$(LINK) $(alloc_extra_OBJECTS) $(alloc_extra_LDADD) $(LIBS) array_nr$(EXEEXT): $(array_nr_OBJECTS) $(array_nr_DEPENDENCIES) $(EXTRA_array_nr_DEPENDENCIES) @rm -f array_nr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(array_nr_OBJECTS) $(array_nr_LDADD) $(LIBS) array_r$(EXEEXT): $(array_r_OBJECTS) $(array_r_DEPENDENCIES) $(EXTRA_array_r_DEPENDENCIES) @rm -f array_r$(EXEEXT) $(AM_V_CCLD)$(LINK) $(array_r_OBJECTS) $(array_r_LDADD) $(LIBS) basic_nr$(EXEEXT): $(basic_nr_OBJECTS) $(basic_nr_DEPENDENCIES) $(EXTRA_basic_nr_DEPENDENCIES) @rm -f basic_nr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(basic_nr_OBJECTS) $(basic_nr_LDADD) $(LIBS) basic_r$(EXEEXT): $(basic_r_OBJECTS) $(basic_r_DEPENDENCIES) $(EXTRA_basic_r_DEPENDENCIES) @rm -f basic_r$(EXEEXT) $(AM_V_CCLD)$(LINK) $(basic_r_OBJECTS) $(basic_r_LDADD) $(LIBS) bison_nr_parser.h: bison_nr_parser.c @if test ! -f $@; then rm -f bison_nr_parser.c; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) bison_nr_parser.c; else :; fi bison_nr$(EXEEXT): $(bison_nr_OBJECTS) $(bison_nr_DEPENDENCIES) $(EXTRA_bison_nr_DEPENDENCIES) @rm -f bison_nr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(bison_nr_OBJECTS) $(bison_nr_LDADD) $(LIBS) bison_yylloc_parser.h: bison_yylloc_parser.c @if test ! -f $@; then rm -f bison_yylloc_parser.c; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) bison_yylloc_parser.c; else :; fi bison_yylloc$(EXEEXT): $(bison_yylloc_OBJECTS) $(bison_yylloc_DEPENDENCIES) $(EXTRA_bison_yylloc_DEPENDENCIES) @rm -f bison_yylloc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(bison_yylloc_OBJECTS) $(bison_yylloc_LDADD) $(LIBS) bison_yylval_parser.h: bison_yylval_parser.c @if test ! -f $@; then rm -f bison_yylval_parser.c; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) bison_yylval_parser.c; else :; fi bison_yylval$(EXEEXT): $(bison_yylval_OBJECTS) $(bison_yylval_DEPENDENCIES) $(EXTRA_bison_yylval_DEPENDENCIES) @rm -f bison_yylval$(EXEEXT) $(AM_V_CCLD)$(LINK) $(bison_yylval_OBJECTS) $(bison_yylval_LDADD) $(LIBS) c_cxx_nr$(EXEEXT): $(c_cxx_nr_OBJECTS) $(c_cxx_nr_DEPENDENCIES) $(EXTRA_c_cxx_nr_DEPENDENCIES) @rm -f c_cxx_nr$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(c_cxx_nr_OBJECTS) $(c_cxx_nr_LDADD) $(LIBS) c_cxx_r$(EXEEXT): $(c_cxx_r_OBJECTS) $(c_cxx_r_DEPENDENCIES) $(EXTRA_c_cxx_r_DEPENDENCIES) @rm -f c_cxx_r$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(c_cxx_r_OBJECTS) $(c_cxx_r_LDADD) $(LIBS) ccl$(EXEEXT): $(ccl_OBJECTS) $(ccl_DEPENDENCIES) $(EXTRA_ccl_DEPENDENCIES) @rm -f ccl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ccl_OBJECTS) $(ccl_LDADD) $(LIBS) cxx_basic$(EXEEXT): $(cxx_basic_OBJECTS) $(cxx_basic_DEPENDENCIES) $(EXTRA_cxx_basic_DEPENDENCIES) @rm -f cxx_basic$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cxx_basic_OBJECTS) $(cxx_basic_LDADD) $(LIBS) cxx_multiple_scanners$(EXEEXT): $(cxx_multiple_scanners_OBJECTS) $(cxx_multiple_scanners_DEPENDENCIES) $(EXTRA_cxx_multiple_scanners_DEPENDENCIES) @rm -f cxx_multiple_scanners$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cxx_multiple_scanners_OBJECTS) $(cxx_multiple_scanners_LDADD) $(LIBS) cxx_restart$(EXEEXT): $(cxx_restart_OBJECTS) $(cxx_restart_DEPENDENCIES) $(EXTRA_cxx_restart_DEPENDENCIES) @rm -f cxx_restart$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cxx_restart_OBJECTS) $(cxx_restart_LDADD) $(LIBS) cxx_yywrap.i3$(EXEEXT): $(cxx_yywrap_i3_OBJECTS) $(cxx_yywrap_i3_DEPENDENCIES) $(EXTRA_cxx_yywrap_i3_DEPENDENCIES) @rm -f cxx_yywrap.i3$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cxx_yywrap_i3_OBJECTS) $(cxx_yywrap_i3_LDADD) $(LIBS) debug_nr$(EXEEXT): $(debug_nr_OBJECTS) $(debug_nr_DEPENDENCIES) $(EXTRA_debug_nr_DEPENDENCIES) @rm -f debug_nr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(debug_nr_OBJECTS) $(debug_nr_LDADD) $(LIBS) debug_r$(EXEEXT): $(debug_r_OBJECTS) $(debug_r_DEPENDENCIES) $(EXTRA_debug_r_DEPENDENCIES) @rm -f debug_r$(EXEEXT) $(AM_V_CCLD)$(LINK) $(debug_r_OBJECTS) $(debug_r_LDADD) $(LIBS) extended$(EXEEXT): $(extended_OBJECTS) $(extended_DEPENDENCIES) $(EXTRA_extended_DEPENDENCIES) @rm -f extended$(EXEEXT) $(AM_V_CCLD)$(LINK) $(extended_OBJECTS) $(extended_LDADD) $(LIBS) header_nr$(EXEEXT): $(header_nr_OBJECTS) $(header_nr_DEPENDENCIES) $(EXTRA_header_nr_DEPENDENCIES) @rm -f header_nr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(header_nr_OBJECTS) $(header_nr_LDADD) $(LIBS) header_r$(EXEEXT): $(header_r_OBJECTS) $(header_r_DEPENDENCIES) $(EXTRA_header_r_DEPENDENCIES) @rm -f header_r$(EXEEXT) $(AM_V_CCLD)$(LINK) $(header_r_OBJECTS) $(header_r_LDADD) $(LIBS) include_by_buffer.direct$(EXEEXT): $(include_by_buffer_direct_OBJECTS) $(include_by_buffer_direct_DEPENDENCIES) $(EXTRA_include_by_buffer_direct_DEPENDENCIES) @rm -f include_by_buffer.direct$(EXEEXT) $(AM_V_CCLD)$(LINK) $(include_by_buffer_direct_OBJECTS) $(include_by_buffer_direct_LDADD) $(LIBS) include_by_push.direct$(EXEEXT): $(include_by_push_direct_OBJECTS) $(include_by_push_direct_DEPENDENCIES) $(EXTRA_include_by_push_direct_DEPENDENCIES) @rm -f include_by_push.direct$(EXEEXT) $(AM_V_CCLD)$(LINK) $(include_by_push_direct_OBJECTS) $(include_by_push_direct_LDADD) $(LIBS) include_by_reentrant.direct$(EXEEXT): $(include_by_reentrant_direct_OBJECTS) $(include_by_reentrant_direct_DEPENDENCIES) $(EXTRA_include_by_reentrant_direct_DEPENDENCIES) @rm -f include_by_reentrant.direct$(EXEEXT) $(AM_V_CCLD)$(LINK) $(include_by_reentrant_direct_OBJECTS) $(include_by_reentrant_direct_LDADD) $(LIBS) lineno_nr.one$(EXEEXT): $(lineno_nr_one_OBJECTS) $(lineno_nr_one_DEPENDENCIES) $(EXTRA_lineno_nr_one_DEPENDENCIES) @rm -f lineno_nr.one$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lineno_nr_one_OBJECTS) $(lineno_nr_one_LDADD) $(LIBS) lineno_r.one$(EXEEXT): $(lineno_r_one_OBJECTS) $(lineno_r_one_DEPENDENCIES) $(EXTRA_lineno_r_one_DEPENDENCIES) @rm -f lineno_r.one$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lineno_r_one_OBJECTS) $(lineno_r_one_LDADD) $(LIBS) lineno_trailing.one$(EXEEXT): $(lineno_trailing_one_OBJECTS) $(lineno_trailing_one_DEPENDENCIES) $(EXTRA_lineno_trailing_one_DEPENDENCIES) @rm -f lineno_trailing.one$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lineno_trailing_one_OBJECTS) $(lineno_trailing_one_LDADD) $(LIBS) mem_nr$(EXEEXT): $(mem_nr_OBJECTS) $(mem_nr_DEPENDENCIES) $(EXTRA_mem_nr_DEPENDENCIES) @rm -f mem_nr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mem_nr_OBJECTS) $(mem_nr_LDADD) $(LIBS) mem_r$(EXEEXT): $(mem_r_OBJECTS) $(mem_r_DEPENDENCIES) $(EXTRA_mem_r_DEPENDENCIES) @rm -f mem_r$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mem_r_OBJECTS) $(mem_r_LDADD) $(LIBS) multiple_scanners_nr$(EXEEXT): $(multiple_scanners_nr_OBJECTS) $(multiple_scanners_nr_DEPENDENCIES) $(EXTRA_multiple_scanners_nr_DEPENDENCIES) @rm -f multiple_scanners_nr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(multiple_scanners_nr_OBJECTS) $(multiple_scanners_nr_LDADD) $(LIBS) multiple_scanners_r$(EXEEXT): $(multiple_scanners_r_OBJECTS) $(multiple_scanners_r_DEPENDENCIES) $(EXTRA_multiple_scanners_r_DEPENDENCIES) @rm -f multiple_scanners_r$(EXEEXT) $(AM_V_CCLD)$(LINK) $(multiple_scanners_r_OBJECTS) $(multiple_scanners_r_LDADD) $(LIBS) posix$(EXEEXT): $(posix_OBJECTS) $(posix_DEPENDENCIES) $(EXTRA_posix_DEPENDENCIES) @rm -f posix$(EXEEXT) $(AM_V_CCLD)$(LINK) $(posix_OBJECTS) $(posix_LDADD) $(LIBS) posixly_correct$(EXEEXT): $(posixly_correct_OBJECTS) $(posixly_correct_DEPENDENCIES) $(EXTRA_posixly_correct_DEPENDENCIES) @rm -f posixly_correct$(EXEEXT) $(AM_V_CCLD)$(LINK) $(posixly_correct_OBJECTS) $(posixly_correct_LDADD) $(LIBS) prefix_nr$(EXEEXT): $(prefix_nr_OBJECTS) $(prefix_nr_DEPENDENCIES) $(EXTRA_prefix_nr_DEPENDENCIES) @rm -f prefix_nr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(prefix_nr_OBJECTS) $(prefix_nr_LDADD) $(LIBS) prefix_r$(EXEEXT): $(prefix_r_OBJECTS) $(prefix_r_DEPENDENCIES) $(EXTRA_prefix_r_DEPENDENCIES) @rm -f prefix_r$(EXEEXT) $(AM_V_CCLD)$(LINK) $(prefix_r_OBJECTS) $(prefix_r_LDADD) $(LIBS) pthread.pthread$(EXEEXT): $(pthread_pthread_OBJECTS) $(pthread_pthread_DEPENDENCIES) $(EXTRA_pthread_pthread_DEPENDENCIES) @rm -f pthread.pthread$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pthread_pthread_OBJECTS) $(pthread_pthread_LDADD) $(LIBS) quote_in_comment$(EXEEXT): $(quote_in_comment_OBJECTS) $(quote_in_comment_DEPENDENCIES) $(EXTRA_quote_in_comment_DEPENDENCIES) @rm -f quote_in_comment$(EXEEXT) $(AM_V_CCLD)$(LINK) $(quote_in_comment_OBJECTS) $(quote_in_comment_LDADD) $(LIBS) quotes$(EXEEXT): $(quotes_OBJECTS) $(quotes_DEPENDENCIES) $(EXTRA_quotes_DEPENDENCIES) @rm -f quotes$(EXEEXT) $(AM_V_CCLD)$(LINK) $(quotes_OBJECTS) $(quotes_LDADD) $(LIBS) rescan_nr.direct$(EXEEXT): $(rescan_nr_direct_OBJECTS) $(rescan_nr_direct_DEPENDENCIES) $(EXTRA_rescan_nr_direct_DEPENDENCIES) @rm -f rescan_nr.direct$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rescan_nr_direct_OBJECTS) $(rescan_nr_direct_LDADD) $(LIBS) rescan_r.direct$(EXEEXT): $(rescan_r_direct_OBJECTS) $(rescan_r_direct_DEPENDENCIES) $(EXTRA_rescan_r_direct_DEPENDENCIES) @rm -f rescan_r.direct$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rescan_r_direct_OBJECTS) $(rescan_r_direct_LDADD) $(LIBS) string_nr$(EXEEXT): $(string_nr_OBJECTS) $(string_nr_DEPENDENCIES) $(EXTRA_string_nr_DEPENDENCIES) @rm -f string_nr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(string_nr_OBJECTS) $(string_nr_LDADD) $(LIBS) string_r$(EXEEXT): $(string_r_OBJECTS) $(string_r_DEPENDENCIES) $(EXTRA_string_r_DEPENDENCIES) @rm -f string_r$(EXEEXT) $(AM_V_CCLD)$(LINK) $(string_r_OBJECTS) $(string_r_LDADD) $(LIBS) top$(EXEEXT): $(top_OBJECTS) $(top_DEPENDENCIES) $(EXTRA_top_DEPENDENCIES) @rm -f top$(EXEEXT) $(AM_V_CCLD)$(LINK) $(top_OBJECTS) $(top_LDADD) $(LIBS) yyextra$(EXEEXT): $(yyextra_OBJECTS) $(yyextra_DEPENDENCIES) $(EXTRA_yyextra_DEPENDENCIES) @rm -f yyextra$(EXEEXT) $(AM_V_CCLD)$(LINK) $(yyextra_OBJECTS) $(yyextra_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloc_extra.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array_nr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic_nr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bison_nr_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bison_nr_parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bison_nr_scanner.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bison_yylloc_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bison_yylloc_parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bison_yylloc_scanner.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bison_yylval_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bison_yylval_parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bison_yylval_scanner.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_cxx_nr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_cxx_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cxx_basic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cxx_multiple_scanners_1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cxx_multiple_scanners_2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cxx_multiple_scanners_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cxx_restart.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cxx_yywrap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug_nr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extended.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header_nr_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header_nr_scanner.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header_r_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header_r_scanner.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/include_by_buffer.direct.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/include_by_push.direct.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/include_by_reentrant.direct.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lineno_nr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lineno_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lineno_trailing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mem_nr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mem_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiple_scanners_nr_1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiple_scanners_nr_2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiple_scanners_nr_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiple_scanners_r_1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiple_scanners_r_2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiple_scanners_r_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/no_bison_stub.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posixly_correct.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefix_nr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefix_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pthread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quote_in_comment.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quotes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rescan_nr.direct.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rescan_r.direct.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_nr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/top.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/top_main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yyextra.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< .y.c: $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) $(dist_check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? alloc_extra.log: alloc_extra$(EXEEXT) @p='alloc_extra$(EXEEXT)'; \ b='alloc_extra'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) array_nr.log: array_nr$(EXEEXT) @p='array_nr$(EXEEXT)'; \ b='array_nr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) array_r.log: array_r$(EXEEXT) @p='array_r$(EXEEXT)'; \ b='array_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) basic_nr.log: basic_nr$(EXEEXT) @p='basic_nr$(EXEEXT)'; \ b='basic_nr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) basic_r.log: basic_r$(EXEEXT) @p='basic_r$(EXEEXT)'; \ b='basic_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) bison_nr.log: bison_nr$(EXEEXT) @p='bison_nr$(EXEEXT)'; \ b='bison_nr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) bison_yylloc.log: bison_yylloc$(EXEEXT) @p='bison_yylloc$(EXEEXT)'; \ b='bison_yylloc'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) bison_yylval.log: bison_yylval$(EXEEXT) @p='bison_yylval$(EXEEXT)'; \ b='bison_yylval'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) c_cxx_nr.log: c_cxx_nr$(EXEEXT) @p='c_cxx_nr$(EXEEXT)'; \ b='c_cxx_nr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) c_cxx_r.log: c_cxx_r$(EXEEXT) @p='c_cxx_r$(EXEEXT)'; \ b='c_cxx_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) ccl.log: ccl$(EXEEXT) @p='ccl$(EXEEXT)'; \ b='ccl'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) cxx_basic.log: cxx_basic$(EXEEXT) @p='cxx_basic$(EXEEXT)'; \ b='cxx_basic'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) cxx_multiple_scanners.log: cxx_multiple_scanners$(EXEEXT) @p='cxx_multiple_scanners$(EXEEXT)'; \ b='cxx_multiple_scanners'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) cxx_restart.log: cxx_restart$(EXEEXT) @p='cxx_restart$(EXEEXT)'; \ b='cxx_restart'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) debug_nr.log: debug_nr$(EXEEXT) @p='debug_nr$(EXEEXT)'; \ b='debug_nr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) debug_r.log: debug_r$(EXEEXT) @p='debug_r$(EXEEXT)'; \ b='debug_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) extended.log: extended$(EXEEXT) @p='extended$(EXEEXT)'; \ b='extended'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) header_nr.log: header_nr$(EXEEXT) @p='header_nr$(EXEEXT)'; \ b='header_nr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) header_r.log: header_r$(EXEEXT) @p='header_r$(EXEEXT)'; \ b='header_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mem_nr.log: mem_nr$(EXEEXT) @p='mem_nr$(EXEEXT)'; \ b='mem_nr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) mem_r.log: mem_r$(EXEEXT) @p='mem_r$(EXEEXT)'; \ b='mem_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) multiple_scanners_nr.log: multiple_scanners_nr$(EXEEXT) @p='multiple_scanners_nr$(EXEEXT)'; \ b='multiple_scanners_nr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) multiple_scanners_r.log: multiple_scanners_r$(EXEEXT) @p='multiple_scanners_r$(EXEEXT)'; \ b='multiple_scanners_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) posix.log: posix$(EXEEXT) @p='posix$(EXEEXT)'; \ b='posix'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) posixly_correct.log: posixly_correct$(EXEEXT) @p='posixly_correct$(EXEEXT)'; \ b='posixly_correct'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) prefix_nr.log: prefix_nr$(EXEEXT) @p='prefix_nr$(EXEEXT)'; \ b='prefix_nr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) prefix_r.log: prefix_r$(EXEEXT) @p='prefix_r$(EXEEXT)'; \ b='prefix_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) quote_in_comment.log: quote_in_comment$(EXEEXT) @p='quote_in_comment$(EXEEXT)'; \ b='quote_in_comment'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) quotes.log: quotes$(EXEEXT) @p='quotes$(EXEEXT)'; \ b='quotes'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) string_nr.log: string_nr$(EXEEXT) @p='string_nr$(EXEEXT)'; \ b='string_nr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) string_r.log: string_r$(EXEEXT) @p='string_r$(EXEEXT)'; \ b='string_r'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) top.log: top$(EXEEXT) @p='top$(EXEEXT)'; \ b='top'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) yyextra.log: yyextra$(EXEEXT) @p='yyextra$(EXEEXT)'; \ b='yyextra'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .reject.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(REJECT_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_REJECT_LOG_DRIVER_FLAGS) $(REJECT_LOG_DRIVER_FLAGS) -- $(REJECT_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.reject$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(REJECT_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_REJECT_LOG_DRIVER_FLAGS) $(REJECT_LOG_DRIVER_FLAGS) -- $(REJECT_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) .table.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TABLE_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TABLE_LOG_DRIVER_FLAGS) $(TABLE_LOG_DRIVER_FLAGS) -- $(TABLE_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.table$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TABLE_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TABLE_LOG_DRIVER_FLAGS) $(TABLE_LOG_DRIVER_FLAGS) -- $(TABLE_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) .direct.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(DIRECT_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_DIRECT_LOG_DRIVER_FLAGS) $(DIRECT_LOG_DRIVER_FLAGS) -- $(DIRECT_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.direct$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(DIRECT_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_DIRECT_LOG_DRIVER_FLAGS) $(DIRECT_LOG_DRIVER_FLAGS) -- $(DIRECT_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) .cn.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(CN_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_CN_LOG_DRIVER_FLAGS) $(CN_LOG_DRIVER_FLAGS) -- $(CN_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.cn$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(CN_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_CN_LOG_DRIVER_FLAGS) $(CN_LOG_DRIVER_FLAGS) -- $(CN_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) .i3.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(I3_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_I3_LOG_DRIVER_FLAGS) $(I3_LOG_DRIVER_FLAGS) -- $(I3_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.i3$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(I3_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_I3_LOG_DRIVER_FLAGS) $(I3_LOG_DRIVER_FLAGS) -- $(I3_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) .pthread.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(PTHREAD_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_PTHREAD_LOG_DRIVER_FLAGS) $(PTHREAD_LOG_DRIVER_FLAGS) -- $(PTHREAD_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.pthread$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(PTHREAD_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_PTHREAD_LOG_DRIVER_FLAGS) $(PTHREAD_LOG_DRIVER_FLAGS) -- $(PTHREAD_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) .one.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(ONE_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_ONE_LOG_DRIVER_FLAGS) $(ONE_LOG_DRIVER_FLAGS) -- $(ONE_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.one$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(ONE_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_ONE_LOG_DRIVER_FLAGS) $(ONE_LOG_DRIVER_FLAGS) -- $(ONE_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) .opt.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(OPT_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_OPT_LOG_DRIVER_FLAGS) $(OPT_LOG_DRIVER_FLAGS) -- $(OPT_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.opt$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(OPT_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_OPT_LOG_DRIVER_FLAGS) $(OPT_LOG_DRIVER_FLAGS) -- $(OPT_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) .ser.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(SER_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_SER_LOG_DRIVER_FLAGS) $(SER_LOG_DRIVER_FLAGS) -- $(SER_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.ser$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(SER_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_SER_LOG_DRIVER_FLAGS) $(SER_LOG_DRIVER_FLAGS) -- $(SER_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) .ver.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(VER_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_VER_LOG_DRIVER_FLAGS) $(VER_LOG_DRIVER_FLAGS) -- $(VER_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.ver$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(VER_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_VER_LOG_DRIVER_FLAGS) $(VER_LOG_DRIVER_FLAGS) -- $(VER_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) \ $(dist_check_SCRIPTS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(SCRIPTS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f alloc_extra.c -rm -f array_nr.c -rm -f array_r.c -rm -f basic_nr.c -rm -f basic_r.c -rm -f bison_nr_parser.c -rm -f bison_nr_parser.h -rm -f bison_nr_scanner.c -rm -f bison_yylloc_parser.c -rm -f bison_yylloc_parser.h -rm -f bison_yylloc_scanner.c -rm -f bison_yylval_parser.c -rm -f bison_yylval_parser.h -rm -f bison_yylval_scanner.c -rm -f ccl.c -rm -f cxx_basic.cc -rm -f cxx_multiple_scanners_1.cc -rm -f cxx_multiple_scanners_2.cc -rm -f cxx_restart.cc -rm -f cxx_yywrap.cc -rm -f debug_nr.c -rm -f debug_r.c -rm -f extended.c -rm -f header_nr_scanner.c -rm -f header_r_scanner.c -rm -f include_by_buffer.direct.c -rm -f include_by_push.direct.c -rm -f include_by_reentrant.direct.c -rm -f lineno_nr.c -rm -f lineno_r.c -rm -f lineno_trailing.c -rm -f mem_nr.c -rm -f mem_r.c -rm -f multiple_scanners_nr_1.c -rm -f multiple_scanners_nr_2.c -rm -f multiple_scanners_r_1.c -rm -f multiple_scanners_r_2.c -rm -f posix.c -rm -f posixly_correct.c -rm -f prefix_nr.c -rm -f prefix_r.c -rm -f pthread.c -rm -f quote_in_comment.c -rm -f quotes.c -rm -f rescan_nr.direct.c -rm -f rescan_r.direct.c -rm -f string_nr.c -rm -f string_r.c -rm -f top.c -rm -f yyextra.c clean: clean-am clean-am: clean-checkPROGRAMS clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am dist-hook distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile dist-hook: for file in $(CLEANFILES) ; do \ rm -f $(distdir)/$$file \ ; done .l.c: $(FLEX) $(AM_V_LEX)$(FLEX) -o $@ $< .ll.cc: $(FLEX) $(AM_V_LEX)$(FLEX) -+ -o $@ $< bison_nr_main.$(OBJEXT): bison_nr_parser.h bison_nr_scanner.h bison_nr_scanner.$(OBJEXT): bison_nr_parser.h bison_nr_scanner.h: bison_nr_scanner.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi bison_yylloc_main.$(OBJEXT): bison_yylloc_parser.h bison_yylloc_scanner.h bison_yylloc_scanner.$(OBJEXT): bison_yylloc_parser.h bison_yylloc_scanner.h: bison_yylloc_scanner.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi bison_yylval_main.$(OBJEXT): bison_yylval_parser.h bison_yylval_scanner.h bison_yylval_scanner.$(OBJEXT): bison_yylval_parser.h bison_yylval_scanner.h: bison_yylval_scanner.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi # automake does not support compiling flex scanners output in C as C++ # so we explicitly sayhow, using the .lll suffix for the lex input file .lll.cc: $(FLEX) $(AM_V_LEX)$(FLEX) -o $@ $< header_nr_main.$(OBJEXT): header_nr_scanner.h header_nr_scanner.h: header_nr_scanner.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi header_r_main.$(OBJEXT): header_r_scanner.h header_r_scanner.h: header_r_scanner.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi multiple_scanners_nr_main.$(OBJEXT): multiple_scanners_nr_1.h multiple_scanners_nr_2.h multiple_scanners_nr_1.h: multiple_scanners_nr_1.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi multiple_scanners_nr_2.h: multiple_scanners_nr_2.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi multiple_scanners_r_main.$(OBJEXT): multiple_scanners_r_1.h multiple_scanners_r_2.h multiple_scanners_r_1.h: multiple_scanners_r_1.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi multiple_scanners_r_2.h: multiple_scanners_r_2.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi posixly_correct.c: posixly_correct.l $(FLEX) $(AM_V_LEX)POSIXLY_CORRECT=1 $(FLEX) -o $@ $< reject_nr.reject.c: reject.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -o $@ $< reject_nr.reject$(EXEEXT): reject_nr.reject.$(OBJEXT) $(AM_V_CCLD)$(LINK) $^ reject_r.reject.c: reject.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape --reentrant -o $@ $< reject_r.reject.$(OBJEXT): reject_r.reject.c $(AM_V_CC)$(COMPILE) -DTEST_IS_REENTRANT -c -o $@ $< reject_r.reject$(EXEEXT): reject_r.reject.$(OBJEXT) $(AM_V_CCLD)$(LINK) $^ reject_ver.table.c: reject.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -o $@ --tables-verify --tables-file=$(basename $@).tables $< reject_ver.table.$(OBJEXT): reject_ver.table.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< reject_ver.table$(EXEEXT): reject_ver.table.$(OBJEXT) $(AM_V_CCLD)$(LINK) $^ reject_ser.table.c: reject.l4 $(FLEX) $(AM_V_LEX)$(FLEX) -o $@ --unsafe-no-m4-sect3-escape --tables-file=$(basename $@).tables $< reject_ser.table.$(OBJEXT): reject_ser.table.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< reject_ser.table$(EXEEXT): reject_ser.table.$(OBJEXT) $(AM_V_CCLD)$(LINK) $^ top_main.$(OBJEXT): top.h top.h: top.c # We separate out the tableopts _SOURCES variables and the linking # rules for those programs because automake has no way to specify such # things with a loop in a variable (even though make can do such # things) and the resultant list is both long an unenlightening. And # it can be / is generated by a shell script, tableopts.sh. tableopts.am: tableopts.sh $(SHELL) $(srcdir)/tableopts.sh > $(srcdir)/tableopts.am tableopts_opt_nr-Ca.opt$(EXEEXT): tableopts_opt_nr-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr-Ce.opt$(EXEEXT): tableopts_opt_nr-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr-Cf.opt$(EXEEXT): tableopts_opt_nr-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr-CF.opt$(EXEEXT): tableopts_opt_nr-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr-Cm.opt$(EXEEXT): tableopts_opt_nr-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr-Cem.opt$(EXEEXT): tableopts_opt_nr-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr-Cae.opt$(EXEEXT): tableopts_opt_nr-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr-Caef.opt$(EXEEXT): tableopts_opt_nr-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr-CaeF.opt$(EXEEXT): tableopts_opt_nr-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr-Cam.opt$(EXEEXT): tableopts_opt_nr-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr-Caem.opt$(EXEEXT): tableopts_opt_nr-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r-Ca.opt$(EXEEXT): tableopts_opt_r-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r-Ce.opt$(EXEEXT): tableopts_opt_r-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r-Cf.opt$(EXEEXT): tableopts_opt_r-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r-CF.opt$(EXEEXT): tableopts_opt_r-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r-Cm.opt$(EXEEXT): tableopts_opt_r-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r-Cem.opt$(EXEEXT): tableopts_opt_r-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r-Cae.opt$(EXEEXT): tableopts_opt_r-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r-Caef.opt$(EXEEXT): tableopts_opt_r-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r-CaeF.opt$(EXEEXT): tableopts_opt_r-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r-Cam.opt$(EXEEXT): tableopts_opt_r-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_r-Caem.opt$(EXEEXT): tableopts_opt_r-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr-Ca.ser$(EXEEXT): tableopts_ser_nr-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr-Ce.ser$(EXEEXT): tableopts_ser_nr-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr-Cf.ser$(EXEEXT): tableopts_ser_nr-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr-CF.ser$(EXEEXT): tableopts_ser_nr-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr-Cm.ser$(EXEEXT): tableopts_ser_nr-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr-Cem.ser$(EXEEXT): tableopts_ser_nr-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr-Cae.ser$(EXEEXT): tableopts_ser_nr-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr-Caef.ser$(EXEEXT): tableopts_ser_nr-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr-CaeF.ser$(EXEEXT): tableopts_ser_nr-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr-Cam.ser$(EXEEXT): tableopts_ser_nr-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_nr-Caem.ser$(EXEEXT): tableopts_ser_nr-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r-Ca.ser$(EXEEXT): tableopts_ser_r-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r-Ce.ser$(EXEEXT): tableopts_ser_r-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r-Cf.ser$(EXEEXT): tableopts_ser_r-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r-CF.ser$(EXEEXT): tableopts_ser_r-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r-Cm.ser$(EXEEXT): tableopts_ser_r-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r-Cem.ser$(EXEEXT): tableopts_ser_r-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r-Cae.ser$(EXEEXT): tableopts_ser_r-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r-Caef.ser$(EXEEXT): tableopts_ser_r-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r-CaeF.ser$(EXEEXT): tableopts_ser_r-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r-Cam.ser$(EXEEXT): tableopts_ser_r-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ser_r-Caem.ser$(EXEEXT): tableopts_ser_r-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr-Ca.ver$(EXEEXT): tableopts_ver_nr-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr-Ce.ver$(EXEEXT): tableopts_ver_nr-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr-Cf.ver$(EXEEXT): tableopts_ver_nr-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr-CF.ver$(EXEEXT): tableopts_ver_nr-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr-Cm.ver$(EXEEXT): tableopts_ver_nr-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr-Cem.ver$(EXEEXT): tableopts_ver_nr-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr-Cae.ver$(EXEEXT): tableopts_ver_nr-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr-Caef.ver$(EXEEXT): tableopts_ver_nr-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr-CaeF.ver$(EXEEXT): tableopts_ver_nr-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr-Cam.ver$(EXEEXT): tableopts_ver_nr-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_nr-Caem.ver$(EXEEXT): tableopts_ver_nr-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r-Ca.ver$(EXEEXT): tableopts_ver_r-Ca.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r-Ce.ver$(EXEEXT): tableopts_ver_r-Ce.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r-Cf.ver$(EXEEXT): tableopts_ver_r-Cf.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r-CF.ver$(EXEEXT): tableopts_ver_r-CF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r-Cm.ver$(EXEEXT): tableopts_ver_r-Cm.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r-Cem.ver$(EXEEXT): tableopts_ver_r-Cem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r-Cae.ver$(EXEEXT): tableopts_ver_r-Cae.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r-Caef.ver$(EXEEXT): tableopts_ver_r-Caef.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r-CaeF.ver$(EXEEXT): tableopts_ver_r-CaeF.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r-Cam.ver$(EXEEXT): tableopts_ver_r-Cam.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_ver_r-Caem.ver$(EXEEXT): tableopts_ver_r-Caem.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $< tableopts_opt_nr%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) $* -o $@ $< tableopts_opt_nr%.$(OBJEXT): tableopts_opt_nr%.c $(AM_V_CC)$(COMPILE) -c -o $@ $< tableopts_opt_r%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) --reentrant $* -o $@ $< tableopts_opt_r%.$(OBJEXT): tableopts_opt_r%.c $(AM_V_CC)$(COMPILE) -DTEST_IS_REENTRANT -c -o $@ $< tableopts_ser_nr%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) --tables-file="tableopts_ser_nr$*.ser.tables" $* -o $@ $< tableopts_ser_nr%.$(OBJEXT): tableopts_ser_nr%.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< tableopts_ser_r%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) -R --tables-file="tableopts_ser_r$*.ser.tables" $* -o $@ $< tableopts_ser_r%.$(OBJEXT): tableopts_ser_r%.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -DTEST_IS_REENTRANT -c -o $@ $< tableopts_ver_nr%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) --tables-file="tableopts_ver_nr$*.ver.tables" --tables-verify $* -o $@ $< tableopts_ver_nr%.$(OBJEXT): tableopts_ver_nr%.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< tableopts_ver_nr%.ver$(EXEEXT): tableopts_ver_nr%.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $^ tableopts_ver_r%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) -R --tables-file="tableopts_ver_r$*.ver.tables" --tables-verify $* -o $@ $< tableopts_ver_r%.$(OBJEXT): tableopts_ver_r%.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -DTEST_IS_REENTRANT -c -o $@ $< # 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: flex-2.6.4/tests/multiple_scanners_nr_1.l0000664000175000017500000000264213002262300015361 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner-1.c" and "scanner-1.h". */ #include #include #include "config.h" %} %option header="multiple_scanners_nr_1.h" %option 8bit prefix="S1_" %option nounput nomain noyywrap noinput %option warn stack noyy_top_state %x ON %x OFF %% { on yy_push_state(ON); return 10; off yy_push_state(OFF); return 11; .|\n return 12; } .|\n yy_pop_state(); return 13; .|\n yy_pop_state(); return 14; %% flex-2.6.4/tests/cxx_multiple_scanners_1.ll0000664000175000017500000000244213002262300015716 00000000000000 // This file is part of flex. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // 1. Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // Neither the name of the University nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR // IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE. %{ #include "config.h" %} %option 8bit prefix="S1_" %option nounput nomain noyywrap %option warn stack noyy_top_state %x ON %x OFF %% { on yy_push_state(ON); return 10; off yy_push_state(OFF); return 11; .|\n return 12; } .|\n yy_pop_state(); return 13; .|\n yy_pop_state(); return 14; %% flex-2.6.4/tests/ccl.txt0000664000175000017500000000244513002262300012041 00000000000000^alpha:0123456789 ~!@#$%^&*(){}[]':;"<>,./?\+=_-`@alpha@ ^digit:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ~!@#$%^&*(){}[]':;"<>,./?\+=_-`@digit@ ^alnum:~!@#$%^&*(){}[]':;"<>,./?\+=_-`@alnum@ ^upper:abcdefghijklmnopqrstuvwxyz0123456789 ~!@#$%^&*(){}[]':;"<>,./?\+=_-`@upper@ ^lower:ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF ~!@#$%^&*(){}[]':;"<>,./?\+=_-`@lower@ ^space:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF~!@#$%^&*(){}[]':;"<>,./?\+=_-`@space@ ^blank:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF~!@#$%^&*(){}[]':;"<>,./?\+=_-`@blank@ ^punct:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF Z@punct@ ^cntrl:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789ABCDEF~!@#$%^&*(){}[]':;"<>,./?\+=_-`@cntrl@ ^xdigit:ghijklmnopqrstuvwxyzGHIJKLMNOPQRSTUVWXYZ ~!@#$%^&*(){}[]':;"<>,./?\+=_-`@xdigit@ a-d:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@a-d@ l-xyz:abcdefghijklmnopqrstuvw@l-xyz@ abcd-bc:aaaaddddaaaa@abcd-bc@ abcde-b-c:aaaaddddeeee@abcde-b-c@ ^XY-^XYZ:ZZZZZZZZZZZ@^XY-^XYZ@ a+d:abc0123xyz789@a+d@ a-u+Q:abcQQQQxyz@a-u+Q@ ia:AaAa@ia@ iabc:ABCabcAbCaBc@iabc@ ia-c:ABCabcAbCaBc@ia-c@ check-a:a@ dot-all-1:XXX junk junk junk @dot-all-1@ x1:abaabb@x1@ x2:abaabb@x2@ flex-2.6.4/tests/multiple_scanners_r_1.l0000664000175000017500000000272313002262300015203 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner-1.c" and "scanner-1.h". */ #include #include #include "config.h" %} %option header="multiple_scanners_r_1.h" %option 8bit prefix="S1_" %option nounput nomain noyywrap noinput noyy_top_state %option warn stack reentrant %x ON %x OFF %% { on yy_push_state(ON, yyscanner); return 10; off yy_push_state(OFF, yyscanner); return 11; .|\n return 12; } .|\n yy_pop_state(yyscanner); return 13; .|\n yy_pop_state(yyscanner); return 14; %% flex-2.6.4/tests/debug_nr.l0000664000175000017500000000251113002262300012473 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". */ #include #include #include "config.h" %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn debug %% .+ { } \n { } %% int main(void); int main (void) { yyin = stdin; yyout = stdout; yy_flex_debug = 1; yylex(); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/rescan_r.direct.l0000664000175000017500000000453413002262300013762 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". */ #include #include %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput reentrant %option warn stack never-interactive %x STATE_1 %% { 0 yy_push_state (STATE_1, yyscanner); .|\n return 1; } { 1 yy_pop_state(yyscanner); .|\n return yy_top_state(yyscanner) + 1; } %% int main (int argc, char* const argv[]) { FILE* fp; int i; yyscan_t yyscanner; (void)argc; if ((fp = fopen(argv[1],"r")) == NULL){ perror("Failed to open input file."); return 1; } printf("Test 1: Reusing same scanner.\n"); testlex_init( &yyscanner ); testset_out ( stdout, yyscanner); for (i=0; i < 4; ++i){ rewind(fp); testset_in ( fp, yyscanner); while( testlex(yyscanner) ) ; } testlex_destroy( yyscanner ); printf("Test 1 OK\n\n"); printf("Test 2: Rescanning with new scanner each time.\n"); memset(&yyscanner,0,sizeof(yyscanner)); // Just to be clean about it. for (i=0; i < 4; ++i){ yyscan_t s; testlex_init( &s ); testset_out ( stdout, s); rewind(fp); testset_in ( fp, s); while( testlex(s) ) ; testlex_destroy( s ); } printf("Test 2 OK\n\n"); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/include_by_push.direct.l0000664000175000017500000000457713002262300015351 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A scanner file to build "scanner.c". Input language is any text. "#include " causes a buffer switch. */ #include #include #include "config.h" int error = 0; %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn %x GET_FILENAME %% { ^"#include"[[:blank:]]+"<" { BEGIN(GET_FILENAME); } .|\n { ECHO; } } { [[:alnum:]_.-]+> { /* recurse */ yytext[yyleng-1]='\0'; if((yyin=fopen(yytext,"r"))==NULL) { fprintf(stderr,"*** Error: Could not open include file \"%s\".\n",yytext); error = 1; yyterminate(); } testpush_buffer_state( yy_create_buffer( yyin, YY_BUF_SIZE )); BEGIN(0); } .|\n { fprintf(stderr,"Invalid input \"%s\".\n", yytext); error = 1; yyterminate(); } } <> { fclose(yyin); testpop_buffer_state(); if(!YY_CURRENT_BUFFER) yyterminate(); } %% int main(int argc, char** argv); int main ( int argc, char** argv ) { FILE * fp; if( argc != 2 ) { fprintf(stderr,"*** Error: Must specify one filename.\n"); exit(-1); } if((fp=fopen(argv[1],"r"))==NULL) { fprintf(stderr,"*** Error: fopen(%s) failed.\n",argv[1]); exit(-1); } yyin = fp; yyout = stdout; yylex(); if (!error) printf("TEST RETURNING OK.\n"); else exit(-1); return 0; } flex-2.6.4/tests/cxx_multiple_scanners.txt0000664000175000017500000000001713002262300015702 00000000000000foo on bar off flex-2.6.4/tests/yyextra.l0000664000175000017500000000613313002262300012417 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A file to build "scanner.c". */ /* This tests that we can use "yyextra". We buffer all input into a growable array, then print it. We run diff on the input and output. */ #include #include #include "config.h" /* We'll store the entire input in this buffer, growing as necessary. */ struct Buffer { int curr_len; int max_len; int grow_len; char * data; }; #define YY_EXTRA_TYPE struct Buffer * /* Save char into junk array at next position. */ static void append_char (char c, yyscan_t scanner ); %} %option 8bit prefix="test" %option nounput nomain noyywrap nodefault noinput %option warn %option reentrant %% .|\r|\n { append_char (yytext[0],yyscanner); } %% int main(void); int main (void) { yyscan_t scanner; struct Buffer * buf; int i; buf = malloc(sizeof(struct Buffer)); buf->curr_len =0; buf->max_len = 4; buf->grow_len = 100; buf->data = malloc((size_t) buf->max_len); testlex_init(&scanner); testset_in( stdin, scanner); testset_out( stdout, scanner); testset_extra( buf, scanner ); testlex(scanner); buf = testget_extra(scanner); for(i=0; i < buf->curr_len; i++) fputc( buf->data[i], stdout ); free( buf->data); free( buf); testlex_destroy(scanner); return 0; } /* Save char into junk array at next position. */ static void append_char (char c, yyscan_t scanner ) { struct Buffer *buf, *new_buf; buf = testget_extra(scanner); /* Grow buffer if necessary. */ if( buf->curr_len >= buf->max_len ) { new_buf = malloc(sizeof(struct Buffer)); new_buf->max_len = buf->max_len + buf->grow_len; new_buf->grow_len = buf->grow_len; new_buf->data = malloc((size_t) new_buf->max_len); for( new_buf->curr_len = 0; new_buf->curr_len < buf->curr_len; new_buf->curr_len++ ) { new_buf->data[ new_buf->curr_len] = buf->data [ new_buf->curr_len]; } free( buf->data ); free( buf ); buf = new_buf; testset_extra( buf, scanner ); } buf->data[ buf->curr_len++ ] = c; } flex-2.6.4/tests/array_r.l0000664000175000017500000000267413011645311012366 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner.c". */ #include #include #include "config.h" /*#include "parser.h" */ %} %option 8bit prefix="test" %option nounput nomain noyywrap noinput %option warn array reentrant %% .|\n { } %% int main(void); int main (void) { yyscan_t lexer; yylex_init(&lexer); yyset_in(stdin, lexer); yyset_out(stdout, lexer); yylex( lexer ); yylex_destroy( lexer); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/pthread_2.txt0000664000175000017500000021030313002262300013142 00000000000000Many lines of numbers and words 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar flex-2.6.4/tests/multiple_scanners_r_main.c0000664000175000017500000000350313002262300015753 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #include "multiple_scanners_r_1.h" #include "multiple_scanners_r_2.h" int main ( int argc, char** argv ) { (void)argc; (void)argv; int S1_ok=1, S2_ok=1; YY_BUFFER_STATE buff1, buff2; yyscan_t scan1, scan2; S1_lex_init(&scan1); S2_lex_init(&scan2); S1_set_out(stdout,scan1); S2_set_out(S1_get_out(scan1),scan2); buff1 = S1__scan_string("foo on bar off", scan1); buff2 = S2__scan_string("on blah blah off foo on bar off", scan2); /* scan simultaneously. */ while(S1_ok || S2_ok) { if (S1_ok) S1_ok = S1_lex(scan1); if (S2_ok) S2_ok = S2_lex(scan2); } S1__delete_buffer(buff1, scan1); S2__delete_buffer(buff2, scan2); S1_lex_destroy(scan1); S2_lex_destroy(scan2); printf("TEST RETURNING OK.\n"); return 0; } /* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ flex-2.6.4/tests/c_cxx_nr.txt0000664000175000017500000000006613002262300013100 000000000000000000 foo 1111 foo 0000 bar 0000 foo 1111 foo 0000 bar flex-2.6.4/tests/cxx_multiple_scanners_2.ll0000664000175000017500000000255713002262300015726 00000000000000 // This file is part of flex. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // 1. Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // Neither the name of the University nor the names of its contributors // may be used to endorse or promote products derived from this software // without specific prior written permission. // // THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR // IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE. %{ #include "config.h" %} %option 8bit prefix="S2_" %option nounput nomain %option warn stack noyy_top_state %x OFF %x ON %% { on yy_push_state(ON); return 3; off yy_push_state(OFF); return 4; .|\n return 5; } .|\n yy_pop_state(); return 6; .|\n yy_pop_state(); return 7; %% int S2_FlexLexer::yywrap() { std::cout << "NOW WRAPPING." << std::endl; return 1; } flex-2.6.4/tests/testwrapper.sh0000775000175000017500000000260213037547325013476 00000000000000#!/bin/sh set -vx set -euvx # testwrapper.sh: run a flex test, typically called by a Makefile # Each test will exercise some feature or aspect of flex. Run the test with any # input it may need. INPUT_DIRECTORY="" INPUT_NAME="" INPUT_COUNT=0 USE_REDIRECT=0 DO_COMPARISON=0 while getopts :d:i:rt1 OPTION ; do case $OPTION in d) INPUT_DIRECTORY=$OPTARG ;; i) if [ "$INPUT_NAME" = "" ] ; then INPUT_NAME="$OPTARG" else INPUT_NAME="$INPUT_NAME $OPTARG" fi INPUT_COUNT=$(($INPUT_COUNT+1)) ;; r) USE_REDIRECT=1 ;; t) USE_TABLES=1 ;; 1) DO_COMPARISON=1 ;; esac done shift $(($OPTIND-1)) TESTNAME=$1 INPUT_NAME=${INPUT_NAME:-$INPUT_DIRECTORY/`basename "${TESTNAME%.exe}"`.txt} if [ $DO_COMPARISON = 1 ] ; then TEST_OUTPUT=`$TESTNAME < $INPUT_NAME` REF_OUTPUT=`$TESTNAME 1 < $INPUT_NAME` test "$TEST_OUTPUT" -eq "$REF_OUTPUT" exit $? fi if [ $INPUT_COUNT -gt 1 ] ; then $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME%.exe}.tables} ${INPUT_NAME} exit $? fi if [ -f ${INPUT_NAME} ] ; then if [ $USE_REDIRECT = 1 ] ; then $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME%.exe}.tables} < $INPUT_NAME else $TESTNAME ${USE_TABLES:+${INPUT_DIRECTORY}/${TESTNAME%.exe}.tables} $INPUT_NAME fi else $TESTNAME fi flex-2.6.4/tests/bison_yylval_main.c0000664000175000017500000000246613002262300014424 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #include "bison_yylval_parser.h" #include "bison_yylval_scanner.h" int main ( int argc, char** argv ) { yyscan_t scanner; (void)argc; (void)argv; /*yydebug =1;*/ testlex_init ( &scanner ); testset_in(stdin,scanner); testparse ( scanner ); testlex_destroy ( scanner ); return 0; } /* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ flex-2.6.4/tests/header_nr_main.c0000664000175000017500000000231213002262300013627 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #include "header_nr_scanner.h" int main ( int argc, char** argv ) { (void)argc; (void)argv; testin = stdin; testout = stdout; testlex(); printf("TEST RETURNING OK.\n"); return 0; } /* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ flex-2.6.4/tests/c_cxx_r.txt0000664000175000017500000000006613002262300012722 000000000000000000 foo 1111 foo 0000 bar 0000 foo 1111 foo 0000 bar flex-2.6.4/tests/bison_yylloc.txt0000664000175000017500000000014013002262300013773 000000000000000001: FIRSTNAME=firstname 0002: MIDDLENAME=middle 0003: LASTNAME=lastname 0004: ADDRESS=address flex-2.6.4/tests/basic_nr.l0000664000175000017500000000327113002262300012472 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ /* TEST scanner. Basic non-reentrant scanner. Sample Input: # this is a comment foo = true bar = "string value" integer = 43 */ %{ #include "config.h" %} %option prefix="test" %option nounput noyywrap noyylineno warn nodefault noinput IDENT [[:alnum:]_-] WS [[:blank:]] %% ^{IDENT}+{WS}*={WS}*(true|false){WS}*\r?\n { return 100;} ^{IDENT}+{WS}*={WS}*\"[^\"\n\r]*\"{WS}*\r?\n { return 101;} ^{IDENT}+{WS}*={WS}*[[:digit:]]+{WS}*\r?\n { return 102;} ^{WS}*#.*\r?\n { } ^{WS}*\r?\n { } .|\n { fprintf(stderr,"Invalid line.\n"); exit(-1);} %% int main(void); int main (void) { yyin = stdin; yyout = stdout; while( yylex() ) { } printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/alloc_extra.l0000664000175000017500000000542113002262300013206 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A file to build "scanner.c". */ /* This tests that we can use "yyextra". We buffer all input into a growable array, then print it. We run diff on the input and output. */ #include #include #include "config.h" /* We'll store the entire input in this buffer, growing as necessary. */ struct Check { char foo; char *bar; char qux; }; /* Save char into junk array at next position. */ static void check_extra ( yyscan_t scanner ); %} %option 8bit prefix="test" %option nounput nomain noyywrap nodefault noinput %option warn %option extra-type="struct Check *" %option reentrant %option noyyalloc %% .|\r|\n { check_extra (yyscanner); } %% int main(void); int main (void) { yyscan_t scanner; struct Check check; check.foo = 'a'; check.bar = NULL; check.qux = 'z'; testlex_init_extra(&check, &scanner); testset_in(stdin, scanner); testset_out(stdout, scanner); /* Test to confirm that testalloc was called from * testlex_init_extra with the testextra argument. */ check_extra(scanner); testlex(scanner); testlex_destroy(scanner); return 0; } void *testalloc(size_t size, yyscan_t scanner) { struct Check *check; check = testget_extra(scanner); if (!check->bar) check->bar = "Hello World"; check_extra(scanner); return malloc(size); } /* Save char into junk array at next position. */ static void check_extra(yyscan_t scanner) { struct Check *check; check = testget_extra(scanner); if (check->foo != 'a') { fprintf(stderr, "foo is not 'a'\n"); exit(1); } if (strcmp(check->bar, "Hello World") != 0) { fprintf(stderr, "bar is not Hello World\n"); exit(1); } if (check->qux != 'z') { fprintf(stderr, "qux is not 'z'\n"); exit(1); } } flex-2.6.4/tests/Makefile.am0000664000175000017500000003734213102435245012612 00000000000000# This file is part of flex. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR # PURPOSE. AM_CFLAGS = $(WARNINGFLAGS) TESTS = $(check_PROGRAMS) options.cn # The script testwrapper.sh will run most tests as is. A couple tests # in the suite end in .reject, .table and the like so that we can pass # different arguments to the test runner. We list those extensions so # automake knows how to distinguish between the various kinds of tests # we have. TEST_EXTENSIONS = .reject .table .direct .cn .i3 .pthread .one .opt .ser .ver LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_LOG_FLAGS = -d $(srcdir) -r REJECT_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_REJECT_LOG_FLAGS = -d $(srcdir) -i $(srcdir)/reject.txt -r TABLE_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_TABLE_LOG_FLAGS = -d $(builddir) -i $(srcdir)/reject.txt -t DIRECT_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper-direct.sh AM_DIRECT_LOG_FLAGS = -b $(abs_builddir) -s $(srcdir) CN_LOG_COMPILER = $(SHELL) $(srcdir)/options.cn AM_CN_LOG_FLAGS = $(FLEX) I3_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_I3_LOG_FLAGS = -i $(srcdir)/cxx_yywrap.txt -i $(srcdir)/cxx_yywrap.txt -i $(srcdir)/cxx_yywrap.txt PTHREAD_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_PTHREAD_LOG_FLAGS = -i $(srcdir)/pthread_1.txt -i $(srcdir)/pthread_2.txt -i $(srcdir)/pthread_3.txt -i $(srcdir)/pthread_4.txt -i $(srcdir)/pthread_5.txt ONE_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_ONE_LOG_FLAGS = -1 -d $(srcdir) AM_YFLAGS = -d -p test AM_CPPFLAGS = -I$(top_builddir)/src -I$(top_srcdir)/src check_PROGRAMS = $(simple_tests) $(reject_tests) $(TABLE_TESTS) $(DIRECT_TESTS) $(I3_TESTS) $(PTHREAD_TESTS) $(ONE_TESTS) $(TABLEOPTS_TESTS) simple_tests = \ alloc_extra \ array_nr \ array_r \ basic_nr \ basic_r \ bison_nr \ bison_yylloc \ bison_yylval \ c_cxx_nr \ c_cxx_r \ ccl \ cxx_basic \ cxx_multiple_scanners \ cxx_restart \ debug_nr \ debug_r \ extended \ header_nr \ header_r \ mem_nr \ mem_r \ multiple_scanners_nr \ multiple_scanners_r \ posix \ posixly_correct \ prefix_nr \ prefix_r \ quote_in_comment \ quotes \ string_nr \ string_r \ top \ yyextra reject_tests = \ reject_nr.reject \ reject_r.reject TABLE_TESTS = \ reject_ver.table \ reject_ser.table DIRECT_TESTS = \ include_by_buffer.direct \ include_by_push.direct \ include_by_reentrant.direct \ rescan_nr.direct \ rescan_r.direct I3_TESTS = \ cxx_yywrap.i3 PTHREAD_TESTS = \ pthread.pthread ONE_TESTS = \ lineno_nr.one \ lineno_r.one \ lineno_trailing.one quote_in_comment_SOURCES = quote_in_comment.l alloc_extra_SOURCES = alloc_extra.l array_nr_SOURCES = array_nr.l array_r_SOURCES = array_r.l basic_nr_SOURCES = basic_nr.l basic_r_SOURCES = basic_r.l if HAVE_BISON bison_nr_SOURCES = bison_nr_scanner.l bison_nr_parser.y bison_nr_main.c nodist_bison_nr_SOURCES = bison_nr_parser.h bison_nr_scanner.h bison_yylloc_SOURCES = bison_yylloc_scanner.l bison_yylloc_parser.y bison_yylloc_main.c nodist_bison_yylloc_SOURCES = bison_yylloc_parser.h bison_yylloc_scanner.h bison_yylval_SOURCES = bison_yylval_scanner.l bison_yylval_parser.y bison_yylval_main.c nodist_bison_yylval_SOURCES = bison_yylval_parser.h bison_yylval_scanner.h else bison_nr_SOURCES = no_bison_stub.c bison_yylloc_SOURCES = no_bison_stub.c bison_yylval_SOURCES = no_bison_stub.c endif c_cxx_nr_SOURCES = c_cxx_nr.lll c_cxx_r_SOURCES = c_cxx_r.lll ccl_SOURCES = ccl.l cxx_basic_SOURCES = cxx_basic.ll cxx_restart_SOURCES = cxx_restart.ll cxx_multiple_scanners_SOURCES = cxx_multiple_scanners_main.cc cxx_multiple_scanners_1.ll cxx_multiple_scanners_2.ll cxx_yywrap_i3_SOURCES = cxx_yywrap.ll debug_nr_SOURCES = debug_nr.l debug_r_SOURCES = debug_r.l extended_SOURCES = extended.l header_nr_SOURCES = header_nr_scanner.l header_nr_main.c nodist_header_nr_SOURCES = header_nr_scanner.h header_r_SOURCES = header_r_scanner.l header_r_main.c nodist_header_r_SOURCES = header_r_scanner.h include_by_buffer_direct_SOURCES = include_by_buffer.direct.l include_by_push_direct_SOURCES = include_by_push.direct.l include_by_reentrant_direct_SOURCES = include_by_reentrant.direct.l lineno_nr_one_SOURCES = lineno_nr.l lineno_r_one_SOURCES = lineno_r.l lineno_trailing_one_SOURCES = lineno_trailing.l mem_nr_SOURCES = mem_nr.l mem_r_SOURCES = mem_r.l multiple_scanners_nr_SOURCES = multiple_scanners_nr_main.c multiple_scanners_nr_1.l multiple_scanners_nr_2.l nodist_multiple_scanners_nr_SOURCES = multiple_scanners_nr_1.h multiple_scanners_nr_2.h multiple_scanners_r_SOURCES = multiple_scanners_r_main.c multiple_scanners_r_1.l multiple_scanners_r_2.l nodist_multiple_scanners_r_SOURCES = multiple_scanners_nr_1.h multiple_scanners_nr_2.h posix_SOURCES = posix.l posixly_correct_SOURCES = posixly_correct.l prefix_nr_SOURCES = prefix_nr.l prefix_r_SOURCES = prefix_r.l pthread_pthread_SOURCES = pthread.l quotes_SOURCES = quotes.l reject_nr_reject_SOURCES = reject.l4 reject_r_reject_SOURCES = reject.l4 reject_ver_table_SOURCES = reject.l4 reject_ser_table_SOURCES = reject.l4 rescan_nr_direct_SOURCES = rescan_nr.direct.l rescan_r_direct_SOURCES = rescan_r.direct.l string_nr_SOURCES = string_nr.l string_r_SOURCES = string_r.l top_SOURCES = top.l top_main.c nodist_top_SOURCES = top.h yyextra_SOURCES = yyextra.l # Normally, automake would distribute files built by flex. Since the # point of the test suite is to test the files that flex builds, and # since anyone who has the flex distribution can build a flex binary # without having a flex binary, we want to not distribute the files # built by flex in the test suite. The dist-hook target accomplishes # this goal. It's also handy to have the list of files to clean since # automake doesn't know about the whacky ways in which we're abusing # it. CLEANFILES = \ alloc_extra.c \ array_nr.c \ array_r.c \ basic_nr.c \ basic_r.c \ bison_nr_parser.c \ bison_nr_parser.h \ bison_nr_scanner.c \ bison_nr_scanner.h \ bison_yylloc_parser.c \ bison_yylloc_parser.h \ bison_yylloc_scanner.c \ bison_yylloc_scanner.h \ bison_yylval_parser.c \ bison_yylval_parser.h \ bison_yylval_scanner.c \ bison_yylval_scanner.h \ c_cxx_nr.cc \ c_cxx_r.cc \ ccl.c \ cxx_basic.cc \ cxx_multiple_scanners_1.cc \ cxx_multiple_scanners_2.cc \ cxx_restart.cc \ cxx_yywrap.cc \ debug_nr.c \ debug_r.c \ extended.c \ header_nr_scanner.c \ header_nr_scanner.h \ header_r_scanner.c \ header_r_scanner.h \ include_by_buffer.direct.c \ include_by_push.direct.c \ include_by_reentrant.direct.c \ lineno_nr.c \ lineno_r.c \ lineno_trailing.c \ mem_nr.c \ mem_r.c \ multiple_scanners_nr_1.c \ multiple_scanners_nr_1.h \ multiple_scanners_nr_2.c \ multiple_scanners_nr_2.h \ multiple_scanners_r_1.c \ multiple_scanners_r_1.h \ multiple_scanners_r_2.c \ multiple_scanners_r_2.h \ posix.c \ posixly_correct.c \ prefix_nr.c \ prefix_r.c \ pthread.c \ quote_in_comment.c \ quotes.c \ reject_nr.reject.c \ reject_r.reject.c \ reject_ser.table.c \ reject_ser.table.tables \ reject_ver.table.c \ reject_ver.table.tables \ rescan_nr.direct.c \ rescan_r.direct.c \ string_nr.c \ string_r.c \ top.c \ top.h \ yyextra.c \ $(tableopts_c) \ $(tableopts_tables) dist-hook: for file in $(CLEANFILES) ; do \ rm -f $(distdir)/$$file \ ; done EXTRA_DIST = \ README \ alloc_extra.txt \ array_nr.txt \ array_r.txt \ basic_nr.txt \ basic_r.txt \ bison_nr.txt \ bison_yylloc.txt \ bison_yylval.txt \ c_cxx_nr.txt \ c_cxx_r.txt \ ccl.txt \ cxx_basic.txt \ cxx_multiple_scanners.txt \ cxx_restart.txt \ cxx_yywrap.txt \ debug_nr.txt \ debug_r.txt \ extended.txt \ header_nr.txt \ header_r.txt \ include_by_buffer.direct.txt \ include_by_buffer.direct_2.txt \ include_by_buffer.direct_3.txt \ include_by_push.direct.txt \ include_by_push.direct_2.txt \ include_by_push.direct_3.txt \ include_by_reentrant.direct.txt \ include_by_reentrant.direct_2.txt \ include_by_reentrant.direct_3.txt \ lineno_nr.one.txt \ lineno_r.one.txt \ lineno_trailing.one.txt \ mem_nr.txt \ mem_r.txt \ prefix_nr.txt \ prefix_r.txt \ pthread_1.txt \ pthread_2.txt \ pthread_3.txt \ pthread_4.txt \ pthread_5.txt \ reject.txt \ rescan_nr.direct.txt \ rescan_r.direct.txt \ quote_in_comment.txt \ quotes.txt \ top.txt \ yyextra.txt \ tableopts.txt dist_noinst_SCRIPTS = \ tableopts.sh dist_check_SCRIPTS = \ options.cn \ testwrapper-direct.sh \ testwrapper.sh pthread_pthread_LDADD = @LIBPTHREAD@ # specify how to process .l files in order to test the flex built by make all FLEX = $(top_builddir)/src/flex .l.c: $(FLEX) $(AM_V_LEX)$(FLEX) -o $@ $< .ll.cc: $(FLEX) $(AM_V_LEX)$(FLEX) -+ -o $@ $< bison_nr_main.$(OBJEXT): bison_nr_parser.h bison_nr_scanner.h bison_nr_scanner.$(OBJEXT): bison_nr_parser.h bison_nr_scanner.h: bison_nr_scanner.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi bison_yylloc_main.$(OBJEXT): bison_yylloc_parser.h bison_yylloc_scanner.h bison_yylloc_scanner.$(OBJEXT): bison_yylloc_parser.h bison_yylloc_scanner.h: bison_yylloc_scanner.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi bison_yylval_main.$(OBJEXT): bison_yylval_parser.h bison_yylval_scanner.h bison_yylval_scanner.$(OBJEXT): bison_yylval_parser.h bison_yylval_scanner.h: bison_yylval_scanner.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi # automake does not support compiling flex scanners output in C as C++ # so we explicitly sayhow, using the .lll suffix for the lex input file .lll.cc: $(FLEX) $(AM_V_LEX)$(FLEX) -o $@ $< header_nr_main.$(OBJEXT): header_nr_scanner.h header_nr_scanner.h: header_nr_scanner.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi header_r_main.$(OBJEXT): header_r_scanner.h header_r_scanner.h: header_r_scanner.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi multiple_scanners_nr_main.$(OBJEXT): multiple_scanners_nr_1.h multiple_scanners_nr_2.h multiple_scanners_nr_1.h: multiple_scanners_nr_1.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi multiple_scanners_nr_2.h: multiple_scanners_nr_2.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi multiple_scanners_r_main.$(OBJEXT): multiple_scanners_r_1.h multiple_scanners_r_2.h multiple_scanners_r_1.h: multiple_scanners_r_1.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi multiple_scanners_r_2.h: multiple_scanners_r_2.c @if test ! -f $@; then rm -f $<; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) $<; else :; fi posixly_correct.c: posixly_correct.l $(FLEX) $(AM_V_LEX)POSIXLY_CORRECT=1 $(FLEX) -o $@ $< reject_nr.reject.c: reject.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -o $@ $< reject_nr.reject$(EXEEXT): reject_nr.reject.$(OBJEXT) $(AM_V_CCLD)$(LINK) $^ reject_r.reject.c: reject.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape --reentrant -o $@ $< reject_r.reject.$(OBJEXT): reject_r.reject.c $(AM_V_CC)$(COMPILE) -DTEST_IS_REENTRANT -c -o $@ $< reject_r.reject$(EXEEXT): reject_r.reject.$(OBJEXT) $(AM_V_CCLD)$(LINK) $^ reject_ver.table.c: reject.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -o $@ --tables-verify --tables-file=$(basename $@).tables $< reject_ver.table.$(OBJEXT): reject_ver.table.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< reject_ver.table$(EXEEXT): reject_ver.table.$(OBJEXT) $(AM_V_CCLD)$(LINK) $^ reject_ser.table.c: reject.l4 $(FLEX) $(AM_V_LEX)$(FLEX) -o $@ --unsafe-no-m4-sect3-escape --tables-file=$(basename $@).tables $< reject_ser.table.$(OBJEXT): reject_ser.table.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< reject_ser.table$(EXEEXT): reject_ser.table.$(OBJEXT) $(AM_V_CCLD)$(LINK) $^ top_main.$(OBJEXT): top.h top.h: top.c # We separate out the tableopts _SOURCES variables and the linking # rules for those programs because automake has no way to specify such # things with a loop in a variable (even though make can do such # things) and the resultant list is both long an unenlightening. And # it can be / is generated by a shell script, tableopts.sh. tableopts.am: tableopts.sh $(SHELL) $(srcdir)/tableopts.sh > $(srcdir)/tableopts.am include $(srcdir)/tableopts.am tableopts := -Ca -Ce -Cf -CF -Cm -Cem -Cae -Caef -CaeF -Cam -Caem tableopts_opt_tests := $(foreach opt,$(tableopts), tableopts_opt_nr$(opt) tableopts_opt_r$(opt)) tableopts_sertests := $(foreach opt,$(tableopts), tableopts_ser_nr$(opt) tableopts_ser_r$(opt)) tableopts_vertests := $(foreach opt,$(tableopts), tableopts_ver_nr$(opt) tableopts_ver_r$(opt)) tableopts_tests := $(tableopts_opttests) $(tableopts_vertests) $(tableopts_sertests) tableopts_c := $(addsuffix .c,$(tableopts_tests)) OPT_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_OPT_LOG_FLAGS = -d $(srcdir) -i $(srcdir)/tableopts.txt -r tableopts_opt_nr%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) $* -o $@ $< tableopts_opt_nr%.$(OBJEXT): tableopts_opt_nr%.c $(AM_V_CC)$(COMPILE) -c -o $@ $< tableopts_opt_r%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) --reentrant $* -o $@ $< tableopts_opt_r%.$(OBJEXT): tableopts_opt_r%.c $(AM_V_CC)$(COMPILE) -DTEST_IS_REENTRANT -c -o $@ $< SER_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_SER_LOG_FLAGS = -d $(builddir) -i $(srcdir)/tableopts.txt -r -t tableopts_ser_nr%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) --tables-file="tableopts_ser_nr$*.ser.tables" $* -o $@ $< tableopts_ser_nr%.$(OBJEXT): tableopts_ser_nr%.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< tableopts_ser_r%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) -R --tables-file="tableopts_ser_r$*.ser.tables" $* -o $@ $< tableopts_ser_r%.$(OBJEXT): tableopts_ser_r%.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -DTEST_IS_REENTRANT -c -o $@ $< VER_LOG_COMPILER = $(SHELL) $(srcdir)/testwrapper.sh AM_VER_LOG_FLAGS = -d $(builddir) -i $(srcdir)/tableopts.txt -r -t tableopts_ver_nr%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) --tables-file="tableopts_ver_nr$*.ver.tables" --tables-verify $* -o $@ $< tableopts_ver_nr%.$(OBJEXT): tableopts_ver_nr%.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -c -o $@ $< tableopts_ver_nr%.ver$(EXEEXT): tableopts_ver_nr%.$(OBJEXT) $(AM_V_CCLD)$(LINK) -o $@ $^ tableopts_ver_r%.c: tableopts.l4 $(FLEX) $(AM_V_LEX)$(FLEX) --unsafe-no-m4-sect3-escape -P $(subst -,_,$(basename $(*F))) -R --tables-file="tableopts_ver_r$*.ver.tables" --tables-verify $* -o $@ $< tableopts_ver_r%.$(OBJEXT): tableopts_ver_r%.c $(AM_V_CC)$(COMPILE) -DTEST_HAS_TABLES_EXTERNAL -DTEST_IS_REENTRANT -c -o $@ $< flex-2.6.4/tests/pthread.l0000664000175000017500000001341613053615424012362 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A scanner file to build "scanner.c". Input language is any text made of spaces, newlines, and alphanumerics. We create N_THREADS number of threads. Each thread has it's own scanner. Each thread selects one of the files specified in ARGV, scans it, then closes it. This is repeated N_SCANS number of times for each thread. The idea is to press the scanner to break under threads. If we see "Scanner Jammed", then we know */ #include #include #include #ifdef HAVE_PTHREAD_H #include #endif /* A naive test for segfaults when accessing yytext. */ static int process_text(char* s, yyscan_t scanner); %} %option 8bit prefix="test" %option nounput nomain nodefault noinput %option yywrap %option reentrant %option warn /* Arbitrary states.*/ %x STATE_1 %x STATE_2 %% #define NUMBER 200 #define WORD 201 [[:digit:]]+ { BEGIN(STATE_1); process_text(yytext,yyscanner); return NUMBER; } [[:alpha:]]+ { BEGIN(STATE_2); process_text(yytext,yyscanner); return WORD; } [[:alpha:]]+ { BEGIN(0); process_text(yytext,yyscanner); return WORD; } [[:digit:]]+ { BEGIN(0); process_text(yytext,yyscanner); return NUMBER; } [[:alpha:]]+ { BEGIN(0); process_text(yytext,yyscanner); return WORD; } [[:digit:]]+ { BEGIN(0); process_text(yytext,yyscanner); return NUMBER; } " "|\t|\r|\n { process_text(yytext,yyscanner); } [^[:alnum:][:space:]\t\r\n] { /*fprintf(stderr,"*** Error: bad input char '%c'.\n", yytext[0]); */ yyterminate(); } [[:space:]\r\n]+ { } %% int testwrap( yyscan_t scanner) { (void)scanner; return 1; } static int process_text(char* s, yyscan_t scanner) { (void)scanner; return (int)(*s) + (int) *(s + testget_leng(scanner)-1); } int main(int ARGC, char *ARGV[]); #ifndef HAVE_PTHREAD_H int main (int ARGC, char *ARGV[]) { puts( "TEST ABORTED because pthread library not available \n" "-- This is expected on some systems. It is not a flex error."); /* Exit status for a skipped test */ return 77; } #else #define N_THREADS 4 #define N_SCANS 20 /* Each thread selects the next file to scan in round-robin fashion. If there are less files than threads, some threads may block. */ static pthread_mutex_t next_lock = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t go_ahead = PTHREAD_MUTEX_INITIALIZER; static int n_files, next_file; static pthread_mutex_t *file_locks; static char **filenames; static void * thread_func ( void* arg ) { int i; (void)arg; /* Wait for go-ahead. */ pthread_mutex_lock( &go_ahead); pthread_mutex_unlock(&go_ahead); for( i =0 ; i < N_SCANS ; i++ ) { int next; yyscan_t scanner; FILE * fp; pthread_mutex_lock ( &next_lock ); next = (next_file++) % n_files; pthread_mutex_unlock ( &next_lock ); pthread_mutex_lock ( &file_locks[ next ] ); testlex_init( &scanner ); /*printf("Scanning file %s #%d\n",filenames[next],i); fflush(stdout); */ if((fp = fopen(filenames[next],"r"))==NULL) { perror("fopen"); return NULL; } testset_in(fp,scanner); while( testlex( scanner) != 0) { } fclose(fp); testlex_destroy(scanner); pthread_mutex_unlock ( &file_locks[ next ] ); } return NULL; } int main (int ARGC, char *ARGV[]) { int i; pthread_t threads[N_THREADS]; if( ARGC < 2 ) { fprintf(stderr,"*** Error: No filenames specified.\n"); exit(-1); } /* Allocate and initialize the locks. One for each filename in ARGV. */ file_locks = malloc((size_t) (ARGC-1) * sizeof(pthread_mutex_t)); for( i = 0; i < ARGC-1; i++) pthread_mutex_init( &file_locks[i], NULL ); n_files = ARGC -1; filenames = ARGV + 1; next_file = 0; /* prevent threads from starting until all threads have been created. */ pthread_mutex_lock(&go_ahead); /* Create N threads then wait for them. */ for(i =0; i < N_THREADS ; i++ ) { if( pthread_create( &threads[i], NULL, thread_func, NULL) != 0) { fprintf(stderr, "*** Error: pthread_create failed.\n"); exit(-1); } printf("Created thread %d.\n",i); fflush(stdout); } /* Tell threads to begin. */ pthread_mutex_unlock(&go_ahead); for(i =0; i < N_THREADS ; i++ ) { pthread_join ( threads[i], NULL ); printf("Thread %d done.\n", i ); fflush(stdout); } for( i = 0; i < ARGC-1; i++) pthread_mutex_destroy( &file_locks[i] ); pthread_mutex_destroy( &next_lock ); pthread_mutex_destroy( &go_ahead ); free( file_locks ); printf("TEST RETURNING OK.\n"); return 0; } #endif /* HAVE_PTHREAD_H */ flex-2.6.4/tests/no_bison_stub.c0000664000175000017500000000260513042143351013554 00000000000000/* This stub will be used when Bison is not available on the user's host. */ /* This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #include int main (int argc, char *argv[]) { (void)argc; (void)argv; puts( "This test requires Bison. Install Bison and re-run \"configure && make check\"\n" "to perform this test. (This file is stub code.)" ); /* Exit status for a skipped test */ return 77; } /* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ flex-2.6.4/tests/multiple_scanners_nr_2.l0000664000175000017500000000263413002262300015363 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ /* A template scanner file to build "scanner-2.c" and "scanner-2.h". */ #include #include #include "config.h" %} %option header="multiple_scanners_nr_2.h" %option 8bit prefix="S2_" %option nounput nomain noyywrap noinput %option warn stack noyy_top_state %x OFF %x ON %% { on yy_push_state(ON); return 3; off yy_push_state(OFF); return 4; .|\n return 5; } .|\n yy_pop_state(); return 6; .|\n yy_pop_state(); return 7; %% flex-2.6.4/tests/cxx_restart.ll0000664000175000017500000000243513002262300013435 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ %{ #include "config.h" %} %option 8bit prefix="test" %option warn c++ %option nounput nomain noinput noyywrap %% . { } %% int main(void); int main (void) { yyFlexLexer f; f.switch_streams(&std::cin, &std::cout); f.yylex(); f.yyrestart(NULL); std::cout << "TEST RETURNING OK." << std::endl; return 0; } flex-2.6.4/tests/extended.txt0000664000175000017500000000004013002262300013065 00000000000000abcdefghijklmnopqrstuvwxyz ABCD flex-2.6.4/tests/include_by_buffer.direct_2.txt0000664000175000017500000000020013002262300016423 00000000000000Beginning of "include_by_buffer.direct_2.txt" #include End of "include_by_buffer.direct_2.txt" flex-2.6.4/tests/header_r_main.c0000664000175000017500000000363213002262300013457 00000000000000/* * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #include #include "header_r_scanner.h" /* The scanner itself is not important here. * We simply try to use all the functions that are exported in the * header, to see if we get any compiler warnings. */ int main ( int argc, char** argv ) { (void)argc; (void)argv; yyscan_t scanner; FILE *fp; char * extra = "EXTRA"; testlex_init(&scanner); testset_in(stdin,scanner); testset_out(stdout,scanner); testset_extra(extra,scanner); fp = testget_in(scanner); assert(fp == stdin); fp = testget_out(scanner); assert(fp == stdout); while(testlex(scanner)) { char * text; int line; line = testget_lineno(scanner); text = testget_text(scanner); if( (char*)testget_extra(scanner) != extra) break; if ( !text || line < 0) continue; } testlex_destroy(scanner); printf("TEST RETURNING OK.\n"); return 0; } flex-2.6.4/tests/rescan_nr.direct.txt0000664000175000017500000000006613002262300014520 000000000000000000 foo 1111 foo 0000 bar 0000 foo 1111 foo 0000 bar flex-2.6.4/tests/rescan_r.direct.txt0000664000175000017500000000006613002262300014342 000000000000000000 foo 1111 foo 0000 bar 0000 foo 1111 foo 0000 bar flex-2.6.4/tests/pthread_1.txt0000664000175000017500000021030313002262300013141 00000000000000Many lines of numbers and words 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar 0000 foo 1111 foo 0000 bar 2222 foo bar 0000 foo 1111 foo 0000 bar 2222 foo bar foo 2444 foo blah 1234 2444 111 1111 bar foo 2444 foo blah 1234 2444 111 1111 bar flex-2.6.4/tests/README0000664000175000017500000000444513041644671011443 00000000000000This file describes the flex test suite. * WHO SHOULD USE THE TEST SUITE? The test suite is intended to be used by flex developers, i.e., anyone hacking the flex distribution. If you are simply installing flex, then you can ignore this directory and its contents. * STRUCTURE OF THE TEST SUITE The testsuite consists of several tests. Each test is centered around a scanner known to work with the most recent version of flex. In general, after you modify your copy of the flex distribution, you should re-run the test suite. Some of the tests may require certain tools to be available (e.g., bison, diff). If any test returns an error or generates an error message, then your modifications *may* have broken a feature of flex. At a minimum, you'll want to investigate the failure and determine if it's truly significant. * HOW TO RUN THE TEST SUITE To build and execute all tests from the top level of the flex source tree: $ make check To build and execute a single test: $ cd tests/ # from the top level of the flex tree. $ make testname.log where "testname" is the name of the test. This is an automake-ism that will create (or re-create, if need be), a log of the particular test run that you're working on. * HOW TO ADD A NEW TEST TO THE TEST SUITE ** List your test in the TESTS variable in Makefile.am in this directory. Note that due to the large number of tests, we use variables to group similar tests together. This also helps with handling the automake test suite requirements. Hopefully your test can be listed in SIMPLE_TESTS. You'll need to add the appropriate automake _SOURCES variable as well. If you're unsure, then consult the automake manual, paying attention to the parallel test harness section. ** On success, your test should return zero. ** On error, your test should return 1 (one) and print a message to stderr, which will have been redirected to the log file created by the automake test suite harness. ** If your test is skipped (e.g., because bison was not found), then the test should return 77 (seventy-seven). This is the exit status that would be recognized by automake's "test-driver" as _skipped_. ** Once your work is done, submit a patch via the flex development mailing list, the github pull request mechanism or some other suitable means. flex-2.6.4/ChangeLog0000664000175000017500000122777613103432074011201 000000000000002017-05-06 Will Estes * po/ca.po, po/da.po, po/de.po, po/eo.po, po/es.po, po/fi.po, po/fr.po, po/ga.po, po/hr.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sr.po, po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po, po/zh_TW.po: gettext: pulled latest translations; recompiled against current sources 2017-05-06 Will Estes * NEWS: version 2.6.4 * NEWS: Record release date. 2017-05-06 Will Estes * .prev-version: note previous version 2017-05-06 Will Estes * NEWS: doc: update NEWS for upcoming release 2017-05-04 viktor.shepel * doc/flex.texi: doc: Correct typo in C code sample in manual 2017-05-04 Explorer09 * src/flex.skl: scanner: Mention %# comments are removed when building skel.c 2017-05-02 Demi Obenour * src/flex.skl: Honor user definitions of yy_* macros The user may have defined the yy_* macros themselves. In that case, don't clobber them. 2017-05-02 Demi Obenour * src/flex.skl, src/main.c: Don't leak macro definitions into header files This allowed unnamespaced definitions to leak into header files, breaking client code. Fixes #142 2017-05-03 Demi Obenour * src/scan.l: scanner: Check for 0 bracecount when EOL ends quoted literal. This can happen in the case of // comments (which Flex doesn't handle specially). 2017-05-03 Demi Obenour * src/scan.l: scanner: when bracelevel is negative, treat as zero. This really should never happen, but this at least fixes the breakage on Verilator. 2017-04-02 Jeff Smith * tests/Makefile.am, tests/tableopts.am, tests/tableopts.sh: test: enable more silent building of tests. When running 'make V=0 check', some compile and link steps are made less verbose and some are not. This cleans up most steps that are not. These have no effect if V=0 is not specified. 2017-05-03 Demi Obenour * src/Makefile.am, src/misc.c, src/mkskel.sh: build: Delete comments from skeleton file. Since the comments in flex.skl are, by hypothesis, not needed in skel.c, we remove them. THis reduces the size of the resulting executable somewhat. 2017-05-03 Explorer09 * Makefile.am, configure.ac, lib/Makefile.am: build: do not generate lib/Makefile.in. Files in lib/ are picked up and built using makefile directives in src/Makefile.am. Remove the need to generate lib/Makefile.in and the stub lib/Makefile.am. 2017-05-02 Will Estes * po/POTFILES.in: gettext: revert listing generated .c files 2017-04-10 Jeff Smith * src/filter.c: FLEX_EXIT() is the preferred way to exit flex 2017-04-11 Explorer09 * src/misc.c: Fix myesc() 'sptr' conditionals * Don't call isascii() here. It's deprecated in POSIX and not needed for myesc's case. * The check of the character class and range here should match what's defined as {ESCSEQ} in scan.l, so for [[:xdigit:]] we use isxdigit(); for [0-7] we check '0' <= c <= '7' (not isdigit(c) because isdigit is locale-dependant in standard's sense) * Add missing length limit for "\x" ( is at most 2 digits) 2017-04-11 Explorer09 * src/flexdef.h, src/misc.c: Obsolete htoui() and otoui(); use strtoul(). No sense to keep these two function when libc's strtoul() can do the same job, but better. 2017-04-12 Todd C. Miller * src/flex.skl: scanner: update yy_buf_size after yyrealloc() 2017-05-02 Simon Sobisch * configure.ac: build: use lowest versions for gettext, automake. 2017-05-02 Simon Sobisch * po/Makevars, po/Rules-getpo, po/update_linguas.sh: gettext: more recent makevars; new script to update po files. Previously, "make dist" and similar commands would cause the po files to be updated, which is incorrect. The more recent version now used should not do this. Replaced Rules-getpo by extra script to manually update and rebuild all po files. 2017-05-02 Simon Sobisch * po/POTFILES.in: gettext: list generated files instead of flex, bison sources in POTFILES.in. Listing the flex and bison sources -- as the gettext manual suggests -- causes warnings. Listing the generated C files for the lexer and parser removes the warnings. Since both files contain line directives, any translator who needs to refer back to those files should be able to find the context in which strings are needed. 2017-05-02 Simon Sobisch * autogen.sh: build: only touch ChangeLog if it does not exist 2017-05-02 Simon Sobisch * configure.ac, doc/Makefile.am: build: list earliest useable versions for automake 2017-05-02 Simon Sobisch * autogen.sh: build: check for how to call libtoolize. Previously, we would call libtoolize and if that failed, we would call glibtoolize since some platforms have the libtoolize program under that name. Instead, we check to see if the environment variable LIBTOOLIZE is set and use that if so. Otherwise, we try to find a program "libtoolize" on the path and failing that glibtoolize. We alert the user if no suitable program can be found. 2017-01-06 Alastair Hughes * configure.ac, m4/ax_prog_cc_for_build.m4, src/Makefile.am: build: support cross compiling. Check for cross compiling. If cross compiling, build stage1flex using a custom link command. We also override LDADD since that adds the replacement implementations that are cross compiled, and instead always use the replacement library implementations. We don't use BUILD_OBJEXT and BUILD_EXEEXT since it seems that automake does not support these. Fixes #78. 2017-02-17 Explorer09 * configure.ac, src/flexdef.h: build: Include ; add strcasecmp() check to configure. strings.h (not string.h) is the standard-defined include header for strcasecmp(). Include for portability (even though glibc exposes strcasecmp() declaration also in by default). 2017-02-17 Explorer09 * configure.ac, src/flexdef.h: build: Let configure error if missing required functions, headers.. `configure` will now error if a required header or function is not found on the system. Also add comments on optional functions checks. Add sys/stats.h and sys/wait.h to list of required headers in configure. This fixes issue #180. 2017-02-12 Explorer09 * src/dfa.c, src/flexdef.h: scanner: compute powers of two faster. Replace the naive "for" loop in determining power of two with a clever bitwise solution. This code is around the Internet already and is in Public Domain. 2017-02-07 Explorer09 * configure.ac, tests/Makefile.am, tests/pthread.l: test: skip pthread test when needed files missing. "Unlisting" the pthread test when libpthread is not available is never a good idea. Should let it compile into a stub program that returns the "skip" status. configure.ac and tests/Makefile.am are edited so that pthread test can be built anyway, but only works (not as the stub) when both pthread.h and libpthread are detected on the system. Also fix a small typo in tests/pthread.l comments. 2017-02-16 Will Estes * src/Makefile.am: build: mv scan.c when building dist. Revert change to copy scan.c when building the distribution archive. Move it instead. This satisfies automake's notions of what should be clean and ensures that the distribution archive contains a just-built copy of scan.c. Fixes #186 2017-02-06 Will Estes * src/Makefile.am: build: don't assume distdir/scan.c is writeable 2017-01-02 Explorer09 * src/Makefile.am: build: Add dist-hook to force remake scan.c. This will ensure the flex scanner included in release tarball being generated by exactly the flex version to be released. Here's one catch after this change: You may not run "make dist" or "make distdir" if you configure the flex source to be cross-compiled. 2017-01-02 Explorer09 * src/Makefile.am: build: respect '--localedir' from configure. Makefile shouldn't overwrite the 'localedir' variable, because that's what '--localedir' option in 'configure' is for. 2017-01-02 Explorer09 * src/Makefile.am: build: Remove "-I$(top_srcdir)/intl" from CPPFLAGS. Revert commit e02c3d27eeb6b53ec82532ab080c23ce26813fd4 ("include the intl/ subdirectory when searching for include files") Flex doesn't come with libintl source code, so inclusion of $(top_srcdir)/intl subdirectory during compiling is unnecessary. This flag seems to be left after "remove intl from dist" (commit 8f45da06adbd7dbcdfdbdd5c20ff4c47fc504f35) without someone cleaning this up. Users who need to build with gettext functionality from libintl would use the '--with-libintl-prefix' configure option. 2017-02-03 Explorer09 * src/regex.c: scanner: fix regcomp's error reporting, double malloc. Fix unneeded double malloc - let regerror(). Write its message after our "regcomp for (regex) failed: " string. Also, errbuf cannot be free()'d because of flexfatal containing a longjmp. 2017-01-03 Explorer09 * tests/Makefile.am, tests/no_bison_stub.c: test: Skip bison tests if bison is not available 2017-01-03 Explorer09 * configure.ac: build: remove repeated bison detection from configure. AC_PROG_YACC already detects the bison program. We can just use it, and make notice if [ $YACC != 'bison -y' ] Remove unused AC_SUBST([BISON], ...). Add AM_CONDITIONAL([HAVE_BISON], ...) so that we can skip bison tests in testsuite when bison is absent. We don't make any attempt to detect other yacc implementations since flex is developed with bison. While it would be possible, the need isn't there right now. It would be possible to add a --with-parser option that defaulted to bison if such a need cropped up. 2017-01-01 Explorer09 * src/Makefile.am: build: fix Makefile parse.h dependency clauses. The current clauses stating "main.c: parse.h" and "yylex.c: parse.h" do not work as expected. Make did not try to build parse.h upon building flex-main.o as it would think main.c exist already and ignore the clause. Fix this by explicitly stating that the .o files depend on parse.h instead. This dependency bug only happens if user builds flex from a checked-out repository. 2017-01-03 Explorer09 * tests/Makefile.am: test: Remake *_scanner.c if *_scanner.h is missing. If a ${foo}_scanner.c exists but the respective ${foo}_scanner.h is missing, then 'make' can halt. Fix this by deleting the ${foo}_scanner.c file and then remake it. This rule is the same as the automake-generated rule for .c files that require LEX or YACC (except automake will use ylwrap). 2016-12-31 Explorer09 * tests/Makefile.am: test: remove BUILT_SOURCES; add missing dependencies. Without BUILT_SOURCES in Makefile, no test sources in tests/ will be built when using the default "make all" target. This is desireable for people who are just building flex but who do not want to run, and therefore, build any part of the test suite. Also fix missing sources dependencies: bison_nr_scanner.$(OBJEXT): bison_nr_parser.h bison_yylloc_scanner.$(OBJEXT): bison_yylloc_parser.h bison_yylval_scanner.$(OBJEXT): bison_yylval_parser.h 2017-01-19 Explorer09 * configure.ac, lib/reallocarray.c, src/flexint.h, src/misc.c: build: detect overflow for [re]allocate_array. Use reallocarray() when we have it (i.e. in OpenBSD system). When we don't, use equivalent overflow detection for our allocate_array and reallocate_array functions. Remove lib/reallocarray.c from our LIBOBJS as we no longer need it. Provide a fallback SIZE_MAX macro definition in flexint.h (not preprocessor friendly, but enough for our reallocate_array use case). 2017-01-23 Will Estes * NEWS, configure.ac: doc: v2.6.4 2017-01-23 Thomas Klausner * src/Makefile.am: build: more BSD make and vpath build fixes. BSD make doesn't like $< with more than one source specified. Additionally, make sure to specify srcdir when referring to source files since vpath builds depend on this. 2017-01-22 Thomas Klausner * src/Makefile.am: build: Fix skel.c generation with BSD make 2017-01-22 Christos Zoulas * src/flex.skl: Add more defines in the non-reentrant part. Fix the reentrant part; don't "#define yyfoo yyfoo" because it breaks code that does #ifndef yywrap .. 2017-01-22 Christos Zoulas * src/flexdef.h: scanner: Add yyparse prototype 2017-01-22 Thomas Klausner * src/flex.skl: scanner: move comment for consistency 2017-01-22 Christos Zoulas * src/misc.c: scanner: Use array instead of pointer 2017-01-22 Christos Zoulas * src/main.c: scanner: manage path to m4 better. Avoid alloca() for SSP; it is better anyway; since we don't need to strdup the path. 2017-01-22 Christos Zoulas * src/gen.c: scanner: Avoid creating unused label 2017-01-22 Christos Zoulas * src/buf.c: Cast argument to avoid arithmetic on void *. 2017-01-22 Christos Zoulas * src/scan.l: scanner: Use strncpy 2017-01-22 Christos Zoulas * src/main.c: scanner: Use prefix when defining yywrap to avoid redefinition. Fixes regression introduced in v2.6.3. 2017-01-22 Christos Zoulas * src/flexdef.h, src/misc.c: scanner: Include stdarg.h for va_list 2017-01-22 Christos Zoulas * src/flexdef.h, src/main.c, src/parse.y: scanner: Rename warn to lwarn. This avoids a naming conflict in NetBSD's libc. 2017-01-01 Explorer09 * tests/README: test: document automake convention for skipped exit status. 2017-01-03 Explorer09 * tests/Makefile.am: test: let testwrapper scripts be run by ${SHELL}. This allows user to use a different shell if /bin/sh has problems. The use of $SHELL (variable) to run scripts is already an Automake convention. All shell scripts in build-aux are run by $SHELL. 2017-01-02 Explorer09 * tests/options.cn, tests/tableopts.sh, tests/testwrapper-direct.sh, tests/testwrapper.sh: test: Remove test scripts bashisms. They now all work under a POSIX compliant sh. Specifically, 'dash' can now be used for running "make check" tests. Note that none of these scripts has ever been using a pipe, so `set -o pipefail` is unnecessary and removed. 2017-01-02 Explorer09 * tests/testwrapper.sh: test: exit on '-1' test non-zero status. If a '-1' test program returns a non-zero status, don't go further and compare it's (numeric) output values. This allows a '-1' test to indicate a "skip" status or an otherwise error. (Currently no such '-1' test would skip like this, though.) Shell syntax note: `set -e` will not exit with the syntax like this `test $(false) = $(false);`. The exit statuses of `false` in the example will be ignored instead. But putting the output in a variable, such as `VAR=$(false)`, DOES exit. 2017-01-02 Explorer09 * Makefile.am, src/Makefile.am: build: Fix 'make indent' target This 'make indent' target has not been working since the directories reorganization in flex 2.6.0. Now make it work again. Note that the current indent profile breaks many styles of existing code. The indent target should not be used until the .indent.pro options are reviewed for desireability. 2017-01-01 Explorer09 * configure.ac: build: Simplify indent program detection 2017-01-12 Tobias Klauser * src/filter.c: filter: Don't emit #line if %option noline set One place emitting a #line directive to the generated header was missed in commit 647a92b9f4 when resolving #55. Fix it to respect gen_line_dirs as well. 2017-01-12 Will Estes * po/ca.po, po/da.po, po/de.po, po/eo.po, po/es.po, po/fi.po, po/fr.po, po/ga.po, po/hr.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sr.po, po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po, po/zh_TW.po: translation: refresh po files from translation project 2017-01-10 Harald van Dijk * src/flex.skl: c++: Fix yyrestart(NULL) SEGV. Binding a reference to a dereferenced null pointer is invalid and compilers optimise away the &file == 0 check. We need a real stream. yyin is available already, and yyrestart(NULL) is only supported when yyin will not be used, so there is no harm in just passing in that. Since we now always have a valid stream, we can skip the null check too. Fixes #98. 2017-01-09 luistung * src/scan.l: scanner: join symbol list. Removed a newline that caused a problem building the scanner in some circumstances. Specifically: 'bad character' error when executing /bin/sh ../build-aux/ylwrap scan.l lex.yy.c scan.c -- flex 2017-01-11 Will Estes * src/flex.skl: scanner: remove void cast before fprintf 2016-12-30 Will Estes * NEWS: doc: update NEWS for 2.6.3 release 2016-11-26 Explorer09 * configure.ac, src/Makefile.am: build: New configure option '--disable-bootstrap'. If configure is run with '--disable-bootstrap', then stage1flex won't be built and stage1scan.c will be generated by sed'ing scan.c. This option is intended to workaround bootstrap bugs rather than to fix the bootstrapping issues which are proving subtler and harder to fix than anyone would like. 2016-11-26 Explorer09 * src/Makefile.am: build: "make clean" deletes stage1scan.c, stage1flex 2016-11-26 Explorer09 * configure.ac, src/Makefile.am: build: allow building libfl even with --disable-libfl. For various reasons, we may wish to build libfl explicitly even when configure has been run with the --disable-libfl option. This is possible, now, via 'make -C src libfl.la'. 2016-12-19 Alexis La Goutte * src/flex.skl: scanner: remove trailing whitespace in skeleton 2016-12-01 Demi Obenour * src/buf.c, src/main.c, src/parse.y: scanner: Disallow, overquote '[' and ']' in prefix 2016-12-29 Samuel Thibault * src/main.c: scanner: allocate correct buffer size for m4 path. Flex did not check the length of the m4 path which could lead to a buffer overflow in some cases. Additionally, not all platforms believe in PATH_MAX, so stop relying on it. Fixes #138 2016-11-24 Will Estes * NEWS: doc: note no more libcompat in NEWS 2016-11-24 Will Estes * lib/Makefile.am: build: explain empty lib/Makefile.am 2016-11-20 Explorer09 * configure.ac: build: warn about cross compiling with *alloc 2016-11-19 Explorer09 * configure.ac, lib/Makefile.am, lib/lib.c, src/Makefile.am: build: Link $(LIBOBJS) from src/ dir, remove libcompat.la. The libcompat.la library was small and less friendly to bootstrapping and cross compilation. Now, we will simply link individual object files as needed, which is simpler. 2016-11-16 Explorer09 * src/Makefile.am: build: Let stage1flex respect LFLAGS 2016-11-14 Will Estes * NEWS: doc: describe --disable-libfl in NEWS 2016-10-31 Explorer09 * configure.ac, src/Makefile.am: build: Add --disable-libfl configure option. Disabling libfl is useful when building flex for a cross-toolchain. Fixes: GH-99 2016-11-09 Demi Obenour * src/flex.skl, tests/array_r.l: fix backwards incompatible changes in 2.6.2. This patch addscompatibility `#defines` for all macros affected by `%prefix`. Fixes #113. 2016-11-08 Will Estes * tests/.gitignore: git: ignore quote_in_comment artifacts 2016-11-08 Demi Obenour * src/scan.l, tests/Makefile.am, tests/quote_in_comment.l, tests/quote_in_comment.txt: Fixes a major bug in Flex's own lexing of literals. My changes caused Flex to mishandle string and character literals in line comments. This commit fixes them. Fixes #113. 2016-11-06 Thomas Klausner * configure.ac: Fix unportable test(1) operator. "==" is only supported by bash, "=" is the standard comparison operator. 2016-11-02 Demi Obenour * tests/quotes.l: Add more escaping tests 2016-11-01 Demi Obenour * src/scan.l: Fix another escaping bug in non-indented verbatim section 2 code. I also did some reformatting. 2016-10-28 Alastair Hughes * configure.ac: build: fix false negatives for help2man and texi2dvi HELP2MAN and TEXI2DVI (or the corresponding ac_prog variables) will never be zero length as they fall back to the missing script; check for the fall back and warn on that instead of always warning. 2016-10-28 Explorer09 * doc/Makefile.am: doc: Don't delete flex.1 during "make distclean". flex.1 is pre-generated in release tarball. If we delete it, the next "configure and make" on the source directory will then require help2man unnecessarily. 2016-10-27 Alastair Hughes * NEWS, doc/Makefile.am: Only regenerate the man page when required. Make the flex binary an order-only prerequisite, and add back the prerequisites from before 7cfb440. This prevents rebuilding the man page whenever the flex binary is rebuilt, which causes problems if help2man is not installed and will never work when cross compiling. Fixes #108. 2016-10-26 Will Estes * NEWS, src/Makefile.am: build: no longer build PIC version of libfl. The PIC version of libfl was not being built correctly. From the lack of bug reports around this problem, we conclude that the PIC version of libfl is not used and so we drop it from the build build targets for flex. 2016-10-25 Explorer09 * README.md: doc: README.md formatting fixes * Wrap everything in the raw document in 72 char per line limit. * Proper casing for terms "Git" and "GitHub" (don't try to look lazy). * Add unordered list marks when needed. * Say `configure && make && make install` and quoted for fixed-width font. Signed-off-by: Kang-Che Sung 2016-10-25 Will Estes * NEWS, configure.ac: build: version 2.6.3 begins 2016-10-24 Will Estes * NEWS: doc: mark 2.6.2 release date 2016-10-24 Will Estes * .gitignore, NEWS, configure.ac: build: switch xz to lzip 2016-10-20 Demi Obenour * src/scan.l, tests/quotes.l: Fix M4 quotation in section 2 prologue and refactor duplicated code 2016-10-21 Alex Kennedy * doc/flex.texi: Update flex.texi: Removed repedative wording "Flex used to" was written twice at the beginning of Chapter 9, paragraph 2. 2016-09-27 Demi Obenour * src/dfa.c, src/gen.c, src/main.c, src/nfa.c, src/parse.y, src/scan.l, tests/bison_yylval_scanner.l, tests/include_by_push.direct.l: Improved M4 quotation This fixes M4 quotation of certain strings beginning with `yy` (in section 3 of the input file only) and character literals. The new quotation method is also less brittle and faster. Tests that relied on the old behavior were fixed. Also, `yyconst` is no longer defined; use `const` (which it unconditionally was defined to) instead. 2016-10-19 Will Estes * Makefile.am, configure.ac: build: for automake, flex is foreign 2016-10-19 Will Estes * README, README.md: doc: mv README to README.md 2016-10-19 Will Estes * README: doc: touch up README 2016-10-19 Will Estes * README: doc: README no longer mentions sourceforge 2016-10-06 Will Estes * NEWS: doc: update NEWS with more post-2.6.1 additions 2016-09-27 Demi Obenour * src/filter.c, src/flexdef.h, src/main.c, src/misc.c, src/options.c, src/options.h, src/scan.l, src/yylex.c, tests/Makefile.am, tests/alloc_extra.l, tests/array_r.l, tests/basic_r.l, tests/c_cxx_nr.lll, tests/c_cxx_r.lll, tests/debug_r.l, tests/include_by_reentrant.direct.l, tests/lineno_r.l, tests/mem_nr.l, tests/mem_r.l, tests/posix.l, tests/posixly_correct.l, tests/pthread.l, tests/quotes.l, tests/reject.l4, tests/rescan_nr.direct.l, tests/rescan_r.direct.l, tests/string_nr.l, tests/string_r.l: Fix M4 quoting of section 3. This fixes M4 quoting of section 3 of the input file, including escape sequences and character constants. Tests were added to verify the behavior in section 3 with respect to quoting. Both escaping of quotes and quoting of potential macro-start characters are tested. Existing tests were also fixed to account for the new -- and now correct -- behavior. Many tests relied on the old behavior of expanding M4 macros in section 3. They needed to be updated for the new behavior. 2016-10-03 Mightyjo * src/flex.skl, tests/.gitignore, tests/Makefile.am, tests/cxx_restart.ll, tests/cxx_restart.txt: Fix yyrestart(NULL) SEGV. 2016-09-05 Demi Obenour * src/scan.l: scanner: M4 quoting fixes 2016-09-05 Demi Obenour * src/Makefile.am: Support `make indent` for out of source builds 2016-09-24 Demi Obenour * src/Makefile.am, src/mkskel.sh: Simplify some shell code 2016-09-23 Demi Obenour * doc/flex.texi, src/flex.skl, src/flexdef.h, src/main.c, src/options.c, src/options.h, src/scan.l, tests/.gitignore, tests/Makefile.am, tests/noansi_nr.l, tests/noansi_nr.txt, tests/noansi_r.l, tests/noansi_r.txt: no longer generate K&R C scanners 2016-09-04 Demi Obenour * src/scan.l: Fix escaping of `[[` and `]]` in strings Previously, `[[` and `]]` were not escaped in strings, which led to bad interactions with m4. Also, don't break strings on newline, as GCC et al support whitespace between a backslash and the subsequent newline. 2016-06-20 Translation Project * NEWS, po/sv.po: new sv translation 2016-05-23 Demetri Obenour * src/misc.c: Delete action_m4_define from misc.c This function was not used and always triggered a fatal error when run. 2016-05-20 Will Estes * tests/Makefile.am, tests/testwrapper-direct.sh: test: run direct tests from srcdir 2016-01-11 Egor Pugin * tests/include_by_buffer.direct.l, tests/include_by_push.direct.l, tests/include_by_reentrant.direct.l: Exited with error code on some conditions in include tests 2016-05-20 Will Estes * tests/testwrapper.sh: test: drop .exe when making input file names 2016-05-20 Will Estes * tests/Makefile.am: test: removed dependencies for include tests 2016-04-28 Tobias Klauser * src/scanflags.c: Avoid realloc on every call of sf_push() Currently, every call to sf_push() realloc()'s _sf_stack, even if the maximum size _sf_max wasn't changed. As the indentation beneath the "if" clause already indicates, the realloc() should only be executed if _sf_max was increased. Found by compiling flex with the -Wmisleading-indentation flags of gcc, which leads to the following warning: scanflags.c: In function ‘sf_push’: scanflags.c:42:5: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation] if (_sf_top_ix + 1 >= _sf_max) ^~ scanflags.c:44:9: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the ‘if’ _sf_stk = realloc(_sf_stk, sizeof(scanflags_t) * _sf_max); ^~~~~~~ 2016-03-31 Will Estes * doc/Makefile.am: build: prettified command to build man page 2016-03-31 Will Estes * doc/Makefile.am: build: added man page to DISTCLEANFILES 2016-03-31 Will Estes * BUGS, TODO: remove unused TODO, BUGS files 2016-03-31 Will Estes * to.do/README, to.do/Wilhelms.todo, to.do/Wish-List, to.do/flex.rmail, to.do/streams.mail, to.do/unicode/FlexLexer.h, to.do/unicode/ccl.c, to.do/unicode/changes.txt, to.do/unicode/ecs.c, to.do/unicode/flex.1, to.do/unicode/flex.skl, to.do/unicode/flexdef.h, to.do/unicode/gen.c, to.do/unicode/main.c, to.do/unicode/misc.c, to.do/unicode/scan.l, to.do/unicode/tblcmp.c: removed to.do/ directory 2016-03-31 Will Estes * po/POTFILES.in: gettext: removed flex.skl from POTFILES.in file list 2016-03-31 rlar * src/Makefile.am: fix skel.c dependency (missing tables_shared.c) and polish build rule Also remove references to srcdir since skel.c is no longer mentioned in po/POTFILES.in. 2016-03-31 rlar * doc/Makefile.am: fix flex.1 dependency git clean -fdx && ./autogen.sh && \ mkdir -p ../build && cd ../build && ../flex/configure && make -j10 && \ make dist failed with: > help2man: can't get `--help' info from ../../flex/src/flex Note: There is no dependency except for the flex binary. 2016-03-31 rlar * src/Makefile.am: fix stage1scan.c and stage1scan.l dependency git clean -fdx && ./autogen.sh && \ mkdir -p ../build && cd ../build && ../flex/configure && make -j10 failed with: > ../src/stage1flex -o stage1scan.c stage1scan.l > stage1flex: can't open stage1scan.l Note: stage1scan.c is not necessairy in the "make dist" generated tar.gz file. stage1flex will be build from scan.c (which is distributed), and this will then generate stage1scan.c from scan.l 2016-03-31 Will Estes * po/POTFILES.in: gettext: list src/flex.skl in po/POTFILES.in 2016-03-29 rlar * src/gen.c: warning in generated code, with -Ca warning: conversion to 'yy_state_type' from 'flex_uint32_t' may change the sign of the result [-Wsign-conversion] 2016-03-29 rlar * tests/Makefile.am: suppress `WARNINGFLAGS' for the almost obsolete `noansi' test cases 2016-03-29 rlar * configure.ac, src/Makefile.am, tests/Makefile.am: configure option `--enable-warnings' and `WARNINGFLAGS' `WARNINGFLAGS' can be passed when invoking `configure' and when invoking `make' if configure switch `--enable-warnings' was given then default to something useful if we have `GCC' `WARNINGFLAGS' is not used when compiling `stage1flex' to avoid unnecessary clutter 2016-03-31 Tobias Klauser * src/main.c: Fix potential buffer overflow in strncat() When using clang/llvm 3.8 to compile flex, the following warning is emitted: main.c:378:27: warning: the value of the size argument in 'strncat' is too large, might lead to a buffer overflow [-Wstrncat-size] strncat(m4_path, m4, sizeof(m4_path)); ^~~~~~~~~~~~~~~ main.c:378:27: note: change the argument to be the free space in the destination buffer minus the terminating null byte strncat(m4_path, m4, sizeof(m4_path)); ^~~~~~~~~~~~~~~ sizeof(m4_path) - strlen(m4_path) - 1Fix it up by using the solution proposed by the warning message. 2016-03-29 Robert.Larice Robert Larice * src/Makefile.am: build: simplified dependency tracking so parallel make runs succeed 2016-03-20 rlar * src/flex.skl, src/gen.c, src/main.c: avoid warning in generated code, with -Cf warning: conversion to 'unsigned int' from 'int' may change the sign of the result [-Wsign-conversion] 2016-03-18 Will Estes * NEWS, configure.ac: mention v2.6.2; summarize changes since 2.6.1 2016-03-18 Will Estes * doc/flex.texi: doc: corrected example in manual, gh#67 2016-03-16 rlar * tests/string_nr.l, tests/string_r.l, tests/yyextra.l: warning: conversion to 'size_t' from 'int' may change the sign of the result [-Wsign-conversion] 2016-03-16 rlar * tests/mem_nr.l, tests/mem_r.l, tests/pthread.l: warning: conversion to 'long unsigned int' from 'int' may change the sign of the result [-Wsign-conversion] 2016-03-16 rlar * src/flex.skl: warning: conversion to 'flex_uint32_t' from 'long unsigned int' may alter its value [-Wconversion] struct yytbl_reader, member bread is of type flex_uint32_t 2016-03-16 rlar * tests/alloc_extra.l, tests/bison_nr_main.c, tests/bison_nr_parser.y, tests/bison_yylloc_parser.y: warning: redundant redeclaration of '...' [-Wredundant-decls] 2016-03-16 rlar * tests/bison_nr_parser.y, tests/bison_yylloc_parser.y, tests/bison_yylval_parser.y, tests/pthread.l: warning: no previous prototype for '...' [-Wmissing-prototypes] 2016-03-16 rlar * tests/multiple_scanners_r_main.c: warning: unused variable 'fp' [-Wunused-variable] 2016-03-16 rlar * tests/pthread.l: main(), warning: redundant redeclaration of 'main' [-Wredundant-decls] 2016-03-16 rlar * tests/include_by_reentrant.direct.l, tests/lineno_nr.l, tests/lineno_r.l, tests/lineno_trailing.l: main(), warning: old-style function definition [-Wold-style-definition] 2016-03-16 rlar * tests/alloc_extra.l, tests/array_nr.l, tests/array_r.l, tests/basic_nr.l, tests/basic_r.l, tests/ccl.l, tests/debug_nr.l, tests/debug_r.l, tests/extended.l, tests/mem_nr.l, tests/mem_r.l, tests/noansi_r.l, tests/posix.l, tests/posixly_correct.l, tests/prefix_nr.l, tests/prefix_r.l, tests/quotes.l, tests/string_nr.l, tests/string_r.l, tests/yyextra.l: main(), warning: old-style function definition [-Wold-style-definition] 2016-03-01 rlar * src/ecs.c, src/tblcmp.c: Fix two more casts 2016-03-14 Bastian Köcher * src/gen.c: Fixes yyl compare with unsigned warning 2016-03-13 Robert Larice * configure.ac: Suppress portability warnings in Makefile generation 2016-02-27 rlar * src/flex.skl: generated code, in yyensure_buffer_stack(), change type of local `num_to_alloc' which is exclusively used in yy_size_t context 2016-03-01 rlar * src/flex.skl: generated code, in yy_get_next_buffer(), change type of local `number_to_move' suits better, because `yy_n_chars' and `yy_buf_size' are of type `int' 2016-02-27 rlar * src/flex.skl: generated code, `_yybytes_len' is of type `int', fix code accordingly 2016-02-28 rlar * src/gen.c: generated code, `max_size' seems to be of type `int', fix casts accordingly 2016-02-28 rlar * src/flex.skl: generated code, here `new_size' is of type `int', fix casts accordingly 2016-02-28 rlar * src/flex.skl: generated code, `yy_buf_size' is of type `int', fix casts accordingly 2016-02-28 rlar * src/flex.skl: generated code, `offset' is of type `int' 2016-02-28 rlar * src/gen.c: generated code, `yy_more_len' is of type `int' 2016-02-28 rlar * src/scan.l: scan.l, rewrite two loops to avoid unneccesairy casting 2016-03-01 rlar * src/regex.c, src/tables.c: improve readability 2016-02-28 rlar * src/tblcmp.c: another cast in tblcmp.c to avoid warning 2016-02-28 rlar * src/buf.c: casts in buf_append() to get rid of warnings 2016-02-28 rlar * src/dfa.c, src/gen.c: cast to suite type of flex_uint32_t td_lolen 2016-02-28 rlar * src/main.c, src/misc.c, src/regex.c, src/scan.l, src/scanopt.c, src/tables_shared.c: cast to get rid of warnings 2016-03-01 rlar * src/buf.c, src/main.c: cast and fix usage of log10(), ceil to prevent buffer overflow 2016-03-01 rlar * src/tables.c: tables.c, sprinkle casts to get rid of warnings 2016-03-01 rlar * src/tables.c: yytbl_data_compress(), change type of local newsz to get rid of warnings 2016-03-01 rlar * src/tables.c, src/tables.h: change type of struct yytbl_writer.total_written to get rid of warnings 2016-02-28 rlar * src/tables.c: change argument type of yytbl_writen() to get rid of warnings 2016-03-01 rlar * src/tables.c: yytbl_write8/16/32(), change type of local variables to get rid of warnings 2016-02-28 rlar * src/flexdef.h, src/misc.c, to.do/unicode/flexdef.h, to.do/unicode/misc.c: change return type and rename int htoi()/otoi() --> unsigned int htoui()/otoui() 2016-03-01 Will Estes * NEWS: Mention 2.6.1 release date 2016-02-28 rlar * src/gen.c: avoid warning, add (int) cast to the read() return value For similiarity with the fread() case. 2016-02-28 rlar * src/scan.l: avoid warning, POSIX says yyless() has an `int' argument 2016-02-29 rlar * src/filter.c: use type size_t in filter_tee_header() to avoid warnings 2016-02-29 rlar * src/filter.c, src/misc.c, src/scanopt.c, src/tables.c: add (size_t) casts to malloc invocations to prevent warnings 2016-02-29 rlar * src/buf.c, src/misc.c, src/scan.l, src/scanopt.c, src/tables.c: add (int) casts to some strlen() invocations to prevent warnings 2016-02-29 rlar * src/flexdef.h, src/scan.l, src/sym.c: ndlookup(), char *, to get rid of casts and warnings 2016-02-28 rlar * src/flexdef.h, src/scan.l, src/sym.c: ndinstal(), char *, to get rid of casts and warnings 2016-02-28 rlar * src/flexdef.h, src/scan.l, src/sym.c: cclinstal() and ccllookup(), char *, to get rid of casts and warnings 2016-02-28 rlar * src/gen.c: warning: redundant redeclaration of ‘gen_next_state’ [-Wredundant-decls] 2016-02-28 rlar * src/gen.c: warning: no previous prototype for ‘mkecstbl’ [-Wmissing-prototypes] 2016-02-28 rlar * src/main.c: warning: suggest parentheses around assignment used as truth value [-Wparentheses] 2016-02-28 rlar * src/flexdef.h: warning: redundant redeclaration of ‘yywrap’ [-Wredundant-decls] 2016-02-28 rlar * src/flexdef.h: warning: redundant redeclaration of ‘yylval’ [-Wredundant-decls] 2016-02-28 rlar * src/flexdef.h: warning: redundant redeclaration of ‘yyin’ [-Wredundant-decls] 2016-02-28 rlar * src/flexdef.h, src/main.c: warning: redundant redeclaration of ‘yyparse’ [-Wredundant-decls] 2016-02-28 rlar * src/parse.y, src/scan.l, src/yylex.c, to.do/unicode/scan.l: unification, rename some more rename these too for improved similiarity: OPTION_OP OPT_HEADER OPT_EXTRA_TYPE OPT_TABLES 2016-02-28 rlar * src/parse.y, src/scan.l, src/yylex.c, to.do/unicode/scan.l: fix name clash, OPT_OUTFILE from parse.y and from options.h these collide: OPT_OUTFILE OPT_PREFIX OPT_YYCLASS rename them TOK_... in the parser 2016-02-28 Will Estes * lib/reallocarray.c: Prototyped reallocarray implementation 2016-02-28 Will Estes * src/scanopt.c: Removed custom strcasecmp() function 2016-02-28 rlar * src/flex.skl: fwrite wants a size_t, yyleng is int per posix 2016-02-28 rlar * src/scanopt.c: Remove some unneeded casts 2016-02-28 rlar * src/flexdef.h: warning: negative integer implicitly converted to unsigned type [-Wsign-conversion] 2016-02-27 rlar * src/dfa.c, src/parse.y: dfa.c:157:24: warning: conversion to 'size_t' from 'int' may change the sign of the result [-Wsign-conversion] most certainly safe cast 2016-02-27 rlar * src/ccl.c: ccl.c:86:19: warning: conversion to 'unsigned char' from 'int' may alter its value [-Wconversion] ch seems to have been checked for proper range some lines above 2016-02-27 rlar * tests/bison_nr_parser.y: warning: deprecated directive, use '%pure-parser' [-Wdeprecated] 2016-02-27 rlar * lib/lib.c: warning: no previous prototype for 'do_nothing' [-Wmissing-prototypes] 2016-02-27 rlar * src/libmain.c: included stdlib.h header 2016-02-27 Will Estes * NEWS: Described more post v2.6.0 changes 2016-02-27 Will Estes * configure.ac: build: Removed bzip2 distribiution archive 2016-02-27 Will Estes * configure.ac: removed obsolete program check 2016-02-27 Will Estes * configure.ac: Made some program checks more robust 2016-02-27 rlar * src/flex.skl: Remove unneeded cast to int 2016-02-27 Will Estes * src/flex.skl: Fixed incorrect integer type 2016-02-27 Will Estes * src/flex.skl: Fix more integer types, resolves sf 184, 187 2016-02-26 Robert Larice * src/flex.skl, src/gen.c: Removed some type conversion warnings 2016-02-26 Will Estes * src/flex.skl: Changed another buffer size to int; resolves gh#61 2016-02-24 Will Estes * src/flex.skl: Changed type of yy_n_chars to int; gh#53, sf#160. The variable yy_n_chars had been of type yy_size_t which is incorrect given its use in read(). While it might be adviseable to look at defining a yy_ssize_t, there might be some issues doing this and so, for now, at least, we'll punt back to int. 2016-02-24 Will Estes * src/buf.c: Fixed size of bufferallocation, resolved gh#54. The value of n_alloc was a count, not a size. Multiplying the value by the element size was incorrect. That multiplication was already being done and having it done twice was incorrect. 2016-02-23 Tobias Klauser * src/scan.l: Allow '%option noline' in flex input file, resolves gh#56. Allow specifying '%option noline' in the input file, leading to the same effect as calling flex with the command line option --noline. Signed-off-by: Tobias Klauser 2016-02-23 Tobias Klauser * src/buf.c, src/main.c: Emit no #line directives if gen_line_dirs is false, resolves igh#55. There are two instances in the code which will print a #line directive to the resulting lexer, regardless of the value of gen_line_dirs. Fix them, so they also respect gen_line_dirs. Signed-off-by: Tobias Klauser 2016-02-16 Tobias Klauser * lib/lib.c, src/gen.c, src/misc.c, src/scan.l: Converted K&R style function definitions to ANSI C style Consistently make use of the ANSI C function definition style instead of the K&R style. 2016-01-29 Tobias Klauser * src/flex.skl: Used NULL constant instead of plain integer for NULL pointer. The sparse static checker warns about using plain integer 0 as NULL pointers in the generated lexer code. Fix this by using NULL consistently for pointers. 2016-01-29 Tobias Klauser * src/flex.skl: Marked declaration and definition of yy_fatal_error as noreturn. Only the declaration of yy_fatal_error is marked with __attribute__((__noreturn__)) in case GCC >= 3 is used, but not the definition. This leads to the sparse static checker to complain about function declaration mismatch. Fix it by defining a macro yynoreturn and using it for both the declaration and the definition of yy_fatal_error. 2016-01-27 Tobias Klauser * src/flex.skl: Fixed declaration mismatch in yy_fatal_error. The prototype declares yy_fatal_error parameter as "const char msg[]" while the definition uses "const char* msg" (introduced by commit e9d5fc713f61b) which causes the sparse static checkers to produce an error. Fix this by adjusting the definition to use "const char* msg" as well. Also change the C++ version accordingly so it matches the declaration in FlexLexer.hpp. 2016-01-23 Will Estes * CODE_OF_CONDUCT.md: flex is for flex #NCoC 2016-01-18 Will Estes * doc/flex.texi: Referred to github for issue tracking, no longer sf 2016-01-10 Egor Pugin * tests/reject.l4, tests/tableopts.l4: Opened files in binary mode explicitly 2016-01-08 OBATA Akio * src/Makefile.am: Linked flex binary against libintl, not libfl. Signed-off-by: Thomas Klausner 2016-01-08 Michael van Elst * src/filter.c: Improved pipe-stdin hack behavior; resolves sf#198. Signed-off-by: Thomas 2015-12-27 Will Estes * configure.ac, src/flexdef.h: Removed no longer needed header checks 2015-12-27 Will Estes * configure.ac: Checked for reallocarray() with AC_REPLACE_FUNCS 2015-12-27 Will Estes * src/flexdef.h, src/main.c: include libgen.h from flexdef.h, not main.c 2015-12-25 Michael Reed * src/main.c: Replace basename2() with basename(3). Given the following program: \#include \#include /* extracts basename from path, optionally stripping the extension "\.*" * (same concept as /bin/sh `basename`, but different handling of extension). */ static char *basename2 (char *path) { char *b; for (b = path; *path; path++) if (*path == '/') b = path + 1; return b; } static void basename_compare(char *path) { printf("basename: %s\n", basename(path)); printf("basename2: %s\n\n", basename2(path)); } int main (int argc, char *argv[]) { // From http://pubs.opengroup.org/onlinepubs/9699919799/ // ``Sample Input and Output Strings'' basename_compare("/usr/lib"); basename_compare("/usr/"); basename_compare("/"); basename_compare("///"); basename_compare("//usr//lib//"); return 0; } ... and the program's output: basename: lib basename2: lib basename: usr basename2: basename: / basename2: basename: / basename2: basename: lib basename2: ... we can see that basename2() behaves the same as basename(3) in the average use case, but messes up pretty severely in others. Besides that, basename(3) is mandated by POSIX so should be present on modern Unix-like systems, so we shouldn't define it ourselves. Some notes: - it doesn't appear to be mentioned in POSIX, but OpenBSD's basename(3) returns NULL if the returned path componenet is > PATH_MAX, so add a check for that - basename(3) shouldn't return an empty string, so remove the program_name[0] != '\0' check 2015-12-25 Michael Reed * src/main.c: Simplify basename2(). It's only call site does not activate the `strip_ext` code path, so the function can be simplified a lot. While here, remove a double assignment. 2015-12-25 Michael Reed * src/flex.skl, src/misc.c: Cleaned up __STDC__ #ifdefs. Assuming a compiler conforming to the ISO C standard is used, i.e., __STDC__ is defined to 1, YY_USE_CONST is always defined and can be eliminated. 2015-12-25 Michael Reed * src/flexdef.h, src/main.c, src/scanopt.c, src/scanopt.h, src/sym.c: Remove remaining use of PROTO 2015-12-21 Serguey Parkhomovsky * src/buf.c: buf.c: use snprintf 2015-12-19 Will Estes * configure.ac: build: reformatted AC_CHECK_FUNCS for readability 2015-12-17 Will Estes * src/scanopt.c: correct function prototype 2015-12-15 Michael Reed * src/main.c, src/scanopt.c, src/sym.c, src/tblcmp.c: Remove more instances of PROTO 2015-12-15 Michael Reed * src/main.c: Removed prototype for main(). It's not called anywhere else so the prototype is not needed. See the C99 standard [1], section 5.1.2.2.1 for more info. [1]: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf 2015-12-13 Michael McConville * src/dfa.c, src/gen.c, src/nfa.c, to.do/unicode/main.c, to.do/unicode/tblcmp.c: Removed more instances of PROTO, ansifying. 2015-12-13 Will Estes * README: Noted github for issue tracking and pull requests 2015-12-13 Michael McConville * README: Reformatted README; removed sf bug tracking link. 2015-12-13 Michael McConville * src/gen.c, to.do/unicode/gen.c: Removed macros for indentation level. Just increment or decrement the indentation counter. That's less to remember and makes the code more readable. w# Please enter the commit message for your changes. Lines starting 2015-12-12 Mike Frysinger * tests/Makefile.am, tests/testwrapper.sh: tests: fixed paths to input files. The current test wrapper works only when the inputs are specified using relative paths. If they're specified with absolute paths, the driver fails to detect the inputs because it always prepends the input dir name which itself is a relative path: $ cd tests $ ./testwrapper.sh -d . -i $PWD/reject.txt -t ./reject_ver.table This normally doesn't show up because people run `./configure` or, for out of tree builds, `../configure`. But if you happen to run configure with an absolute path, then automake tends to generate absolute paths as well leading to test failures. Fix all of this by dropping the implicit input directory prepending. - INPUT_NAME is often a list of files, not just a single one - the input directory is used to find the testname tables which are usually generated, so it's impossible to use files from both source and build directories - most of the time, the full/correct path is already specified 2015-12-12 Mike Frysinger * configure.ac: configure: fixed realloc test. The [] characters are used for quoting in m4, so the attempt to use them in place of `test` fails yielding the warning at build time: .../flex/configure: line 20222: no: command not found 2015-12-12 Michael McConville * src/flexdef.h: Started removal of PROTO macro. The PROTO macro is no longer needed. Additionally, its usage is inconsistent, so we began removing it. 2015-12-12 Michael Reed * Makefile.am, src/main.c: Removed SHORT_FILE_NAMES preprocessor symbol. As a relic of MS-DOS, we don't need this. It's never defined; see 13b5b214f53d1c3354a7ab910bd160c126df1331. Removed additional MSDOS ifdef. 2015-12-11 Michael McConville * configure.ac, lib/reallocarray.c, src/flexdef.h: Added new function reallocarray. This is taken from OpenSSH Portable, which in turn takes it from OpenBSD. reallocarray wraps the stdlib's realloc function. It takes two size arguments and checks for overflow, like calloc, but doesn't zero the memory. Therefore, it allows us to do overflow-safe array reallocations and overflow-safe unzeroed array allocations, which the stdlib allocation functions don't. We have a bunch of specific array allocation macros, none of which check for overflow. reallocarray should be able to replace them. 2015-12-11 Michael McConville * src/flexdef.h: Removed MS-DOS, VMS macros. Given the age of the MS-DOS and VMS platforms, it's likely that no one is building flex on them any more. Additionally, the preferred approach is to test for particular platform features rather than to test for particular platforms. 2015-12-12 Will Estes * src/flexdef.h, src/main.c: Made search for m4 more explicit. 2015-12-12 Will Estes * src/flex.skl: Returned 0 from yywrap() instead of EOF 2015-12-11 Will Estes * src/libmain.c: Changed end of main() in libmain to exit(0) 2015-12-11 Will Estes * NEWS, configure.ac: Mentioned v2.6.1; documented some changes since v2.6.0 2015-12-11 Will Estes * README: Updated build documentation; finished sf#155. Removed version numbers for build tools. Noted that version requirements for build tools will be noted in configure.ac. Expanded documentation of building texinfo based docs. 2015-12-11 Will Estes * doc/Makefile.am: Removed flex.pdf from distribution; partially fixed sf#155 2015-12-11 Will Estes * src/flex.skl: Commented in C style in skeleton; fixed sf#195 2015-12-10 Will Estes * .gitignore: Ignored autoscan files 2015-12-09 Will Estes * configure.ac: Checked for ranlib and strdup() at configure time 2015-12-09 Michael McConville * src/flexdef.h, src/misc.c, src/tblcmp.c, to.do/unicode/flexdef.h, to.do/unicode/misc.c, to.do/unicode/tblcmp.c: Replace zero_out() with stdlib's memset. 2015-12-09 Michael McConville * src/flex.skl: Removed memory allocation casts. 2015-12-09 Michael McConville * src/flexdef.h: Removed alloca() configuration. Since alloca() is dangerous, depricated, we remove it. 2015-12-09 Michael McConville * src/flexdef.h: Removed implementation of isascii(). POSIX defines isascii(), so it's likely present on anything weactually build flex on these days. 2015-12-09 Michael McConville * src/main.c, src/scanopt.c, src/tables.c: Removed NULL-checks before free() 2015-12-08 Michael McConville * src/buf.c, src/dfa.c, src/flexdef.h, src/gen.c, src/scan.l, to.do/unicode/flexdef.h, to.do/unicode/scan.l: Removed flex_free()i, corrected buf_destroy logic. As with flex_alloc(), replace with direct calls to free(). The function buf_destroy is now null safe and the logic was corrected to free() correctly. 2015-12-08 Michael McConville * src/filter.c, src/flexdef.h, src/misc.c, src/scan.l, src/scanflags.c, to.do/unicode/flexdef.h, to.do/unicode/misc.c, to.do/unicode/scan.l: Removed flex_realloc(). As with flex_alloc(), replace calls to flex_realloc(), which was just a wrapper around realloc(). 2015-12-08 Michael McConville * src/buf.c, src/filter.c, src/flexdef.h, src/main.c, src/misc.c, src/regex.c, src/scan.l, src/scanflags.c, src/sym.c, to.do/unicode/flexdef.h, to.do/unicode/misc.c, to.do/unicode/scan.l: Removed flex_alloc; cleaned up style. The function flex_alloc() was just a wrapper around malloc(). Since this only added unclarity, and the flex_alloc() function is likely a legacy of olden times, remove it in favor of calls to malloc() directly. Style elements cleaned up: * superfluous spacing around parentheses * non-constant initialization in variable declarations * needless casts * almost all uses of assignments as subexpressions 2015-12-07 Michael McConville * src/dfa.c, src/flexdef.h, src/gen.c, src/main.c, src/scan.l, src/scanopt.c, tests/bison_nr_scanner.l, tests/bison_yylloc_scanner.l, tests/bison_yylval_scanner.l, tests/mem_nr.l, tests/mem_r.l, tests/pthread.l, tests/string_nr.l, tests/string_r.l, tests/yyextra.l, to.do/unicode/scan.l: Remove allocation casts 2015-12-07 Will Estes * src/.gitignore, src/Makefile.am: Built flex with itself. Changes in scan.l need to be built into flex with the same version of flex in some cases. Since this build requirement is minimal, we simply bootstrap flex unconditionally. We intentionally exclude from version control the bootstrap artifacts as the extra copy of the lexer, the intermediate scanner and the bootstrap executable are not of interest. 2015-12-05 Michael McConville * src/buf.c, src/dfa.c, src/main.c, src/nfa.c, src/parse.y, src/scan.l, src/scanopt.c, src/sym.c, to.do/unicode/main.c, to.do/unicode/scan.l: Use NULL rather than (type *) 0. 2015-12-05 Michael McConville * src/flexdef.h, src/misc.c, src/sym.c, to.do/unicode/flexdef.h, to.do/unicode/misc.c: Replace copy_unsigned_string() with xstrdup(). Like copy_string(), copy_unsigned_string() is just a clone of the stlib's strdup(). We only use it twice. I'm pretty confident that char signedness is irrelevant in this case. 2015-12-04 Akim Demaille * src/FlexLexer.h: Cleaned up white space. 2015-12-04 Akim Demaille * src/FlexLexer.h: Removed struct keyword before yy_buffer_state 2015-12-04 Akim Demaille * examples/testxxLexer.l, src/FlexLexer.h, src/flex.skl, src/main.c: Replaced FLEX_STD macro with std::. The std:: construct exists as of C++98, so we can simply assume it is supported. 2015-12-04 Akim Demaille * src/Makefile.am: Generated skel.c explicitly in srcdir. Rewrote the target for skel.c to explicitly mention the srcdir. This should help when building flex from a directory outside the flex tree. Spread the rule out over several lines to enhance readability. 2015-12-04 Akim Demaille * autogen.sh: Called glibtoolize if libtoolize run fails. On Mac OS X, libtoolize is known as glibtoolize. In cases where libtoolize is not present, then calling glibtoolize when bootstrapping the build system gives more folks a shot at getting flex built from the ground up. 2015-12-02 Mightyjo * configure.ac: Checked for (g)texi2dvi. Better bison, help2man checks. Added test for presence of (g)texi2dvi program. Gave notice if texi2dvi is unavailable and set TEXI2DVI=: to avoid giving users headaches. Enhanced tests for bison and help2man with notices when the programs aren't found. Set their program variables to use the missing script in build-aux since it's compatible with them. 2015-12-02 Michael McConville * src/flexdef.h, src/misc.c, src/parse.y, src/scan.l, src/sym.c, src/tables.c, to.do/unicode/flexdef.h, to.do/unicode/misc.c, to.do/unicode/scan.l: Made string copying more standard. copy_string() was a clone of the stdlib's strdup(). For safety, simplicity, and speed, we should use that instead. We introduce xstrdup() which wraps strdup() in a failure upon memory allocation errors. 2015-11-30 Serguey Parkhomovsky * src/scan.l: Error on unbalanced parentheses in rules section. 2015-11-29 Will Estes * src/Makefile.am: Cleaned up BUILT_SOURCES list. Removed reference to skel.c as a built source since other make rules cover this case. 2015-11-29 Will Estes * src/Makefile.am: Sorted file names in flex_SOURCES 2015-11-27 Mightyjo * src/ecs.c, src/flexdef.h, src/main.c, src/misc.c, src/scan.l, src/scanopt.c, src/sym.c, src/tblcmp.c: Replaced CHAR macro with unsigned char type. Thanks to Michael McConville for pointing out that the old Char macro causes problems with static analysis. The macro has been removed and replaced with 'unsigned char' throughout the flex sources. The macro is not needed at best and was confusing at worst. It was not used in any of the example files nor was it mentioned in the manual at all. 2015-11-21 Will Estes * configure.ac: updated syntax of AC_INIT call as per autoupdate 2015-11-21 Will Estes * tests/Makefile.am: removed extra call to a _CPPFLAGS variable 2015-05-14 Stefan Reinauer * src/buf.c, src/ccl.c, src/dfa.c, src/ecs.c, src/gen.c, src/main.c, src/misc.c, src/nfa.c, src/parse.y, src/scan.l, src/scanopt.c, src/sym.c, src/tblcmp.c: Switch function definitions from mixed K&R to consistent ANSI C. flex was using K&R function definitions for some functions and ANSI C style in others, sometimes even in the same file. Change the code to consistently use ANSI C. Signed-off-by: Stefan Reinauer 2015-11-16 Mightyjo * tests/Makefile.am: Used in-tree header file for c++ tests. 2015-11-17 Will Estes * configure.ac: Declared version 2.6.0 2015-11-17 Will Estes * NEWS: Dated, described flex release 2.6.0 2015-11-13 Will Estes * NEWS, configure.ac: Declared version 2.6.0rc1 2015-11-13 lukeallardyce * src/Makefile.am: Supplied versioning information in flex libraries. Resolves sourceforge bug #182. On OSX, and possibly other platforms, building the libfl libraries without versioning information caused a build failures. 2015-11-12 Will Estes * tests/Makefile.am: Cleaned up more precisely after make check. BUILT_SOURCES is now just the list of headers built as per the automake manual. We provide the list of files to clean to make rebuilding the test suite programs easier. We then use the CLEANFILES list in a dist-hook to clean up the distribution that automake gathers since not distributing flex generated files is foreign to automake's mindset, but we need exactly that. Additionally, we locate inputs to the tables-related tests more precisely. Some files are in srcdir and some are in builddir, which the arguments to the log compiler are now made aware of. 2015-11-11 Will Estes * tests/Makefile.am: Pulled out scripts in tests/Makefile.am 2015-11-11 Will Estes * tests/Makefile.am: Added srcdir to tableopts.am include 2015-11-11 Will Estes * doc/Makefile.am: Changed man page dependencies. The man page is just the --help output as reformatted by help2man. The --help option is most likely to change when the flex skeleton changes or one of the option parsing files changes or the configure.ac script itself changes. The dependencies reflect this now. It is still necessary, under some circumstances, to rebuild flex explicitly before building the man page. In theory, it's possible to have automake arrange to do this all the time, but doing so works out to be fragile, given the rest of the build system. 2015-11-10 Will Estes * autogen.sh: Called libtoolize directly because autoreconf fails to pick up LT_INIT properly 2015-11-10 Will Estes * tests/Makefile.am: Added tableopts.sh to EXTRA_DIST 2015-11-08 Mightyjo * tests/Makefile.am: Made tests depend on the built flex binary. 2015-11-08 Mightyjo * : commit cf6cb4dce791c26567cc506770ca96b4f4118024 Author: Mightyjo Date: Sat Nov 7 23:11:35 2015 -0800 2015-11-04 Mightyjo * doc/flex.texi: Updated documentation to reflect the revisions to FlexLexer.h 2015-10-26 Mightyjo * src/FlexLexer.h, src/flex.skl: Changed several pointers to istream (and ostream) to references in c++-only sections of the skeleton. Patched up a variety of expected errors caused by changing istream* to istream&. Added a stray 'make' at line 545. Oops. Changed the buffer_state struct to store std::streambuf* instead of std::istream* for C++ mode. Changed interfaces in FlexLexer.h to take std::istream& instead of *. Backward compatibility temporarily broken. Patched up backward compatibility with reasonable behavior in the presence of null pointers. Re-added backward-compatible versions of the yyFlexLexer methods that take iostream pointers. All tests passing. 2015-09-29 Translation Project * po/zh_CN.po: new zh_CN translation from the translation project 2015-07-27 Jaska Uimonen * src/gen.c: fix possible resource leak with yynultrans_tbl 2015-07-27 Jaska Uimonen * src/dfa.c: fix possible uninitialized array values 2015-08-05 Will Estes * doc/flex.texi: add %{...%} block to example in manual 2015-07-15 Will Estes * configure.ac: initialize libtool earlier in build system generation 2015-05-08 Translation Project * po/da.po: new da translation from the Translation Project 2014-07-25 Mariusz PluciÅ„ski * src/gen.c, src/scan.l, tests/bison_nr_parser.y, tests/bison_yylloc_parser.y, tests/bison_yylval_parser.y, tests/multiple_scanners_nr_main.c: Fix `label unused` warning 2014-07-25 Mariusz PluciÅ„ski * src/flex.skl: Fix two "signed/unsigned" warnings 2014-07-25 Mariusz PluciÅ„ski * tests/alloc_extra.l, tests/array_nr.l, tests/array_r.l, tests/basic_nr.l, tests/basic_r.l, tests/bison_nr_scanner.l, tests/bison_yylloc_scanner.l, tests/bison_yylval_scanner.l, tests/ccl.l, tests/cxx_basic.ll, tests/debug_nr.l, tests/debug_r.l, tests/extended.l, tests/header_nr_scanner.l, tests/header_r_scanner.l, tests/include_by_buffer.direct.l, tests/include_by_push.direct.l, tests/include_by_reentrant.direct.l, tests/lineno_nr.l, tests/lineno_r.l, tests/lineno_trailing.l, tests/mem_nr.l, tests/mem_r.l, tests/multiple_scanners_nr_1.l, tests/multiple_scanners_nr_2.l, tests/multiple_scanners_r_1.l, tests/multiple_scanners_r_2.l, tests/noansi_nr.l, tests/noansi_r.l, tests/posix.l, tests/posixly_correct.l, tests/prefix_nr.l, tests/prefix_r.l, tests/pthread.l, tests/quotes.l, tests/reject.l4, tests/rescan_nr.direct.l, tests/rescan_r.direct.l, tests/string_nr.l, tests/string_r.l, tests/tableopts.l4, tests/top.l, tests/yyextra.l: Fix `unused function` warnings in tests 2014-07-25 Mariusz PluciÅ„ski * tests/bison_nr_parser.y, tests/bison_yylloc_parser.y, tests/bison_yylval_parser.y: Fix `implicit function declaration` warnings in tests 2014-07-25 Mariusz PluciÅ„ski * tests/header_r_main.c, tests/multiple_scanners_nr_main.c, tests/reject.l4, tests/tableopts.l4, tests/top_main.c: Remove a few `unused variable` warnings 2014-07-25 Mariusz PluciÅ„ski * src/filter.c: Remove unused variable from src/filter.c:filter_fix_linedirs 2014-07-25 Mariusz PluciÅ„ski * src/scanopt.c: Remove unused argument and variable from src/scanopt.c:scanopt_err 2014-07-25 Mariusz PluciÅ„ski * src/flex.skl, src/libmain.c, src/parse.y, tests/bison_nr_main.c, tests/bison_yylloc_main.c, tests/bison_yylloc_parser.y, tests/bison_yylval_main.c, tests/bison_yylval_parser.y, tests/header_nr_main.c, tests/header_r_main.c, tests/lineno_nr.l, tests/lineno_r.l, tests/lineno_trailing.l, tests/mem_r.l, tests/multiple_scanners_nr_main.c, tests/multiple_scanners_r_main.c, tests/pthread.l, tests/rescan_nr.direct.l, tests/rescan_r.direct.l, tests/top_main.c: Fix a few "unused parameter" warnings 2014-07-25 Mariusz PluciÅ„ski * src/main.c: Fix warning about redefined macro when multiple scanners are used. 2014-07-25 Mariusz PluciÅ„ski * tests/bison_nr_parser.y: Avoid passing `const char*` argument as `char*` in test-bison-nr 2014-11-21 Alexis La Goutte * src/misc.c, src/regex.c, src/tables.c, src/tables_shared.c: Fix -Wdocumentation warnings 2014-11-16 Will Estes * tests/README: document new suite layout 2014-11-16 Will Estes * tests/TEMPLATE/.gitignore, tests/TEMPLATE/Makefile.am, tests/TEMPLATE/cvsignore, tests/TEMPLATE/parser.y, tests/TEMPLATE/scanner.l, tests/TEMPLATE/test.input, tests/create-test, tests/descriptions: remove unused files after test suite refactor 2014-11-14 Will Estes * .gitignore, doc/.gitignore: Ignore directories build-aux/, m4/ Since build-aux/ now contains a number of files previously at the top level, we ignore build-aux/. Therefore, it's not necessary to list any files that are now kept in it. Also, explicitly mark m4/ as a directory to ignore. 2014-11-14 Will Estes * configure.ac: added back call to AC_CONFIG_AUX_DIR. In an effort to reduce top level directory clutter, reintroduced the call to AC_CONFIG_AUX_DIR. Moved the call to LT_INIT to after that call so configure will be able to find its files. 2014-07-18 Will Estes * tests/tableopts.sh, tests/testwrapper.sh: use unofficial bash strict mode and cleanups in supporting bash scripts 2014-07-18 Will Estes * tests/.gitignore, tests/Makefile.am, tests/tableopts.am, tests/tableopts.l4, tests/tableopts.sh, tests/tableopts.txt, tests/test-table-opts/.gitignore, tests/test-table-opts/Makefile.am, tests/test-table-opts/scanner.l, tests/test-table-opts/test.input: split apart table options tests into tests per threading, table option, serialization and verification 2014-07-17 Will Estes * tests/tableopts.sh: add tableopts.sh script 2014-07-02 Will Estes * configure.ac, tests/Makefile.am: use automake conditional around pthread test 2014-07-01 Will Estes * tests/.gitignore, tests/Makefile.am, tests/lineno_trailing.l, tests/lineno_trailing.one.txt, tests/test-lineno-trailing/.gitignore, tests/test-lineno-trailing/Makefile.am, tests/test-lineno-trailing/scanner.l, tests/test-lineno-trailing/test.input: refactor lineno_trailing test for new test suite layout 2014-07-01 Will Estes * tests/.gitignore, tests/Makefile.am, tests/lineno_r.l, tests/lineno_r.one.txt, tests/test-lineno-r/.gitignore, tests/test-lineno-r/Makefile.am, tests/test-lineno-r/scanner.l, tests/test-lineno-r/test.input: refactor lineno_r test for new test suite layout 2014-07-01 Will Estes * tests/.gitignore, tests/Makefile.am, tests/lineno_nr.l, tests/lineno_nr.one.txt, tests/test-lineno-nr/.gitignore, tests/test-lineno-nr/Makefile.am, tests/test-lineno-nr/scanner.l, tests/test-lineno-nr/test.input, tests/testwrapper.sh: refactor lineno_nr test for new test suite layout 2014-06-30 Will Estes * tests/test-linedir-r/.gitignore, tests/test-linedir-r/Makefile.am, tests/test-linedir-r/check-lines.awk, tests/test-linedir-r/main.c, tests/test-linedir-r/scanner.l, tests/test-linedir-r/test.input: Remove linedir_r test. The linedir_r test tested the implementation of line number tracking, not its results. 2014-06-24 Will Estes * tests/.gitignore, tests/Makefile.am, tests/pthread.l, tests/pthread_1.txt, tests/pthread_2.txt, tests/pthread_3.txt, tests/pthread_4.txt, tests/pthread_5.txt, tests/test-pthread/.gitignore, tests/test-pthread/Makefile.am, tests/test-pthread/scanner.l, tests/test-pthread/test-1.input, tests/test-pthread/test-2.input, tests/test-pthread/test-3.input, tests/test-pthread/test-4.input, tests/test-pthread/test-5.input: refactor pthread test for new test suite layout 2014-06-24 Will Estes * tests/Makefile.am: build reject_[vs]er tests explicitly to pass proper compiler flags 2014-06-24 Will Estes * tests/.gitignore, tests/Makefile.am, tests/cxx_yywrap.ll, tests/cxx_yywrap.txt, tests/test-c++-yywrap/.gitignore, tests/test-c++-yywrap/Makefile.am, tests/test-c++-yywrap/scanner.l, tests/test-c++-yywrap/test.input, tests/testwrapper.sh: refactor cxx_yywrap test for new test suite layout 2014-06-17 Will Estes * tests/Makefile.am, tests/options.cn, tests/test-concatenated-options/.gitignore, tests/test-concatenated-options/Makefile.am: refactor concatenated options test for new test suite layout 2014-06-17 Will Estes * tests/.gitignore, tests/Makefile.am, tests/include_by_buffer.direct.l, tests/include_by_buffer.direct.txt, tests/include_by_buffer.direct_2.txt, tests/include_by_buffer.direct_3.txt, tests/include_by_push.direct.l, tests/include_by_push.direct.txt, tests/include_by_push.direct_2.txt, tests/include_by_push.direct_3.txt, tests/include_by_reentrant.direct.l, tests/include_by_reentrant.direct.txt, tests/include_by_reentrant.direct_2.txt, tests/include_by_reentrant.direct_3.txt, tests/test-include-by-buffer/.gitignore, tests/test-include-by-buffer/Makefile.am, tests/test-include-by-buffer/scanner.l, tests/test-include-by-buffer/test-1.input, tests/test-include-by-buffer/test-2.input, tests/test-include-by-buffer/test-3.input, tests/test-include-by-push/.gitignore, tests/test-include-by-push/Makefile.am, tests/test-include-by-push/scanner.l, tests/test-include-by-push/test-1.input, tests/test-include-by-push/test-2.input, tests/test-include-by-push/test-3.input, tests/test-include-by-reentrant/.gitignore, tests/test-include-by-reentrant/Makefile.am, tests/test-include-by-reentrant/scanner.l, tests/test-include-by-reentrant/test-1.input, tests/test-include-by-reentrant/test-2.input, tests/test-include-by-reentrant/test-3.input: refactor include_by_* tests for new test suite layout 2014-06-16 Will Estes * tests/.gitignore, tests/Makefile.am, tests/rescan_nr.direct.l, tests/rescan_nr.direct.txt, tests/rescan_nr.l, tests/rescan_nr.txt, tests/rescan_r.direct.l, tests/rescan_r.direct.txt, tests/test-rescan-r/.gitignore, tests/test-rescan-r/Makefile.am, tests/test-rescan-r/scanner.l, tests/test-rescan-r/test.input, tests/testwrapper.sh: refactor rescan_r test for new test suite layout 2014-06-16 Will Estes * tests/.gitignore, tests/Makefile.am, tests/rescan_nr.l, tests/rescan_nr.txt, tests/test-rescan-nr/.gitignore, tests/test-rescan-nr/Makefile.am, tests/test-rescan-nr/scanner.l, tests/test-rescan-nr/test.input, tests/testwrapper.sh: Refactor rescan_nr test for new test suite layout. Also add -r option to testwrapper.sh to support passing input file as a command line argument to the test scanner without using shell redirection. 2014-06-16 Will Estes * tests/Makefile.am: correct use of objext to OBJEXT 2014-06-16 Will Estes * tests/.gitignore, tests/Makefile.am, tests/quotes.l, tests/quotes.txt, tests/test-quotes/.gitignore, tests/test-quotes/Makefile.am, tests/test-quotes/scanner.l, tests/test-quotes/test.input: refactor quotes test for new test suite layout 2014-06-16 Will Estes * tests/.gitignore, tests/Makefile.am, tests/reject.l4, tests/reject.txt, tests/test-reject/.gitignore, tests/test-reject/Makefile.am, tests/test-reject/scanner.l, tests/test-reject/test.input, tests/testwrapper.sh: Refactor reject test for new test suite layout. Split out reject test into its constituant tests. Add .reject tests and .table tests for automake test log generation. Rewrite testwrapper.sh to handle running with a tables file and specifying optional input using command line options rather than positional parameters. 2014-06-15 Will Estes * tests/.gitignore, tests/Makefile.am, tests/multiple_scanners_r_1.l, tests/multiple_scanners_r_2.l, tests/multiple_scanners_r_main.c, tests/test-multiple-scanners-r/.gitignore, tests/test-multiple-scanners-r/Makefile.am, tests/test-multiple-scanners-r/main.c, tests/test-multiple-scanners-r/scanner-1.l, tests/test-multiple-scanners-r/scanner-2.l: Refactor multiple_scanners_r test for new test suite layout. Also, remove the use of table files from this test as that tests two features at once and we want to be as close to testing one feature at a time as we can be. 2014-06-15 Will Estes * tests/.gitignore, tests/Makefile.am, tests/multiple_scanners_nr_1.l, tests/multiple_scanners_nr_2.l, tests/multiple_scanners_nr_main.c, tests/test-multiple-scanners-nr/.gitignore, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-nr/main.c, tests/test-multiple-scanners-nr/scanner-1.l, tests/test-multiple-scanners-nr/scanner-2.l: refactor multiple_scanners_nr test for new test suite layout 2014-06-14 Will Estes * tests/.gitignore, tests/Makefile.am, tests/cxx_multiple_scanners.txt, tests/cxx_multiple_scanners_1.ll, tests/cxx_multiple_scanners_2.ll, tests/cxx_multiple_scanners_main.cc, tests/test-c++-multiple-scanners/.gitignore, tests/test-c++-multiple-scanners/Makefile.am, tests/test-c++-multiple-scanners/main.cpp, tests/test-c++-multiple-scanners/scanner-1.l, tests/test-c++-multiple-scanners/scanner-2.l, tests/test-c++-multiple-scanners/test.input: refactor cxx_multiple_scanners test for new test suite layout 2014-06-14 Will Estes * tests/.gitignore, tests/Makefile.am, tests/c_cxx_nr.lll, tests/c_cxx_nr.txt, tests/c_cxx_r.lll, tests/c_cxx_r.txt, tests/test-c-cpp-nr/.gitignore, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-nr/scanner.l, tests/test-c-cpp-nr/test.input, tests/test-c-cpp-r/.gitignore, tests/test-c-cpp-r/Makefile.am, tests/test-c-cpp-r/scanner.l, tests/test-c-cpp-r/test.input: refactor c_cxx_nr, c_cxx_r tests for new test suite layout 2014-06-14 Will Estes * tests/.gitignore, tests/Makefile.am, tests/cxx_basic.ll, tests/cxx_basic.txt, tests/test-c++-basic/.gitignore, tests/test-c++-basic/Makefile.am, tests/test-c++-basic/scanner.l, tests/test-c++-basic/test.input: refactor cxx_basic test for new test suite layout 2014-06-14 Will Estes * tests/.gitignore, tests/Makefile.am, tests/posixly_correct.l, tests/test-posixly-correct/.gitignore, tests/test-posixly-correct/Makefile.am, tests/test-posixly-correct/scanner.l: refactor posixly_correct test for new test suite layout 2014-06-14 Will Estes * tests/.gitignore, tests/Makefile.am, tests/test-yyextra/.gitignore, tests/test-yyextra/Makefile.am, tests/test-yyextra/scanner.l, tests/test-yyextra/test.input, tests/yyextra.l, tests/yyextra.txt: refactor yyextra test for new test suite layout 2014-06-14 Will Estes * tests/.gitignore, tests/Makefile.am, tests/test-top/.gitignore, tests/test-top/Makefile.am, tests/test-top/main.c, tests/test-top/scanner.l, tests/test-top/test.input, tests/top.l, tests/top.txt, tests/top_main.c: refactor top test for new test suite layout 2014-06-14 Will Estes * tests/.gitignore, tests/Makefile.am, tests/string_r.l, tests/test-string-r/.gitignore, tests/test-string-r/Makefile.am, tests/test-string-r/scanner.l: refactor string_r test for new test suite layout 2014-06-14 Will Estes * tests/.gitignore, tests/Makefile.am, tests/string_nr.l, tests/test-string-nr/.gitignore, tests/test-string-nr/Makefile.am, tests/test-string-nr/scanner.l: refactor string_nr test for new test suite layout 2014-06-12 Will Estes * tests/.gitignore, tests/Makefile.am, tests/prefix_r.l, tests/prefix_r.txt, tests/test-prefix-r/.gitignore, tests/test-prefix-r/Makefile.am, tests/test-prefix-r/README, tests/test-prefix-r/scanner.l, tests/test-prefix-r/test.input: refactor prefix_r test for new test suite layout 2014-06-12 Will Estes * tests/.gitignore, tests/Makefile.am, tests/prefix_nr.l, tests/prefix_nr.txt, tests/test-prefix-nr/.gitignore, tests/test-prefix-nr/Makefile.am, tests/test-prefix-nr/README, tests/test-prefix-nr/scanner.l, tests/test-prefix-nr/test.input: refactor prefix_nr for new test suite layout 2014-06-12 Will Estes * tests/testwrapper.sh: Check if test input file exists. Not all tests have input files, so check if one exists and run the test program accordingly. 2014-06-12 Will Estes * tests/.gitignore, tests/Makefile.am, tests/posix.l, tests/test-posix/.gitignore, tests/test-posix/Makefile.am, tests/test-posix/scanner.l: refactor posix test for new test suite layout 2014-06-12 Will Estes * tests/.gitignore, tests/Makefile.am, tests/noansi_r.l, tests/noansi_r.txt, tests/test-noansi-r/.gitignore, tests/test-noansi-r/Makefile.am, tests/test-noansi-r/scanner.l, tests/test-noansi-r/test.input: refactor noansi_r test for new test suite layout 2014-06-12 Will Estes * tests/.gitignore, tests/Makefile.am, tests/noansi_nr.l, tests/noansi_nr.txt, tests/test-noansi-nr/.gitignore, tests/test-noansi-nr/Makefile.am, tests/test-noansi-nr/scanner.l, tests/test-noansi-nr/test.input: refactor noansi_nr for new test suite layout 2014-06-05 Will Estes * tests/.gitignore, tests/Makefile.am, tests/mem_r.l, tests/mem_r.txt, tests/test-mem-r/.gitignore, tests/test-mem-r/Makefile.am, tests/test-mem-r/scanner.l, tests/test-mem-r/test.input: refactor mem_r test for new test suite layout 2014-06-05 Will Estes * tests/.gitignore, tests/Makefile.am, tests/mem_nr.l, tests/mem_nr.txt, tests/test-mem-nr/.gitignore, tests/test-mem-nr/Makefile.am, tests/test-mem-nr/scanner.l, tests/test-mem-nr/test.input: refactor mem_nr test for new test suite layout 2014-06-04 Will Estes * tests/.gitignore, tests/Makefile.am, tests/header_r.txt, tests/header_r_main.c, tests/header_r_scanner.l, tests/test-header-r/.gitignore, tests/test-header-r/Makefile.am, tests/test-header-r/main.c, tests/test-header-r/scanner.l, tests/test-header-r/test.input: refactor header_r test for new test suite layout 2014-06-04 Will Estes * tests/.gitignore, tests/Makefile.am, tests/header_nr.txt, tests/header_nr_main.c, tests/header_nr_scanner.l, tests/test-header-nr/.gitignore, tests/test-header-nr/Makefile.am, tests/test-header-nr/main.c, tests/test-header-nr/scanner.l, tests/test-header-nr/test.input: refactor header_nr test for new test suite layout 2014-06-04 Will Estes * tests/.gitignore, tests/Makefile.am, tests/extended.l, tests/extended.txt, tests/test-extended/.gitignore, tests/test-extended/Makefile.am, tests/test-extended/scanner.l, tests/test-extended/test.input: refactor extended test for new test suite layout 2014-06-04 Will Estes * tests/.gitignore, tests/Makefile.am, tests/debug_r.l, tests/debug_r.txt, tests/test-debug-r/.gitignore, tests/test-debug-r/Makefile.am, tests/test-debug-r/scanner.l, tests/test-debug-r/test.input: refactor debug_r test for new test suite layout 2014-06-04 Will Estes * tests/.gitignore, tests/Makefile.am, tests/debug_nr.l, tests/debug_nr.txt, tests/test-debug-nr/.gitignore, tests/test-debug-nr/Makefile.am, tests/test-debug-nr/scanner.l, tests/test-debug-nr/test.input: refactor debug_nr test for new test suite layout 2014-06-04 Will Estes * tests/.gitignore, tests/Makefile.am, tests/ccl.l, tests/ccl.txt, tests/test-ccl/.gitignore, tests/test-ccl/Makefile.am, tests/test-ccl/scanner.l, tests/test-ccl/test.input: refactor ccl test for new test suite layout 2014-06-04 Will Estes * tests/.gitignore, tests/Makefile.am, tests/alloc-extra.l, tests/alloc-extra.txt, tests/alloc_extra.l, tests/alloc_extra.txt, tests/array-nr.l, tests/array-nr.txt, tests/array-r.l, tests/array-r.txt, tests/array_nr.l, tests/array_nr.txt, tests/array_r.l, tests/array_r.txt, tests/basic-nr.l, tests/basic-nr.txt, tests/basic-r.l, tests/basic-r.txt, tests/basic_nr.l, tests/basic_nr.txt, tests/basic_r.l, tests/basic_r.txt, tests/bison-nr-main.c, tests/bison-nr-parser.y, tests/bison-nr-scanner.l, tests/bison-nr.txt, tests/bison-yylloc-main.c, tests/bison-yylloc-parser.y, tests/bison-yylloc-scanner.l, tests/bison-yylloc.txt, tests/bison-yylval-main.c, tests/bison-yylval-parser.y, tests/bison-yylval-scanner.l, tests/bison-yylval.txt, tests/bison_nr.txt, tests/bison_nr_main.c, tests/bison_nr_parser.y, tests/bison_nr_scanner.l, tests/bison_yylloc.txt, tests/bison_yylloc_main.c, tests/bison_yylloc_parser.y, tests/bison_yylloc_scanner.l, tests/bison_yylval.txt, tests/bison_yylval_main.c, tests/bison_yylval_parser.y, tests/bison_yylval_scanner.l: use underscores in test file names to silence automake warnings 2014-06-04 Will Estes * .gitignore, m4/.gitignore, m4/Makefile.am: do not track m4 subdirectory any more 2014-06-04 Will Estes * .gitignore, configure.ac: upgrade automake version to 1.14.1 Unfortunately, automake 1.14.1 does not play nicely with AC_CONFIG_AUX_DIR, so upgrading the used automake version required removing the build-aux directory and letting autoconf's installed helper files live more over the tree. 2014-06-04 Will Estes * doc/.gitignore: ignore more files generated by texinfo 2014-06-04 Will Estes * configure.ac: update gettext version to 0.19 2014-06-04 Will Estes * configure.ac: call LT_INIT earlier in configure.ac 2014-06-04 Will Estes * tests/.gitignore, tests/Makefile.am, tests/bison-yylval-main.c, tests/bison-yylval-parser.y, tests/bison-yylval-scanner.l, tests/bison-yylval.txt, tests/test-bison-yylval/.gitignore, tests/test-bison-yylval/Makefile.am, tests/test-bison-yylval/main.c, tests/test-bison-yylval/parser.y, tests/test-bison-yylval/scanner.l, tests/test-bison-yylval/test.input: refactor bison-yylval test for new test suite layout 2014-06-04 Will Estes * tests/.gitignore, tests/Makefile.am, tests/bison-yylloc-main.c, tests/bison-yylloc-parser.y, tests/bison-yylloc-scanner.l, tests/bison-yylloc.txt, tests/test-bison-yylloc/.gitignore, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylloc/main.c, tests/test-bison-yylloc/parser.y, tests/test-bison-yylloc/scanner.l, tests/test-bison-yylloc/test.input: refactor bison-yylloc test for new test suite layout 2014-06-03 Will Estes * tests/.gitignore, tests/Makefile.am, tests/bison-nr-main.c, tests/bison-nr-parser.y, tests/bison-nr-scanner.l, tests/bison-nr.txt, tests/test-bison-nr/.gitignore, tests/test-bison-nr/Makefile.am, tests/test-bison-nr/main.c, tests/test-bison-nr/parser.y, tests/test-bison-nr/scanner.l, tests/test-bison-nr/test.input: refactor bison-nr test for new test suite layout 2014-06-01 Will Estes * tests/.gitignore, tests/Makefile.am, tests/array-r.l, tests/array-r.txt, tests/test-array-r/.gitignore, tests/test-array-r/Makefile.am, tests/test-array-r/scanner.l, tests/test-array-r/test.input: refactor array-r test for new test suite layout 2014-06-01 Will Estes * tests/Makefile.am: list tests/README with other EXTRA_DIST files in tests/ 2014-06-01 Will Estes * tests/.gitignore, tests/Makefile.am, tests/array-nr.l, tests/array-nr.txt, tests/test-array-nr/.gitignore, tests/test-array-nr/Makefile.am, tests/test-array-nr/scanner.l, tests/test-array-nr/test.input: refactor array-nr test for new test suite layout 2014-06-01 Will Estes * tests/Makefile.am, tests/testwrapper.sh: make tests/testwrapper.sh more verbose; find input in srcdir Since output is redirected by the automake parallel test suite driver, turn on both -v and -x in bash for the testwrapper.sh shell script. This helps a ton in debugging problems with the test harness itself. In general, the input files are in automake's srcdir and the name of the test includes the relative path to it (even though that's supposed to be ./). Therefore, pass srcdir in AM_LOG_FLAGS and prepend that to the test name as part of constructing the input file's name. 2014-06-01 Will Estes * tests/Makefile.am: distribute tests/testwrapper.sh 2014-06-01 Will Estes * tests/.gitignore, tests/Makefile.am, tests/alloc-extra.l, tests/alloc-extra.txt, tests/test-alloc-extra/.gitignore, tests/test-alloc-extra/Makefile.am, tests/test-alloc-extra/scanner.l, tests/test-alloc-extra/test.input: refacter alloc-extra for new test suite layout 2014-05-29 Will Estes * tests/.gitignore, tests/Makefile.am, tests/basic-r.l, tests/basic-r.txt, tests/test-basic-r/.gitignore, tests/test-basic-r/Makefile.am, tests/test-basic-r/scanner.l, tests/test-basic-r/test.input: refactor basic-r test for new test suite layout 2014-04-22 Will Estes * tests/Makefile.am, tests/basic-nr.l, tests/basic-nr.txt, tests/test-basic-nr/.gitignore, tests/test-basic-nr/Makefile.am, tests/test-basic-nr/scanner.l, tests/test-basic-nr/test.input, tests/testwrapper.sh: refactor basic-nr test for new test suite layout 2014-04-22 Will Estes * configure.ac: remove old tests/ subdirectories from build system 2014-04-22 Will Estes * configure.ac: add parallel test suite option to build system 2014-04-22 Will Estes * tests/.gitignore: ignore files for new test suite layout 2014-04-22 Will Estes * tests/Makefile.am: use automake parallel test suite option to build test suite 2014-04-09 Manoj Srivastava * tests/test-bison-yylloc/parser.y, tests/test-bison-yylval/parser.y: Do not use obsolete bison constructs in tests. In Bison 3.0, support for YYLEX_PARAM and YYPARSE_PARAM has been removed (deprecated in Bison 1.875): use %lex-param, %parse-param, or %param. This commit fixes the tests so they still work. Signed-off-by: Manoj Srivastava 2014-10-31 Christos Zoulas * src/buf.c, src/filter.c, src/flex.skl, src/flexdef.h, src/gen.c, src/libmain.c, src/libyywrap.c, src/main.c, src/misc.c, src/nfa.c, src/scan.l, src/scanflags.c, src/scanopt.c, src/yylex.c: NetBSD downstream patches. const fixes. -Wconversion fixes for the skeleton files. param namespace protection (add _ to inline function parameters). unused variable/code removal. rename warn to lwarn to avoid conflict with . ctype.h function argument correction. merged the error functions lerrif and lerrsf -> lerr. 2014-07-25 Mariusz PluciÅ„ski * src/flexdef.h, src/misc.c, src/scanflags.c: Allow error reporting routines to accept varying number of arguments in modern style 2014-07-25 Mariusz PluciÅ„ski * src/buf.c: Fix warning on assigning from `const char*` to `char*` 2014-07-24 Mariusz PluciÅ„ski * src/main.c: Add disambiguation braces in main.c 2014-07-17 Yuri * doc/flex.texi, examples/fastwc/mywc.c, src/ccl.c, src/dfa.c, src/ecs.c, src/flex.skl, src/flexdef.h, src/gen.c, src/misc.c, src/nfa.c, src/parse.y, src/scan.l, src/sym.c, src/tblcmp.c: Removed deprecated 'register' storage class specifier. clang-3.5.0 now complains about them: warning: 'register' storage class specifier is deprecated [-Wdeprecated-register] 2014-06-21 Mariusz PluciÅ„ski * src/flexdef.h, src/main.c, src/misc.c, src/options.c, src/options.h, src/yylex.c: Change output formats from octal to hexadecimal 2014-06-11 Will Estes * NEWS, configure.ac: update version number to 2.6.0-pre 2014-05-03 Will Estes * src/ecs.c: check limits before using array index cclp; resolves sf-166 2014-04-02 Sean McBride * src/flex.skl: Suppress clang warning about empty @param paragraph; resolves sf#158 Signed-off-by: Will Estes 2014-04-02 Will Estes * doc/flex.texi: fix punction when talking about colon-bracket delimiters; resolves sf#167 2014-04-02 Will Estes * doc/flex.texi: remove proofreading comment 2014-04-02 Will Estes * doc/flex.texi: Put angle brackets around start condition name; resolves bug #168. 2014-04-02 Michael Haubenwallner * lib/Makefile.am, lib/realloc.c: Fix malloc/realloc replacement, bug#151. Signed-off-by: Will Estes 2014-04-02 Will Estes * lib/malloc.c: change crlf line ending to lf 2014-03-26 Will Estes * NEWS: mention flex 2.5.39 release in NEWS file 2014-03-26 Will Estes * control.ac: initial default control file for shipper 2014-03-05 Cyril Brulebois * src/flex.skl: Adjust buffer sizes on ia64. From the debian change entry: > Finish fixing the ia64 buffer issue. Previous commits increased YY_READ_BUF_SIZE (where __ia64__ is defined) but left YY_BUF_SIZE unchanged, so that didn't fix the problem in the end. In the general case, the latter is twice the former. Therefore set it to the same ratio in the ia64 case. In general, this sort of architecture specific fix is not the path we want to take, but the cleanup should be done in a more organized way in the future and getting it working would be preferrable now. 2014-02-18 Will Estes * Makefile.am, src/Makefile.am: move m4 make variable to src/Makefile.am. This prevents an error when building skel.c caused by the $(m4) make variable not being defined. Particularly nasty since skel.c would still be created, thus causing make to think skel.c was up to date. 2014-02-18 Will Estes * devel/00EXTRACT-ALL-SYMS.sh, devel/README, devel/dump-tables.pl, devel/tables.pl: remove unused devel/ subdirectory from codebase 2014-02-15 Will Estes * po/Rules-getpo: Add make rule to rsync latest .po files from translation project. The rule assumes that rsync is on the path and that there is exactly one domain listed in the DOMAIN make variable. The intent is that the rule will work with vpath builds. 2014-02-14 Will Estes * .gitignore: git ignore directories of the form flex-* 2014-02-14 Will Estes * po/POTFILES.in: list source files for translation as now being in src/ 2014-02-14 Will Estes * Makefile.am, configure.ac, tools/Makefile.am: Add tools/ directory. Since tools/git2cl is a dependency of ChangeLog, not distributing tools/git2cl with flex causes the "make dist" target to fail in the distributed tar ball. 2014-02-14 Will Estes * Makefile.am: removes extraneous files from EXTRA_DIST as automake picks them up better without mentioning them 2014-02-14 Will Estes * NEWS: mention version 2.6.0 in release news 2014-02-14 Will Estes * .gitignore, FlexLexer.h, Makefile.am, buf.c, ccl.c, configure.ac, dfa.c, doc/.gitignore, doc/Makefile.am, ecs.c, filter.c, flex.skl, flexdef.h, flexint.h, gen.c, gettext.h, lib/.gitignore, libmain.c, libyywrap.c, main.c, misc.c, mkskel.sh, nfa.c, options.c, options.h, parse.y, regex.c, scan.l, scanflags.c, scanopt.c, scanopt.h, src/.gitignore, src/FlexLexer.h, src/Makefile.am, src/buf.c, src/ccl.c, src/dfa.c, src/ecs.c, src/filter.c, src/flex.skl, src/flexdef.h, src/flexint.h, src/gen.c, src/gettext.h, src/libmain.c, src/libyywrap.c, src/main.c, src/misc.c, src/mkskel.sh, src/nfa.c, src/options.c, src/options.h, src/parse.y, src/regex.c, src/scan.l, src/scanflags.c, src/scanopt.c, src/scanopt.h, src/sym.c, src/tables.c, src/tables.h, src/tables_shared.c, src/tables_shared.h, src/tblcmp.c, src/version.h, src/yylex.c, sym.c, tables.c, tables.h, tables_shared.c, tables_shared.h, tblcmp.c, version.h, yylex.c: move flex program sources into src/ directory The *.[chly] sources are now in the src directory. This implies a bunch of changes in Makefile.am and friends to account for the new location. The .gitignore files are now more local to places where various object files and generated source files occur. 2014-02-13 Will Estes * configure.ac: increment flex version to 2.6.0 2014-02-16 Translation Project * po/ru.po: update ru translation from the translation project 2014-02-14 Will Estes * NEWS: mention updated da translation in release news 2014-02-14 Translation Project * po/da.po: update da translation from the translation project 2014-02-14 Will Estes * NEWS: mention updated es translation in release news 2014-02-14 Translation Project * po/es.po: update es translation from the translation project 2014-02-14 Will Estes * NEWS: mention updated ko translation in release news 2014-02-14 Translation Project * po/ko.po: update ko translation from the translation project 2014-02-14 Will Estes * NEWS: mention updated ro translation in release news 2014-02-14 Translation Project * po/ro.po: update ro translation from the translation project 2014-02-14 Will Estes * NEWS: mention updated ru translation in release news 2014-02-14 Translation Project * po/ru.po: update ru translation from the translation project 2014-02-14 Will Estes * NEWS: mention updated sv translation in news 2014-02-14 Translation Project * po/sv.po: update sv translation from the translation project 2014-02-14 Will Estes * NEWS: mention updated tr translation in news 2014-02-14 Translation Project * po/tr.po: update tr translation from the translation project 2014-02-14 Will Estes * NEWS: mention updated zh_CN in release news 2014-02-14 Translation Project * po/zh_CN.po: update zh_CN translation from the translation project 2014-02-14 Will Estes * NEWS, po/LINGUAS, po/zh_TW.po, po/zh_tw.po: rename zh_tw translation to its proper zh_TW name 2014-02-14 Will Estes * NEWS: mention updated nl, vi translations in release news 2014-02-14 Translation Project * po/vi.po: update vi translation from the translation project 2014-02-14 Translation Project * po/nl.po: update nl translation from the translation project 2014-02-14 Will Estes * TODO: remove some unneeded entries from the todo list 2014-02-13 Will Estes * doc/Makefile.am: list more generated files in CLEANFILES 2014-02-13 Will Estes * doc/flex.xml: remove unmaintained xml documentation 2014-02-13 Will Estes * configure.ac: bump AM_GNU_GETTEXT_VERSION to 0.18.1 2014-02-13 Will Estes * README: list new location of flex git repo 2014-02-13 Will Estes * po/.gitignore: git ignore generated files from english quoting variant translations 2014-02-13 Will Estes * po/LINGUAS: name english quoting variants correctly 2014-02-13 Will Estes * Makefile.am, configure.ac, tools/Makefile.am: removed tools/ subdirectory from distribution Since it is not possible to rebuild the ChangeLog file without being in a git working directory of flex, distributing the tools directory is misleading. In particular, git2cl will always fail. 2014-02-13 Will Estes * po/LINGUAS: removed unneeded blank line from translation list 2014-02-13 Will Estes * po/LINGUAS: added en quoting variants to translation list 2014-02-11 Will Estes * configure.ac: use gnu automake option instead of gnits option 2014-02-11 Will Estes * README-alpha: remove README_alpha file since it is no longer needed 2014-02-10 Will Estes * configure.ac: increment version to 2.5.38 2013-11-27 Will Estes * NEWS: flesh out internationalization section of NEWS file; mention pt_BR translation 2013-11-27 Translation Project * po/pt_BR.po: update pt_BR translation from the translation project 2013-10-31 Will Estes * NEWS: begin listing 2.5.38 version in NEWS; list new sr translation 2013-10-31 Will Estes * po/LINGUAS: list new sr translation in list of translations 2013-10-31 Will Estes * po/sr.po: add sr translation from the translation project 2013-07-02 Till Varoquaux * configure.ac, flex.skl, nfa.c, tests/Makefile.am, tests/test-lineno-trailing/.gitignore, tests/test-lineno-trailing/Makefile.am, tests/test-lineno-trailing/scanner.l, tests/test-lineno-trailing/test.input: Adjust yylineno properly when rewinding trailing contexts. 2013-05-28 Will Estes * Makefile.am: Remove incorrect / in install-exec-hook target 2013-02-16 Translation Project * po/LINGUAS, po/zh_tw.po: add zh_tw translation from the translation project 2012-12-06 Christoph Junghans * Makefile.am, configure.ac: add version information to shared library Signed-off-by: Will Estes 2012-12-04 Christoph Junghans * .gitignore, Makefile.am, configure.ac, lib/Makefile.am: Build libfl and libcompat using libtool; resolves #3586814 Signed-off-by: Will Estes 2012-12-04 Translation Project * po/ca.po: update ca translation 2012-10-31 Hugh Sasse * tests/test-extended/Makefile.am, tests/test-quotes/Makefile.am: use cmp instead of diff in some tests for portability reasons Signed-off-by: Will Estes 2012-10-31 Dennis Clarke * tests/TEMPLATE/Makefile.am, tests/test-alloc-extra/Makefile.am, tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am, tests/test-bison-nr/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am, tests/test-c++-basic/Makefile.am, tests/test-c++-multiple-scanners/Makefile.am, tests/test-c++-yywrap/Makefile.am, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am, tests/test-ccl/Makefile.am, tests/test-debug-nr/Makefile.am, tests/test-debug-r/Makefile.am, tests/test-extended/Makefile.am, tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am, tests/test-include-by-buffer/Makefile.am, tests/test-include-by-push/Makefile.am, tests/test-include-by-reentrant/Makefile.am, tests/test-linedir-r/Makefile.am, tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am, tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-r/Makefile.am, tests/test-noansi-nr/Makefile.am, tests/test-noansi-r/Makefile.am, tests/test-posix/Makefile.am, tests/test-posixly-correct/Makefile.am, tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am, tests/test-pthread/Makefile.am, tests/test-quotes/Makefile.am, tests/test-reject/Makefile.am, tests/test-rescan-nr/Makefile.am, tests/test-rescan-r/Makefile.am, tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am, tests/test-table-opts/Makefile.am, tests/test-top/Makefile.am, tests/test-yyextra/Makefile.am: add CFLAGS and CXXFLAGS options as appropriate to testsuite Makefile.am files Signed-off-by: Will Estes 2012-10-25 Will Estes * po/LINGUAS: add hr to list of translations 2012-10-25 Translation Project * po/hr.po: add hr translation from the translation project 2012-10-25 Translation Project * po/fr.po: new fr translation project from the translation project 2012-09-08 Will Estes * po/LINGUAS: update languages list to include esperanto translation 2012-09-08 Translation Project * po/eo.po: add eo translation from the translation project 2012-08-26 Will Estes * configure.ac: add dist-xz to automake options; resolves #3561837 2012-08-26 Will Estes * autogen.sh, configure.ac: require gettext 0.18; force autoreconf in autogen.sh; resolves #3561759 Autoconf had trouble finding the shared libraries for gettext. Using gettext 0.18 fixes that. When updating the gettext version number, autoreconf could fail to update files, since autopoint would assume the gettext-related files had been locally modified. Passing --force prevents that from happening. 2012-08-15 Will Estes * Makefile.am: remove README.cvs from dist_doc_DATA in Makefile.am 2012-08-13 Will Estes * : commit 9256a268e2a1000cb410766e95487912a7d66d61 Author: Will Estes Date: Mon Aug 13 16:23:35 2012 -0400 2012-08-08 Will Estes * README, README.cvs: append README.cvs contents to README 2012-08-08 Will Estes * gen.c: fix m4 error when useecs and nultrans are true; resolves #1816878 2012-08-08 Robert Minsk * flex.skl: put user code after yyguts init; resolves #1744516 Signed-off-by: Will Estes 2012-08-08 Robert Minsk * flex.skl, main.c: do not output yy_nxt to header with %option full; resolves #1739922 Signed-off-by: Will Estes 2012-08-07 Will Estes * main.c: let flex decide if yymore and reject are needed in lex compatible mode This resolves bug #3510440. 2012-08-06 Translation Project * po/vi.po: new vi translation from the translation project 2012-08-06 Will Estes * .gitignore: add more patterns to .gitignore Undersome circumstances, the build process will generate conf.in~, which we want to ignore. Also, some patch files will apply but not cleanly and *.orig and *.rej files are generated. We want to ignore them as well. 2012-08-06 Will Estes * configure.ac, configure.in: rename configure.in to configure.ac to prep for upcoming automake changes 2012-08-06 Elias Pipping * tests/test-bison-yylloc/main.c, tests/test-bison-yylloc/parser.y, tests/test-bison-yylval/main.c, tests/test-bison-yylval/parser.y: Fix two tests to pass under bison 2.6 Given that bison is moving forward with the %parse-param instead of YYPARSE_PARAM syntax, it makes sense to switch over to using the new style declaration. In particular, this means that flex scanners that use bison features will now require bison 2.6 or higher. Signed-off-by: Will Estes 2012-08-04 Will Estes * po/nl.po: new nl translation from the translation project 2012-08-04 Mike Frysinger * flexdef.h: add prototype for lerrsf_fatal to flexdef.h Signed-off-by: Will Estes 2012-08-04 nomis52 * flex.skl, gen.c: Change variable types to silence compiler warnings; resolves #3552806 Signed-off-by: Will Estes 2012-08-03 Will Estes * NEWS: update NEWS to reflect changes in 2.5.37 2012-08-03 Will Estes * configure.in: update flex version to 2.5.37 2012-08-03 Will Estes * po/de.po: new de translation from the translation project 2012-08-02 Will Estes * po/vi.po: new vi translation from the translation project 2012-08-02 Will Estes * po/pl.po: new pl translation from the translation project 2012-08-02 Will Estes * po/fi.po: new fi translation from the translation project 2012-08-02 Will Estes * Makefile.am: Add -f option to LN_S to create flex++ The autoconf macro LN_S needs -f to successfully install flex++ if flex++ already exists. Fortunately, ln, ln -s and cp -p, which are the various forms that LN_S can take all will do the right thing with a -f argument passed. 2012-08-02 Will Estes * Makefile.am, tools/Makefile.am, tools/cvs2cl.pl, tools/cvsauthors, tools/git2cl: replace cvs2cl with git2cl Add the git2cl script in tools/ and remove the (now unnecessary) cvs2cl script. Remove tools/cvsauthors since git2cl does not need that file. Account for all the above in Makefile.am and tools/Makefile.am 2012-07-29 Will Estes * tests/.cvsignore, tests/.gitignore, tests/TEMPLATE/.cvsignore, tests/TEMPLATE/.gitignore, tests/test-alloc-extra/.cvsignore, tests/test-alloc-extra/.gitignore, tests/test-array-nr/.cvsignore, tests/test-array-nr/.gitignore, tests/test-array-r/.cvsignore, tests/test-array-r/.gitignore, tests/test-basic-nr/.cvsignore, tests/test-basic-nr/.gitignore, tests/test-basic-r/.cvsignore, tests/test-basic-r/.gitignore, tests/test-bison-nr/.cvsignore, tests/test-bison-nr/.gitignore, tests/test-bison-yylloc/.cvsignore, tests/test-bison-yylloc/.gitignore, tests/test-bison-yylval/.cvsignore, tests/test-bison-yylval/.gitignore, tests/test-c++-basic/.cvsignore, tests/test-c++-basic/.gitignore, tests/test-c++-multiple-scanners/.cvsignore, tests/test-c++-multiple-scanners/.gitignore, tests/test-c++-yywrap/.cvsignore, tests/test-c++-yywrap/.gitignore, tests/test-c-cpp-nr/.cvsignore, tests/test-c-cpp-nr/.gitignore, tests/test-c-cpp-r/.cvsignore, tests/test-c-cpp-r/.gitignore, tests/test-ccl/.cvsignore, tests/test-ccl/.gitignore, tests/test-concatenated-options/.cvsignore, tests/test-concatenated-options/.gitignore, tests/test-debug-nr/.cvsignore, tests/test-debug-nr/.gitignore, tests/test-debug-r/.cvsignore, tests/test-debug-r/.gitignore, tests/test-extended/.cvsignore, tests/test-extended/.gitignore, tests/test-header-nr/.cvsignore, tests/test-header-nr/.gitignore, tests/test-header-r/.cvsignore, tests/test-header-r/.gitignore, tests/test-include-by-buffer/.cvsignore, tests/test-include-by-buffer/.gitignore, tests/test-include-by-push/.cvsignore, tests/test-include-by-push/.gitignore, tests/test-include-by-reentrant/.cvsignore, tests/test-include-by-reentrant/.gitignore, tests/test-linedir-r/.cvsignore, tests/test-linedir-r/.gitignore, tests/test-lineno-nr/.cvsignore, tests/test-lineno-nr/.gitignore, tests/test-lineno-r/.cvsignore, tests/test-lineno-r/.gitignore, tests/test-mem-nr/.cvsignore, tests/test-mem-nr/.gitignore, tests/test-mem-r/.cvsignore, tests/test-mem-r/.gitignore, tests/test-multiple-scanners-nr/.cvsignore, tests/test-multiple-scanners-nr/.gitignore, tests/test-multiple-scanners-r/.cvsignore, tests/test-multiple-scanners-r/.gitignore, tests/test-noansi-nr/.cvsignore, tests/test-noansi-nr/.gitignore, tests/test-noansi-r/.cvsignore, tests/test-noansi-r/.gitignore, tests/test-posix/.cvsignore, tests/test-posix/.gitignore, tests/test-posixly-correct/.cvsignore, tests/test-posixly-correct/.gitignore, tests/test-prefix-nr/.cvsignore, tests/test-prefix-nr/.gitignore, tests/test-prefix-r/.cvsignore, tests/test-prefix-r/.gitignore, tests/test-pthread/.cvsignore, tests/test-pthread/.gitignore, tests/test-quotes/.cvsignore, tests/test-quotes/.gitignore, tests/test-reject/.cvsignore, tests/test-reject/.gitignore, tests/test-rescan-nr/.cvsignore, tests/test-rescan-nr/.gitignore, tests/test-rescan-r/.cvsignore, tests/test-rescan-r/.gitignore, tests/test-string-nr/.cvsignore, tests/test-string-nr/.gitignore, tests/test-string-r/.cvsignore, tests/test-string-r/.gitignore, tests/test-table-opts/.cvsignore, tests/test-table-opts/.gitignore, tests/test-top/.cvsignore, tests/test-top/.gitignore, tests/test-yyextra/.cvsignore, tests/test-yyextra/.gitignore: rename .cvsignore files in tests/ subdirectories to gitignore 2012-07-23 Will Estes * examples/.cvsignore, examples/fastwc/.cvsignore, examples/manual/.cvsignore, lib/.cvsignore, tools/.cvsignore: remove unneeded .cvsignore files 2012-07-22 Will Estes * .gitignore: add *.o and *.a to top level .gitignore The cvs tree did not need these additions because cvs assumed a lot of C-style defaults for .cvsignore files. flex builds *.o object files in the course of compilation and *.a files are built as a part of the libraries that flex compiles in the build process. 2012-07-22 Will Estes * .cvsignore, .gitignore, doc/.cvsignore, doc/.gitignore, m4/.cvsignore, m4/.gitignore, po/.cvsignore, po/.gitignore: rename .cvsignore files to .gitignore The .cvsignore files from the legacy cvs repository tracked what files got autogenerated during various stages of the flex build. Renaming the .cvsignore files to .gitignore lets git do the same thing. git is better about letting higher level .gitignore files not-track files in lower level directories. As I work my way through the test directories, we may add additional .gitignore files from the old .cvsignore files. The po/ directory has a lot of special files used by gettext, so the patterns in po/.gitignore look very different. The doc/.gitignore file accounts for what texinfo/makeinfo do, and so it also has special patterns. The m4 directory is mainly present for autoconf's benefit, but we have to account for it so make can do the right thing. Hence, m4/.gitignore says to ignore *.m4, as counterintuitive as that may seem. 2012-07-22 Will Estes * NEWS: update NEWS file to note release date of 2.5.36 2012-06-23 Will Estes * doc/flex.texi: fix call to version in manual 2012-06-22 Will Estes * doc/flex.texi: add missing argument to call to yylex in manual 2012-04-27 Will Estes * flex.skl: lintish cleanup in flex.skl; resolves #2040664 2012-04-27 Will Estes * doc/flex.texi: add a 7 to the c99 octal pattern; resolves #3518269 2012-03-31 Will Estes * doc/flex.texi: copyedit; resolves #3513670 2012-03-23 Will Estes * buf.c: escape backslashes in #line filenames in %top section; resolves #3212400; patch submitted by scfc_de 2012-03-21 Will Estes * Makefile.am, configure.in, lib/Makefile.am, lib/lib.c, lib/malloc.c, lib/realloc.c: provide malloc() and realloc() for systems that do not have satisfactory versions; resolves #1899047 2012-03-21 Will Estes * Makefile.am: install flex++ as a link; resolves bug #2939681 2012-03-21 Will Estes * tests/test-bison-nr/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am: fix dependencies for make -j in test suite 2012-03-19 Will Estes * flex.skl: add missing prototypes for yyset_column() and yyget_column(); resolves #3029024; patch submitted by scfc_de 2012-03-02 Will Estes * flex.skl, tests/test-reject/scanner.l, tests/test-table-opts/scanner.l: wrap yy_fatal_error calls appropriately 2012-03-02 Will Estes * regex.c: fix overlapping data buffer issue; patch from Tim Landsheet scfc_de 2012-03-02 Will Estes * scan.l: better bracket handling in the scanner 2012-03-02 Will Estes * flexdef.h, main.c, misc.c: Remove unneeded tracking of line/column output; patch from Tim Landsheet scfc_de 2012-03-02 Will Estes * configure.in: fix test for m4 to accept an m4 with -P and not jus tGNU m4; patch from Tim Landsheet scfc_de on sourceforge 2012-03-02 Will Estes * doc/flex.texi: fix order of td_lolen and td_hilen in documentation; resolves #2913693; patch submitted by Andreas Gruenbacher 2012-03-02 Will Estes * doc/flex.texi: correct document of YY_FLUSH_BUFFER; resolves #1723028 2012-02-17 Will Estes * dfa.c, flexdef.h, misc.c, parse.y: speed up things for complex inputs; resolves #2891390 2012-02-17 Will Estes * doc/flex.texi: fix ipv6 pattern in manual; update manual copyright to 2012 2012-02-17 Will Estes * flex.skl: fremove isatty() declaration; resolves #1984987 2012-02-17 Will Estes * doc/flex.texi: Add link for RFC 2396 2012-02-17 Will Estes * flex.skl: resolve #1990170 2012-02-17 Will Estes * flex.skl: fix documentation to reflect arguments actually used; bug #2783023 2012-02-05 Will Estes * main.c: fix yywrap behavior for reentrant scanners 2012-02-04 Will Estes * NEWS: Mmention tr translation 2012-02-04 Will Estes * tables.c: prevent unused stuff from being compiled so as to reduce warnings 2012-02-03 Will Estes * buf.c, filter.c, main.c, misc.c, regex.c, scanflags.c: more better error messages; more better memory handling 2012-02-03 Will Estes * misc.c: more careful/paranoia 2012-02-03 Will Estes * scanopt.c: more careful memory allocation in option processing 2012-02-03 Will Estes * Makefile.am, configure.in: remove m4/ directory and generally clean up automake/autoconf inputs 2012-02-03 Will Estes * lib/.cvsignore: cvsignore files that need that 2012-02-03 Will Estes * NEWS, po/da.po, po/es.po, po/ko.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sv.po, po/tr.po, po/zh_CN.po: check in translations 2012-02-03 Will Estes * main.c: correct macro definition of yywrap 2012-02-03 Will Estes * scan.l: Greater specificity in error messages 2012-02-03 Will Estes * parse.y: improve rule handling at EOF 2012-02-03 Will Estes * flex.skl: include cstdio for definition of EOF in all cases 2012-02-03 Will Estes * flex.skl: suppress warning on unused yyguts_t 2010-08-13 Will Estes * NEWS, po/LINGUAS, po/fi.po: new fi translation from the translation project 2009-03-31 Will Estes * doc/flex.texi: Include version.texi after @setfilename, so that @set values are correctly evaluated. (Start Conditions, Performance, Lex and Posix): Fix some markup errors. (Cxx): Likewise. Also, fix C++ example to actually be compilable. Patch from Ralf Wildenhues 2008-12-28 Will Estes * configure.in: remove line break that broke configure 2008-12-28 Will Estes * doc/flex.texi: specify the title on the title page since @settitle doesn't do that for us; resolves bug #2043491 2008-12-28 Will Estes * configure.in, flexdef.h: check for regex.h; resolves bug #2337486 2008-07-23 Will Estes * NEWS, po/ga.po: new ga translation from the translation project 2008-06-10 Will Estes * NEWS, po/ca.po: new ca translation 2008-05-31 Will Estes * Makefile.am: move ABOUT-NLS back to EXTRA_DIST 2008-05-31 Will Estes * Makefile.am: create new dist_doc_DATA; move some EXTRA_DIST files to new dist_doc_DATA target 2008-05-31 Will Estes * .cvsignore: ignore more automake generated config.status* files 2008-05-31 Will Estes * NEWS: flex distribution now built with automake and autoconf versions ... 2008-05-31 Will Estes * README.cvs: document GNU auto* version changes for building flex from cvs 2008-05-31 Will Estes * .cvsignore, doc/Makefile.am: ignore automake-supplied ylwrap 2008-05-15 Will Estes * NEWS, flex.skl: clean up types; resolves 1961902 2008-05-15 Will Estes * NEWS: update NEWS re manual 2008-05-15 Will Estes * doc/flex.texi: correct eroneous references to 'nowrap' to refer to 'noyywrap'; resolves bug #1739912 2008-05-14 Will Estes * filter.c: call clearerr on stdin before dup2'ing it; resolves bug #1902612 2008-05-14 Will Estes * NEWS: generic updates to NEWS 2008-05-14 Will Estes * tests/test-pthread/Makefile.am: move library flags in linker command; resolves patch #1943403; patch submitted by nullnix@users.sourceforge.net 2008-05-14 Will Estes * doc/flex.texi: use ansi syntax in simple examples; resolves patch #1909844; patch submitted by Tom Browder, tbrowder2@users.sourceforge.net 2008-04-10 Will Estes * doc/flex.texi: fix typo in example (from Paolo J. Matos 2008-04-10 Will Estes * flexint.h: move endif to better account for what C99 defines for integer types (fix from debian project) 2008-04-10 Will Estes * gen.c: fix another int type to be size_t 2008-03-30 Will Estes * NEWS, po/fr.po: new fr translation 2008-03-30 Will Estes * NEWS, configure.in: start version 2.5.36 2008-02-26 Will Estes * NEWS: add date of release 2008-02-15 Will Estes * NEWS, parse.y: fix bug that prevented comments from working properly 2008-02-12 Will Estes * po/de.po: new de translation 2008-02-10 Will Estes * NEWS, po/vi.po: new vi translation 2008-02-10 Will Estes * NEWS, po/nl.po: new nl translation 2008-02-09 Will Estes * NEWS, po/pl.po: new pl translation 2008-02-09 Will Estes * NEWS, po/de.po, po/pt_BR.po: new de, pt_br translations 2008-02-09 Will Estes * NEWS, flex.skl: generate headers for all functions (resolves bug #1628314) 2008-02-09 Will Estes * NEWS, flex.skl: change yy_size_t to be size_t (resolves bug #1849812) 2008-02-09 Will Estes * configure.in: start work on version 2.5.35 2007-12-12 Will Estes * NEWS, configure.in: revert NEWS and configure.in to version 2.5.34 2007-09-12 Will Estes * NEWS, configure.in: update version number to 2.5.35 2007-09-10 Aaron Stone * tests/test-alloc-extra/scanner.l: Use %option extra-type. 2007-09-10 Aaron Stone * NEWS, doc/flex.texi, flex.skl, flexdef.h, main.c, parse.y, scan.l: Introduce %option extra-type="your_type *" (resolves bug #1744505). 2007-08-15 Will Estes * po/nl.po: new nl translations from the translation project 2007-06-28 Will Estes * NEWS: change release date 2007-06-28 Will Estes * flex.skl: adjustment for prefix classes; patch submitted by Petr Machata 2007-06-28 Will Estes * NEWS: NEWS item for yy_init_extra 2007-06-12 Aaron Stone * doc/flex.texi: Docs and example for yylex_init_extra. 2007-06-01 Will Estes * tests/test-alloc-extra/.cvsignore: ignore OUTPUT file in test-alloc-extra 2007-06-01 Will Estes * tests/descriptions: add description of concatenated options test 2007-05-31 Will Estes * tests/test-alloc-extra/.cvsignore: add missing .cvsignore to test-alloc-extra 2007-05-31 Aaron Stone * configure.in, flex.skl, gen.c, main.c: Changes to resolve SF bugs 1568325 and 1563589. 2007-05-31 Aaron Stone * tests/Makefile.am, tests/descriptions, tests/test-alloc-extra/Makefile.am, tests/test-alloc-extra/scanner.l, tests/test-alloc-extra/test.input: Adding test cases for yylex_init_extra. 2007-05-12 Will Estes * configure.in, tests/test-pthread/scanner.l: fixes to test-pthread 2007-05-12 Will Estes * NEWS: NEWS item for concatenated options 2007-05-12 Will Estes * configure.in, tests/Makefile.am, tests/test-concatenated-options/.cvsignore, tests/test-concatenated-options/Makefile.am: unit test to verify concatenated options parsing 2007-05-12 Will Estes * scanopt.c: parse multiple short concatenated options; patch submitted by Petr Machata * autogen.sh: remove --force option from autogen.sh; much faster without it 2007-05-11 Will Estes * NEWS, configure.in: version 2.5.34 2007-05-08 Aaron Stone * NEWS, flex.skl: Better checking after yyalloc/yyrealloc (resolves bug #1595967) 2007-05-01 Will Estes * doc/flex.texi: change title of manual to 'Lexical Analysis with Flex' 2007-04-25 Will Estes * flex.skl: c++ memory leak plug 2007-04-23 Will Estes * flex.skl: roll back c++ memory patch as it causes the test suite no end of grief 2007-04-23 Will Estes * flex.skl: fix function definitions for non-ANSI environments (from Manoj Srivastava from Debian patchset) 2007-04-23 Will Estes * flex.skl: fix c++ memory leak (from Manoj Srivastava from Debian patchset) 2007-04-23 Will Estes * flex.skl: fix parameter name in comment (patch from Manoj Srivastava from the debian patchset 2007-04-23 Will Estes * flex.skl: add a size_t cast (patch from Manoj Srivastava from the debian patchset 2007-04-16 Will Estes * tests/test-extended/Makefile.am, tests/test-quotes/Makefile.am: cleanups to handle VPATH builds better; passifies make distcheck 2007-04-16 Will Estes * doc/flex.texi: drop using the \ in \ escaping as it throws pdf generation for a loop 2007-04-14 Will Estes * .cvsignore: add compile and *.tar.bz2 to .cvsignore 2007-04-14 Will Estes * main.c: add call to setlocale for ctype as per debian patchset 2007-04-14 Will Estes * Makefile.am, NEWS: provide for a PIC version of libfl.a for shared libraries using flex scanners 2007-04-13 Will Estes * FlexLexer.h: annotate endifs since they're a bit far from their opening #if statements 2007-04-13 Will Estes * flexdef.h, parse.y: refactor and slightly redo alloca testing, resolves bug #1675899 2007-04-13 Will Estes * : overhaul configure.in: use octathorps for comments so they're passed through m4 processing; better bracketing of m4 arguments; retool checks as per suggestions from autoscan(1) 2007-04-13 Will Estes * flex.skl: fix skeleton for reentrant scanners 2007-04-13 Will Estes * Makefile.am: remove homegrown tags target; automake does that for us 2007-04-12 Will Estes * flex.skl: fix skeleton for reentrant scanners, resolves bug #1694318 2007-04-12 Will Estes * FlexLexer.h: declare some const where missing in c++ header file 2007-04-10 Will Estes * doc/flex.texi: corrections to the manual as per suggestions from flex-help@ 2007-04-03 Will Estes * doc/flex.texi: include author names in online versions of the manual 2007-04-03 Will Estes * COPYING: update copyright notice 2007-04-03 Will Estes * AUTHORS: rearrange and update AUTHORS 2007-03-29 Will Estes * NEWS: note sf feature request 1658379 in NEWS 2007-03-29 Will Estes * tools/cvsauthors: add sodabrew to cvsauthors file 2007-03-29 Aaron Stone * flex.skl: SourceForge feature request #1658379: Expose YY_BUF_SIZE in the header file. 2007-03-07 Will Estes * NEWS, filter.c, flex.skl: apply patches submitted by sodabrew 2007-03-07 Will Estes * README.cvs: more changes describing building flex from cvs 2007-03-07 Will Estes * Makefile.am, README.cvs, README.cvs-snapshot: rename README.cvs-snapshot to README.cvs 2007-03-07 Will Estes * README.cvs-snapshot: update to explain where flex cvs lives 2007-03-07 Will Estes * README, doc/flex.texi: correct how to submit bugs 2007-02-16 Will Estes * NEWS: clarify NEWS item re man page and pdf manual 2007-02-14 Will Estes * po/Makevars: update bug address to point to flex-devel instead of lex-help 2007-02-13 Will Estes * configure.in, doc/Makefile.am: make better use of AC_INIT; clean up, simplify and make more robust the generation of the man page 2007-02-13 Will Estes * configure.in: remove option check-news from call to AM_INIT_AUTOMAKE as gnits implies check-news 2007-02-13 Will Estes * Makefile.am, configure.in: move automake options from Makefile.am to configure.in 2007-02-13 Will Estes * autogen.sh: restore --install option to autogen.sh since --force does not imply --install 2007-02-13 Will Estes * tools/cvsauthors: add john43 to cvsauthors file 2007-02-13 Will Estes * autogen.sh: call autoreconf with --force instead of --install 2007-02-13 Will Estes * doc/.cvsignore: remove texinfo.tex from cvs tree 2007-02-13 Will Estes * NEWS: updates to NEWS file to reflect recent changes 2007-02-13 Will Estes * doc/Makefile.am: add flex.pdf to EXTRA_DIST 2007-02-13 Will Estes * configure.in: remove flex.spec 2007-02-13 Will Estes * Makefile.am: remove maintainercleanfiles 2007-02-01 Will Estes * doc/Makefile.am: more changes to build system to distribute man page 2007-02-01 Will Estes * doc/Makefile.am: add flex man page to distribution 2007-02-01 Will Estes * .cvsignore, flex.spec.in: remove flex spec file 2006-11-17 Will Estes * tests/test-table-opts/Makefile.am: make test target depend on test groupings, which in turn depend on building executables; cygwin portability fix 2006-11-10 Will Estes * tests/create-test: change create-test script to edit files in place 2006-11-09 Will Estes * tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am, tests/test-bison-nr/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am, tests/test-c++-basic/Makefile.am, tests/test-c++-multiple-scanners/Makefile.am, tests/test-c++-yywrap/Makefile.am, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am, tests/test-ccl/Makefile.am, tests/test-debug-nr/Makefile.am, tests/test-debug-r/Makefile.am, tests/test-extended/Makefile.am, tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am, tests/test-include-by-buffer/Makefile.am, tests/test-include-by-push/Makefile.am, tests/test-include-by-reentrant/Makefile.am, tests/test-linedir-r/Makefile.am, tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am, tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-r/Makefile.am, tests/test-noansi-nr/Makefile.am, tests/test-noansi-r/Makefile.am, tests/test-posix/Makefile.am, tests/test-posixly-correct/Makefile.am, tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am, tests/test-pthread/Makefile.am, tests/test-quotes/Makefile.am, tests/test-reject/Makefile.am, tests/test-rescan-nr/Makefile.am, tests/test-rescan-r/Makefile.am, tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am, tests/test-top/Makefile.am, tests/test-yyextra/Makefile.am: change CLEANFILES to include instead of just the testname for the executable 2006-11-09 Will Estes * doc/flex.texi: fix typos in manual; resolves bug #1592857 2006-11-09 Will Estes * tests/TEMPLATE/Makefile.am: change test template to remove test executable when that executable has an extension, e.g. under Cygwin 2006-11-08 Will Estes * tests/Makefile.am: test names weren't displaying in test success/failure messages (from #1591672 2006-10-30 Will Estes * doc/.cvsignore: add flex.html to .cvsignore in doc directory 2006-10-22 Will Estes * NEWS: update NEWS file for the work that millaway did 2006-10-22 Will Estes * FlexLexer.h, NEWS, main.c, tests/test-c++-multiple-scanners/scanner-2.l: make yywrap work with c++ scanners as per sf bug report 2006-10-20 Will Estes * NEWS, flex.skl, tests/test-c++-multiple-scanners/main.cpp, tests/test-c-cpp-nr/scanner.l: memory leak issues in c++ scanner 2006-10-20 Will Estes * NEWS, configure.in, tests/Makefile.am, tests/descriptions, tests/test-c++-yywrap/.cvsignore, tests/test-c++-yywrap/Makefile.am, tests/test-c++-yywrap/scanner.l, tests/test-c++-yywrap/test.input: add unit test for c++ with yywrap 2006-10-20 Will Estes * NEWS, tests/test-c++-basic/Makefile.am, tests/test-linedir-r/Makefile.am: use configure-provided awk variable for portability; add loadlibes variable to c++ test 2006-10-17 Will Estes * doc/flex.texi: add noyywrap option to example; use whitespace to clarify example 2006-08-02 Will Estes * NEWS, po/ca.po, po/vi.po: new translations 2006-04-11 John Millaway * tables.c: Casted away signedness to appease -Werror freaks. 2006-03-28 John Millaway * ccl.c, doc/flex.texi, flexdef.h, parse.y, scan.l, sym.c, tests/test-ccl/scanner.l, tests/test-ccl/test.input: Added ccl union operator. Added test in test suite for ccl union operator. Documented ccl union operator. Removed crufty ccl cache to prevent parser problems. 2006-03-28 John Millaway * doc/flex.texi, scan.l, tests/test-extended/scanner.l, tests/test-extended/test.input: Extended syntax excluded for lex/posix compat mode. Comments discarded inside (?x:) patterns. Added test in test suite for comments in extended patterns. Documented syntax additions. 2006-03-27 John Millaway * scan.l, tests/test-ccl/scanner.l, tests/test-ccl/test.input: Implemented (?x:) syntax to allow whitespace in patterns. Added test for (?x:) syntax in test suite. 2006-03-27 John Millaway * parse.y, tests/test-ccl/scanner.l, tests/test-ccl/test.input: Implemented dot-all syntax. Added test for dot-all syntax in test suite. 2006-03-27 John Millaway * dfa.c, doc/flex.texi, flexdef.h, gen.c, main.c, parse.y, scan.l, scanflags.c, tests/test-ccl/scanner.l, tests/test-ccl/test.input: Removed global variable caseins. Added scanner stack flags for case-insensitivity. Moved case-folding code from DFA-generation to parse time read-macros. Added localized case-sensitivity syntax from Perl. Added test for new syntax in test suite. Documented new syntax. 2006-03-27 John Millaway * Makefile.am, configure.in, flexdef.h, scanflags.c: Added configure check for assert.h. Added scanner flags stack. 2006-03-25 John Millaway * configure.in, doc/flex.texi, scan.l, tests/Makefile.am, tests/descriptions, tests/test-extended/.cvsignore, tests/test-extended/Makefile.am, tests/test-extended/scanner.l, tests/test-extended/test.input: Added extended, perl-compatible comment syntax. Added test for extended comment syntax. Documented extended comment syntax. 2006-03-25 John Millaway * doc/flex.texi, parse.y: Changed explicit 'A'-'Z' to isupper(), where correct to do so. Documentation. 2006-03-24 John Millaway * doc/flex.texi: Documentation. 2006-03-24 John Millaway * doc/flex.texi: Added appendix of patterns to manual. 2006-03-23 John Millaway * doc/flex.texi: . 2006-03-22 John Millaway * doc/flex.texi: Documentation. 2006-03-22 John Millaway * doc/flex.texi: Documented set difference operator {-}. 2006-03-22 John Millaway * ccl.c, flexdef.h, parse.y, scan.l, tests/test-ccl/scanner.l, tests/test-ccl/test.input: Added set difference operator {-} for character classes. 2006-03-22 John Millaway * configure.in, doc/flex.texi, parse.y, scan.l, tests/Makefile.am, tests/descriptions, tests/test-ccl/.cvsignore, tests/test-ccl/Makefile.am, tests/test-ccl/scanner.l, tests/test-ccl/test.input: Added negated character class expressions. Documented negated character class expressions. Added regression test for negated character class expressions. 2006-03-22 John Millaway * buf.c, filter.c, gen.c, main.c, misc.c, nfa.c, parse.y, regex.c: Replaced sprintf with snprintf everywhere. 2006-03-22 John Millaway * Makefile.am: Removed includedir from AM_CPPFLAGS #1439351. 2006-03-21 John Millaway * configure.in, tests/Makefile.am, tests/descriptions, tests/test-quotes/.cvsignore, tests/test-quotes/Makefile.am, tests/test-quotes/scanner.l, tests/test-quotes/test.input: Added test to verify user code is unmangled. 2006-03-21 John Millaway * flexdef.h, misc.c, scan.l: Fixed escape in actions. 2006-03-21 John Millaway * filter.c, flexdef.h, main.c, scan.l: Reverted previous input filter changes. Added noop macro to scanner output. Modified scan.l to escape m4 quotes found in user code. 2006-03-21 John Millaway * tests/test-table-opts/Makefile.am, tests/test-table-opts/scanner.l: Removed m4 from test-table-opts 2006-03-21 John Millaway * tests/test-reject/Makefile.am, tests/test-reject/scanner.l: Removed m4 from test-reject 2006-03-21 John Millaway * filter.c, flexdef.h, main.c, scan.l: Moved set_input_file to different file. 2006-03-21 John Millaway * flex.skl, flexdef.h, flexint.h, misc.c: Relaxed tests for __STDC__ and __STDC_VERSION__ to cope with bugs in GCC and Sun cc. 2006-03-20 John Millaway * filter.c: Documented filter chain. Removed fdopen. Added no-op fseek. 2006-03-13 John Millaway * gen.c: Fixed another -Wall report. 2006-03-10 Will Estes * NEWS, po/vi.po: new vi translation 2006-03-09 Will Estes * NEWS, po/ga.po, po/nl.po: new nl, ga translations 2006-02-21 Will Estes * m4/Makefile.am: add po.m4 to extra_dist in m4/ so it gets picked up by distributions 2006-02-21 Will Estes * m4/Makefile.am: add nls.m4 to extra_dist in m4/ so it will get picked up in distribution tarballs 2006-02-21 Will Estes * configure.in: remove website directory from configure.in 2006-02-20 Will Estes * NEWS, configure.in: version 2.5.33 marks in NEWS and configure.in 2006-02-20 Will Estes * configure.in: change email address in configure.in to point to flex-help@sourceforge.net 2006-02-20 John Millaway * doc/flex.texi: Documentation. 2006-02-20 John Millaway * BUGS: Appended to BUGS file. 2006-02-18 Will Estes * Makefile.am: remove website directory (since it now has its own module in the flex project 2006-02-16 John Millaway * doc/flex.texi, flex.skl: Fixed buffer overflow in reject state buffer. Corrected documentation on the state buffer. 2006-02-16 John Millaway * flex.skl: Reverted num_read from size_t back to int. 2006-02-15 John Millaway * Makefile.am, configure.in: Removed reference to RoadMap in Makefile.am. Added website directory. 2006-02-15 Will Estes * README, RoadMap: remove RoadMap and reference to it in README 2006-02-15 John Millaway * BUGS, README, doc/flex.texi, doc/flex.xml: Eliminated references to lex.sf.net. 2006-02-15 John Millaway * BUGS, flex.skl: Transfered bugs list from lex.sf.net to BUGS file. 2006-02-15 John Millaway * tests/test-rescan-nr/.cvsignore, tests/test-rescan-nr/Makefile.am, tests/test-rescan-nr/scanner.l, tests/test-rescan-nr/test.input, tests/test-rescan-r/.cvsignore, tests/test-rescan-r/Makefile.am, tests/test-rescan-r/scanner.l, tests/test-rescan-r/test.input: Recommit of last commit -- broken pipe. 2006-02-15 John Millaway * configure.in, flex.skl, tests/Makefile.am, tests/descriptions: yy_lex_destroy calls yy_init_globals to reset everything for next call to yylex. Added two new tests for reusing scanners. 2006-02-14 John Millaway * flex.spec.in: Patched rpm spec file. 2006-02-14 John Millaway * configure.in, flexint.h: Added C99 macro for inttypes, just to be conformant. 2006-02-14 John Millaway * flexdef.h, nfa.c, parse.y: Changed symbol INFINITE to fix conflict with C math symbol. 2006-02-14 John Millaway * scan.l: Omitting parens for named rules in trailing context. 2006-02-14 John Millaway * configure.in, main.c, po/ca.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/ga.po, po/ko.po, po/nl.po, po/pl.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po, tests/test-mem-nr/scanner.l, tests/test-mem-r/scanner.l: Added check for locale.h and libintl.h in configure script. 2006-02-14 John Millaway * flex.skl: Removed unused local vars. 2006-02-14 John Millaway * flex.skl: Removed certain offending #undefs. 2006-02-14 John Millaway * flexint.h: Removed logical and from preprocessor statement. 2006-02-14 Will Estes * po/nl.po, po/nl.po.1: remove eroneously named nl.po.1; update nl.po 2006-02-14 John Millaway * dfa.c: . 2006-02-14 John Millaway * flex.skl: Included for serialized tables. 2006-02-14 John Millaway * configure.in: Minor patch to call to head in configure script. 2006-02-14 John Millaway * doc/flex.texi: Documentation patch. 2006-02-14 John Millaway * filter.c, gen.c, libyywrap.c, main.c: Patch for full file system failure. 2006-02-13 John Millaway * doc/flex.texi: Documentation. 2006-02-13 John Millaway * main.c: Fixed double-fclose when input file is empty. 2006-02-10 Will Estes * po/ca.po, po/da.po, po/de.po, po/es.po, po/fr.po, po/ga.po, po/ko.po, po/nl.po.1, po/pl.po, po/pt_BR.po, po/ro.po, po/ru.po, po/sv.po, po/tr.po, po/vi.po, po/zh_CN.po: newtranslations 2005-12-22 John Millaway * buf.c, main.c: Improvement request 1069716 log vs. log10 2005-12-22 John Millaway * flex.skl: Fixed bug 1257093 yy_init_globals in header file 2005-04-14 Will Estes * po/nl.po: new nl translation 2005-04-07 Will Estes * NEWS, po/LINGUAS, po/nl.po, po/vi.po: new nl and vi translations 2004-07-20 Will Estes * filter.c: correct improper stdin assignment 2004-05-22 Will Estes * NEWS, po/tr.po: new tr translation 2004-05-12 Will Estes * .cvsignore, .indent.pro: .cvsignore and .indent.pro got missed in the import to sourceforge; replace them 2004-05-11 Will Estes * po/fr.po: new fr translation 2004-05-03 Will Estes * po/LINGUAS: polish is pl, not po 2004-03-22 Will Estes * po/sv.po: yet another sweedish update 2004-03-19 Will Estes * NEWS, po/sv.po: new sv translation 2003-12-11 John Millaway * configure.in, filter.c, main.c: Configure checks for GNU m4. Environment variable M4 overrides built-in m4 path. Generated m4 does a late check for GNU m4. 2003-12-09 John Millaway * doc/flex.texi: added 3 faqs 2003-11-24 Will Estes * po/ro.po: new ro translation 2003-11-07 Will Estes * NEWS, po/fr.po: new french translation 2003-11-07 Will Estes * NEWS, po/ca.po: new catalan translation from the translation project 2003-11-07 Will Estes * NEWS, po/LINGUAS, po/ga.po, po/pl.po: new polish translation; updated irish translation from translation project 2003-10-10 Will Estes * NEWS, po/LINGUAS, po/ga.po: new Irish translation 2003-08-25 Will Estes * NEWS, po/LINGUAS, po/ro.po: add romanian translation 2003-07-16 Will Estes * flex.skl: flex_*int* type fixes 2003-07-16 Will Estes * tools/cvsauthors: change wlestes email address 2003-07-16 Will Estes * flex.skl: undef yytext_ptr has some bad side effects 2003-07-07 John Millaway * doc/flex.texi: Documented m4 incompatibility with lex. 2003-05-21 Will Estes * NEWS: upgrade to gettext 0.12 2003-05-20 Will Estes * flex.skl, gen.c: patches from manoj via sourceforge 2003-05-20 Will Estes * configure.in, po/.cvsignore, po/Makevars: upgrade gettext to 0.12; this allows running make pdf and make ps to be successful 2003-05-20 Will Estes * doc/.cvsignore: cvs should ignore flex.pdf and flex.ps 2003-04-25 John Millaway * TODO: Added yylineno bugs to TODO list. 2003-04-03 John Millaway * doc/flex.xml: Docbook. 2003-04-03 John Millaway * doc/flex.xml: xml now validates. 2003-04-02 John Millaway * doc/flex.xml: Began conversion to DocBook. 2003-04-01 Will Estes * NEWS, configure.in: version 2.5.31 2003-04-01 Will Estes * NEWS: remove --enable-maintainer-mode configure option 2003-04-01 Will Estes * configure.in: remove AM_MAINTAINER_MODE 2003-04-01 John Millaway * flex.skl, flexdef.h, main.c, misc.c, scan.l: Renamed some internal variables. 2003-03-31 Will Estes * NEWS: yylineno is now per-buffer in reentrant scanners 2003-03-31 John Millaway * TODO: Added TODO item. 2003-03-30 John Millaway * flex.skl, gen.c: yylineno is per-buffer in the reentrant scanner. support for yycolumn exists, but is not yet developed. 2003-03-28 John Millaway * flex.skl: Minor documentation. 2003-03-28 Will Estes * NEWS: added %top directive 2003-03-27 John Millaway * buf.c, configure.in, doc/flex.texi, flexdef.h, main.c, scan.l, tests/Makefile.am, tests/descriptions, tests/test-top/.cvsignore, tests/test-top/Makefile.am, tests/test-top/main.c, tests/test-top/scanner.l, tests/test-top/test.input: Added %top block syntax. Added test for %top block. Documented %top block. 2003-03-27 John Millaway * TODO, doc/flex.texi: Documented the m4 dependency. 2003-03-26 Will Estes * configure.in, flexdef.h: check for sys/wait.h since we use wait(2) 2003-03-26 Will Estes * flexdef.h: reorder include directives so as to catch system integer types before flex defined values for same 2003-03-26 Will Estes * TODO: assign tasks due before major release can happen; remove --enable-maintainer-mode entry 2003-03-26 Will Estes * Makefile.am: only rebuild the ChangeLog if we're inside a cvs working directory 2003-03-26 Will Estes * configure.in, tools/.cvsignore, tools/Makefile.am: add tools/ subdirectory to distribution 2003-03-26 Will Estes * Makefile.am: remove maintainer_mode conditional; add filter.c and regex.c to indentfiles; reformat and sort indentfiles so it's easier to add files in the future 2003-03-26 Will Estes * doc/Makefile.am: clean up flex.texi processing leftovers with cleanfiles 2003-03-26 Will Estes * tests/test-linedir-r/Makefile.am: an awk script wasn't included in the distribution 2003-03-26 John Millaway * TODO, configure.in, tests/Makefile.am, tests/descriptions, tests/test-include-by-push/.cvsignore, tests/test-include-by-push/Makefile.am, tests/test-include-by-push/scanner.l, tests/test-include-by-push/test-1.input, tests/test-include-by-push/test-2.input, tests/test-include-by-push/test-3.input: Added test for yypush_buffer_state and yypop_buffer_state. 2003-03-26 John Millaway * TODO: Removed items from TODO list. 2003-03-26 John Millaway * configure.in, tests/Makefile.am, tests/descriptions, tests/test-linedir-r/.cvsignore, tests/test-linedir-r/Makefile.am, tests/test-linedir-r/check-lines.awk, tests/test-linedir-r/main.c, tests/test-linedir-r/scanner.l, tests/test-linedir-r/test.input: Added test for #line directives. 2003-03-26 John Millaway * configure.in, tests/Makefile.am, tests/test-noansi-nr/.cvsignore, tests/test-noansi-nr/Makefile.am, tests/test-noansi-nr/scanner.l, tests/test-noansi-nr/test.input, tests/test-noansi-r/.cvsignore, tests/test-noansi-r/Makefile.am, tests/test-noansi-r/scanner.l, tests/test-noansi-r/test.input: Added test for noansi (traditional) options. Reordered the tests so the basic ones are first. 2003-03-25 Will Estes * TODO, doc/Makefile.am: remove maintainer-mode conditional around rebuilding of manpage 2003-03-25 Will Estes * README: mention doc/ for user documentation 2003-03-25 Will Estes * TODO: rework distribution items 2003-03-25 Will Estes * NEWS: mention m4 processing 2003-03-25 Will Estes * tests/README: update instructions for running test suite 2003-03-25 Will Estes * FlexLexer.h, Makefile.am, TODO, buf.c, configure.in, doc/flex.texi, filter.c, flex.skl, flexdef.h, gen.c, main.c, misc.c, options.c, options.h, regex.c, scan.l, sym.c, tests/test-bison-nr/scanner.l, tests/test-bison-yylloc/scanner.l, tests/test-reject/scanner.l, tests/test-table-opts/scanner.l: merge millaway's m4 branch work 2003-03-24 John Millaway * doc/flex.texi, flex.skl, flexdef.h, gen.c, main.c, options.c, options.h, scan.l: Option ansi-definitions. Option ansi-prototypes. Cleaned up some of header. Documented bison-locations. 2003-03-24 John Millaway * scan.l: Escaped m4 macros in scan.l which would cause bootstrapping issues. 2003-03-21 John Millaway * doc/flex.texi, flex.skl, main.c: Cleaning up the skel. 2003-03-20 Will Estes * TODO: we want to move the contents of to.do/Wishlist to top level TODO 2003-03-20 John Millaway * to.do/Wish-List: Assessment of every item in Wish-List. 2003-03-19 John Millaway * main.c: Fixed allocation of slightly more memory than needed. 2003-03-19 John Millaway * TODO, buf.c, configure.in, flex.skl, flexdef.h, main.c, sym.c: Start conditions now generated in a single place. 2003-03-19 Will Estes * TODO: cosmetic changes to TODO list 2003-03-19 John Millaway * flex.skl: Cleaned up warnings so multiple headers could coincide. 2003-03-19 John Millaway * TODO, flex.skl, main.c: Moved prefixes to m4. 2003-03-19 John Millaway * FlexLexer.h, filter.c, flex.skl, flexdef.h, main.c, misc.c, regex.c: Removed Paxson/Berkeley copyright restriction from filter.c and regex.c. Inline documentation of much of the generated API. Line directives now fixed for header and stdin/stdout. Blank lines squeezed from generated scanner. 2003-03-18 John Millaway * filter.c, flexdef.h, main.c, regex.c: Fixed #line directives. 2003-03-17 John Millaway * Makefile.am, filter.c, flexdef.h, regex.c: Added regex.c for regex-related code. Worked on fixing line directives;incomplete. 2003-03-14 John Millaway * TODO: Added some TODOs. 2003-03-14 John Millaway * flexdef.h, main.c, options.c, options.h, scan.l, tests/test-bison-nr/scanner.l, tests/test-bison-yylloc/scanner.l: Bison bridge was simplified to rely less on bison output. New option bison-locations. 2003-03-14 John Millaway * filter.c, flex.skl, flexdef.h, gen.c, main.c, scan.l, tests/test-reject/scanner.l: Filters are now direct children of main process. Header file now generated through m4. 2003-03-14 John Millaway * buf.c, filter.c, flexdef.h, main.c, misc.c: Added internal filter ability. Deleted various unused variables. 2003-03-14 John Millaway * main.c, tests/test-table-opts/scanner.l: Keeping tests up to date with m4 changes. Proper wait for all children. 2003-03-14 John Millaway * flex.skl, tests/test-table-opts/scanner.l: Moved test-tables to m4. 2003-03-14 John Millaway * flex.skl, main.c, options.c: Moved bison bridge code to m4. 2003-03-13 John Millaway * flex.skl, gen.c, main.c, scan.l: Moved YY_USE_LINENO to m4. 2003-03-13 John Millaway * buf.c, flexdef.h, scan.l: Added function buf_m4_undefine. 2003-03-13 John Millaway * flex.skl, main.c, scan.l: Replaced YY_ALWAYS_INTERACTIVE with m4. Replaced YY_NEVER_INTERACTIVE with m4. 2003-03-13 John Millaway * flex.skl, main.c: Moved YY_TEXT_IS_ARRAY to m4. 2003-03-12 John Millaway * flex.skl, gen.c, main.c, tests/test-reject/scanner.l: Renaming macros from YY_* to M4_YY_* where appropriate. 2003-03-12 John Millaway * flex.skl, tests/test-reject/scanner.l, tests/test-table-opts/scanner.l: Now using local variable "yyg" instead of lengthly YY_G expansion. 2003-03-12 John Millaway * buf.c, filter.c, flex.skl, flexdef.h, main.c, misc.c, options.c, options.h, scan.l, tests/test-reject/scanner.l: More m4 macro conversions. Added debugging option --preproc-level=NUM. 2003-03-11 John Millaway * Makefile.am, buf.c, flex.skl, flexdef.h, gen.c, main.c, misc.c, scan.l: Replaced many CPP macros with m4 equivalents. 2003-03-10 John Millaway * Makefile.am, filter.c, flex.skl, flexdef.h, main.c, misc.c: Added filter.c Added filter.c rules to Makefile.am Added filter prototypes to flexdef.h Flex now filters output through m4. 2003-03-05 Will Estes * doc/.cvsignore, texinfo.tex: move texinfo.tex to doc/ 2003-03-05 Will Estes * TODO: update TODO 2003-03-05 Will Estes * NEWS, configure.in: version 2.5.29 2003-03-04 John Millaway * FlexLexer.h, flex.skl: Added growable buffer stack to C++ scanner as well. yyensure_buffer_stack is now static. 2003-03-02 John Millaway * flex.skl, misc.c: Removed awkward %push %pop syntax from skeleton. 2003-03-02 John Millaway * flex.skl: Renamed YY_CURRENT_BUFFER_FAST to YY_CURRENT_BUFFER_LVALUE to better reflect its purpose. 2003-02-28 John Millaway * NEWS: made entry on input buffer stacks. 2003-02-28 Will Estes * Makefile.am, doc/Makefile.am: build on . in top level first; this will simplify calling help2man 2003-02-28 John Millaway * TODO, doc/flex.texi, flex.skl, gen.c, main.c: Removed yy_current_buffer from the planet. Input buffer states are now in an internal unbounded stack. Added new internal function, yyensure_buffer_stack. Added new API function, yypush_buffer_state. Added new API function, yypop_buffer_state. Documented the new API calls in the manual. Macro YY_BUFFER_STATE now refers to top of stack. This revision breaks the C++ scanner (again.) 2003-02-28 John Millaway * main.c: Removed some symbols from the undef list. They are needed for multiple headers to coexist. 2003-02-27 Will Estes * Makefile.am, NEWS, configure.in, doc/.cvsignore, doc/Makefile.am, doc/flex.texi, flex.texi: move flex.texi and flex.1 to new doc/ subdirectory 2003-02-27 Will Estes * NEWS: namespace cleanups 2003-02-26 John Millaway * main.c: Added a few macros to the undef list. 2003-02-26 John Millaway * main.c: Put the undef macros in an array. 2003-02-12 Will Estes * NEWS, configure.in: version 2.5.28 2003-02-10 Will Estes * README, TODO, configure.in, flex.texi: update documentation to reflect the sourceforge move 2003-02-06 Will Estes * TODO: update according to current thinking 2003-02-06 Will Estes * TODO: mcvs reviewed 2003-02-06 Will Estes * TODO: sourceforge migration tasks 2003-02-04 Will Estes * NEWS: Flex now warns if always-interactive is specified with fast or full; Fixed trailing slash bug in YY_INPUT macro def 2003-01-31 John Millaway * scan.l: Flex now warns if always-interactive is specified with fast or full. 2003-01-31 Will Estes * Makefile.am: switch to using cvs2cl.pl to generate the ChangeLog 2003-01-31 Will Estes * tools/cvs2cl.pl, tools/cvsauthors: we're going to be switching how we handle our ChangeLog 2003-01-29 John Millaway * gen.c, misc.c: Fixed trailing slash bug in YY_INPUT macro def. 2003-01-29 Will Estes * README.cvs-snapshot: upgrade texinfo to 4.3d 2003-01-29 Will Estes * flex.texi: the @copying construct works now; thanks to the texinfo maintainers for finding the problem 2003-01-21 Will Estes * NEWS, configure.in: version 2.5.27 2003-01-21 Will Estes * NEWS: flex now works with recent bison versions 2003-01-18 John Millaway * flex.skl: Check for YYLTYPE_IS_DECLARED. This fixes bison-bridge with latest bison. 2003-01-15 Will Estes * NEWS, po/pt_BR.po: new pt_br translation 2003-01-14 Will Estes * NEWS, configure.in: version 2.5.26 2003-01-14 Will Estes * NEWS: Fixed table deserialization bug on big-endian archs. Patch sent from Bryce Nichols 2003-01-12 John Millaway * tables_shared.h: Fixed table deserialization bug on big-endian archs. Patch sent from Bryce Nichols . 2003-01-10 Will Estes * README.cvs-snapshot: add version numbers for some tools and explain about version.texi and --enable-maintainer-mode 2003-01-10 Will Estes * NEWS: catch news up 2003-01-09 John Millaway * tests/test-mem-nr/scanner.l, tests/test-mem-r/scanner.l: Changed size_t to yy_size_t in yyalloc() and yyrealloc(). Is this really what we want? 2003-01-09 John Millaway * flex.skl: Changed type of yyleng from size_t to int. This fixes bug in PostgreSQL compilation. 2003-01-09 Will Estes * NEWS: catch news up 2003-01-09 Will Estes * flex.skl: more c++ fixes 2003-01-09 Will Estes * Makefile.am, configure.in, flex.spec.in: add a spec file 2003-01-09 Will Estes * flex.skl: type cast to pacify c++ compilers; patch from Bruce Lilly 2003-01-08 Will Estes * NEWS: new es translation 2003-01-08 Will Estes * po/es.po: new spanish translation 2002-12-19 John Millaway * gen.c: Fixed bug where YY_G(0) sometimes occurs (created by my previous commit.) 2002-12-17 John Millaway * gen.c: Fixed bug submitted by Bojan Smojver where the use of yylineno, reentrant, and yymore together caused a compile-time error. 2002-12-17 Will Estes * NEWS: update NEWS 2002-12-17 John Millaway * flex.texi: Documented new behavior with character ranges. 2002-12-16 John Millaway * parse.y: Fixed bug submitted by Bruce Lilly where character ranges would yield unexpected behavior in a caseless scanner. Also, flex now emits a warning if the range looks like trouble. 2002-12-16 John Millaway * ccl.c, flexdef.h: Added utility functions to deal with character case. 2002-12-09 Will Estes * flexint.h: we don't really need int64 anyway 2002-12-09 Will Estes * flex.skl: apparently some lints are happier with fllthrough without a space 2002-12-02 Will Estes * NEWS, configure.in: version 2.5.25 2002-12-02 Will Estes * Makefile.am: enclose flex.1 target in MAINTERNER_MODE 2002-12-02 Will Estes * po/pt_BR.po: new pt_br translation 2002-12-01 John Millaway * flex.texi: Indexed some more faqs. 2002-11-29 John Millaway * flex.skl: Fixed bug in SECOND yyless definition where argument was not enclosed in parentheses. 2002-11-29 John Millaway * flex.skl: Fixed bug in yyless definition where argument was not enclosed in parentheses. 2002-11-27 Will Estes * NEWS: flex uses flex_int*_t types 2002-11-27 Will Estes * flexint.h: integer types for non-C99 systems flexint.h 2002-11-27 John Millaway * dfa.c, flexint.h, gen.c, tables.c, tables.h, tables_shared.c, tables_shared.h: Changed int types to flex_intX_t. The build is now broken until typedef's are established. 2002-11-27 Will Estes * Makefile.am: MAINTAINERCLEANFILES: new variable: try to make it so that make maintainer-clean erases everything not under version control 2002-11-27 Will Estes * config.rpath: remove config.rpath 2002-11-27 Will Estes * README-alpha: just list location of betas 2002-11-26 Will Estes * flexint.h: __STDC_VERSION__ needs an L suffix 2002-11-26 Will Estes * NEWS, po/LINGUAS, po/pt_BR.po: new pt_br translation from the translation project 2002-11-25 Will Estes * flexint.h: include inttypes.h for folks who really are C99 2002-11-25 Will Estes * TODO: fix a typo 2002-11-25 Will Estes * NEWS, configure.in: version 2.5.24 2002-11-23 Will Estes * configure.in: try to make sure we have GNU m4 2002-11-23 Will Estes * tests/test-c++-multiple-scanners/Makefile.am: include tests/test-c++-multipl-scanners/test.input 2002-11-23 Will Estes * NEWS: more portability fixes 2002-11-23 Will Estes * configure.in, flexdef.h: apparently on some BSD systems, we need sys/params.h; reported by millaway 2002-11-22 Will Estes * NEWS: update NEWS 2002-11-22 John Millaway * flex.skl, main.c, tests/test-c++-multiple-scanners/Makefile.am: Fixed prefix of yyalloc,yyfree,yyrealloc in C++ scanner. Removed yylex_destroy from C++ scanner. 2002-11-22 John Millaway * flex.texi: renamed some faqs. 2002-11-22 Will Estes * AUTHORS: update wording about authorship 2002-11-17 John Millaway * parse.y: Removed space before line num in error messages to look more like gcc's errors. 2002-11-06 Will Estes * NEWS, po/tr.po: new turkish translation from the translation project 2002-10-28 Will Estes * gen.c: applied c++ from lilypond folks for std:: reasons 2002-10-25 Will Estes * flex.texi: proofreading 2002-10-24 Will Estes * flex.texi: proofreading 2002-10-22 Will Estes * flex.skl: use c-style header names in c++ for now; at some point we'll have a separate c++ skeleton and we can go whole-hog pure c++ 2002-10-22 Will Estes * TODO: c++ rants 2002-10-22 Will Estes * flex.texi: more proofreading 2002-10-22 Will Estes * Makefile.am: include intent.pro; indent target is MAINTAINER_MODE conditional 2002-10-22 Will Estes * configure.in: When we use AC_PATH_PROG, value-if-not-found is the name of the program we wanted to find; this will generate more helpful error messages 2002-10-21 John Millaway * tables.c: Added a missing function prototype. 2002-10-21 Will Estes * NEWS, configure.in: version 2.5.23 2002-10-21 Will Estes * NEWS: update NEWS on recent changes 2002-10-21 Will Estes * flexint.h: use sys/types.h and not inttypes.h 2002-10-21 Will Estes * configure.in: check for limits.h 2002-10-21 Will Estes * TODO: update TODO on recent suggestions 2002-10-21 Will Estes * flex.texi: titlepage and contents 2002-10-21 Will Estes * Makefile.am: typo 2002-10-21 Will Estes * Makefile.am, README.cvs-snapshot: include README.cvs-snapshot in the distribution; in README-cvs-snapshot, mention the need for enable-maintainer-mode 2002-10-21 John Millaway * flex.texi: typo. 2002-10-18 Will Estes * flex.texi: report the current version info that flex provides; reformat a list of non-posix features 2002-10-18 Will Estes * NEWS: report the current version info that flex provides 2002-10-18 Will Estes * flex.skl: FLEX_BETA defined if flex is beta 2002-10-16 Will Estes * flexint.h: if we're doing c++, then we can't use long long 2002-10-14 Will Estes * TODO: update TODO on several things 2002-10-11 Will Estes * flex.texi: more proofreading 2002-10-11 Will Estes * tests/TEMPLATE/Makefile.am, tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am, tests/test-bison-nr/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am, tests/test-c++-basic/Makefile.am, tests/test-c++-multiple-scanners/Makefile.am, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am, tests/test-debug-nr/Makefile.am, tests/test-debug-r/Makefile.am, tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am, tests/test-include-by-buffer/Makefile.am, tests/test-include-by-reentrant/Makefile.am, tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am, tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-r/Makefile.am, tests/test-posix/Makefile.am, tests/test-posixly-correct/Makefile.am, tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am, tests/test-pthread/Makefile.am, tests/test-reject/Makefile.am, tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am, tests/test-table-opts/Makefile.am, tests/test-yyextra/Makefile.am: remove BISON assignment as per suggestion from Akim Demaille 2002-10-11 Will Estes * Makefile.am, configure.in: remove intl from dist 2002-10-11 Will Estes * configure.in: we use maintainer mode now 2002-10-11 Will Estes * NEWS: include create-test 2002-10-11 Will Estes * tests/Makefile.am: rename test to check-local as per Akim Demaille; test for failed tests so that make check fails if any tests do 2002-10-11 Will Estes * tests/Makefile.am: use dist_noinst_scripts as per email from Akim Demaille 2002-10-10 John Millaway * flex.texi: Documentation. 2002-10-10 Will Estes * NEWS, configure.in: version 2.5.22; portability fixes and attn to the test suite 2002-10-10 Will Estes * flexint.h: ok, this seems to work 2002-10-10 Will Estes * tests/TEMPLATE/Makefile.am, tests/test-bison-nr/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am, tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-r/Makefile.am: use builddir in tests that need it in their include path 2002-10-10 Will Estes * tests/TEMPLATE/Makefile.am: sometimes we put header files in the builddir and so we should account for that 2002-10-10 Will Estes * tests/TEMPLATE/Makefile.am: replace the last instance 2002-10-10 Will Estes * flex.skl: include unistd.h and not cunistd as cunistd only seems to be present on very recent systems 2002-10-10 Will Estes * Makefile.am, configure.in, flex.skl, flexdef.h, flexint.h: redo integral types again; add flexint.h; change dependencies caused by adding flexint.h; remove autoconf wrapper around cunistd; restore netinet/in.h includes; remove unneded feature checks in configure.in 2002-10-08 Will Estes * configure.in, flex.skl, flexdef.h: current swipe at header magic; int types be damned 2002-10-08 Will Estes * NEWS: change version constant info to reflect change to flex.skl 2002-10-08 Will Estes * Makefile.am: remove README-alpha option; add definitions for FLEX_{MAJOR,MINOR,SUBMINOR}_VERSION 2002-10-07 Will Estes * flex.skl, flexdef.h: ok, here goes; try to handle integral typedefs in one swell foop 2002-10-07 Will Estes * configure.in: we check for {u,}int*_t types; maybe this will simplify things 2002-10-07 Will Estes * configure.in: we create the tests/TEMPLATE/Makefile so that we can build the dist archives 2002-10-07 Will Estes * NEWS: more test suite cleanups 2002-10-07 Will Estes * tests/test-c++-multiple-scanners/Makefile.am: we don't use header files... 2002-10-07 Will Estes * flexdef.h: remove include of malloc.h 2002-10-04 Will Estes * flex.texi: more editing; remove examples index; merge examples into concept index 2002-10-04 Will Estes * flex.texi: edited one more faq; used C-u C-c C-u C-a to update menus and nodes since the other updating commands are somewhat broken; unfortunately this means that all nodes have all pointers filled in 2002-10-04 Will Estes * flex.texi: yesterday's proofreading 2002-10-02 Will Estes * flex.texi: proofread some more 2002-10-02 Will Estes * flex.texi: proofread edit begins 2002-10-01 Will Estes * configure.in, tests/Makefile.am, tests/test-c++-multiple-scanners/.cvsignore, tests/test-c++-multiple-scanners/Makefile.am, tests/test-c++-multiple-scanners/main.cpp, tests/test-c++-multiple-scanners/scanner-1.l, tests/test-c++-multiple-scanners/scanner-2.l, tests/test-c++-multiple-scanners/test.input: test c++ with multiple scanners 2002-09-27 Will Estes * tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am, tests/test-bison-nr/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am, tests/test-c++-basic/Makefile.am, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am, tests/test-debug-nr/Makefile.am, tests/test-debug-r/Makefile.am, tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am, tests/test-include-by-buffer/Makefile.am, tests/test-include-by-reentrant/Makefile.am, tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am, tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-r/Makefile.am, tests/test-posix/Makefile.am, tests/test-posixly-correct/Makefile.am, tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am, tests/test-pthread/Makefile.am, tests/test-reject/Makefile.am, tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am, tests/test-table-opts/Makefile.am, tests/test-yyextra/Makefile.am: we used INCLUDES in another place in the Makefile.am files in the test suite 2002-09-27 Will Estes * tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am, tests/test-bison-nr/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am, tests/test-c++-basic/Makefile.am, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am, tests/test-debug-nr/Makefile.am, tests/test-debug-r/Makefile.am, tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am, tests/test-include-by-buffer/Makefile.am, tests/test-include-by-reentrant/Makefile.am, tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am, tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-r/Makefile.am, tests/test-posix/Makefile.am, tests/test-posixly-correct/Makefile.am, tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am, tests/test-pthread/Makefile.am, tests/test-reject/Makefile.am, tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am, tests/test-table-opts/Makefile.am, tests/test-yyextra/Makefile.am: oops, I typed that last s/// command to perl way wrong 2002-09-27 Will Estes * tests/TEMPLATE/Makefile.am, tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am, tests/test-bison-nr/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am, tests/test-c++-basic/Makefile.am, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am, tests/test-debug-nr/Makefile.am, tests/test-debug-r/Makefile.am, tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am, tests/test-include-by-buffer/Makefile.am, tests/test-include-by-reentrant/Makefile.am, tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am, tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-r/Makefile.am, tests/test-posix/Makefile.am, tests/test-posixly-correct/Makefile.am, tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am, tests/test-pthread/Makefile.am, tests/test-reject/Makefile.am, tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am, tests/test-table-opts/Makefile.am, tests/test-yyextra/Makefile.am: use AM_CPPFLAGS instead of INCLUDES; write -I with no space after it for broken compilers 2002-09-27 Will Estes * Makefile.am: INCLUDES is obsolete; use AM_CPPFLAGS instead 2002-09-27 Will Estes * configure.in: apparently, AM_CONFIG_HEADER is obsolete 2002-09-27 Will Estes * TODO: integrate test suite into automake 2002-09-27 Will Estes * configure.in: since we dont run the template test, we dont need to generate its Makefile either 2002-09-27 Will Estes * autogen.sh: use autoreconf instead of calling individual utilities separately 2002-09-27 Will Estes * configure.in: check for c++ compiler 2002-09-27 Will Estes * configure.in: re-organize according to suggested layout in autoconf manual 2002-09-26 Will Estes * Makefile.am, NEWS, configure.in: update automake to 1.7 and autoconf to 2.54 2002-09-26 Will Estes * Makefile.am: use AM_YFLAGS since YFLAGS is a user variable 2002-09-25 Will Estes * NEWS: catch NEWS up on things, some of which happened a long time ago; correct punctuation; try to remove some editorializing 2002-09-25 Will Estes * Makefile.am, flex.skl, flex.texi: include a single, automatically generated version number in flex scanners 2002-09-23 Will Estes * tests/create-test: complain audibly when argument not supplied; echo on stderr when writing error messages 2002-09-23 Will Estes * tests/Makefile.am, tests/create-test: DIST_SUBDIRS so we don't have to run the TEMPLATE test; so we add new tests to SUBDIRS and DIST_SUBDIRS 2002-09-23 Will Estes * tests/TEMPLATE/Makefile.am: not all compilers support '-I dir' so we write '-Idir' instead 2002-09-23 Will Estes * TODO: reorganize faq entries; proofread the manual 2002-09-23 Will Estes * flex.texi: move c++ experimental warning to top of cxx node 2002-09-20 Will Estes * flex.skl: move stdint.h include to table-serialization section; we'll still need to think about stdint.h more though 2002-09-20 Will Estes * NEWS: new smarter skeleton/scanner generation 2002-09-20 John Millaway * flex.skl, misc.c: bison-bridge skel handled via %if/%endif pairs. 2002-09-19 John Millaway * flex.skl, misc.c: reentrant skel handled via %if/%endif pairs. 2002-09-19 John Millaway * flex.skl, misc.c: skeleton uses %push/%pop to keep skelout() scope sane. skel commands are omitted unless --debug enabled. 2002-09-19 John Millaway * flex.skl, main.c, misc.c, tables.h: Added %push and %pop operations to skel processing. 2002-09-17 Will Estes * NEWS, configure.in: flex 2.5.21 2002-09-17 John Millaway * tests/test-reject/Makefile.am: minor fixup for dist. 2002-09-16 Will Estes * NEWS, configure.in: version 2.5.20 2002-09-16 Will Estes * flex.texi: correct typo 2002-09-16 Will Estes * NEWS: note the new tables functionality 2002-09-16 John Millaway * tests/test-multiple-scanners-r/.cvsignore, tests/test-multiple-scanners-r/Makefile.am: Fixed `clean' target and .cvsignore. 2002-09-16 John Millaway * TODO, flex.skl, flex.texi, main.c, tables_shared.h, tests/test-multiple-scanners-r/main.c, tests/test-multiple-scanners-r/scanner-1.l, tests/test-multiple-scanners-r/scanner-2.l: Serialization works in headers (%option headers). Serialization code (Tables API) is complete. 2002-09-16 Will Estes * tests/test-reject/scanner.l: replace yytables_load with yytables_fload as per millaway's other changes 2002-09-15 John Millaway * TODO, flex.texi: Created user API for tables deserialization. Documented API and --tables-* options in manual. 2002-09-15 John Millaway * flex.skl, tests/test-table-opts/scanner.l: Tables deserialization uses yyalloc/yyfree. Changed yytables_load to yytables_fload. 2002-09-15 John Millaway * tests/test-bison-nr/.cvsignore: minor upkeep. 2002-09-15 John Millaway * flex.texi: Categorized and indexed scanner options in manual. 2002-09-15 John Millaway * flex.skl: Initialization of reject vars and %array vars in reentrant scanner. 2002-09-13 John Millaway * TODO, configure.in, devel/tables.pl, dfa.c, flex.skl, flex.texi, gen.c, tables.c, tables_shared.c, tables_shared.h, tests/Makefile.am, tests/test-reject/.cvsignore, tests/test-reject/Makefile.am, tests/test-reject/scanner.l, tests/test-reject/test.input, tests/test-table-opts/Makefile.am: Created test for reject. Handled reject-triggered tables in serialization. 2002-09-13 Will Estes * NEWS: millaway has been very busy 2002-09-13 John Millaway * flex.skl, tests/test-table-opts/Makefile.am, tests/test-table-opts/scanner.l: Added test for multiple tables in one file. 2002-09-13 John Millaway * tests/test-bison-nr/.cvsignore: forgot to add .cvsignore on last commit. 2002-09-13 John Millaway * tests/test-bison-nr/Makefile.am, tests/test-bison-nr/main.c, tests/test-bison-nr/parser.y, tests/test-bison-nr/scanner.l, tests/test-bison-nr/test.input: Added test-bison-bridge. 2002-09-13 John Millaway * configure.in, flex.skl, flex.texi, flexdef.h, gen.c, main.c, misc.c, options.c, options.h, scan.l, tables.h, tests/Makefile.am, tests/descriptions, tests/test-bison-yylloc/scanner.l, tests/test-bison-yylval/scanner.l, tests/test-table-opts/scanner.l: Bison bridge code now works for all C scanners and pure/non-pure bison parsers. Added %option bison-bridge (--bison-bridge). Removed %option reentrant-bison/--reentrant-bison/-Rb. Scanner knows the name of its tables. Tables serialization is OK on EOF. yylineno is present in all scanners. Modified nasty performance penalty warning w/ yylineno. test-table-opts is now run last because it's so fat. Updated manual. 2002-09-12 John Millaway * flex.texi: documentation of tabels api in manual 2002-09-12 John Millaway * TODO, tables.c: Renamed *_fwrite to *_write to reflect writer abstraction. 2002-09-11 John Millaway * devel/tables.pl: Added perl script to read/dump serialized tables in devel/ 2002-09-11 Will Estes * scan.l: the debian patch used strlen(yytext) and similar constructs--as millaway points out, this is better known as yyleng 2002-09-11 Will Estes * NEWS, po/de.po: new de translation from the translation project 2002-09-11 John Millaway * flex.skl: yytbl_load now checks tables set by name. Localized var scaope in yytbl_load. 2002-09-10 Will Estes * tests/Makefile.am: make clean before make test 2002-09-09 John Millaway * TODO, flex.skl: Fixed deserialization of --fast tables. 2002-09-09 Will Estes * TODO: fix typo; remove the yylineo entry 2002-09-09 John Millaway * TODO, buf.c, devel/dump-tables.pl, dfa.c, flex.skl, flexdef.h, gen.c, main.c, misc.c, options.c, options.h, scan.l, tables.c, tables.h, tables_shared.h, tests/test-table-opts/.cvsignore, tests/test-table-opts/Makefile.am, tests/test-table-opts/scanner.l: Table deserialization works for everything except --fast scanners. Scanners can auto-verify serialized table integrity via --tables-verify. Added tables API items to TODO list. test-table-opts is becoming exhaustive (a good thing). 2002-09-09 Will Estes * NEWS: flex has better internal diagnostics 2002-09-09 Will Estes * configure.in, flexdef.h: test for presence of __func__ and compensate if absent 2002-09-09 Will Estes * Makefile.am: include the intl/ subdirectory when searching for include files 2002-09-09 Will Estes * NEWS, po/ru.po, po/sv.po: new sv, ru translations from the translation project 2002-09-07 John Millaway * flex.skl, misc.c: Changed cryptic skeleton markers to readable form. 2002-09-07 John Millaway * Makefile.am, dfa.c, flex.skl, flex.texi, flexdef.h, gen.c, main.c, misc.c, parse.y, tables.c, tables.h, tables_shared.c, tables_shared.h: Members of struct yy_trans_info are now forced to be the same size. Added shared file tables_shared.c. Separated tables.h from flexdef.h Bulk of table deserialization code is done. 2002-09-06 Will Estes * NEWS, po/ca.po: new ca translation 2002-09-06 Will Estes * NEWS: new fr translation 2002-09-06 Will Estes * po/fr.po: new french translation from the translation project 2002-09-05 Will Estes * NEWS: c99 function defs by default 2002-09-05 John Millaway * flexdef.h, tables.c: Added flex_die macro. May need some autoconf massaging. Added thorough error checking in tables code. 2002-09-05 John Millaway * flex.skl, flex.texi: Flex generates C99 defs now. Documented the above change in manual. 2002-09-05 John Millaway * tests/test-table-opts/.cvsignore, tests/test-table-opts/Makefile.am: Added serialization test to table-opts test. 2002-09-05 Will Estes * configure.in: oops, i made a typo 2002-09-05 Will Estes * NEWS, configure.in: version 2.5.19 2002-09-05 Will Estes * scan.l: use FLEX_EXIT(), not exit() 2002-09-05 John Millaway * devel/00EXTRACT-ALL-SYMS.sh, devel/README, devel/dump-tables.pl: Added devel/ directory for junk that we don't want in the distribution, but that we want in CVS. 2002-09-05 Will Estes * scan.l: s/exit(1)/exit(EXIT_FAILURE) 2002-09-05 John Millaway * dfa.c, gen.c: Tables are now generated with %option tables-file=FILE. 2002-09-05 Will Estes * NEWS: catch up on a few things 2002-09-05 Will Estes * scan.l: prevent segfault on input lines which are longer than the allocated space (problem report from Manoj Srivastava ) 2002-09-05 John Millaway * flex.texi, main.c, options.c, options.h: Changed option 'header' to 'header-file'. 'header' still works, though. 2002-09-05 John Millaway * flex.texi, flexdef.h, gen.c, main.c, options.c, options.h, scan.l, tables.c: Tons more work on tables. 2002-09-05 John Millaway * flexdef.h, gen.c, tables.c, tables_shared.h: Lots of work on tables serialization code. 2002-09-04 Will Estes * README.cvs-snapshot: mention GNU indent 2002-09-04 Will Estes * NEWS: remove the word after from the version line 2002-09-03 Will Estes * NEWS, configure.in: version 2.5.18 2002-09-03 Will Estes * NEWS: catch up on the NEWS 2002-09-03 Will Estes * tests/Makefile.am: target test: quote the results echoing so that the ECHO_C will work on systems where it is used 2002-09-03 Will Estes * configure.in: when we don't have GNU indent, the test will generate output on stderr, so we send that to /dev/null 2002-09-03 Will Estes * configure.in: fixed bug whereby bison was reported missing even when it was found 2002-09-02 John Millaway * tables.c: In-code documentation. 2002-09-02 John Millaway * flexdef.h: Forgot to indent before previous commit. 2002-09-02 John Millaway * flexdef.h: Added known integer limits if undefined. 2002-08-29 Will Estes * configure.in: version 2.5.17 2002-08-29 Will Estes * NEWS: more portability fixes; new version number 2002-08-29 Will Estes * flexdef.h, main.c, misc.c, scanopt.c: #include fixes; we've factored out all the system include files and put them in flexdef.h 2002-08-29 Will Estes * dfa.c: eat a blank line 2002-08-29 Will Estes * NEWS: new config.{sub,guess} files; mention that we use indent on flex 2002-08-28 Will Estes * configure.in: warn if no indent found; version 2.5.16 2002-08-28 Will Estes * NEWS: catch up on recent changes; version 2.5.16 2002-08-27 Will Estes * buf.c, ccl.c, dfa.c, ecs.c, flexdef.h, gen.c, libmain.c, libyywrap.c, main.c, misc.c, nfa.c, options.c, options.h, scanopt.c, scanopt.h, sym.c, tables.c, tables_shared.h, tblcmp.c, yylex.c: ran the indent target; commit the results 2002-08-27 Will Estes * Makefile.am: touch up the indent targeet; it's ready for production use now 2002-08-27 Will Estes * configure.in: test for GNU indent; reorder the tests somewhat 2002-08-23 Will Estes * configure.in: automake is smarter about autoconf's versioning scheme 2002-08-23 Will Estes * NEWS: catch NEWS up on what we've been doing 2002-08-22 Will Estes * flexdef.h: do some more conditional including for folks without standard systems 2002-08-22 Will Estes * tests/test-c++-basic/Makefile.am: use CXX to link the test scanner here 2002-08-22 John Millaway * flex.texi: Documentation. 2002-08-22 John Millaway * Makefile.am: Created 'indent' target and added .indent.pro. 2002-08-22 John Millaway * tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am, tests/test-c-cpp-nr/Makefile.am: Fixed missing 'make clean' files. 2002-08-22 John Millaway * tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am: fixed missing 'clean' file. 2002-08-22 John Millaway * flex.skl, tests/test-c++-basic/Makefile.am, tests/test-c++-basic/scanner.l: Removed core of yylex_destroy from c++ scanner -- hack! Added -lstdc++ to LDFLAGS (should we have to do this??) 2002-08-21 Will Estes * README: official releases are being hosted by Vern 2002-08-21 Will Estes * NEWS, configure.in: new beta version; more entries in NEWS from millaway; the top level entry for test-c++-basic 2002-08-21 Will Estes * tests/Makefile.am, tests/test-c++-basic/.cvsignore, tests/test-c++-basic/Makefile.am, tests/test-c++-basic/scanner.l, tests/test-c++-basic/test.input: add test-c++-basic 2002-08-21 John Millaway * gen.c, nfa.c: More tabels work. 2002-08-21 John Millaway * flexdef.h, gen.c, tables.c, tables_shared.h: More work on tables. 2002-08-20 John Millaway * dfa.c: Cleaned up macros that took no ';'. 2002-08-20 John Millaway * scanopt.c: Fixed oddball '=-'. 2002-08-20 John Millaway * flex.skl, flex.texi, gen.c: Dynamically allocate REJECT state buffer. Mentioned memory usage in docs. Made REJECT buffer variables reentrant-safe. 2002-08-20 John Millaway * tables.c: More work on tables code. 2002-08-20 Will Estes * Makefile.am, NEWS, configure.in: we're using m4 so have configure test for it 2002-08-20 John Millaway * Makefile.am, tables.c: Added tables.c and rebuilt dependencies. 2002-08-20 John Millaway * TODO, flex.texi: Dicussed prototypes and header in manual. 2002-08-19 John Millaway * Makefile.am, configure.in, flex.skl, flexdef.h, tables_shared.h: More work on tables serialization. 2002-08-19 John Millaway * Makefile.am, mkskel.sh: Skeleton is now passed through m4 (before dist is built). 2002-08-19 Will Estes * po/LINGUAS, po/zh_CN.po: add zh_cn translation from the translation project 2002-08-19 Will Estes * NEWS: millaway's done a lot of things which need to be mentioned in NEWS 2002-08-18 John Millaway * main.c: Removed #undef of start conditions. 2002-08-17 John Millaway * TODO: todo list 2002-08-17 John Millaway * flexdef.h, main.c, misc.c: Start conditions now optional in header. undef's now optional in header. Start conditions are NOT prefixed. 2002-08-17 John Millaway * flex.skl, flex.texi: Working on tables API. 2002-08-16 John Millaway * flexdef.h, main.c, misc.c, options.c, options.h, parse.y, scan.l: Added --tables option. Omitted tables code from generated scanner when unused. 2002-08-16 John Millaway * flex.skl, flex.texi, misc.c: Prelimary work on tables API. 2002-08-16 John Millaway * tests/TEMPLATE/Makefile.am, tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am, tests/test-debug-nr/Makefile.am, tests/test-debug-r/Makefile.am, tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am, tests/test-include-by-buffer/Makefile.am, tests/test-include-by-reentrant/Makefile.am, tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am, tests/test-mem-nr/Makefile.am, tests/test-mem-r/Makefile.am, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-r/Makefile.am, tests/test-posix/Makefile.am, tests/test-posixly-correct/Makefile.am, tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am, tests/test-pthread/Makefile.am, tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am, tests/test-table-opts/Makefile.am, tests/test-yyextra/Makefile.am: Tests now respect CFLAGS, CPPFLAGS, etc.. 2002-08-16 John Millaway * tests/test-basic-nr/scanner.l, tests/test-basic-r/scanner.l, tests/test-lineno-nr/scanner.l, tests/test-lineno-r/scanner.l: Got rid of flex -s warnings in tests. 2002-08-16 John Millaway * Makefile.am: Updated dependencies list. 2002-08-15 John Millaway * main.c: Fixed seg fault bug in ecs. 2002-08-15 Will Estes * tests/test-c-cpp-nr/.cvsignore, tests/test-c-cpp-r/.cvsignore: ignore .cpp files since we generate them instead of .c 2002-08-15 Will Estes * configure.in: version 2.5.14 2002-08-15 Will Estes * NEWS: c-as-c++ tests reworked 2002-08-15 John Millaway * tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-nr/scanner.l, tests/test-c-cpp-r/Makefile.am, tests/test-c-cpp-r/scanner.l: The c++ tests use .cpp instead of .c extensions just to be on the safe side. 2002-08-15 Will Estes * main.c: conditionally include ; include config.h as well 2002-08-15 Will Estes * configure.in, flex.skl: only include if we have it 2002-08-15 Will Estes * NEWS: portability fixes; added missing punctuation; de translation now included 2002-08-15 Will Estes * po/LINGUAS: we also translate to german 2002-08-15 Will Estes * Makefile.am: require automake at least 1.6 2002-08-15 Will Estes * NEWS, configure.in: version 2.5.13 2002-08-14 Will Estes * flex.texi: reverted away from the @copying as it breaks the info reader 2002-08-14 John Millaway * flex.texi, flexdef.h, main.c, misc.c: Start condition prefixes attempts to adjust to user preferences. 2002-08-13 John Millaway * main.c: Include start condition symbols in header. 2002-08-13 John Millaway * flexdef.h, main.c: Omit user code and tables from generated header file. 2002-08-13 Will Estes * flex.texi: use @copying construct to display the flex license; move copying and bug reporting to the front of the manual 2002-08-13 Will Estes * NEWS: printf fix and yylex_init reports errors 2002-08-12 John Millaway * flex.texi: Updated manual for %option header. 2002-08-12 John Millaway * flex.skl, flex.texi, gen.c: Fixed type mismatch in printf. yylex_init now reports errors. 2002-08-10 John Millaway * dfa.c, main.c: Added alignment flag for future use. 2002-08-10 John Millaway * tests/test-table-opts/.cvsignore, tests/test-table-opts/Makefile.am: Added options to test-table-opts 2002-08-10 John Millaway * configure.in, tests/Makefile.am, tests/descriptions, tests/test-c-cpp-nr/Makefile.am, tests/test-table-opts/.cvsignore, tests/test-table-opts/Makefile.am, tests/test-table-opts/scanner.l, tests/test-table-opts/test.input: Added a test for various DFA table options. 2002-08-09 Will Estes * flex.texi: more faq editing; corrected mistyped nodenames 2002-08-09 Will Estes * flex.skl: fix typo which propogates out to generated scanners 2002-08-09 Will Estes * flex.texi: edited a few more faqs 2002-08-09 Will Estes * Makefile.am, faq.texi: remove faq.texi as it's included in flex.texi 2002-08-08 Will Estes * flex.texi: a few more faq edits; remove faq-89 2002-08-08 Will Estes * flex.texi: cite, not site 2002-08-08 Will Estes * flex.texi: and get the faq included 2002-08-08 Will Estes * flex.texi: fix some grammer/typography in the top node and add a detailed menu 2002-08-08 Will Estes * TODO: we've updated gettext 2002-08-08 Will Estes * po/.cvsignore: we need to ignore a few more gettext files 2002-08-08 Will Estes * NEWS, configure.in: version 2.5.12 2002-08-08 Will Estes * NEWS: mention gettext; document the non-need for bison/flex in the build process 2002-08-08 Will Estes * Makefile.am, configure.in: include intl in the distribution and in the build process 2002-08-08 Will Estes * Makefile.am: builddir in help2man call needed @-signs around it 2002-08-08 Will Estes * po/.cvsignore: we can ignore Makefile.in.in 2002-08-08 Will Estes * m4/.cvsignore, m4/Makefile.am: oops, too hasty on deleting this directory, sigh 2002-08-08 Will Estes * autogen.sh: if autopoint is going to run automatically, it's going to need to be able to update existing files 2002-08-08 Will Estes * ABOUT-NLS, autogen.sh, configure.in, m4/.cvsignore, m4/Makefile.am, m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/isc-posix.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/progtest.m4: autopoint now works so let's let it run the gettext show 2002-08-07 Will Estes * TODO: we need to index the faq entries 2002-08-07 Will Estes * faq.texi: proofed "Why do flex scanners call fileno if it is not ANSI compatible?" 2002-08-07 Will Estes * faq.texi: proofed "How do I expand \ escape sequences in C-style quoted strings?" 2002-08-07 Will Estes * README: changes to README to align with GNU coding standards 2002-08-06 Will Estes * Makefile.am: help2man should look in builddir for the flex binary 2002-08-02 John Millaway * flex.skl: Fixed yyunput prototype. 2002-08-01 Will Estes * NEWS: new fr translation from the translation project 2002-08-01 Will Estes * po/fr.po: new fr.po translation from the translation project 2002-08-01 Will Estes * NEWS: yylineno performance hit is fixed 2002-07-31 John Millaway * TODO, flex.texi: Updated docs on yylineno. 2002-07-31 Will Estes * TODO: discuss yylineno performance 2002-07-31 Will Estes * NEWS: forgot to say what the date was that we made the release 2002-07-31 Will Estes * NEWS, configure.in: version 2.5.11 2002-07-31 Will Estes * faq.texi: fixed a menu entry and related problems 2002-07-31 Will Estes * configure.in: someday, maybe we can use autopoint 2002-07-31 Will Estes * Makefile.am: we need to include texinfo.tex now 2002-07-31 Will Estes * texinfo.tex: add texinfo.tex 2002-07-30 Will Estes * faq.texi: fix up some fatal bugs in the texinfo of the faq; begin the clean up; remove trailing and leading white space 2002-07-30 Will Estes * TODO: faqs need work 2002-07-30 Will Estes * NEWS, TODO: prototypes get airtime these days 2002-07-28 John Millaway * flex.skl: Added some comments. 2002-07-28 John Millaway * flex.skl: Fixed bug where yyless did not consider yylineno. 2002-07-28 John Millaway * scan.l: Fixed bug I created in previous commit. 2002-07-28 John Millaway * scan.l: Don't wrap ()s around {NAMEDEFS} at the end of a rule. 2002-07-27 John Millaway * flex.skl, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am: Fixed test-c-cpp to actually use the C++ compiler for the test. Fixed the bug that this exposed. 2002-07-27 John Millaway * ccl.c, flex.skl, flexdef.h, gen.c, main.c, nfa.c, parse.y, scan.l: yylineno check is only performed on rules whose regexs can match a newline. 2002-07-25 John Millaway * flex.skl, tests/TEMPLATE/scanner.l, tests/test-array-nr/scanner.l, tests/test-array-r/scanner.l, tests/test-basic-nr/scanner.l, tests/test-basic-r/scanner.l, tests/test-bison-yylloc/parser.y, tests/test-c-cpp-nr/scanner.l, tests/test-c-cpp-r/scanner.l, tests/test-debug-nr/scanner.l, tests/test-debug-r/scanner.l, tests/test-include-by-buffer/scanner.l, tests/test-include-by-reentrant/scanner.l, tests/test-lineno-nr/scanner.l, tests/test-lineno-r/scanner.l, tests/test-mem-nr/scanner.l, tests/test-mem-r/scanner.l, tests/test-posix/scanner.l, tests/test-posixly-correct/scanner.l, tests/test-prefix-nr/scanner.l, tests/test-prefix-r/scanner.l, tests/test-pthread/scanner.l, tests/test-string-nr/scanner.l, tests/test-string-r/scanner.l, tests/test-yyextra/scanner.l: All prototypes were rewritten to depend upon the macro YY_TRADITIONAL_FUNC_DEFS, which is defined by default. The generated scanners build cleanly under gcc's traditional strictness and under C++ compilers. 2002-07-24 Will Estes * NEWS: dist-bzip2 and rename yy_globals and yy_globals_t 2002-07-24 Will Estes * configure.in: version 2.5.10 2002-07-24 Will Estes * Makefile.am: add dist-bzip2 to automake_options so we'll start getting tar.bz2 archives 2002-07-23 John Millaway * flex.skl, flex.texi, tests/test-bison-yylval/scanner.l, tests/test-mem-r/scanner.l, tests/test-multiple-scanners-r/scanner-1.l, tests/test-multiple-scanners-r/scanner-2.l, tests/test-prefix-r/scanner.l, tests/test-pthread/scanner.l, tests/test-yyextra/scanner.l: s/yy_globals_t/yyguts_t/g s/yy_globals/yyscanner/g 2002-07-23 John Millaway * Makefile.am: typo in tags target 2002-07-22 John Millaway * Makefile.am: Removed erroneous $(srcdir) from help2man target. 2002-07-22 Will Estes * NEWS, configure.in: it's version 2.5.9 now 2002-07-22 Will Estes * po/.cvsignore: updated gettext to 0.11.3 2002-07-22 Will Estes * ABOUT-NLS, config.rpath, m4/gettext.m4, m4/iconv.m4, m4/isc-posix.m4, m4/lcmessage.m4, m4/lib-link.m4: updated gettext to version 0.11.3 2002-07-22 Will Estes * autogen.sh, configure.in: rollback on configure.in and autogen.sh because autpoint is broken 2002-07-22 Will Estes * po/ru.po: new russian translation from translation project 2002-07-19 Will Estes * autogen.sh: ok, we're going to start using autopoint, but the tree is going to undergo some changes after this 2002-07-19 Will Estes * configure.in: we're preparing for autopoint 2002-07-17 John Millaway * flex.texi: Updated manual. 2002-07-17 Will Estes * NEWS: update the NEWS file for lots of things millaway has done 2002-07-17 John Millaway * flex.skl, main.c, misc.c, scan.l, scanopt.c, sym.c, tests/test-mem-nr/scanner.l, tests/test-mem-r/scanner.l: Fixed prototype/definition conflicts with "traditional" C in skeleton at request of gcc developer. Removed duplicate prototypes in gen.c, sym.c, main.c. Added missing prototypes where needed. All functions in skeleton follow ISO C style protos and defs, instead of BOTH ISO and new-style. Skeleton now compiles cleanly under super-strict gcc flags. Flex itself almost compiles cleanly under strict flags. 2002-07-15 John Millaway * faq.texi, flex.texi: Worked on mem mgmt sect of manual. 2002-07-15 Will Estes * scan.l: allow blank lines and continuations in more places 2002-07-12 Will Estes * TODO: millaway finished the faqs directory 2002-07-12 Will Estes * TODO: removed items as per email from millaway 2002-07-12 John Millaway * configure.in, tests/Makefile.am, tests/descriptions, tests/test-posix/.cvsignore, tests/test-posix/Makefile.am, tests/test-posix/scanner.l, tests/test-posixly-correct/.cvsignore, tests/test-posixly-correct/Makefile.am, tests/test-posixly-correct/scanner.l: Added test for %option posix-compat and repeat operator. Added test for POSIXLY_CORRECT environment variable and repeat operator. 2002-07-12 John Millaway * main.c, scan.l: Fixed POSIXLY_CORRECT detection in scanner. 2002-07-11 John Millaway * faq.texi: More work on faq. 2002-07-11 John Millaway * faq.texi: Moved all faqs into manual -- but did not evaluate them yet. Removed the old faq files. 2002-07-10 John Millaway * main.c: Removed duplicate definition of FLEX_DEBUG. gcc doesn't care, but other compilers might. 2002-07-10 John Millaway * flex.texi: Wrote some more about memory mgmt in the manual. 2002-07-10 John Millaway * flex.texi: flex.texi now works with install-info. 2002-07-10 Will Estes * TODO: added items as per email from millaway 2002-07-10 Will Estes * NEWS: after we release a version, we have to keep the version number in NEWS current 2002-07-10 John Millaway * flex.skl, flex.texi, main.c, scan.l, tests/test-mem-nr/scanner.l, tests/test-mem-r/scanner.l: Fixed prefix issue with get/set debug functions. Fixed prefix issues with memory functions. 2002-07-09 John Millaway * flex.skl: Memory functions are no longer static. 2002-07-09 John Millaway * tests/test-mem-nr/test.input: Added a missing input file for test-mem-nr/ 2002-07-09 John Millaway * tests/test-mem-nr/.cvsignore, tests/test-mem-nr/Makefile.am, tests/test-mem-nr/scanner.l, tests/test-mem-r/.cvsignore, tests/test-mem-r/Makefile.am, tests/test-mem-r/scanner.l, tests/test-mem-r/test.input: Added tests for overriding memory. 2002-07-09 John Millaway * flex.texi: Added sections in manual for memory management. 2002-07-09 Will Estes * NEWS: noted more user visible changes 2002-07-09 John Millaway * configure.in, flex.skl, scan.l, tests/Makefile.am: Added yylex_destroy() to non-reentrant scanner. Added ability to override memory functions. Added tests for overriding memory functions. 2002-07-09 Will Estes * NEWS: new POSIXLY_CORRECT and new ru translation 2002-07-09 Will Estes * po/ru.po: new ru translation from the translation project 2002-07-09 John Millaway * flex.texi: Made note of set/get debug in docs. 2002-07-09 John Millaway * configure.in, flexdef.h, tests/create-test: Replaced obsolete macros in configure.in. Modified create-test to handle the above changes in configure.in. Added support for . 2002-07-09 John Millaway * main.c: Check POSIXLY_CORRECT env variable. 2002-07-09 John Millaway * flex.skl: Added prototypes for the get/set debug functions. 2002-07-09 John Millaway * configure.in, flex.skl, gen.c, main.c, scan.l, tests/Makefile.am, tests/test-debug-nr/.cvsignore, tests/test-debug-nr/Makefile.am, tests/test-debug-nr/scanner.l, tests/test-debug-nr/test.input, tests/test-debug-r/.cvsignore, tests/test-debug-r/Makefile.am, tests/test-debug-r/scanner.l, tests/test-debug-r/test.input: Made yy_flex_debug non-global in reentrant scanner. Created get/set functions for yy_flex_debug. Defined prefixes for new yy_flex_debug symbols. Added tests/ for yy_flex_debug. 2002-07-09 John Millaway * tests/create-test: create-test script now modifies .cvsignore 2002-07-09 John Millaway * tests/create-test: Improved the error checking. 2002-07-03 Will Estes * main.c: fix bug whereby prefix didn't get passed to everybody; patch by rse@engelschall.com 2002-07-03 Will Estes * faq.texi: ~ is an active character, so we'll just use the word 'about' 2002-07-02 John Millaway * Makefile.am: Fixed typo. 2002-07-02 John Millaway * faq.texi: Added a faq. 2002-06-28 John Millaway * Makefile.am: Added 'tags' target -- something I should have done long ago. 2002-06-28 Will Estes * TODO: add two new items regarding coding; remove tests/ copyright notice item as it's done 2002-06-26 Will Estes * NEWS: note the copyright messages in tests/ 2002-06-25 John Millaway * tests/TEMPLATE/Makefile.am, tests/TEMPLATE/parser.y, tests/TEMPLATE/scanner.l, tests/test-array-nr/Makefile.am, tests/test-array-nr/scanner.l, tests/test-array-r/Makefile.am, tests/test-array-r/scanner.l, tests/test-basic-nr/Makefile.am, tests/test-basic-nr/scanner.l, tests/test-basic-r/Makefile.am, tests/test-basic-r/scanner.l, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylloc/main.c, tests/test-bison-yylloc/parser.y, tests/test-bison-yylloc/scanner.l, tests/test-bison-yylval/Makefile.am, tests/test-bison-yylval/main.c, tests/test-bison-yylval/parser.y, tests/test-bison-yylval/scanner.l, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-nr/scanner.l, tests/test-c-cpp-r/Makefile.am, tests/test-c-cpp-r/scanner.l, tests/test-header-nr/Makefile.am, tests/test-header-nr/main.c, tests/test-header-nr/scanner.l, tests/test-header-r/Makefile.am, tests/test-header-r/main.c, tests/test-header-r/scanner.l, tests/test-include-by-buffer/Makefile.am, tests/test-include-by-buffer/scanner.l, tests/test-include-by-reentrant/Makefile.am, tests/test-include-by-reentrant/scanner.l, tests/test-lineno-nr/Makefile.am, tests/test-lineno-nr/scanner.l, tests/test-lineno-r/Makefile.am, tests/test-lineno-r/scanner.l, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-nr/main.c, tests/test-multiple-scanners-nr/scanner-1.l, tests/test-multiple-scanners-nr/scanner-2.l, tests/test-multiple-scanners-r/Makefile.am, tests/test-multiple-scanners-r/main.c, tests/test-multiple-scanners-r/scanner-1.l, tests/test-multiple-scanners-r/scanner-2.l, tests/test-prefix-nr/Makefile.am, tests/test-prefix-nr/scanner.l, tests/test-prefix-r/Makefile.am, tests/test-prefix-r/scanner.l, tests/test-pthread/Makefile.am, tests/test-pthread/scanner.l, tests/test-string-nr/Makefile.am, tests/test-string-nr/scanner.l, tests/test-string-r/Makefile.am, tests/test-string-r/scanner.l, tests/test-yyextra/Makefile.am, tests/test-yyextra/scanner.l: Prepended explicit license to all test-*/ sources. 2002-06-25 Will Estes * NEWS, po/ca.po, po/de.po, po/fr.po, po/sv.po, po/tr.po: new ca, de, fr, sv, tr translations 2002-06-19 Will Estes * TODO: add bootstrapper to the todo list 2002-06-19 Will Estes * configure.in: new version number 2002-06-19 Will Estes * TODO: update TODO list 2002-06-19 Will Estes * NEWS, TODO, flex.texi, flexdef.h, main.c, options.c, options.h, parse.y, scan.l: address typos in NEWS; add --posix option for ERE parsing the way posix wants it; update the TODO file 2002-05-31 Will Estes * README-alpha: made code quality warning more explicit; gave url for cvs and beta flex 2002-05-23 John Millaway * gen.c: Fixed bug where omission of user section 3 caused unmatched #ifdef's in generated code. 2002-05-20 Will Estes * configure.in: configure.in requires at least autoconf 2.50 2002-05-13 John Millaway * Makefile.am: Updated my email address. 2002-05-10 John Millaway * flexdef.h, misc.c: chomp'd lines when reading external skel file. 2002-05-07 Will Estes * po/sv.po: new sweedish translation from the translation project 2002-04-29 Will Estes * po/ca.po: new catalan translation from the translation project 2002-04-29 Will Estes * po/es.po: new spanish translation from the translation project 2002-04-25 Will Estes * TODO: note that the lex matching of abc{1,3} is the posix behavior and so we have a problem 2002-04-25 Will Estes * flex.texi: note that the lex matching of abc{1,3} is the posix behavior 2002-04-23 Will Estes * configure.in: new version 2.5.7; use autoconf versioning info 2002-04-23 Will Estes * NEWS: note changes in 2.5.7 2002-04-23 Will Estes * main.c: conditional compile gettext initialization 2002-04-22 Will Estes * po/de.po: new german translation from the translation project 2002-04-19 John Millaway * tests/test-include-by-reentrant/Makefile.am: Fixed command line for test-include-by-reentrant/Makefile.am 2002-04-19 John Millaway * tests/Makefile.am, tests/TEMPLATE/Makefile.am, tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am, tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am, tests/test-include-by-buffer/Makefile.am, tests/test-include-by-reentrant/Makefile.am, tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-r/Makefile.am, tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am, tests/test-pthread/Makefile.am, tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am, tests/test-yyextra/Makefile.am: Added -I . to compiler search path in tests (so it finds the generated parser.h). 2002-04-19 John Millaway * flexdef.h, misc.c, parse.y, sym.c: Applied 'const' to a few more char*, where appropriate. 2002-04-19 John Millaway * tests/TEMPLATE/Makefile.am, tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am, tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am, tests/test-include-by-buffer/Makefile.am, tests/test-include-by-reentrant/Makefile.am, tests/test-lineno-nr/Makefile.am, tests/test-lineno-r/Makefile.am, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-r/Makefile.am, tests/test-prefix-nr/Makefile.am, tests/test-prefix-r/Makefile.am, tests/test-pthread/Makefile.am, tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am, tests/test-yyextra/Makefile.am: Added top_builddir to -I path. Changed $(srcdir)/$(testname) to ./$(testname) in 'make test' rule. 2002-04-19 John Millaway * flexdef.h, gen.c, misc.c: Changed 'char[]' to 'const char*' wherever in conflicted with gettext. 2002-04-19 Will Estes * po/fr.po, po/sv.po: new files from translation after 2.5.6 beta release 2002-04-18 John Millaway * tests/test-lineno-r/Makefile.am: Fixed minor typo/cut and paste error. 2002-04-18 John Millaway * configure.in: Added yylineno test. 2002-04-18 John Millaway * tests/Makefile.am: Added yylineno tests. 2002-04-18 John Millaway * tests/test-lineno-nr/.cvsignore, tests/test-lineno-nr/Makefile.am, tests/test-lineno-nr/scanner.l, tests/test-lineno-nr/test.input, tests/test-lineno-r/.cvsignore, tests/test-lineno-r/Makefile.am, tests/test-lineno-r/scanner.l, tests/test-lineno-r/test.input: Created yylineno tests. 2002-04-15 John Millaway * scanopt.c: Applied gettext macros to error messages from scanopt. 2002-04-15 John Millaway * buf.c, faq.texi, options.c, options.h, scanopt.c, scanopt.h: Changed copyright from Millaway to flex? U.S. Gov't? Regents of U. Cali.? Paxson? 2002-04-15 Will Estes * tests/test-bison-yylloc/Makefile.am, tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am: we missed a few main.c files in the distribution 2002-04-15 Will Estes * TODO: a lot more work has happened to flex; note this by removing a number of TODO entries 2002-04-15 Will Estes * TODO: make sure all gettext modules use gettext translation facilities 2002-04-14 John Millaway * faq.texi: Converted faqs 34-41 to texinfo. 2002-04-14 John Millaway * Makefile.am, faq.texi, flex.texi: Added faq.texi to archive. Added faq.texi to flex_TEXINFOS macro in Makefile.am. flex.texi now includes faq.texi. 2002-04-13 John Millaway * flexdef.h: defined FLEX_EXIT macro to call longjmp on errors. 2002-04-13 John Millaway * main.c, misc.c: Replaced exit(2) calls with longjmps (in the form of FLEX_EXIT macro). Moved main() to flex_main() to allow flex to be called from a library. 2002-04-13 John Millaway * scanopt.c: Fixed minor typo in error message 2002-04-12 Will Estes * tests/test-header-nr/Makefile.am, tests/test-header-r/Makefile.am, tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-r/Makefile.am, tests/test-pthread/Makefile.am, tests/test-string-nr/Makefile.am, tests/test-string-r/Makefile.am, tests/test-yyextra/Makefile.am: removed eroneous files listed in EXTRA_DIST 2002-04-12 Will Estes * tests/test-yyextra/.cvsignore: ignore Makefile.in 2002-04-12 Will Estes * tests/test-string-r/.cvsignore: it's Makefile.in, not makefile.in 2002-04-12 Will Estes * tests/test-yyextra/Makefile.am, tests/test-yyextra/Makefile.in: put test-yyextra under automake 2002-04-12 Will Estes * tests/test-string-r/Makefile.am, tests/test-string-r/Makefile.in: put test-string-r under automake 2002-04-12 Will Estes * tests/test-string-nr/.cvsignore, tests/test-string-r/.cvsignore: we can ignore Makefile.in 2002-04-12 Will Estes * tests/test-string-nr/Makefile.am, tests/test-string-nr/Makefile.in: put test-string-nr under automake 2002-04-12 Will Estes * tests/test-pthread/.cvsignore: ignore Makefile.in 2002-04-12 Will Estes * tests/test-pthread/Makefile.am, tests/test-pthread/Makefile.in: put test-pthread under automake 2002-04-12 Will Estes * tests/test-prefix-r/Makefile.am, tests/test-prefix-r/Makefile.in: put test-prefix-r under automake 2002-04-12 Will Estes * tests/test-prefix-nr/.cvsignore, tests/test-prefix-r/.cvsignore: we can ignore Makefile.in 2002-04-12 Will Estes * tests/test-prefix-nr/Makefile.am, tests/test-prefix-nr/Makefile.in: put test-prefix-nr under automake 2002-04-12 Will Estes * tests/test-multiple-scanners-r/Makefile.am, tests/test-multiple-scanners-r/Makefile.in: put test-multiple-scanners-r under automake 2002-04-12 Will Estes * tests/test-multiple-scanners-nr/.cvsignore, tests/test-multiple-scanners-r/.cvsignore: we can ignore Makefile.in now 2002-04-12 Will Estes * tests/test-multiple-scanners-nr/Makefile.am, tests/test-multiple-scanners-nr/Makefile.in: put test-multiple-scanners-nr under automake 2002-04-11 Will Estes * tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am: we didn't need parser.y 2002-04-11 Will Estes * TODO: work done on the test suite; remove relevant entries from TODO 2002-04-10 Will Estes * tests/test-include-by-reentrant/.cvsignore, tests/test-include-by-reentrant/Makefile.am, tests/test-include-by-reentrant/Makefile.in: put test-include-by-reentrant under automake 2002-04-09 Will Estes * tests/test-include-by-buffer/.cvsignore: we have a Makefile.in which we need to ignore 2002-04-09 Will Estes * tests/test-include-by-buffer/Makefile.am, tests/test-include-by-buffer/Makefile.in: test-include-by-buffer now under automake control 2002-04-09 Will Estes * tests/TEMPLATE/Makefile.am: and we want LFLAGS in the rule to make scanner.c as well 2002-04-09 Will Estes * tests/test-header-r/.cvsignore, tests/test-header-r/Makefile.am, tests/test-header-r/Makefile.in: put test-header-r under automake 2002-04-09 Will Estes * tests/test-header-nr/.cvsignore: we now generate a Makefile.in from automake; cvs should ignore it 2002-04-09 Will Estes * tests/test-header-nr/Makefile.am: add dependencies for main.o and scaner.h 2002-04-09 Will Estes * tests/TEMPLATE/Makefile.am: We may want to have LFLAGS readily available 2002-04-09 Will Estes * tests/test-header-nr/Makefile.am, tests/test-header-nr/Makefile.in: put test-header-nr under automake 2002-04-09 Will Estes * tests/TEMPLATE/Makefile.am: oops, we need to clean objects too 2002-04-09 Will Estes * tests/TEMPLATE/Makefile.am, tests/test-array-nr/Makefile.am, tests/test-array-r/Makefile.am, tests/test-basic-nr/Makefile.am, tests/test-basic-r/Makefile.am, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylval/Makefile.am, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-r/Makefile.am: now that config.h lives in the top-level directory, we need to tell the testsuite 2002-04-08 Will Estes * tests/test-array-nr/.cvsignore, tests/test-array-r/.cvsignore, tests/test-basic-nr/.cvsignore, tests/test-basic-r/.cvsignore, tests/test-bison-yylval/.cvsignore, tests/test-c-cpp-nr/.cvsignore, tests/test-c-cpp-r/.cvsignore: we can ignore some Makefile.in 2002-04-08 Will Estes * configure.in, tests/TEMPLATE/Makefile.am: only one config file header apparently; this will have consequences in the test suite 2002-04-08 Will Estes * tests/test-bison-yylval/Makefile.am, tests/test-bison-yylval/Makefile.in: adding automake support 2002-04-08 Will Estes * tests/test-bison-yylloc/.cvsignore, tests/test-bison-yylloc/Makefile.am: tuned Makefile.am to build correctly; ignore Makefile.in now 2002-04-08 Will Estes * tests/configure.in: test suite changes 2002-04-08 Will Estes * autogen.sh, configure.in, tests/.cvsignore, tests/Makefile.am, tests/Makefile.in, tests/README, tests/TEMPLATE/.cvsignore, tests/TEMPLATE/Makefile.am, tests/TEMPLATE/Makefile.in, tests/configure.in, tests/create-test, tests/create-test.pl, tests/test-array-nr/Makefile.am, tests/test-array-nr/Makefile.in, tests/test-array-r/Makefile.am, tests/test-array-r/Makefile.in, tests/test-basic-nr/Makefile.am, tests/test-basic-nr/Makefile.in, tests/test-basic-r/Makefile.am, tests/test-basic-r/Makefile.in, tests/test-bison-yylloc/Makefile.am, tests/test-bison-yylloc/Makefile.in, tests/test-c-cpp-nr/Makefile.am, tests/test-c-cpp-nr/Makefile.in, tests/test-c-cpp-r/Makefile.am, tests/test-c-cpp-r/Makefile.in: test suite changes 2002-04-05 John Millaway * flex.texi: Corrected error in manual regarding return type for yy_scan_{string,buffer,bytes}. 2002-04-05 Will Estes * po/de.po: new german translations from the translation project 2002-04-03 Will Estes * po/es.po: new spanish translations 2002-04-01 Will Estes * Makefile.am: DIST_SUBDIRS: new variable. we can build flex with SUBDIRS and then build the distribution using DIST_SUBDIRS 2002-04-01 Will Estes * main.c: fix typo in comment 2002-03-31 John Millaway * main.c: Documented the header file kludge, (in anticipation of buffering Section 1.) 2002-03-31 John Millaway * flex.texi: Created appendix "Makefiles and Flex" in the manual. 2002-03-30 John Millaway * flex.texi: updating manual. 2002-03-29 Will Estes * po/POTFILES.in: we want parse.y, not parse.c 2002-03-29 John Millaway * flex.texi: Indexing the manual (75% done). 2002-03-29 Will Estes * Makefile.am: unlisted intermediate flex/yacc-created files 2002-03-29 Will Estes * TODO: millaway has done more work 2002-03-29 Will Estes * Makefile.am, configure.in: ok, one last touch up; users most likely wont have help2man so we need to insure that's ok 2002-03-29 Will Estes * Makefile.am: fine tune flex.1 some more 2002-03-29 Will Estes * Makefile.am, configure.in: generalize the manpage a bit and tell autofoo about help2man 2002-03-29 Will Estes * po/da.po: new danish from translation project robot 2002-03-28 John Millaway * flex.texi: Indexing the manual -- it's only half done. 2002-03-28 John Millaway * flex.texi: flex manual now uses automake's versioning info. 2002-03-28 John Millaway * README.cvs-snapshot: Mentioned requirements for gettext and help2man. 2002-03-28 John Millaway * Makefile.am, main.c: Output of `flex --version` now matches GNU coding standards. Makefile.am now uses `help2man` to generate flex.1 2002-03-27 Will Estes * TODO: millaway has done a lot on the TODO list; remove those items that he has take care of 2002-03-27 Will Estes * README.cvs-snapshot: edited millaway's initial draft 2002-03-27 John Millaway * README.cvs-snapshot: Created file. 2002-03-27 John Millaway * flex.texi: Fixed case of node names in flex.texi. 2002-03-24 Will Estes * TODO: lex- and yacc- generated files 2002-03-24 Will Estes * po/fr.po: new french 2002-03-18 Will Estes * NEWS: ending periods in news items removed; mention nounistd options 2002-03-18 Will Estes * po/sv.po: updated sweedish translations 2002-03-18 Will Estes * po/de.po: german translation 2002-03-18 John Millaway * flex.skl, flex.texi, main.c, options.c, options.h, scan.l: Removed CFront 1.2 -specific code from skeleton, because CFront now defines __cplusplus properly. Removed TurboC-specific code from skeleton. Skeleton now includes proper C++ standard headers. Relocated "unistd.h" code after user section 1 to allow user to overrid it. New option "nounistd" to suppress unistd.h from being included. 2002-03-15 Will Estes * po/tr.po: new turkish translation 2002-03-15 Will Estes * NEWS: mention included translations 2002-03-15 Will Estes * TODO: we've done the gettext thing, but sometime we should get 0.11.1 2002-03-15 Will Estes * po/ca.po: new catalan translation 2002-03-14 John Millaway * flex.texi: Added section on format of comments. 2002-03-14 John Millaway * flex.texi: Split format chapter into sections. 2002-03-14 John Millaway * flex.texi: Removed explicit pointers in node definitions. 2002-03-14 Will Estes * configure.in: unistd.h can be problematic 2002-03-14 Will Estes * tests/README: editing changes to README 2002-03-13 Will Estes * po/POTFILES.in: scan.l, not scan.c because gettext gets confused 2002-03-13 Will Estes * scan.l: gettext cruft 2002-03-13 Will Estes * tests/descriptions: separate out test descriptions 2002-03-13 Will Estes * po/LINGUAS: french and korean dont crash now 2002-03-12 Will Estes * po/fr.po, po/ko.po: remove duplicate messages as per advice from Jordi Mallach 2002-03-12 Will Estes * gettext.h: yes, more gettext cruft 2002-03-12 Will Estes * ABOUT-NLS, config.rpath, m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/isc-posix.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/progtest.m4: this is gettext cruft 2002-03-12 Will Estes * NEWS: gettext and autofoo are now involved 2002-03-12 Will Estes * Makefile.am, autogen.sh, configure.in, flexdef.h, main.c: mostly, changes for gettext 2002-03-12 Will Estes * po/ca.po, po/da.po, po/es.po, po/ru.po, po/sv.po, po/tr.po: these sure change a lot 2002-03-12 Will Estes * TODO: note about cvs documentation 2002-03-12 Will Estes * po/LINGUAS: we now have turkish 2002-03-12 Will Estes * po/tr.po: updated translations, i think 2002-03-12 Will Estes * po/ca.po, po/da.po, po/es.po, po/fr.po, po/ko.po, po/ru.po, po/sv.po, po/tr.po: ok, maybe we do keep these things? 2002-03-12 Will Estes * README-alpha: README-alpha for those bad-hair days 2002-03-12 Will Estes * m4/.cvsignore, m4/Makefile.am: ok,now we kinda have a m4/ subdir for gettext 2002-03-12 Will Estes * po/.cvsignore, po/LINGUAS, po/Makevars, po/POTFILES.in, po/da.po, po/es.po, po/fr.po, po/ko.po, po/ru.po, po/sv.po: now, we have a po/ subdirectory for gettext. i hope you're happy 2002-03-12 Will Estes * po/ca.po: removing po files, maybe 2002-03-12 Will Estes * tests/.cvsignore: ignore autom4te.cache 2002-03-11 Will Estes * po/ca.po, po/da.po, po/es.po, po/fr.po, po/ko.po, po/ru.po, po/sv.po: po files from debian 2002-03-08 Will Estes * TODO: add several notes about tasks which need doing; create a new top-level entry for generic coding concerns (this is distinct from specific API or other such issues) 2002-03-06 Will Estes * README: eliminate to.do and faqs from the README file 2002-03-06 Will Estes * TODO: more notes on tests/ 2002-03-06 Will Estes * Makefile.am: remove subdirectories from EXTRA_DIST; add a SUBDIRS macro to handle examples/; clean up the dist-hook target 2002-03-06 Will Estes * configure.in: we want to generate Makefiles in some more subdirectories; automake will like this 2002-03-06 Will Estes * TODO: notes on subdirectories 2002-03-05 Will Estes * examples/.cvsignore, examples/Makefile.am: now examples/ fits into automake 2002-03-05 Will Estes * examples/fastwc/.cvsignore, examples/fastwc/Makefile.am: examples/fastwc now fits into automake 2002-03-05 Will Estes * examples/manual/.cvsignore, examples/manual/Makefile.am, examples/manual/Makefile.examples, examples/manual/README: examples/manual directory now fits into automake 2002-03-05 Will Estes * examples/manual/Makefile: renamed Makefile to Makefile.examples for automake's sake 2002-03-04 Will Estes * Makefile.am: add parse.c and scan.c to built_sources 2002-02-24 John Millaway * Makefile.am: Removed CVS-specific code from 'dist-hook' target so anybody with a copy of the tree can build a dist. 2002-02-22 John Millaway * tests/Makefile.in: Converted test script to portable /bin/sh. 2002-02-22 John Millaway * tests/test-bison-yylloc/Makefile.in: Added some spaces in shell scripts for portability. 2002-02-22 John Millaway * tests/create-test.pl: Fixed #! line for portability. 2002-02-22 John Millaway * tests/test-bison-yylloc/Makefile.in: Fixed return status code on bison-lloc test. 2002-02-21 John Millaway * tests/create-test.pl: Added script to auto-create tests. Probably overkill. 2002-02-21 John Millaway * flex.skl: Fixed C++ #ifdef problem. Removed mistyped __CPLUSPLUS macro. Removed THROW_NIL. Not sure where it came from in the first place. 2002-02-21 John Millaway * tests/README, tests/TEMPLATE/Makefile.in, tests/configure.in, tests/test-c-cpp-nr/.cvsignore, tests/test-c-cpp-nr/Makefile.in, tests/test-c-cpp-nr/scanner.l, tests/test-c-cpp-nr/test.input, tests/test-c-cpp-r/.cvsignore, tests/test-c-cpp-r/Makefile.in, tests/test-c-cpp-r/scanner.l, tests/test-c-cpp-r/test.input: Added test-c-cpp-nr and test-c-cpp-r. 2002-02-16 John Millaway * flex.skl: Added missing #endif. 2002-02-07 Will Estes * tests/TEMPLATE/.cvsignore, tests/test-array-nr/.cvsignore, tests/test-array-r/.cvsignore, tests/test-basic-nr/.cvsignore, tests/test-basic-r/.cvsignore, tests/test-bison-yylloc/.cvsignore, tests/test-bison-yylval/.cvsignore, tests/test-header-nr/.cvsignore, tests/test-header-r/.cvsignore, tests/test-include-by-buffer/.cvsignore, tests/test-include-by-reentrant/.cvsignore, tests/test-multiple-scanners-nr/.cvsignore, tests/test-multiple-scanners-r/.cvsignore, tests/test-prefix-nr/.cvsignore, tests/test-prefix-r/.cvsignore, tests/test-pthread/.cvsignore, tests/test-string-nr/.cvsignore, tests/test-string-r/.cvsignore, tests/test-yyextra/.cvsignore: add OUTPUT to .cvsignore files in test directories; it's also in the template directory 2002-02-06 Will Estes * gen.c: fix interrupted reads and freads; from the debian package maintainer 2002-02-06 Will Estes * flex.texi, flexdef.h, main.c, nfa.c: support large flex tables; from debian package maintainer 2002-01-29 Will Estes * tests/configure.in: add more output files to account for new tests 2002-01-03 Will Estes * tests/test-array-nr/.cvsignore, tests/test-array-nr/Makefile.in, tests/test-array-nr/scanner.l, tests/test-array-nr/test.input: add this test 2002-01-03 Will Estes * tests/test-array-r/.cvsignore, tests/test-array-r/Makefile.in, tests/test-array-r/scanner.l, tests/test-array-r/test.input: add this test suite 2001-11-20 Will Estes * flex.skl, main.c: millaway: Fixed yytext_ptr when using %array in reentrant scanner 2001-11-20 Will Estes * buf.c: oops, forgot this one line 2001-11-14 Will Estes * tests/test-header-r/.cvsignore, tests/test-header-r/Makefile.in, tests/test-header-r/main.c, tests/test-header-r/scanner.l, tests/test-header-r/test.input: and more fallout 2001-11-14 Will Estes * TODO, flex.skl, flex.texi, flexdef.h, main.c, misc.c, tests/README, tests/TEMPLATE/Makefile.in, tests/configure.in, tests/test-basic-r/scanner.l, tests/test-bison-yylloc/.cvsignore, tests/test-bison-yylloc/Makefile.in, tests/test-bison-yylloc/parser.y, tests/test-bison-yylloc/scanner.l, tests/test-bison-yylval/.cvsignore, tests/test-bison-yylval/Makefile.in, tests/test-bison-yylval/parser.y, tests/test-bison-yylval/scanner.l, tests/test-include-by-reentrant/scanner.l, tests/test-prefix-r/scanner.l, tests/test-pthread/scanner.l, tests/test-string-r/scanner.l, tests/test-yyextra/scanner.l: more from the same batch 2001-11-14 Will Estes * tests/test-bison-yylloc/main.c, tests/test-bison-yylval/main.c, tests/test-header-nr/.cvsignore, tests/test-header-nr/Makefile.in, tests/test-header-nr/main.c, tests/test-header-nr/scanner.l, tests/test-header-nr/test.input, tests/test-multiple-scanners-nr/.cvsignore, tests/test-multiple-scanners-nr/Makefile.in, tests/test-multiple-scanners-nr/main.c, tests/test-multiple-scanners-nr/scanner-1.l, tests/test-multiple-scanners-nr/scanner-2.l, tests/test-multiple-scanners-r/.cvsignore, tests/test-multiple-scanners-r/Makefile.in, tests/test-multiple-scanners-r/main.c, tests/test-multiple-scanners-r/scanner-1.l, tests/test-multiple-scanners-r/scanner-2.l: a big batch from millaway 2001-10-26 Will Estes * NEWS: now NEWS has forgotten about the _r variables 2001-10-26 Will Estes * flex.skl, flex.texi, gen.c, main.c, tests/test-bison-yylloc/scanner.l, tests/test-bison-yylval/scanner.l, tests/test-include-by-reentrant/scanner.l, tests/test-prefix-nr/scanner.l, tests/test-pthread/scanner.l, tests/test-string-r/scanner.l, tests/test-yyextra/scanner.l: millaway simplified the reentrant api; here's the result 2001-10-23 Will Estes * main.c, options.c, options.h: more from millaway 2001-10-22 Will Estes * main.c, options.c, options.h: the last checkin was broken; millaway fixed it 2001-10-22 Will Estes * flex.skl, flex.texi, gen.c, main.c, misc.c, options.h, scan.l, scanopt.c, tests/README, tests/configure.in: phew, millaway's latest batch 2001-10-21 Will Estes * flex.skl: flex.skl should come up in C mode 2001-10-21 Will Estes * flex.skl: apparently, isatty and c++ need help getting along (from octave) 2001-10-19 Will Estes * NEWS: document new options and new option handling 2001-10-19 Will Estes * TODO: tell emacs that TODO is a text/outline mode file 2001-10-19 Will Estes * TODO: we have new long options; we need to document that 2001-10-19 Will Estes * NEWS: tell emacs that NEWS is text/outline mode 2001-10-19 Will Estes * flex.skl: oops, lost a line somewhere in the merge process on millaway's work 2001-10-17 Will Estes * Makefile.am, buf.c, flex.skl, flex.texi, flexdef.h, main.c, misc.c, options.c, options.h, parse.y, scan.l, scanopt.c, scanopt.h: merge latest batch of millaway's changes 2001-09-22 Will Estes * main.c: Fixed typo in options display 2001-09-20 Will Estes * main.c: reentrant and non-reentrant scanners share the same yywrap MACRO. millaway 2001-09-20 Will Estes * TODO: clarify item on comments in lexical files 2001-09-20 Will Estes * NEWS, scan.l: now flex recognizes \r as an eol character 2001-09-20 Will Estes * Makefile.am: specify cvsroot so automake distcheck works 2001-09-19 Will Estes * flex.texi: tex has lost its mind; we remove parentheses to compensate 2001-09-19 Will Estes * NEWS: now that c++ is better supported, let's mention it as a news item 2001-09-19 Will Estes * examples/fastwc/wc1.l, examples/fastwc/wc2.l, examples/fastwc/wc3.l, examples/fastwc/wc4.l, examples/fastwc/wc5.l, flex.skl, main.c: commit the backwash from the branch merges 2001-09-19 Will Estes * FlexLexer.h, examples/testxxLexer.l, flex.skl: made preliminary c++ fixes; the intent is to make it work with recent c++ compilers 2001-08-26 Will Estes * main.c: remove argv_fixup; fix typo in error message; changes from millaway's branch 2001-08-24 Will Estes * NEWS: mention no more c++ comments in c scanners 2001-08-21 John Millaway * flex.skl: Changed // comments to /* */ comments in skeleton. 2001-08-19 John Millaway * flex.texi: Changed @var to @code everywhere. 2001-08-16 Will Estes * to.do/flex.rmail: more mail 2001-08-16 Will Estes * TODO: the manual now has its own section; we're not adding comments either 2001-08-04 John Millaway * tests/Makefile.in, tests/README, tests/TEMPLATE/Makefile.in, tests/test-basic-nr/Makefile.in, tests/test-basic-r/Makefile.in, tests/test-bison-yylloc/Makefile.in, tests/test-bison-yylval/Makefile.in, tests/test-include-by-buffer/Makefile.in, tests/test-include-by-reentrant/Makefile.in, tests/test-prefix-nr/Makefile.in, tests/test-prefix-r/Makefile.in, tests/test-pthread/Makefile.in, tests/test-string-nr/Makefile.in, tests/test-string-r/Makefile.in, tests/test-yyextra/Makefile.in: Cleaned up the output of the tests. 2001-08-03 Will Estes * TODO: note jason's thoughts on having a manpage 2001-08-03 Will Estes * TODO: note millaway's assignment and tests to be under flex license 2001-08-01 John Millaway * tests/test-bison-yylval/scanner.l: Fixed semantics of test (the success or failure of this test should be unaffected by this change.) 2001-08-01 Will Estes * autogen.sh: fake automake into believing that ChangeLog already exists 2001-08-01 Will Estes * Makefile.am: millaway needs to be covered in the ChangeLog 2001-08-01 Will Estes * version.h: automake is supplying version info now so we just pick it up 2001-08-01 Will Estes * flex.texi: forgot braces on @copyright 2001-08-01 John Millaway * flex.skl: Added missing argument to yy_flex_free. 2001-08-01 Will Estes * AUTHORS: john millaway wrote the reentrant C support 2001-08-01 Will Estes * flex.texi: add license node to the manual 2001-08-01 Will Estes * TODO: c++ ideas 2001-07-31 Will Estes * parse.y: error messages will now show up the way that emacs likes them 2001-07-31 Will Estes * Makefile.am: oops, left in an extra backslash 2001-07-31 Will Estes * TODO: flex.texi is here; clarify tests/ rewrite issue 2001-07-31 Will Estes * NEWS: hey, we have texinfo, not man 2001-07-31 Will Estes * flex.1: no more manpage 2001-07-31 Will Estes * Makefile.am: remove flex.1 and rewrite the dist-hook so that we pick up a couple more directories 2001-07-31 Will Estes * flex.texi: the namual now compiles; hurray 2001-07-31 Will Estes * Makefile.am: first attempt at including the tests/ directory via automake, dist-hook target added 2001-07-31 Will Estes * tests/.cvsignore: ignore config.cache in tests/ directory 2001-07-31 Will Estes * Makefile.am: automake groks the ChangeLog now so we don't have to remind the maintainer to remake it 2001-07-30 Will Estes * flex.texi: more corrections to the manual; the end is in site 2001-07-30 Will Estes * TODO: auto-generated backup? 2001-07-27 Will Estes * flex.texi: today's tinkering on the manual 2001-07-27 Will Estes * Makefile.am: if we want flex.1 we have to say so in EXTRA_DIST 2001-07-27 Will Estes * TODO: note future issues with flex.texi 2001-07-27 Will Estes * Makefile.am: include flex.1 as it's the only working documentation for now 2001-07-27 Will Estes * Makefile.am: rearrange to work with automake on building the ChangeLog 2001-07-27 Will Estes * scan.l: automake is unhappy if we specify the outfile 2001-07-26 Will Estes * flex.texi: more conversions/corrections 2001-07-26 Will Estes * README: we removed misc/ so we don't mention it any more 2001-07-25 Will Estes * flex.texi: begin the manual conversion to texinfo; yes, it's broken right now 2001-07-25 Will Estes * AUTHORS, THANKS: copy in manual author and thanks info 2001-07-25 Will Estes * Makefile.am: how to fake the ChangeLog into showing up in the distribution 2001-07-25 Will Estes * Makefile.am: add YFLAGS so parse.h gets made 2001-07-24 Will Estes * examples/fastwc/README, examples/fastwc/mywc.c, examples/fastwc/wc1.l, examples/fastwc/wc2.l, examples/fastwc/wc3.l, examples/fastwc/wc4.l, examples/fastwc/wc5.l: re-add these files 2001-07-24 Will Estes * TODO: reflect recent doings 2001-07-24 Will Estes * Makefile.in: what with automake, we don't need Makefile.in any more 2001-07-24 Will Estes * configure.in: more rearranging for automake 2001-07-24 Will Estes * to.do/flex.rmail: more mail came in 2001-07-24 Will Estes * autogen.sh: adjust to automake's idea of the world 2001-07-24 Will Estes * Makefile.am: add Vern's misc dependencies; noinst_SCRIPTS was broken?; list a few last files to be included in the distribution 2001-07-24 Will Estes * NEWS: rearrange for better order; add automake support as a news item 2001-07-24 Will Estes * Makefile.am: copyright notice on Makefile.am; document some -D switches (are they still usable?) 2001-07-24 Will Estes * TODO: add lex-replacement issue 2001-07-24 Will Estes * Makefile.am: add EXTRA_DIST 2001-07-23 Will Estes * autogen.sh: we need to do the same thing in each directory 2001-07-23 Will Estes * configure.in: introduce automake into the macro calls 2001-07-23 Will Estes * Makefile.am: add AUTOMAKE_OPTIONS, info_TEXINFOS, include_HEADERS, noinst_HEADERS; it's libfl.a, not libflex.a 2001-07-23 Will Estes * Makefile.am: bin_PROGRAMS and lib_LIBRARIES 2001-07-23 Will Estes * to.do/streams.mail: streams.mail has moved here 2001-07-23 Will Estes * TODO: add xref for teximanual 2001-07-19 Will Estes * flex.1: include typo/punctuation fixes from a patch submitted by noon@cote-dazur.com (Fabrice Bauzac) 2001-07-17 Will Estes * TODO: we want gettext 2001-06-24 Will Estes * flex.skl: include c++ STD fixes from quanstro@quanstro.net 2001-06-24 Will Estes * flex.skl, gen.c: change some int types to size_t as per FreeBSD 28364 from avn@any.ru 2001-06-24 Will Estes * TODO: remove parse.[ch] from make clean target; repackage distribution (not rework) 2001-06-19 Will Estes * TODO: add memory api and reworking of flex.skl reworking 2001-06-18 Will Estes * flex.skl: remove extraneous notice from flex.skl 2001-06-18 Will Estes * flex.skl: patch memory leak as per millaway 2001-06-17 Will Estes * to.do/flex.rmail: add vern's ok for copyright/license changes and john's answer on line offsets 2001-06-17 Will Estes * TODO: remove creation of .cvsignore files (it's done); add other notes about the test suite 2001-06-17 Will Estes * tests/TEMPLATE/.cvsignore, tests/test-basic-nr/.cvsignore, tests/test-basic-r/.cvsignore, tests/test-bison-yylloc/.cvsignore, tests/test-bison-yylval/.cvsignore, tests/test-include-by-buffer/.cvsignore, tests/test-include-by-reentrant/.cvsignore, tests/test-prefix-nr/.cvsignore, tests/test-prefix-r/.cvsignore, tests/test-pthread/.cvsignore, tests/test-string-nr/.cvsignore, tests/test-string-r/.cvsignore, tests/test-yyextra/.cvsignore: adding .cvsignore files for existing tests/ subdirectories 2001-06-17 Will Estes * tests/README: reformat, say to add a description to this file and mention what to do re .cvsignore 2001-06-17 Will Estes * tests/TEMPLATE/cvsignore: create template for .cvsignore 2001-06-17 Will Estes * TODO: reorganize for logical reasons; test suite now seems to run out of the box 2001-06-17 Will Estes * tests/.cvsignore: we dont want the Makefile either 2001-06-17 Will Estes * tests/test-prefix-nr/test.input, tests/test-prefix-r/test.input: test.input was supposed to be here 2001-06-17 Will Estes * tests/.cvsignore: add autoconf legacy files to be ignored 2001-06-17 Will Estes * autogen.sh: clarify usage instructions; prepare tests/ as well 2001-06-17 Will Estes * tests/.cvsignore: . cvsignore for tests/ subdirectory 2001-06-17 Will Estes * FlexLexer.h: tell emacs that FlexLexer.h is c++ 2001-06-17 Will Estes * scan.l: tell emacs scan.l is in C mode 2001-06-17 Will Estes * flex.skl: added punctuation 2001-06-17 Will Estes * FlexLexer.h, Makefile.in, README, RoadMap, autogen.sh, ccl.c, configure.in, dfa.c, ecs.c, flex.1, flex.skl, flexdef.h, gen.c, libmain.c, libyywrap.c, main.c, misc.c, mkskel.sh, nfa.c, parse.y, scan.l, sym.c, tblcmp.c, yylex.c: change copyright/license notices as per Vern's response to Theo 2001-06-15 Will Estes * to.do/flex.rmail: add bill fenlason's emails 2001-06-15 Will Estes * COPYING: make changes as per Theo De Raadt; remove tabs 2001-06-08 Will Estes * flex.skl: save errno as per Theo de Raadt 2001-06-07 Will Estes * flex.1: correct hyphenation as per openbsd tree 2001-06-05 Will Estes * Makefile.in, configure.in: change references to TESTS/ to tests/ to account for the directory name changes 2001-05-27 Will Estes * flex.skl, gen.c: commit john millaway's YY_G wrapper corrections 2001-05-21 Will Estes * tests/Makefile.in: remove || exit calls 2001-05-21 Will Estes * gen.c: complete john millaway's reentrant patch 2001-05-21 Will Estes * to.do/flex.rmail: more flex messages in the queue 2001-05-18 Will Estes * flex.skl, flexdef.h, gen.c, main.c, nfa.c, scan.l: john millaway's reentrancy patch 2001-05-18 Will Estes * tests/Makefile.in: remove || exit from testing loop 2001-05-18 Will Estes * Makefile.in: tell make about the tests directory and its associated targets 2001-05-18 Will Estes * TODO: rethink the todo list 2001-05-18 Will Estes * flex.1: describe reentrant api changes 2001-05-18 Will Estes * TODO: mention work needed for tests/ 2001-05-18 Will Estes * configure.in: tell auto* about the test directory 2001-05-18 Will Estes * README: make punctuation uniform, mention the new tests/ directory 2001-05-18 Will Estes * NEWS: reformat items; cut out old items and move them to ONEWS 2001-05-18 Will Estes * ONEWS: move old NEWS items to ONEWS 2001-05-18 Will Estes * tests/Makefile.in, tests/README, tests/TEMPLATE/Makefile.in, tests/TEMPLATE/parser.y, tests/TEMPLATE/scanner.l, tests/TEMPLATE/test.input, tests/configure.in, tests/test-basic-nr/Makefile.in, tests/test-basic-nr/scanner.l, tests/test-basic-nr/test.input, tests/test-basic-r/Makefile.in, tests/test-basic-r/scanner.l, tests/test-basic-r/test.input, tests/test-bison-yylloc/Makefile.in, tests/test-bison-yylloc/parser.y, tests/test-bison-yylloc/scanner.l, tests/test-bison-yylloc/test.input, tests/test-bison-yylval/Makefile.in, tests/test-bison-yylval/parser.y, tests/test-bison-yylval/scanner.l, tests/test-bison-yylval/test.input, tests/test-include-by-buffer/Makefile.in, tests/test-include-by-buffer/scanner.l, tests/test-include-by-buffer/test-1.input, tests/test-include-by-buffer/test-2.input, tests/test-include-by-buffer/test-3.input, tests/test-include-by-reentrant/Makefile.in, tests/test-include-by-reentrant/scanner.l, tests/test-include-by-reentrant/test-1.input, tests/test-include-by-reentrant/test-2.input, tests/test-include-by-reentrant/test-3.input, tests/test-prefix-nr/Makefile.in, tests/test-prefix-nr/README, tests/test-prefix-nr/scanner.l, tests/test-prefix-r/Makefile.in, tests/test-prefix-r/README, tests/test-prefix-r/scanner.l, tests/test-pthread/Makefile.in, tests/test-pthread/scanner.l, tests/test-pthread/test-1.input, tests/test-pthread/test-2.input, tests/test-pthread/test-3.input, tests/test-pthread/test-4.input, tests/test-pthread/test-5.input, tests/test-string-nr/Makefile.in, tests/test-string-nr/scanner.l, tests/test-string-r/Makefile.in, tests/test-string-r/scanner.l, tests/test-yyextra/Makefile.in, tests/test-yyextra/scanner.l, tests/test-yyextra/test.input: add john millaway's test directory 2001-05-04 Will Estes * to.do/flex.rmail: more mail in flex.rmail 2001-05-03 Will Estes * FlexLexer.h, ccl.c, dfa.c, ecs.c, flex.skl, flexdef.h, gen.c, libmain.c, libyywrap.c, main.c, misc.c, nfa.c, parse.y, scan.l, sym.c, tblcmp.c, yylex.c: remove extraneous rcs keywords 2001-05-03 Will Estes * README: mention RoadMap 2001-05-01 Will Estes * examples/README, examples/debflex.awk, examples/manual/ChangeLog, examples/manual/Makefile, examples/manual/README, examples/manual/cat.lex, examples/manual/dates.lex, examples/manual/datetest.dat, examples/manual/eof_rules.lex, examples/manual/eof_test01.txt, examples/manual/eof_test02.txt, examples/manual/eof_test03.txt, examples/manual/expr.lex, examples/manual/expr.y, examples/manual/front.lex, examples/manual/front.y, examples/manual/j2t.lex, examples/manual/myname.lex, examples/manual/myname.txt, examples/manual/myname2.lex, examples/manual/numbers.lex, examples/manual/pas_include.lex, examples/manual/pascal.lex, examples/manual/reject.lex, examples/manual/replace.lex, examples/manual/string1.lex, examples/manual/string2.lex, examples/manual/strtest.dat, examples/manual/unput.lex, examples/manual/user_act.lex, examples/manual/userinit.lex, examples/manual/wc.lex, examples/manual/yymore.lex, examples/manual/yymore2.lex, examples/manual/yymoretest.dat, examples/testxxLexer.l, to.do/README, to.do/Wilhelms.todo, to.do/Wish-List, to.do/flex.rmail, to.do/unicode/FlexLexer.h, to.do/unicode/ccl.c, to.do/unicode/changes.txt, to.do/unicode/ecs.c, to.do/unicode/flex.1, to.do/unicode/flex.skl, to.do/unicode/flexdef.h, to.do/unicode/gen.c, to.do/unicode/main.c, to.do/unicode/misc.c, to.do/unicode/scan.l, to.do/unicode/tblcmp.c: adding the rest of vern's files 2001-05-01 Will Estes * README: mention misc/ directory 2001-05-01 Will Estes * version.h: version is 2.5.5b 2001-05-01 Will Estes * Makefile.in: remove header from top; add rule to generate initscan.c just in case 2001-05-01 Will Estes * configure.in: dont check for initscan.c; check for scan.l instead 2001-05-01 Will Estes * RoadMap: list of source files 2001-05-01 Will Estes * README: rewrite README to reflect changes in layout of directories 2001-05-01 Will Estes * AUTHORS, THANKS, TODO: initial attempt at the files 2001-05-01 Will Estes * COPYING: add 2001 copyright notice 2001-05-01 Will Estes * autogen.sh: initial attempt at a bootstrap script for developers 2001-05-01 Will Estes * flex.texi: texinfo manual, old contributed version 2000-08-21 Vern Paxson * flex.1: fixed some bugs in examples of [[:...:]] ccls 2000-08-21 Vern Paxson * version.h: version shipped to Dick King 2000-08-21 Vern Paxson * flex.skl: explicit include of iostream.h 2000-08-21 Vern Paxson * scan.l: if a newline is seen in , assume it terminates the string. 2000-08-21 Vern Paxson * flexdef.h, sym.c: moved symbol table definitions from flexdef.h into sym.c 2000-08-21 Vern Paxson * dfa.c: fixed underallocation for accset 1997-06-27 Vern Paxson * COPYING: revised for rms 1997-06-23 Vern Paxson * flex.skl: fixed memory leak 1997-06-23 Vern Paxson * flex.1: input() doesn't destroy yytext 1997-06-23 Vern Paxson * FlexLexer.h: wrapped with extern "C++" 1996-12-13 Vern Paxson * flex.skl: use delete [] for yy_state_buf 1996-10-29 Vern Paxson * flex.skl: fixed %option noinput 1996-10-29 Vern Paxson * flex.skl: free(char*) fix ... Sigh ... 1996-10-11 Vern Paxson * gen.c: bug fix for yymore()/yylineno interaction 1996-10-11 Vern Paxson * gen.c: fixed memory leak 1996-09-10 Vern Paxson * NEWS: release 2.5.4 1996-09-10 Vern Paxson * Makefile.in: more stuff for distclean 1996-09-10 Vern Paxson * flex.skl: "str" -> "yy_str" 1996-09-10 Vern Paxson * version.h: 2.5.4 1996-07-02 Vern Paxson * flex.skl: (attempted) fix for input() crossing a file boundary 1996-05-29 Vern Paxson * NEWS: don't do Acorn diffs 1996-05-29 Vern Paxson * NEWS: some minor additions for 2.5.3 1996-05-29 Vern Paxson * NEWS, version.h: 2.5.3 1996-05-25 Vern Paxson * flex.skl: initialize yy_more_offset etc. for yyFlexLexer class 1996-05-25 Vern Paxson * flex.skl: niggling cosmetic tweak 1996-05-25 Vern Paxson * flex.skl: bug fixes for yymore (especially with %array) 1996-05-25 Vern Paxson * gen.c: yymore + %array tweaks 1996-05-25 Vern Paxson * FlexLexer.h: added yy_{,prev_}more_offset 1996-05-25 Vern Paxson * main.c: removed decl of unused library function 1996-05-25 Vern Paxson * flex.skl: snapshot of cscope yymore fixes, prior to switching yymore-on-%array approach 1995-12-18 Vern Paxson * gen.c: don't stack states on NUL-transitions that are jams 1995-09-27 Vern Paxson * libmain.c: fixed re Esmond Pitt's ancient suggestion 1995-04-28 Vern Paxson * misc.c: ANSI C / Solaris tweak 1995-04-24 Vern Paxson * flex.1: credits 1995-04-24 Vern Paxson * NEWS: multiple FlexLexer.h includes 1995-04-24 Vern Paxson * FlexLexer.h: fix multiple inclusions 1995-04-24 Vern Paxson * scan.l: lint tweak 1995-04-24 Vern Paxson * flex.1: typo fixed 1995-04-24 Vern Paxson * flex.1: credits update 1995-04-24 Vern Paxson * flex.skl: (char*) cast for realloc 1995-04-24 Vern Paxson * NEWS: (char*) tweak 1995-04-21 Vern Paxson * NEWS: VMS update for 2.5.2 1995-04-21 Vern Paxson * Makefile.in: clarify when 8-bit scanners are created by default, vs. 7-bit 1995-04-21 Vern Paxson * parse.y: reworked alloca() chud, from Francois 1995-04-20 Vern Paxson * NEWS, version.h: 2.5.2 1995-04-20 Vern Paxson * flex.1: 2.5.2 update 1995-04-20 Vern Paxson * dfa.c, main.c: const -> yyconst 1995-04-20 Vern Paxson * Makefile.in: fixed some old libfl.a references 1995-04-20 Vern Paxson * Makefile.in: some (but not all) of Francois' tweaks 1995-04-20 Vern Paxson * configure.in: tweaks from Francois 1995-04-20 Vern Paxson * flex.skl: yy_delete_buffer allows nil buffer pointer 1995-04-20 Vern Paxson * main.c: do_stdinit now defaults to false 1995-04-20 Vern Paxson * FlexLexer.h: remove first default for yylex(new_in, new_out) 1995-04-20 Vern Paxson * flex.skl: rearrange some definitions; fix YY_NO_UNPUT 1995-04-20 Vern Paxson * parse.y: more alloca() bullshit 1995-04-20 Vern Paxson * misc.c: octal escape sequence must have just digits 0-7 1995-04-20 Vern Paxson * scan.l: '-' means stdin octal escape sequence must just be digits 0-7 1995-04-20 Vern Paxson * main.c: -- terminates options 1995-04-20 Vern Paxson * flexdef.h: added dataflush() prototype 1995-04-20 Vern Paxson * misc.c: move dataflush, otoi prototypes into flexdef.h 1995-04-20 Vern Paxson * flex.skl, gen.c: const -> yyconst 1995-04-20 Vern Paxson * gen.c: fixed bug in needing yy_cp for -Cf w/ backing up 1995-03-28 Vern Paxson * README, flex.1: Stan Adermann credit 1995-03-27 Vern Paxson * README: beta-tester update 1995-03-27 Vern Paxson * NEWS, version.h: 2.5.1 1995-03-27 Vern Paxson * flex.1: update date for 2.5.1 release, some feedbacker credits 1995-03-27 Vern Paxson * gen.c: fixed lint problem with declaring yy_cp unnecessarily 1995-03-27 Vern Paxson * dfa.c: {}'s around full-table initializations 1995-03-21 Vern Paxson * README: for version 2.5 1995-03-21 Vern Paxson * flex.1: added note regarding yylineno should be maintained on a per-buffer basis 1995-03-21 Vern Paxson * NEWS: new C++ member functions 1995-03-21 Vern Paxson * NEWS, flex.1: 2.5.0.8 update 1995-03-21 Vern Paxson * main.c: rename yylineno if -P 1995-03-20 Vern Paxson * flexdef.h: do_yylineno MARKER_DIFFERENCE depends on MAXIMUM_MNS 1995-03-20 Vern Paxson * Makefile.in: removed redundant skel.c from DISTFILES 1995-03-20 Vern Paxson * FlexLexer.h: debug(), setdebug(), lineno() 1995-03-20 Vern Paxson * flex.skl: %option yylineno support 1995-03-20 Vern Paxson * gen.c: read up to newline for interactive reads, rather than one char 1995-03-20 Vern Paxson * main.c, scan.l: added %option yylineno 1995-03-18 Vern Paxson * gen.c: added do_yylineno 1995-03-06 Vern Paxson * NEWS, flex.1: 2.5.0.7 1995-03-05 Vern Paxson * Makefile.in: realclean -> maintainer-clean 1995-03-05 Vern Paxson * flex.skl: Added yy_flush_buffer 1995-03-05 Vern Paxson * FlexLexer.h: added yy_flush_buffer 1995-03-05 Vern Paxson * main.c: prefix support for yy_flush_buffer 1995-03-05 Vern Paxson * parse.y: added %option yyclass 1995-03-05 Vern Paxson * flexdef.h, main.c, scan.l: added yyclass 1995-03-05 Vern Paxson * FlexLexer.h: Added switch_streams 1995-03-05 Vern Paxson * flex.skl: added switch_streams 1995-03-05 Vern Paxson * main.c: don't rename yy_flex_debug for C++ 1995-03-05 Vern Paxson * gen.c: yy_flex_debug extern only if not C++ 1995-03-05 Vern Paxson * FlexLexer.h: added yy_flex_debug member variable 1995-03-05 Vern Paxson * flex.skl: yyFlexLexer initialization of yy_flex_debug 1995-03-04 Vern Paxson * flexdef.h, main.c: VMS POSIX stuff 1995-03-04 Vern Paxson * flex.skl: moved position of yy_init = 0 1995-03-04 Vern Paxson * flex.skl: added YY_EXIT_FAILURE 1995-03-04 Vern Paxson * main.c: removed VMS-specific exit 1995-03-04 Vern Paxson * dfa.c, flexdef.h, gen.c, main.c, misc.c, nfa.c, scan.l, sym.c, yylex.c: internationalization aids 1995-03-04 Vern Paxson * main.c: do yy_flex_debug prefix for both C++ and C 1995-02-06 Vern Paxson * main.c: fixed program_name tweak again 1995-01-11 Vern Paxson * main.c: oops, fixed program_name tweak 1995-01-11 Vern Paxson * main.c: program_name is "flex" if argv[0] nil 1995-01-10 Vern Paxson * NEWS: 2.5.0.5 1995-01-10 Vern Paxson * flex.1: Documented YY_NUM_RULES 1995-01-10 Vern Paxson * Makefile.in: added formatted man page to MISC 1995-01-10 Vern Paxson * main.c: help messages to stdout 1995-01-09 Vern Paxson * gen.c: Added YY_NUM_RULES 1995-01-09 Vern Paxson * flex.skl: better fix for #pragma problem 1995-01-09 Vern Paxson * flexdef.h: better fix for #pragma portability problem 1995-01-09 Vern Paxson * misc.c: "# line" -> #line 1995-01-09 Vern Paxson * flex.skl, flexdef.h: comment out Turbo C #pragma's 1995-01-09 Vern Paxson * scan.l: reset linenum on new file 1995-01-09 Vern Paxson * flex.skl: isatty() extern 1995-01-09 Vern Paxson * NEWS, flex.1: 2.5.0.4 1995-01-09 Vern Paxson * main.c: long options, VMS tweaks 1995-01-09 Vern Paxson * Makefile.in: Added parse.c, parse.h for dist MISC directory 1995-01-09 Vern Paxson * flexdef.h: some "const" cleansing 1995-01-09 Vern Paxson * mkskel.sh: skel[] is now const 1995-01-09 Vern Paxson * misc.c: some const cleansing 1995-01-09 Vern Paxson * scan.l: #line in section 1 1995-01-05 Vern Paxson * sym.c: preen 1994-12-29 Vern Paxson * configure.in: config.h from conf.in 1994-12-29 Vern Paxson * flexdef.h: for VMS, delete -> remove 1994-12-29 Vern Paxson * Makefile.in: config.h.in -> conf.in rm config.h on distclean 1994-12-29 Vern Paxson * main.c: stdinit tweaks 1994-12-29 Vern Paxson * scan.l: added nostdinit 1994-12-28 Vern Paxson * NEWS: added MS-DOS note for 2.5.0.2 1994-12-28 Vern Paxson * flex.1: typos, tweaks 1994-12-28 Vern Paxson * Makefile.in: removed flexdoc 1994-12-28 Vern Paxson * flex.1: flexdoc/flex merge 1994-12-28 Vern Paxson * flex.1: typos 1994-12-28 Vern Paxson * NEWS: typo 1994-12-28 Vern Paxson * flex.1: 2.5 update 1994-12-28 Vern Paxson * NEWS: 2.5.0.2 1994-12-28 Vern Paxson * scan.l: fixed sense of %option main implying %option noyywrap 1994-12-28 Vern Paxson * flex.skl: YY_FLEX_{MAJOR,MINOR}_VERSION fixed bug in unput trashing yytext even with %array 1994-12-17 Vern Paxson * flex.1: prior to 2.5 update 1994-12-17 Vern Paxson * main.c: C++/-P fixes 1994-12-17 Vern Paxson * FlexLexer.h: -P fixes constructor, destructor moved to flex.skl 1994-12-17 Vern Paxson * flex.skl: YY_SKIP_YYWRAP yyFlexLexer constructor, destructor 1994-12-15 Vern Paxson * gen.c: formatting 1994-12-15 Vern Paxson * gen.c: fixed bug in adjusting yytext before backing up 1994-12-10 Vern Paxson * scan.l: switched scanner itself over to [:xxx:] 1994-12-10 Vern Paxson * flex.skl: added YY_FLEX_VERSION 1994-12-10 Vern Paxson * scan.l: Fixed CCL-match pattern for [:whatever:] 1994-12-10 Vern Paxson * parse.y: treat [:upper:] as [:lower:] if -i 1994-12-06 Vern Paxson * NEWS: 2.5.0.1 1994-12-06 Vern Paxson * flex.skl, gen.c: input() maintains BOL 1994-12-06 Vern Paxson * flex.skl: check size of buffer in yy_scan_buffer 1994-12-06 Vern Paxson * flex.skl: added %option main, fixed missing %* 1994-12-06 Vern Paxson * parse.y: added ccl exprs 1994-12-06 Vern Paxson * scan.l: added ccl exprs, %option main 1994-12-06 Vern Paxson * yylex.c: added %options, ccl exprs 1994-12-05 Vern Paxson * misc.c: undid previous change 1994-12-04 Vern Paxson * Makefile.in: Makefile.in from srcdir 1994-12-04 Vern Paxson * Makefile.in: added skel.c to DISTFILES 1994-12-04 Vern Paxson * flex.skl: added YYSTATE alias 1994-12-04 Vern Paxson * scan.l: NL is now \r?\n 1994-12-04 Vern Paxson * gen.c: use cerr for C++ diagnostics 1994-12-03 Vern Paxson * flex.skl: undid YY_UNIX_NEWLINE 1994-12-03 Vern Paxson * flexdef.h: STDC_HEADERS to check for stdlib 1994-12-03 Vern Paxson * configure.in: AC_STDC_HEADERS -> AC_HEADER_STDC 1994-12-03 Vern Paxson * misc.c: \n -> '\012' 1994-12-03 Vern Paxson * flex.skl: Added YY_UNIX_NEWLINE 1994-12-03 Vern Paxson * flex.skl: BOL changes 1994-12-03 Vern Paxson * dfa.c: fixed bug with caseins but not ecs 1994-12-03 Vern Paxson * gen.c: BOL changes some casts for Turbo C 1994-12-03 Vern Paxson * main.c: messages identify filenames 1994-12-03 Vern Paxson * misc.c: Increase slowly if realloc double overflows 1994-12-03 Vern Paxson * nfa.c: YY_RULE_SETUP 1994-12-03 Vern Paxson * scan.l: Added yy_XX_state %option's Added yy_set_bol 1994-11-29 Vern Paxson * Makefile.in: don't remove ~ files 1994-11-24 Vern Paxson * Makefile.in: get CFLAGS from autoconf 1994-11-24 Vern Paxson * dfa.c, flex.skl, flexdef.h, gen.c, misc.c, parse.y, scan.l, sym.c: Brian Madsen's tweaks for Borland 1994-11-24 Vern Paxson * version.h: 2.5.0 1994-11-24 Vern Paxson * flexdef.h: Added do_stdinit 1994-11-24 Vern Paxson * FlexLexer.h: Added yy_delete_buffer() in destructor 1994-11-24 Vern Paxson * flex.skl: Added yy_set_interactive, YY_ALWAYS_INTERACTIVE, YY_NEVER_INTERACTIVE, YY_NO_INPUT, YY_NO_UNPUT, YY_NO_*_STATE 1994-11-24 Vern Paxson * main.c: Added do_stdinit, Think C hacks 1994-11-24 Vern Paxson * scan.l: Added %options for input, always-interactive, never-interactive, yy_scan_{buffer,bytes,string} 1994-11-05 Vern Paxson * flex.skl: size_t #ifdef's for not compiling some statics 1994-11-05 Vern Paxson * Makefile.in: $(FLEX) config.h 1994-11-05 Vern Paxson * configure.in: config.h, size_t, malloc.h, sys/types.h 1994-11-05 Vern Paxson * flexdef.h: config.h, size_t 1994-11-05 Vern Paxson * main.c: yywrap option, no stdin/out init for VMS, mundane tweaks 1994-11-05 Vern Paxson * parse.y: alloca, lint tweaks 1994-11-05 Vern Paxson * scan.l: %option yywrap size_t tweaks 1994-11-05 Vern Paxson * tblcmp.c: size_t tweaks 1994-11-05 Vern Paxson * misc.c: size_t, STDC tweaks 1994-11-05 Vern Paxson * flex.skl: Added yy_scan_{buffer,bytes,string}, plus tweaks 1994-10-12 Vern Paxson * flex.skl: made stack code conditional on "stack" option 1994-10-12 Vern Paxson * scan.l: added use of "stack" %option 1994-08-03 Vern Paxson * gen.c: Fixed fencepost in call to yy_flex_strncpy 1994-07-25 Vern Paxson * flex.skl: yy_eof_status -> yy_buffer_status 1994-07-25 Vern Paxson * flex.skl: yy_flex_strcpy -> yy_flex_strncpy minor prototype tweak 1994-07-25 Vern Paxson * gen.c: Bug fix for matching NUL's at end of token when interactive. yy_flex_strcpy -> yy_flex_strncpy 1994-07-25 Vern Paxson * nfa.c: No YY_USER_ACTION if continued action 1994-03-16 Vern Paxson * flex.skl: Added fix for 8-bit chars returned by input() 1994-03-16 Vern Paxson * flex.skl: Move definition of yy_flex_strcpy to come after #define of yytext_ptr 1994-01-08 Vern Paxson * mkskel.sh: flex.skel -> flex.skl 1994-01-08 Vern Paxson * mkskel.sh: Initial revision 1993-12-29 Vern Paxson * Makefile.in: Fixed scan.c target so "make" detects flex failure 1993-12-27 Vern Paxson * scan.l: Added %option's 1993-12-27 Vern Paxson * Makefile.in: Nuked FLEX_FLAGS that are now done using %option 1993-12-27 Vern Paxson * parse.y, scan.l: %option 1993-12-27 Vern Paxson * main.c: Reworked for %option 1993-12-27 Vern Paxson * flexdef.h: Added "unspecified", globals for %option 1993-12-27 Vern Paxson * sym.c: start condition #define's go to action file 1993-12-27 Vern Paxson * misc.c: Added action_define() 1993-12-27 Vern Paxson * scan.l: Minor consolidation using scon scopes etc 1993-12-27 Vern Paxson * scan.l: Modified to use scon scopes 1993-12-27 Vern Paxson * scan.l: indented rules 1993-12-26 Vern Paxson * parse.y: Added scon_stk stuff, format_warn 1993-12-26 Vern Paxson * flexdef.h: Added format_warn 1993-12-26 Vern Paxson * parse.y: Working checkpoint prior to adding { stuff 1993-12-26 Vern Paxson * flexdef.h, main.c: Added in_rule, deleted actvsc 1993-12-26 Vern Paxson * misc.c: Added doubling of '\'s in filenames 1993-12-26 Vern Paxson * scan.l: Added in_rule, doing_rule_action 1993-12-26 Vern Paxson * sym.c: Removed actvsc 1993-12-23 Vern Paxson * flex.1: -ooutput #line directives credits 1993-12-23 Vern Paxson * flex.skl: Fixsed sense of test for %array 1993-12-23 Vern Paxson * NEWS: 2.5.0 snapshot for Craig 1993-12-23 Vern Paxson * parse.y: Added beginnings of { ... } 1993-12-23 Vern Paxson * scan.l: Simplified scanning {}'s 1993-12-20 Vern Paxson * flexdef.h: Added 1993-12-17 Vern Paxson * flex.skl: prototypes for alloc/string routines 1993-12-17 Vern Paxson * flex.skl: alloc, string routines internal 1993-12-17 Vern Paxson * Makefile.in: Nuked lib{string,alloc}.c, added dependency of yylex.o on parse.h 1993-12-17 Vern Paxson * configure.in: Check for string.h 1993-12-17 Vern Paxson * flexdef.h: Use autoconf for string/strings.h yy_flex_XXX -> flex_XXX 1993-12-17 Vern Paxson * scan.l: Added flex_XXX -> yy_flex_XXX wrappers 1993-12-17 Vern Paxson * dfa.c, misc.c, sym.c: yy_flex_XXX -> flex_XXX 1993-12-17 Vern Paxson * yylex.c: No more WHITESPACE token 1993-12-16 Vern Paxson * FlexLexer.h, flex.skl: Added yy_top_state() 1993-12-16 Vern Paxson * scan.l: simplified comment-scanning using push/pop states 1993-12-16 Vern Paxson * parse.y: removed crufty WHITESPACE token, some uses of '\n' token 1993-12-15 Vern Paxson * FlexLexer.h: start stack, extern "C++" moved 1993-12-15 Vern Paxson * dfa.c: Bug fix for -CF 1993-12-15 Vern Paxson * flexdef.h, misc.c: alloc routines take unsigned 1993-12-15 Vern Paxson * flex.skl: start-state stacks, alloc routines take unsigned 1993-12-15 Vern Paxson * flexdef.h, misc.c: bracket -CF table elements 1993-12-13 Vern Paxson * misc.c: Do #bytes computation in {re,}allocate_array() only once 1993-12-11 Vern Paxson * flex.skl, flexdef.h, gen.c, main.c, misc.c, scan.l, sym.c: yy_str*() -> str*() 1993-12-11 Vern Paxson * Makefile.in, dfa.c, flexdef.h, gen.c, main.c, misc.c, nfa.c, parse.y, scan.l, sym.c: -o option 1993-12-11 Vern Paxson * gen.c: lint tweak 1993-12-11 Vern Paxson * NEWS: Expanded on extern "C++" news item 1993-12-11 Vern Paxson * NEWS: 2.4.5 1993-12-11 Vern Paxson * flex.skl: Added yy_fill_buffer 1993-12-11 Vern Paxson * gen.c: is_interactive -> yy_is_interactive 1993-12-11 Vern Paxson * flex.1: Updated credits 1993-12-11 Vern Paxson * Makefile.in: Fixed typo in "uninstall" target 1993-12-11 Vern Paxson * gen.c: Updated comment regarding 0-based vs. 1-based arrays for -CF. 1993-12-11 Vern Paxson * dfa.c: Initialize dfaacc[0] for -CF representation Fixed minor memory leak 1993-12-11 Vern Paxson * main.c: #include "FlexLexer.h" -> 1993-12-11 Vern Paxson * FlexLexer.h: Added extern "C++" wrapper 1993-12-09 Vern Paxson * main.c: Detect REJECT etc. before generating YY_USES_REJECT! 1993-12-09 Vern Paxson * gen.c: Fixed bug in interactive reads where char is unsigned 1993-12-09 Vern Paxson * parse.y: Fixed bug in treating '$' as variable trailing context 1993-12-09 Vern Paxson * version.h: 2.4.5 1993-12-07 Vern Paxson * README: pretester update 1993-12-07 Vern Paxson * NEWS: 2.4.4 1993-12-07 Vern Paxson * flex.1: LexError(), C++ experiment warning, credits 1993-12-07 Vern Paxson * scan.l: Fixed 8-bit bug 1993-12-07 Vern Paxson * flex.skl, gen.c: Fixed nasty 8-bit bugs 1993-12-07 Vern Paxson * dfa.c, ecs.c, flexdef.h, gen.c, main.c, nfa.c, tblcmp.c: {min,max,abs} -> {MIN,MAX,ABS} 1993-12-07 Vern Paxson * FlexLexer.h, flex.skl: Support for yyFlexLexer::LexerError 1993-12-06 Vern Paxson * version.h: 2.4.4 1993-12-05 Vern Paxson * flex.1: credits update 1993-12-05 Vern Paxson * Makefile.in: very minor "install" tweaks 1993-12-05 Vern Paxson * flex.skl, nfa.c: YY_USER_ACTION generated now for each case in action switch 1993-12-04 Vern Paxson * flex.skl: Fixed bug in pointing yyin at a new file and resuming scanning 1993-12-03 Vern Paxson * NEWS: Added note regarding g++ 2.5.X 1993-12-03 Vern Paxson * flex.1: updated credits 1993-12-03 Vern Paxson * NEWS: ranlib addition for 2.4.3 1993-12-03 Vern Paxson * Makefile.in: Minor tweak to last change 1993-12-03 Vern Paxson * Makefile.in: run ranlib on libfl.a 1993-12-03 Vern Paxson * NEWS: Hopefully last update prior to 2.4.3 1993-12-03 Vern Paxson * flexdef.h, gen.c, misc.c, sym.c: lint tweaks 1993-12-03 Vern Paxson * Makefile.in: Added exec_prefix 1993-12-03 Vern Paxson * flex.1: credit update 1993-12-03 Vern Paxson * flex.skl: lint tweak 1993-12-03 Vern Paxson * NEWS: FlexLexer.h fixed for separate inclusion 1993-12-03 Vern Paxson * FlexLexer.h, flex.skl, main.c: mods so FlexLexer.h can be included separately 1993-12-03 Vern Paxson * flex.1: -F incompatible with -+ 1993-12-02 Vern Paxson * NEWS: Elaborated comments for 2.4.3 1993-12-02 Vern Paxson * NEWS: 2.4.3 1993-12-02 Vern Paxson * flex.1: Updated message regarding missing libfl.a routines Added thanks to Noah Friedman 1993-12-02 Vern Paxson * Makefile.in: Added libstring.c Modified "lint" target to use -Dconst= Added a.out, lex.yy.cc to sundry clean targets 1993-12-02 Vern Paxson * flex.skl, flexdef.h, gen.c, main.c, misc.c, scan.l, sym.c: Use yy_strXXX() routines instead of 1993-12-01 Vern Paxson * version.h: 2.4.3 1993-12-01 Vern Paxson * flexdef.h, misc.c: yy_flex_xmalloc() moved to misc.c 1993-12-01 Vern Paxson * flex.skl: Fixed bug in yy_fatal_error() 1993-12-01 Vern Paxson * Makefile.in: ... and remove plain tar file after compression 1993-12-01 Vern Paxson * NEWS: 2.4.2 1993-12-01 Vern Paxson * Makefile.in: Produce both compress'd and gzip'd distribution tar files 1993-12-01 Vern Paxson * version.h: Release 2.4.2 1993-11-30 Vern Paxson * NEWS: -a -> -Ca 1993-11-30 Vern Paxson * README: described configuration files in manifest 1993-11-30 Vern Paxson * Makefile.in: Added intermediate step of copying MISC/alloca.c -> alloca.c Included CPPFLAGS when compiling alloca.c 1993-11-30 Vern Paxson * README: Credit to 2.4 pre-testers. 1993-11-30 Vern Paxson * gen.c: Fixed nasty bug in short/long decl decision 1993-11-30 Vern Paxson * flexdef.h: Lowered MAX_SHORT out of increased general paranoia. Added yy_flex_xmalloc() proto 1993-11-30 Vern Paxson * main.c: Fixed very minor typo in -v output 1993-11-30 Vern Paxson * misc.c: Removed vestigal cast to (char) in isupper() call 1993-11-30 Vern Paxson * misc.c: Added casts to unsigned Char for isascii() calls 1993-11-30 Vern Paxson * parse.y: Added #ifdef chud for alloca() 1993-11-30 Vern Paxson * Makefile.in: Added alloca 1993-11-30 Vern Paxson * configure.in: Add AC_ALLOCA if using bison 1993-11-29 Vern Paxson * Makefile.in: Added intermediate file going scan.l -> scan.c 1993-11-29 Vern Paxson * Makefile.in: Removed parse.{c,h} from distribution files, since they may not be all that portable. 1993-11-29 Vern Paxson * flex.skl: Fixed %array YYLMAX headaches, added error message if buffer needs growing but REJECT used 1993-11-29 Vern Paxson * gen.c, main.c: Fixed YYLMAX headaches 1993-11-29 Vern Paxson * flex.1: Documented that buffer can't grow if REJECT used 1993-11-29 Vern Paxson * Makefile.in: Added parse.{c,h} to dist files 1993-11-29 Vern Paxson * flex.skl, flexdef.h, gen.c, main.c, misc.c, scan.l: Fixed to buffer section 1 definitions 1993-11-29 Vern Paxson * sym.c: Fixed ANSI-C glitch with '%' operator 1993-11-29 Vern Paxson * scan.l: Fixed mis-definition of ndlookup() 1993-11-29 Vern Paxson * NEWS: 2.4 -> 2.4.1 1993-11-29 Vern Paxson * Makefile.in: Added install.sh, mkinstalldirs to distribution files 1993-11-29 Vern Paxson * flex.1: Added Nathan Zelle, "promoted" Francois 1993-11-29 Vern Paxson * Makefile.in: only "realclean" removes flex dist depends on flex 1993-11-29 Vern Paxson * flexdef.h, misc.c: myctoi takes char[] instead of Char[] 1993-11-28 Vern Paxson * flexdef.h: -a -> -Ca all_lower, all_upper -> work on char* 1993-11-28 Vern Paxson * Makefile.in: Added -Ca to bigcheck 1993-11-28 Vern Paxson * main.c: -a -> -Ca; fixed help output 1993-11-28 Vern Paxson * dfa.c, flex.1: -a -> -Ca 1993-11-28 Vern Paxson * misc.c: all_lower, all_upper work on char* 1993-11-28 Vern Paxson * scan.l: Fixed some casts now that yytext is always char* and never unsigned char* 1993-11-28 Vern Paxson * Makefile.in: Francois' tweaks 1993-11-28 Vern Paxson * configure.in: AC_LN_S, AC_STDC_HEADERS (but not AC_ALLOCA) 1993-11-27 Vern Paxson * NEWS: fixed typo 1993-11-27 Vern Paxson * Makefile.in: Don't remove dist directory 1993-11-27 Vern Paxson * Makefile.in: Include liballoc.c in lint targets 1993-11-27 Vern Paxson * misc.c: lint tweak 1993-11-27 Vern Paxson * Makefile.in: Added -l compression to bigcheck 1993-11-27 Vern Paxson * Makefile.in: permission tweaking for "dist" 1993-11-27 Vern Paxson * Makefile.in: more "dist" tweaks 1993-11-27 Vern Paxson * Makefile.in: Changed "make dist" to use version.h, include scan.c in initial dir copy 1993-11-27 Vern Paxson * version.h: 2.4.1 1993-11-27 Vern Paxson * README: Revised as per Francois Pinard 1993-11-27 Vern Paxson * COPYING: flex.skel -> flex.skl 1993-11-27 Vern Paxson * NEWS: Updated date of 2.4 release 1993-11-27 Vern Paxson * Makefile.in: Removed manual & nroff output from distribution 1993-11-27 Vern Paxson * NEWS: 2.4.1 release 1993-11-27 Vern Paxson * configure.in: Initial revision 1993-11-27 Vern Paxson * Makefile.in: Merge w/ 2.4.1 changes added "dist2" target 1993-11-26 Vern Paxson * Makefile.in: Initial revision 1993-11-26 Vern Paxson * flexdef.h: Removed #ifndef FILE protection from include of stdio 1993-11-26 Vern Paxson * flex.1: Added Francois Pinard to distribution headache helpers 1993-11-26 Vern Paxson * flex.skl: Modified C++ scanners to get input a character at a time for interactive scanners. 1993-11-26 Vern Paxson * main.c: Added YY_INTERACTIVE. 1993-11-26 Vern Paxson * scan.l: Put definitions inside ()'s so we can test -l option for "make bigcheck" 1993-11-26 Vern Paxson * flex.1: Documented YY_INTERACTIVE. 1993-11-26 Vern Paxson * flex.1, flex.skl, flexdef.h, gen.c, main.c, parse.y, scan.l: -l lex compatibility flag 1993-11-20 Vern Paxson * flex.skl: Support for read()/fread() section 1 definitions precede default macro definitions 1993-11-20 Vern Paxson * flexdef.h: Added use_read global 1993-11-20 Vern Paxson * gen.c: Cleaner definition for yymore() Fixed string broken across multiple lines 1993-11-20 Vern Paxson * main.c: Added -Cr 1993-11-20 Vern Paxson * misc.c: K&R declaration for check_char() 1993-11-20 Vern Paxson * flex.1: Documented -Cr 1993-11-20 Vern Paxson * flex.1: No need to #undef before redefining prior to -Cr documentation 1993-11-10 Vern Paxson * README: Heavily massaged for 2.4 1993-11-10 Vern Paxson * flex.1: Added Landon Noll to thanks. 1993-11-10 Vern Paxson * NEWS: 2.4 release 1993-11-10 Vern Paxson * flex.1: 2.4 documentation 1993-11-10 Vern Paxson * main.c: Added global to remember -P prefix so it can be written in -v summary. Alphabetized prefix generation, added yywrap 1993-11-09 Vern Paxson * version.h: updated date for 2.4.0 :-( 1993-10-10 Vern Paxson * FlexLexer.h: Whitespace tweaking 1993-10-10 Vern Paxson * main.c: Use DEFAULT_CSIZE only if not using equivalence classes. 1993-10-10 Vern Paxson * flex.1: Checkpoint prior to final 2.4 update 1993-10-04 Vern Paxson * NEWS: Raw 2.4 changes 1993-10-04 Vern Paxson * flex.skl: osfcn.h -> unistd.h 1993-10-04 Vern Paxson * flex.skl: Added "static" to definition of yy_fatal_error as well as fwd decl. 1993-10-04 Vern Paxson * flex.skl: Added yy_fatal_error function. 1993-10-03 Vern Paxson * flex.skl, gen.c: Got rid of (char *) casts of yytext, no longer needed. 1993-10-03 Vern Paxson * FlexLexer.h: YY_CHAR -> char added YYText(), YYLeng() 1993-10-03 Vern Paxson * flex.skl, gen.c: Minimized use of YY_CHAR 1993-10-03 Vern Paxson * main.c: Added "flex++" feature Minimized use of YY_CHAR 1993-10-02 Vern Paxson * main.c: Clarified help message for -S 1993-10-02 Vern Paxson * libyywrap.c, version.h: Initial revision 1993-10-02 Vern Paxson * main.c: If -+ used, output to lex.yy.cc 1993-10-02 Vern Paxson * FlexLexer.h, flex.skl: Switched from FILE*'s to stream's 1993-10-02 Vern Paxson * flexdef.h: Added expand_nxt_chk() extern. 1993-10-02 Vern Paxson * flex.skl: Added dynamic buffer growing. Added yyless() for section 3. 1993-10-02 Vern Paxson * dfa.c, flexdef.h, gen.c, main.c: Added -a option for long-align. 1993-10-02 Vern Paxson * scan.l: formfeed no longer considered whitespace 1993-09-21 Vern Paxson * flexdef.h: Nuked FILENAMESIZE 1993-09-21 Vern Paxson * main.c: yyflexlexer.h -> FlexLexer.h minor portability tweak 1993-09-21 Vern Paxson * gen.c: Added start condition to EOF trace output 1993-09-21 Vern Paxson * flex.skl: Added YY_START changed yyFlexLexer to define yylex() 1993-09-21 Vern Paxson * misc.c: Minor portability tweaks 1993-09-21 Vern Paxson * FlexLexer.h: Split into two classes, one fully abstract. yylex() no longer abstract in yyFlexLexer 1993-09-21 Vern Paxson * scan.l: PC lint tweak 1993-09-21 Vern Paxson * parse.y: YYSTYPE #define'd to int 1993-09-21 Vern Paxson * nfa.c: minor lint tweak 1993-09-16 Vern Paxson * FlexLexer.h: Initial revision 1993-09-16 Vern Paxson * flexdef.h: Delete prototypes for Unix system calls. 1993-09-16 Vern Paxson * ccl.c, dfa.c, ecs.c, gen.c, main.c, misc.c, nfa.c, parse.y, scan.l, sym.c, tblcmp.c, yylex.c: nuked static RCS string 1993-09-16 Vern Paxson * main.c: %array not allowed with C++ scanners 1993-09-16 Vern Paxson * scan.l: Fixed bugs regarding %{%} code in section 2 prolog %array not allowed with C++ scanners 1993-08-25 Vern Paxson * flexdef.h: Added C_plus_plus flag. 1993-08-25 Vern Paxson * flex.skl: First version of C/C++ skeleton 1993-08-25 Vern Paxson * gen.c: yy_state_type declared earlier. Made a bunch of statics only output if not -+ 1993-08-25 Vern Paxson * main.c: Added -+ option, updated usage() output, rearranged some generated code to come at the right point in the output for yyflexlexer.h. 1993-08-25 Vern Paxson * misc.c: Added %+/%-/%* to skelout() 1993-08-25 Vern Paxson * scan.l: EOF in section 2 prolog leads to section 0, not section 3 1993-08-25 Vern Paxson * yylex.c: Dump promotion of EOF in section 2 to turn on section 3; instead just treat it like a final EOF 1993-08-25 Vern Paxson * dfa.c: yy_nxt table should be "const" 1993-08-24 Vern Paxson * flexdef.h: Removed a lot of #ifdef chud "backtracking" -> "backing up" 1993-08-24 Vern Paxson * main.c: "backtracking" -> "backing up" got rid of time reports 1993-08-24 Vern Paxson * gen.c: "backtracking" -> "backing up" some portability tweaks fixed to only call flexscan() when done if known to be in section 3 1993-08-24 Vern Paxson * misc.c: isascii() moved to flexdef.h nuked flex_gettime() 1993-08-24 Vern Paxson * scan.l: Fixed bug with empty section 2 1993-08-24 Vern Paxson * yylex.c: Chucked definition of isascii() 1993-08-24 Vern Paxson * flex.skl: preserve yytext on input() bug fix when combining yyless() with yymore() checkpoint prior to C++ option 1993-08-24 Vern Paxson * dfa.c: "backtracking" -> "backing up" 1993-07-09 Vern Paxson * flex.skl: Fixed to not generate extra EOF's after reading one. 1993-07-05 Vern Paxson * main.c: Spit out definition of YY_CHAR early 1993-07-05 Vern Paxson * flex.skl: Some rearranging to make sure things get declared in the right order 1993-07-05 Vern Paxson * tblcmp.c: Some comment fixes as per Wilhelms 1993-07-05 Vern Paxson * scan.l: Nuked #undef of yywrap, now that it's a function 1993-07-05 Vern Paxson * parse.y: Fixed bug with Z-a character classes as per Wilhelms 1993-07-05 Vern Paxson * nfa.c: added check_char call in mkstate() to prevent bad xtion chars 1993-07-05 Vern Paxson * gen.c: Fixed some reallocation bugs, etc. as per Wilhelms 1993-07-05 Vern Paxson * flexdef.h: Added check_char(), readable_form() 1993-07-05 Vern Paxson * flex.skl: Added #ifndef's around #define's to let user override Moved a bunch of definitions prior to section 1 1993-07-05 Vern Paxson * dfa.c: Wilhems bug fixes. 1993-07-05 Vern Paxson * ccl.c, misc.c: Added check_char() 1993-06-12 Vern Paxson * flexdef.h: Changed to use yy_flex_alloc() and friends 1993-06-12 Vern Paxson * main.c: Added -P flag 1993-06-12 Vern Paxson * scan.l: Fixed bug in lex % directives 1993-06-12 Vern Paxson * misc.c: Modified to use yy_flex_alloc() and friends 1993-06-12 Vern Paxson * sym.c: Modified to use yy_flex_alloc() 1993-06-12 Vern Paxson * flex.skl: Modified to use yy_flex_alloc() and friends Moved some globals earlier in the file to permit access in section 1 1993-06-12 Vern Paxson * dfa.c: Got rid of code needed for %t 1993-04-14 Vern Paxson * ccl.c, dfa.c, ecs.c, flex.skl, flexdef.h, gen.c, libmain.c, main.c, misc.c, nfa.c, parse.y, scan.l, sym.c, tblcmp.c, yylex.c: Reformatting. 1993-04-05 Vern Paxson * flex.1: Fixed bug in description of backtracking 1993-04-05 Vern Paxson * NEWS: 2.3.8 1993-04-05 Vern Paxson * flex.skl, main.c: %array support 1993-04-05 Vern Paxson * misc.c: Added non-STDC clause for '\a' 1993-04-05 Vern Paxson * scan.l: Fixed subtle problems regarding '*'s in comments %pointer/%array match entire lines 1993-04-05 Vern Paxson * gen.c: Added %array support 1993-02-06 Vern Paxson * README: Finally updated email addr 1993-02-06 Vern Paxson * flex.1: Mostly .LP -> .PP 1993-02-06 Vern Paxson * flexdef.h: [no log message] 1993-02-06 Vern Paxson * main.c, scan.l: A lot of tweaks ... 1993-02-06 Vern Paxson * ccl.c: reallocate_character_array -> reallocate_Character_array 1993-02-06 Vern Paxson * gen.c: Bug/lint fixes Modified to work with "action" array instead of temp file 1993-02-06 Vern Paxson * sym.c: Fixed bug in 8-bit hashing 1993-02-06 Vern Paxson * parse.y: numerous bug fixes extra formatting of error/warning messages added support of <*>, partial support for nested start conditions 1993-02-06 Vern Paxson * ecs.c: Remove %t cruft 1993-02-06 Vern Paxson * flex.skl: Beginning of %pointer/%array support 1993-02-06 Vern Paxson * dfa.c: Added keeping track of which rules are useful fixed a fencepost error in checking for scanners that require -8 1993-02-06 Vern Paxson * nfa.c: Added checking for whether rules are useful modified to work with internal "action" array 1993-02-06 Vern Paxson * misc.c: Added internal "action" array, internal skeleton, zero_out() in lieu of bzero 1993-02-06 Vern Paxson * tblcmp.c: Fixed a bunch of fencepost errors in increasing tables. 1993-02-06 Vern Paxson * yylex.c: -Wall fix 1991-03-28 Vern Paxson * gen.c: Fixed out-of-bounds access bug; patch #7 for release 2.3 1991-03-28 Vern Paxson * NEWS: Patch #7 for 2.3 1990-10-23 Vern Paxson * gen.c: fixed missing "rule_type" entry for end-of-buffer action 1990-08-29 Vern Paxson * gen.c: Fixed yymore() but in not resetting yy_more_len 1990-08-29 Vern Paxson * NEWS: Patch #6 for 2.3 1990-08-16 Vern Paxson * NEWS: Patch #5 1990-08-14 Vern Paxson * misc.c: fixed comment in myesc() 1990-08-14 Vern Paxson * NEWS: fixed date in patch #4 1990-08-14 Vern Paxson * NEWS: patch #4 1990-08-14 Vern Paxson * misc.c: fixed hexadecimal escapes; added is_hex_digit() 1990-08-03 Vern Paxson * NEWS: Patch #3 1990-08-03 Vern Paxson * flex.skl, flexdef.h: changed to include for __GNUC__ 1990-08-02 Vern Paxson * NEWS: 2.3 patch #2 1990-08-02 Vern Paxson * flex.skl: Another try at getting the malloc() definitions correct; this time for g++, too 1990-08-02 Vern Paxson * flex.skl, flexdef.h: fixed to declare malloc() and free() by hand if __GNUC__ 1990-07-28 Vern Paxson * flexdef.h: Changed to get malloc definition in identical fashion to that used by flex.skel 1990-06-28 Vern Paxson * NEWS: [no log message] 1990-06-28 Vern Paxson * flex.1: Fixed bug in mini-scanner examle Fixed bug in YY_INPUT redefinition yylineno defense reentrancy documentation Something else which I forget. 1990-06-27 Vern Paxson * COPYING, ccl.c, dfa.c, ecs.c, flexdef.h, gen.c, main.c, misc.c, nfa.c, parse.y, scan.l, sym.c, tblcmp.c, yylex.c: 4.4 BSD copyright 1990-05-26 Vern Paxson * README: Changed prolog to reflect 2.3 release. 1990-05-26 Vern Paxson * NEWS: pointed reader at Makefile instead of README for porting considerations added Makefile comments: support for SCO Unix; parameterization 1990-05-26 Vern Paxson * flex.skl: Added DONT_HAVE_STDLIB_H and declarations of malloc() 1990-05-26 Vern Paxson * NEWS: 2.3 changes 1990-05-26 Vern Paxson * flex.1: documentation on new features Comment regarding Ove's work ^foo|bar difference between flex / lex yyin initialization difference documented that yy_switch_to_buffer can be used in yywrap() documented that # comments are deprecated 1990-05-26 Vern Paxson * main.c: declared void functions as such added prototypes for forward references changed to check for error status when closing files 1990-05-26 Vern Paxson * yylex.c: Added macro definition for isascii() if not already present 1990-05-26 Vern Paxson * sym.c: declared void functions as such added prototypes for forward references changed to use format_pinpoint_message where appropriate 1990-05-26 Vern Paxson * scan.l: declared void functions as such changed to strip # comments, as documented moved #undef of yywrap() to before include of flexdef, so prototype doesn't get screwed up 1990-05-26 Vern Paxson * parse.y: introduced format_pinpoint_message() declared void functions as such changed lone <> to apply to all outstanding start conditions 1990-05-26 Vern Paxson * nfa.c, tblcmp.c: declared void functions as such added prototypes for forward references 1990-05-26 Vern Paxson * misc.c: declared void functions as such prototypes for forward references shuffled around some routines to make the order perhaps a little more logical changed memory references to use void* instead of char* 1990-05-26 Vern Paxson * libmain.c: Added declaration of arguments made yylex() a function 1990-05-26 Vern Paxson * gen.c: prototypes for forward references declared void functions as such yy_flex_debug testing of error on file closes casts to void for sprintf() and strcpy() 1990-05-26 Vern Paxson * flexdef.h: Added prototypes changed memory allocation routines to deal with void*'s instead of char*'s some rearranging for VMS 1990-05-26 Vern Paxson * flex.skl: Added YY_USER_INIT Added yy_new_buffer() alias for yy_create_buffer() fixed (hopefully) malloc declaration headaches 1990-05-26 Vern Paxson * ecs.c: declared void functions as such declared void functions as such 1990-05-26 Vern Paxson * dfa.c: prototypes for forward references declared void functions as such 1990-05-26 Vern Paxson * ccl.c: Declared void functions as such 1990-04-12 Vern Paxson * flex.skl: added fix for allowing yy_switch_to_buffer() in yywrap() 1990-04-03 Vern Paxson * NEWS: patch #3 - -I fix 1990-03-30 Vern Paxson * gen.c: Changed generation of archaic "continue" to "goto yy_find_action" 1990-03-27 Vern Paxson * NEWS: Patch #2 changes 1990-03-27 Vern Paxson * flex.skl: fixed fencepost errors with yy_buf_size and detecting NUL's 1990-03-26 Vern Paxson * NEWS: [no log message] 1990-03-26 Vern Paxson * flex.skl: g++ tweaks 1990-03-23 Vern Paxson * NEWS: Changes for Patch #1. 1990-03-23 Vern Paxson * flex.skl: fix for g++ 1990-03-23 Vern Paxson * flex.1: minor typos and formatting changes. Removed BITNET address. 1990-03-23 Vern Paxson * README: nuked BITNET address. 1990-03-20 Vern Paxson * README: 2.2 README 1990-03-20 Vern Paxson * NEWS: USG alias. 1990-03-20 Vern Paxson * flexdef.h: Added USG alias for SYS_V 1990-03-20 Vern Paxson * : [no log message] 1990-03-20 Vern Paxson * flex.skl: Tweaks for lint and C++ 1990-03-20 Vern Paxson * flex.1: -ll => -lfl 1990-03-20 Vern Paxson * NEWS: 2.2 changes 1990-03-20 Vern Paxson * flex.skl: Changed to use YY_BUFFER_STATE everywhere. 1990-03-20 Vern Paxson * flex.1: [no log message] 1990-03-20 Vern Paxson * dfa.c: "associated rules" changed to "associated rule line numbers". 1990-03-20 Vern Paxson * scan.l: cast added to malloc() call to keep lint happy. 1990-03-20 Vern Paxson * yylex.c: Fixed handling of premature EOF's. 1990-03-20 Vern Paxson * sym.c: Removed declaration of malloc() 1990-03-20 Vern Paxson * scan.l: Removed malloc() declaration. Added detection of EOF in actions. 1990-03-20 Vern Paxson * parse.y: Rules rewritten so '/' and '$' parsed correctly. 1990-03-20 Vern Paxson * nfa.c: Corrected line numbers for continued actions. 1990-03-20 Vern Paxson * misc.c: Removed declarations of malloc() and realloc(). 1990-03-20 Vern Paxson * main.c: Summary of generation flags. Minor -8 tweaks. 1990-03-20 Vern Paxson * gen.c: full support for -d 1990-03-20 Vern Paxson * flexdef.h: defines for malloc() and realloc() conditional defines for abs(), min(), and max() 1990-03-20 Vern Paxson * flex.skl: Many multiple-buffer additions. 1990-03-20 Vern Paxson * dfa.c: -8 tweaks. 1990-03-19 Vern Paxson * flex.skl: Proto hacks. NUL hacks. Debugging hacks. C++ hacks. 1990-03-16 Vern Paxson * : RCS won't let me unedit! gets "Missing access list" 1990-03-16 Vern Paxson * tblcmp.c: Minor tweaks for NUL's. 1990-03-16 Vern Paxson * : no changes -- had checked out for testing smaller read buffer sizes 1990-03-16 Vern Paxson * nfa.c: hack for NUL's. 1990-03-16 Vern Paxson * misc.c: Hack to cshell for NUL's. 1990-03-16 Vern Paxson * main.c: NUL's. -8 1990-03-16 Vern Paxson * gen.c: NUL's. 1990-03-16 Vern Paxson * flexdef.h: NUL's. 8-bit chars. 1990-03-16 Vern Paxson * flex.skl: NUL's; indenting 1990-03-16 Vern Paxson * dfa.c: more thrashing around with NUL's 1990-03-16 Vern Paxson * ccl.c: removed NUL hack 1990-03-14 Vern Paxson * yylex.c: Added <> token 1990-03-14 Vern Paxson * ecs.c, flexdef.h: Tweaks for NUL chars. 1990-03-14 Vern Paxson * dfa.c, gen.c, main.c, misc.c, parse.y, scan.l, tblcmp.c: Tweaks for NUL chars. 1990-03-14 Vern Paxson * ccl.c: Tweaks for handling NUL's. 1990-02-28 Vern Paxson * flex.1: [no log message] 1990-02-28 Vern Paxson * flex.1: Changed .so options.man to inlined version since flex.1 will have a different (shorter) options description. 1990-02-28 Vern Paxson * flex.1: [no log message] 1990-02-28 Vern Paxson * flex.1: [no log message] 1990-02-26 Vern Paxson * flex.1: [no log message] 1990-02-25 Vern Paxson * flex.1: [no log message] 1990-02-25 Vern Paxson * flex.1: Initial revision 1990-01-16 Vern Paxson * gen.c: Restored EOB accepting list for REJECT. Second try at 2.2 Release. 1990-01-16 Vern Paxson * misc.c: Added missing ',' in error message. 2.2 Release, second try. 1990-01-16 Vern Paxson * yylex.c: 8-bit char support. 2.2 Release. 1990-01-15 Vern Paxson * scan.l: 8-bit char support. Arbitrary indented/%{} code allowed in section 2. \x escapes. %t support. Minor POSIX-compliance changes. BEGIN(0) -> BEGIN(INITIAL). yywrap() and set_input_file() for multiple input files. C_COMMENT_2 removed. 2.2 Release. 1990-01-15 Vern Paxson * flexdef.h: 8-bit char support. SYS_V / Atari portability fixes. Removed generated array names. CSIZE now only defined if not already defined. Added "csize" global. Added "input_files", "num_input_files", and "program_name" globals. %t support globals. 2.2 Release. 1990-01-15 Vern Paxson * gen.c: Removed unused EOB_accepting_list array. 2.2 Release. 1990-01-15 Vern Paxson * gen.c: Bug in -F table generation fixed. 8-bit char support. Hardwired generated array names. "const"'s added to generated code. Fixed yymore() / trailing context bug. 1990-01-15 Vern Paxson * parse.y: 8-bit char support. Error-message pinpointing. 2.2 Release. 1990-01-15 Vern Paxson * main.c: Unsigned char support. %t support. Removed hard-wiring of program name "flex". -c changed to -C; -c now deprecated. -n added. :-( Multiple input files. SYSV tmpnam() use. Removed old #define's from output. Identified error messages w/ filename and line. 2.2 Release. 1990-01-15 Vern Paxson * sym.c: Unsigned char support. 2.2 Release. 1990-01-15 Vern Paxson * nfa.c: Removed redundant test. 2.2 Release. 1990-01-15 Vern Paxson * misc.c: Unsigned char support. \x support. 2.2 Release. 1990-01-15 Vern Paxson * tblcmp.c: 8-bit char support. 2.2 Release. 1990-01-15 Vern Paxson * flex.skl: C++ support. Turbo-C support. 8-bit char support. yyleng is an int. unput() callable in section 3. yymore hacks. yyrestart() no longer closes stdin. 2.2 Release. 1990-01-15 Vern Paxson * ecs.c: %t support. 8-bit/unsigned char support. 2.2 Release. 1990-01-15 Vern Paxson * dfa.c: %t hacks. minor cosmetics. 2.2 Relase. 1990-01-15 Vern Paxson * ccl.c: Changes for unsigned/8-bit chars. 2.2 Release. 1990-01-10 Vern Paxson * libmain.c: Initial revision 1989-12-30 Vern Paxson * nfa.c: removed gratuitous trailing context code 1989-12-30 Vern Paxson * main.c: made -c case-sensitive 1989-12-30 Vern Paxson * flex.skl: unput() bug fix 1989-12-30 Vern Paxson * README: [no log message] 1989-06-20 Vern Paxson * scan.l: changed to not use '|' and trailing context combo so users can test using -F ... 1989-06-20 Vern Paxson * parse.y: made trailing context combined with '|' warning always come out 1989-06-20 Vern Paxson * README: [no log message] 1989-06-20 Vern Paxson * COPYING: Initial revision 1989-06-20 Vern Paxson * NEWS, README, main.c: [no log message] 1989-06-20 Vern Paxson * README: [no log message] 1989-06-20 Vern Paxson * NEWS, README, main.c: [no log message] 1989-06-20 Vern Paxson * : Beta release 1989-06-20 Vern Paxson * NEWS, main.c: [no log message] 1989-06-20 Vern Paxson * flex.skl, flexdef.h, gen.c, misc.c, nfa.c, parse.y, scan.l, sym.c: 2.0.1 beta 1989-06-20 Vern Paxson * README: [no log message] 1989-05-25 Vern Paxson * gen.c: fixsed bug with -I and backtracking 1989-05-25 Vern Paxson * flex.skl: Cleaned up forward declarations of yyunput() and input() 1989-05-25 Vern Paxson * parse.y: Split copyright string. 1989-05-25 Vern Paxson * nfa.c: Split copyright string. Added check for empty machine in dupmachine(). 1989-05-25 Vern Paxson * ccl.c, dfa.c, ecs.c, gen.c, main.c, misc.c, scan.l, sym.c, tblcmp.c, yylex.c: Split copyright string into two to avoid tempting fate with \ sequences ... 1989-05-24 Vern Paxson * README: updated for 2nd release Beta test added RCS header 1989-05-24 Vern Paxson * flexdef.h: removed static char copyright 1989-05-24 Vern Paxson * flexdef.h: Added BSD copyright notice. Removed FAST_SKELETON_FILE. 1989-05-24 Vern Paxson * main.c: added BSD copyright notice. Removed references to FAST_SKELETON_FILE. 1989-05-24 Vern Paxson * ecs.c, gen.c, nfa.c: Added BSD copyright notice 1989-05-24 Vern Paxson * ccl.c, dfa.c, misc.c, parse.y, scan.l, sym.c, tblcmp.c, yylex.c: added BSD copyright notice 1989-05-24 Vern Paxson * flex.skl: Initial revision 1989-05-19 Vern Paxson * yylex.c: renamed accnum to num_rules 1989-05-19 Vern Paxson * tblcmp.c: moved table generation code to gen.c moved ntod() to dfa.c 1989-05-19 Vern Paxson * sym.c: the most piddling format change imaginable 1989-05-19 Vern Paxson * scan.l: changed to look for yymore, REJECT, %used and %unused removed gross magic for dealing with section 3 1989-05-19 Vern Paxson * nfa.c, parse.y: changes for variable trailing context 1989-05-19 Vern Paxson * misc.c: added all_lower() and all_upper() 1989-05-19 Vern Paxson * main.c: added checking for features being Really used backtracking, performance reports misc. cleanup 1989-05-19 Vern Paxson * gen.c: major overhaul for merged skeleton 1989-05-19 Vern Paxson * flexdef.h: a zillion changes/additions/cleanups 1989-05-19 Vern Paxson * dfa.c: added backtrack report added checking for dangerous trailing context considerable minor cleanup 1989-05-19 Vern Paxson * ccl.c: list_character_set() modified to take a FILE to write to ... 1989-05-19 Vern Paxson * README: updated for beta release 1988-11-25 Vern Paxson * main.c: added -p flag generation of #define's for scanner 1988-11-25 Vern Paxson * flexdef.h: Added END_OF_BUFFER_ACTION and bol_needed 1988-11-25 Vern Paxson * dfa.c: added ntod() 1988-05-09 Vern Paxson * gen.c: Initial revision 1988-05-08 Vern Paxson * yylex.c: RCS header changed display style of non-printings from ^x to \0xx 1988-05-08 Vern Paxson * tblcmp.c: RCS header MAX_XTIONS_FOR_FULL_INTERIOR_FIT -> MAX_XTIONS_FULL_INTERIOR_FIT made back-tracking accepting number be one greater than the last legit accepting number, instead of 0. This way, end-of-buffer can take 0 and no negative accepting numbers are needed. added genftbl() changed last ftl references to C added check for UNSIGNED_CHAR's added back-track logic to make_tables() added checking and report for backtracking fixed fence-post error with onesp stack pointer 1988-05-08 Vern Paxson * sym.c: RCS header changed "entry" to "sym_entry" to avoid conflict with old keyword 1988-05-08 Vern Paxson * scan.l: RCS header removed \^ from ESCSEQ 1988-05-08 Vern Paxson * parse.y: RCS header bug fix due to missing default rule, could have to backtrack when backtrack variables haven't been set up 1988-05-08 Vern Paxson * nfa.c: RCS ident yy_cp, yy_bp support name shortenings assoc_rule support 1988-05-08 Vern Paxson * misc.c: RCS header check before malloc()'ing for 16 bit overflow MS_DOS, VMS ifdef's removed commented-out \^ code removed FTLSOURCE code added readable_form() 1988-05-08 Vern Paxson * main.c: Added RCS header removed revision history misc additions and fixes to globals VMS ifdef's backtracking statistics -p flag name shortenings 1988-05-08 Vern Paxson * flexdef.h: removed revision history added RCS header added VMS, MS_DOS ifdef's removed DEFAULT_ACTION, changed END_OF_BUFFER_ACTION shortened MAX_XTIONS_FOR_FULL_INTERIOR_FIT to MAX_XTIONS_FULL_INTERIOR_FIT added MAX_ASSOC_RULES added performance_report, assoc_rule gloabls added num_backtracking gloabl shortened allocate_integer_pointer_array, reallocate_integer_pointer_array 1988-05-08 Vern Paxson * ecs.c: added RCS id added PROCFLG to avoid assumption of signed char's 1988-05-08 Vern Paxson * dfa.c: added RCS id added check_for_backtracking() added dump_associated_rules() added dump_transitions() shortened reallocate_integer_pointer_array to reallocate_int_ptr_array removed some dfaacc_{state,set} abuses 1988-05-08 Vern Paxson * ccl.c: Added list_character_set() 1988-05-07 Vern Paxson * ccl.c: added RCS id 1988-04-10 Vern Paxson * README: minor tweaks 1988-04-10 Vern Paxson * README: forgot sh flex.shar 1988-04-10 Vern Paxson * README: final tweaking 1988-04-10 Vern Paxson * tblcmp.c: removed minor lint fluff 1988-04-10 Vern Paxson * NEWS: [no log message] 1988-04-10 Vern Paxson * NEWS, README: Initial revision 1988-04-10 Vern Paxson * yylex.c: added identifying comment. changed to include "parse.h" instead of "y.tab.h" 1988-04-10 Vern Paxson * tblcmp.c: Changed name from flexcmp.c -> tblcmp.c fixed misc. typos made generating ec tables be a routine 1988-04-10 Vern Paxson * sym.c: changed name from flexsym.c -> sym.c revamped calling sequences, etc., for extended table struct definition which now has both char * and int fields. 1988-04-10 Vern Paxson * scan.l: Changed name from flexscan.l -> scan.l fixed bug in added block comments between rules. 1988-04-10 Vern Paxson * parse.y: changed name from flexparse.y -> parse.y added start condition "INITIAL" made a{3} have "variable length" 1988-04-10 Vern Paxson * nfa.c: changed name from flexnfa.c -> nfa.c corrected some typos. 1988-04-10 Vern Paxson * misc.c: changed name from flexmisc.c -> misc.c 1988-04-10 Vern Paxson * main.c: fixed bug causing core dumps if skeleton files could not be opened. Added -cF. Added fullspd to be equivalent to fulltbl for which options is cannot be mixed with. 1988-04-10 Vern Paxson * flexdef.h: fixed typos, enhanced symbol table definition. 1988-04-10 Vern Paxson * ecs.c: changed name from flexecs.c to ecs.c 1988-04-10 Vern Paxson * dfa.c: changed name from flexdfa.c to dfa.c 1988-04-10 Vern Paxson * ccl.c: changed name from flexccl.c -> ccl.c 1988-02-13 Vern Paxson * ccl.c, dfa.c, ecs.c, flexdef.h, main.c, misc.c, nfa.c, parse.y, scan.l, sym.c, tblcmp.c, yylex.c: Beta Release. 1987-11-08 Vern Paxson * Initial revision flex-2.6.4/src/0000775000175000017500000000000013103432074010250 500000000000000flex-2.6.4/src/options.c0000664000175000017500000001706113002262300012023 00000000000000/* flex - tool to generate fast lexical analyzers */ /* Copyright (c) 1990 The Regents of the University of California. */ /* All rights reserved. */ /* This code is derived from software contributed to Berkeley by */ /* Vern Paxson. */ /* The United States Government has rights in this work pursuant */ /* to contract no. DE-AC03-76SF00098 between the United States */ /* Department of Energy and the University of California. */ /* This file is part of flex. */ /* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ /* are met: */ /* 1. Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* 2. Redistributions in binary form must reproduce the above copyright */ /* notice, this list of conditions and the following disclaimer in the */ /* documentation and/or other materials provided with the distribution. */ /* Neither the name of the University nor the names of its contributors */ /* may be used to endorse or promote products derived from this software */ /* without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */ /* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */ /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ /* PURPOSE. */ #include "options.h" /* Be sure to synchronize these options with those defined in "options.h", * the giant switch() statement in "main.c", and the %option processing in * "scan.l". */ /* The command-line options, passed to scanopt_init() */ optspec_t flexopts[] = { {"-7", OPT_7BIT, 0} , {"--7bit", OPT_7BIT, 0} , /* Generate 7-bit scanner. */ {"-8", OPT_8BIT, 0} , {"--8bit", OPT_8BIT, 0} , /* Generate 8-bit scanner. */ {"--align", OPT_ALIGN, 0} , /* Trade off larger tables for better memory alignment. */ {"--noalign", OPT_NO_ALIGN, 0} , {"--always-interactive", OPT_ALWAYS_INTERACTIVE, 0} , {"--array", OPT_ARRAY, 0} , {"-b", OPT_BACKUP, 0} , {"--backup", OPT_BACKUP, 0} , /* Generate backing-up information to lex.backup. */ {"-B", OPT_BATCH, 0} , {"--batch", OPT_BATCH, 0} , /* Generate batch scanner (opposite of -I). */ {"--bison-bridge", OPT_BISON_BRIDGE, 0} , /* Scanner to be called by a bison pure parser. */ {"--bison-locations", OPT_BISON_BRIDGE_LOCATIONS, 0} , /* Scanner to be called by a bison pure parser. */ {"-i", OPT_CASE_INSENSITIVE, 0} , {"--case-insensitive", OPT_CASE_INSENSITIVE, 0} , /* Generate case-insensitive scanner. */ {"-C[aefFmr]", OPT_COMPRESSION, "Specify degree of table compression (default is -Cem)"}, {"-+", OPT_CPLUSPLUS, 0} , {"--c++", OPT_CPLUSPLUS, 0} , /* Generate C++ scanner class. */ {"-d", OPT_DEBUG, 0} , {"--debug", OPT_DEBUG, 0} , /* Turn on debug mode in generated scanner. */ {"--nodebug", OPT_NO_DEBUG, 0} , {"-s", OPT_NO_DEFAULT, 0} , {"--nodefault", OPT_NO_DEFAULT, 0} , /* Suppress default rule to ECHO unmatched text. */ {"--default", OPT_DEFAULT, 0} , {"-c", OPT_DONOTHING, 0} , /* For POSIX lex compatibility. */ {"-n", OPT_DONOTHING, 0} , /* For POSIX lex compatibility. */ {"--ecs", OPT_ECS, 0} , /* Construct equivalence classes. */ {"--noecs", OPT_NO_ECS, 0} , {"-F", OPT_FAST, 0} , {"--fast", OPT_FAST, 0} , /* Same as -CFr. */ {"-f", OPT_FULL, 0} , {"--full", OPT_FULL, 0} , /* Same as -Cfr. */ {"--header-file[=FILE]", OPT_HEADER_FILE, 0} , {"-?", OPT_HELP, 0} , {"-h", OPT_HELP, 0} , {"--help", OPT_HELP, 0} , /* Produce this help message. */ {"--hex", OPT_HEX, 0} , /* Use hexadecimals in debug/trace outputs */ {"-I", OPT_INTERACTIVE, 0} , {"--interactive", OPT_INTERACTIVE, 0} , /* Generate interactive scanner (opposite of -B). */ {"-l", OPT_LEX_COMPAT, 0} , {"--lex-compat", OPT_LEX_COMPAT, 0} , /* Maximal compatibility with original lex. */ {"-X", OPT_POSIX_COMPAT, 0} , {"--posix-compat", OPT_POSIX_COMPAT, 0} , /* Maximal compatibility with POSIX lex. */ {"--preproc=NUM", OPT_PREPROC_LEVEL, 0} , {"-L", OPT_NO_LINE, 0} , /* Suppress #line directives in scanner. */ {"--noline", OPT_NO_LINE, 0} , /* Suppress #line directives in scanner. */ {"--main", OPT_MAIN, 0} , /* use built-in main() function. */ {"--nomain", OPT_NO_MAIN, 0} , {"--meta-ecs", OPT_META_ECS, 0} , /* Construct meta-equivalence classes. */ {"--nometa-ecs", OPT_NO_META_ECS, 0} , {"--never-interactive", OPT_NEVER_INTERACTIVE, 0} , {"-o FILE", OPT_OUTFILE, 0} , {"--outfile=FILE", OPT_OUTFILE, 0} , /* Write to FILE (default is lex.yy.c) */ {"-p", OPT_PERF_REPORT, 0} , {"--perf-report", OPT_PERF_REPORT, 0} , /* Generate performance report to stderr. */ {"--pointer", OPT_POINTER, 0} , {"-P PREFIX", OPT_PREFIX, 0} , {"--prefix=PREFIX", OPT_PREFIX, 0} , /* Use PREFIX (default is yy) */ {"-Dmacro", OPT_PREPROCDEFINE, 0} , /* Define a preprocessor symbol. */ {"--read", OPT_READ, 0} , /* Use read(2) instead of stdio. */ {"-R", OPT_REENTRANT, 0} , {"--reentrant", OPT_REENTRANT, 0} , /* Generate a reentrant C scanner. */ {"--noreentrant", OPT_NO_REENTRANT, 0} , {"--reject", OPT_REJECT, 0} , {"--noreject", OPT_NO_REJECT, 0} , {"-S FILE", OPT_SKEL, 0} , {"--skel=FILE", OPT_SKEL, 0} , /* Use skeleton from FILE */ {"--stack", OPT_STACK, 0} , {"--stdinit", OPT_STDINIT, 0} , {"--nostdinit", OPT_NO_STDINIT, 0} , {"-t", OPT_STDOUT, 0} , {"--stdout", OPT_STDOUT, 0} , /* Write generated scanner to stdout. */ {"-T", OPT_TRACE, 0} , {"--trace", OPT_TRACE, 0} , /* Flex should run in trace mode. */ {"--tables-file[=FILE]", OPT_TABLES_FILE, 0} , /* Save tables to FILE */ {"--tables-verify", OPT_TABLES_VERIFY, 0} , /* Tables integrity check */ {"--nounistd", OPT_NO_UNISTD_H, 0} , /* Do not include unistd.h */ {"-v", OPT_VERBOSE, 0} , {"--verbose", OPT_VERBOSE, 0} , /* Write summary of scanner statistics to stdout. */ {"-V", OPT_VERSION, 0} , {"--version", OPT_VERSION, 0} , /* Report flex version. */ {"--warn", OPT_WARN, 0} , {"-w", OPT_NO_WARN, 0} , {"--nowarn", OPT_NO_WARN, 0} , /* Suppress warning messages. */ {"--yyclass=NAME", OPT_YYCLASS, 0} , {"--yylineno", OPT_YYLINENO, 0} , {"--noyylineno", OPT_NO_YYLINENO, 0} , {"--yymore", OPT_YYMORE, 0} , {"--noyymore", OPT_NO_YYMORE, 0} , {"--noyywrap", OPT_NO_YYWRAP, 0} , {"--yywrap", OPT_YYWRAP, 0} , {"--nounput", OPT_NO_UNPUT, 0} , {"--noyy_push_state", OPT_NO_YY_PUSH_STATE, 0} , {"--noyy_pop_state", OPT_NO_YY_POP_STATE, 0} , {"--noyy_top_state", OPT_NO_YY_TOP_STATE, 0} , {"--noyy_scan_buffer", OPT_NO_YY_SCAN_BUFFER, 0} , {"--noyy_scan_bytes", OPT_NO_YY_SCAN_BYTES, 0} , {"--noyy_scan_string", OPT_NO_YY_SCAN_STRING, 0} , {"--noyyget_extra", OPT_NO_YYGET_EXTRA, 0} , {"--noyyset_extra", OPT_NO_YYSET_EXTRA, 0} , {"--noyyget_leng", OPT_NO_YYGET_LENG, 0} , {"--noyyget_text", OPT_NO_YYGET_TEXT, 0} , {"--noyyget_lineno", OPT_NO_YYGET_LINENO, 0} , {"--noyyset_lineno", OPT_NO_YYSET_LINENO, 0} , {"--noyyget_in", OPT_NO_YYGET_IN, 0} , {"--noyyset_in", OPT_NO_YYSET_IN, 0} , {"--noyyget_out", OPT_NO_YYGET_OUT, 0} , {"--noyyset_out", OPT_NO_YYSET_OUT, 0} , {"--noyyget_lval", OPT_NO_YYGET_LVAL, 0} , {"--noyyset_lval", OPT_NO_YYSET_LVAL, 0} , {"--noyyget_lloc", OPT_NO_YYGET_LLOC, 0} , {"--noyyset_lloc", OPT_NO_YYSET_LLOC, 0} , {"--unsafe-no-m4-sect3-escape", OPT_NO_SECT3_ESCAPE, 0} , {0, 0, 0} /* required final NULL entry. */ }; /* vim:set tabstop=8 softtabstop=4 shiftwidth=4: */ flex-2.6.4/src/gen.c0000664000175000017500000015433113042146120011110 00000000000000/* gen - actual generation (writing) of flex scanners */ /* Copyright (c) 1990 The Regents of the University of California. */ /* All rights reserved. */ /* This code is derived from software contributed to Berkeley by */ /* Vern Paxson. */ /* The United States Government has rights in this work pursuant */ /* to contract no. DE-AC03-76SF00098 between the United States */ /* Department of Energy and the University of California. */ /* This file is part of flex. */ /* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ /* are met: */ /* 1. Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* 2. Redistributions in binary form must reproduce the above copyright */ /* notice, this list of conditions and the following disclaimer in the */ /* documentation and/or other materials provided with the distribution. */ /* Neither the name of the University nor the names of its contributors */ /* may be used to endorse or promote products derived from this software */ /* without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */ /* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */ /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ /* PURPOSE. */ #include "flexdef.h" #include "tables.h" /* declare functions that have forward references */ void genecs(void); static int indent_level = 0; /* each level is 8 spaces */ #define set_indent(indent_val) indent_level = indent_val /* Almost everything is done in terms of arrays starting at 1, so provide * a null entry for the zero element of all C arrays. (The exception * to this is that the fast table representation generally uses the * 0 elements of its arrays, too.) */ static const char *get_int16_decl (void) { return (gentables) ? "static const flex_int16_t %s[%d] =\n { 0,\n" : "static const flex_int16_t * %s = 0;\n"; } static const char *get_int32_decl (void) { return (gentables) ? "static const flex_int32_t %s[%d] =\n { 0,\n" : "static const flex_int32_t * %s = 0;\n"; } static const char *get_state_decl (void) { return (gentables) ? "static const yy_state_type %s[%d] =\n { 0,\n" : "static const yy_state_type * %s = 0;\n"; } static const char *get_yy_char_decl (void) { return (gentables) ? "static const YY_CHAR %s[%d] =\n { 0,\n" : "static const YY_CHAR * %s = 0;\n"; } /* Indent to the current level. */ void do_indent (void) { int i = indent_level * 8; while (i >= 8) { outc ('\t'); i -= 8; } while (i > 0) { outc (' '); --i; } } /** Make the table for possible eol matches. * @return the newly allocated rule_can_match_eol table */ static struct yytbl_data *mkeoltbl (void) { int i; flex_int8_t *tdata = 0; struct yytbl_data *tbl; tbl = calloc(1, sizeof (struct yytbl_data)); yytbl_data_init (tbl, YYTD_ID_RULE_CAN_MATCH_EOL); tbl->td_flags = YYTD_DATA8; tbl->td_lolen = (flex_uint32_t) (num_rules + 1); tbl->td_data = tdata = calloc(tbl->td_lolen, sizeof (flex_int8_t)); for (i = 1; i <= num_rules; i++) tdata[i] = rule_has_nl[i] ? 1 : 0; buf_prints (&yydmap_buf, "\t{YYTD_ID_RULE_CAN_MATCH_EOL, (void**)&yy_rule_can_match_eol, sizeof(%s)},\n", "flex_int32_t"); return tbl; } /* Generate the table for possible eol matches. */ static void geneoltbl (void) { int i; outn ("m4_ifdef( [[M4_YY_USE_LINENO]],[["); outn ("/* Table of booleans, true if rule could match eol. */"); out_str_dec (get_int32_decl (), "yy_rule_can_match_eol", num_rules + 1); if (gentables) { for (i = 1; i <= num_rules; i++) { out_dec ("%d, ", rule_has_nl[i] ? 1 : 0); /* format nicely, 20 numbers per line. */ if ((i % 20) == 19) out ("\n "); } out (" };\n"); } outn ("]])"); } /* Generate the code to keep backing-up information. */ void gen_backing_up (void) { if (reject || num_backing_up == 0) return; if (fullspd) indent_puts ("if ( yy_current_state[-1].yy_nxt )"); else indent_puts ("if ( yy_accept[yy_current_state] )"); ++indent_level; indent_puts ("{"); indent_puts ("YY_G(yy_last_accepting_state) = yy_current_state;"); indent_puts ("YY_G(yy_last_accepting_cpos) = yy_cp;"); indent_puts ("}"); --indent_level; } /* Generate the code to perform the backing up. */ void gen_bu_action (void) { if (reject || num_backing_up == 0) return; set_indent (3); indent_puts ("case 0: /* must back up */"); indent_puts ("/* undo the effects of YY_DO_BEFORE_ACTION */"); indent_puts ("*yy_cp = YY_G(yy_hold_char);"); if (fullspd || fulltbl) indent_puts ("yy_cp = YY_G(yy_last_accepting_cpos) + 1;"); else /* Backing-up info for compressed tables is taken \after/ * yy_cp has been incremented for the next state. */ indent_puts ("yy_cp = YY_G(yy_last_accepting_cpos);"); indent_puts ("yy_current_state = YY_G(yy_last_accepting_state);"); indent_puts ("goto yy_find_action;"); outc ('\n'); set_indent (0); } /** mkctbl - make full speed compressed transition table * This is an array of structs; each struct a pair of integers. * You should call mkssltbl() immediately after this. * Then, I think, mkecstbl(). Arrrg. * @return the newly allocated trans table */ static struct yytbl_data *mkctbl (void) { int i; struct yytbl_data *tbl = 0; flex_int32_t *tdata = 0, curr = 0; int end_of_buffer_action = num_rules + 1; buf_prints (&yydmap_buf, "\t{YYTD_ID_TRANSITION, (void**)&yy_transition, sizeof(%s)},\n", ((tblend + numecs + 1) >= INT16_MAX || long_align) ? "flex_int32_t" : "flex_int16_t"); tbl = calloc(1, sizeof (struct yytbl_data)); yytbl_data_init (tbl, YYTD_ID_TRANSITION); tbl->td_flags = YYTD_DATA32 | YYTD_STRUCT; tbl->td_hilen = 0; tbl->td_lolen = (flex_uint32_t) (tblend + numecs + 1); /* number of structs */ tbl->td_data = tdata = calloc(tbl->td_lolen * 2, sizeof (flex_int32_t)); /* We want the transition to be represented as the offset to the * next state, not the actual state number, which is what it currently * is. The offset is base[nxt[i]] - (base of current state)]. That's * just the difference between the starting points of the two involved * states (to - from). * * First, though, we need to find some way to put in our end-of-buffer * flags and states. We do this by making a state with absolutely no * transitions. We put it at the end of the table. */ /* We need to have room in nxt/chk for two more slots: One for the * action and one for the end-of-buffer transition. We now *assume* * that we're guaranteed the only character we'll try to index this * nxt/chk pair with is EOB, i.e., 0, so we don't have to make sure * there's room for jam entries for other characters. */ while (tblend + 2 >= current_max_xpairs) expand_nxt_chk (); while (lastdfa + 1 >= current_max_dfas) increase_max_dfas (); base[lastdfa + 1] = tblend + 2; nxt[tblend + 1] = end_of_buffer_action; chk[tblend + 1] = numecs + 1; chk[tblend + 2] = 1; /* anything but EOB */ /* So that "make test" won't show arb. differences. */ nxt[tblend + 2] = 0; /* Make sure every state has an end-of-buffer transition and an * action #. */ for (i = 0; i <= lastdfa; ++i) { int anum = dfaacc[i].dfaacc_state; int offset = base[i]; chk[offset] = EOB_POSITION; chk[offset - 1] = ACTION_POSITION; nxt[offset - 1] = anum; /* action number */ } for (i = 0; i <= tblend; ++i) { if (chk[i] == EOB_POSITION) { tdata[curr++] = 0; tdata[curr++] = base[lastdfa + 1] - i; } else if (chk[i] == ACTION_POSITION) { tdata[curr++] = 0; tdata[curr++] = nxt[i]; } else if (chk[i] > numecs || chk[i] == 0) { tdata[curr++] = 0; tdata[curr++] = 0; } else { /* verify, transition */ tdata[curr++] = chk[i]; tdata[curr++] = base[nxt[i]] - (i - chk[i]); } } /* Here's the final, end-of-buffer state. */ tdata[curr++] = chk[tblend + 1]; tdata[curr++] = nxt[tblend + 1]; tdata[curr++] = chk[tblend + 2]; tdata[curr++] = nxt[tblend + 2]; return tbl; } /** Make start_state_list table. * @return the newly allocated start_state_list table */ static struct yytbl_data *mkssltbl (void) { struct yytbl_data *tbl = 0; flex_int32_t *tdata = 0; flex_int32_t i; tbl = calloc(1, sizeof (struct yytbl_data)); yytbl_data_init (tbl, YYTD_ID_START_STATE_LIST); tbl->td_flags = YYTD_DATA32 | YYTD_PTRANS; tbl->td_hilen = 0; tbl->td_lolen = (flex_uint32_t) (lastsc * 2 + 1); tbl->td_data = tdata = calloc(tbl->td_lolen, sizeof (flex_int32_t)); for (i = 0; i <= lastsc * 2; ++i) tdata[i] = base[i]; buf_prints (&yydmap_buf, "\t{YYTD_ID_START_STATE_LIST, (void**)&yy_start_state_list, sizeof(%s)},\n", "struct yy_trans_info*"); return tbl; } /* genctbl - generates full speed compressed transition table */ void genctbl (void) { int i; int end_of_buffer_action = num_rules + 1; /* Table of verify for transition and offset to next state. */ if (gentables) out_dec ("static const struct yy_trans_info yy_transition[%d] =\n {\n", tblend + numecs + 1); else outn ("static const struct yy_trans_info *yy_transition = 0;"); /* We want the transition to be represented as the offset to the * next state, not the actual state number, which is what it currently * is. The offset is base[nxt[i]] - (base of current state)]. That's * just the difference between the starting points of the two involved * states (to - from). * * First, though, we need to find some way to put in our end-of-buffer * flags and states. We do this by making a state with absolutely no * transitions. We put it at the end of the table. */ /* We need to have room in nxt/chk for two more slots: One for the * action and one for the end-of-buffer transition. We now *assume* * that we're guaranteed the only character we'll try to index this * nxt/chk pair with is EOB, i.e., 0, so we don't have to make sure * there's room for jam entries for other characters. */ while (tblend + 2 >= current_max_xpairs) expand_nxt_chk (); while (lastdfa + 1 >= current_max_dfas) increase_max_dfas (); base[lastdfa + 1] = tblend + 2; nxt[tblend + 1] = end_of_buffer_action; chk[tblend + 1] = numecs + 1; chk[tblend + 2] = 1; /* anything but EOB */ /* So that "make test" won't show arb. differences. */ nxt[tblend + 2] = 0; /* Make sure every state has an end-of-buffer transition and an * action #. */ for (i = 0; i <= lastdfa; ++i) { int anum = dfaacc[i].dfaacc_state; int offset = base[i]; chk[offset] = EOB_POSITION; chk[offset - 1] = ACTION_POSITION; nxt[offset - 1] = anum; /* action number */ } for (i = 0; i <= tblend; ++i) { if (chk[i] == EOB_POSITION) transition_struct_out (0, base[lastdfa + 1] - i); else if (chk[i] == ACTION_POSITION) transition_struct_out (0, nxt[i]); else if (chk[i] > numecs || chk[i] == 0) transition_struct_out (0, 0); /* unused slot */ else /* verify, transition */ transition_struct_out (chk[i], base[nxt[i]] - (i - chk[i])); } /* Here's the final, end-of-buffer state. */ transition_struct_out (chk[tblend + 1], nxt[tblend + 1]); transition_struct_out (chk[tblend + 2], nxt[tblend + 2]); if (gentables) outn (" };\n"); /* Table of pointers to start states. */ if (gentables) out_dec ("static const struct yy_trans_info *yy_start_state_list[%d] =\n", lastsc * 2 + 1); else outn ("static const struct yy_trans_info **yy_start_state_list =0;"); if (gentables) { outn (" {"); for (i = 0; i <= lastsc * 2; ++i) out_dec (" &yy_transition[%d],\n", base[i]); dataend (); } if (useecs) genecs (); } /* mkecstbl - Make equivalence-class tables. */ static struct yytbl_data *mkecstbl (void) { int i; struct yytbl_data *tbl = 0; flex_int32_t *tdata = 0; tbl = calloc(1, sizeof (struct yytbl_data)); yytbl_data_init (tbl, YYTD_ID_EC); tbl->td_flags |= YYTD_DATA32; tbl->td_hilen = 0; tbl->td_lolen = (flex_uint32_t) csize; tbl->td_data = tdata = calloc(tbl->td_lolen, sizeof (flex_int32_t)); for (i = 1; i < csize; ++i) { ecgroup[i] = ABS (ecgroup[i]); tdata[i] = ecgroup[i]; } buf_prints (&yydmap_buf, "\t{YYTD_ID_EC, (void**)&yy_ec, sizeof(%s)},\n", "YY_CHAR"); return tbl; } /* Generate equivalence-class tables. */ void genecs (void) { int i, j; int numrows; out_str_dec (get_yy_char_decl (), "yy_ec", csize); for (i = 1; i < csize; ++i) { ecgroup[i] = ABS (ecgroup[i]); mkdata (ecgroup[i]); } dataend (); if (trace) { fputs (_("\n\nEquivalence Classes:\n\n"), stderr); numrows = csize / 8; for (j = 0; j < numrows; ++j) { for (i = j; i < csize; i = i + numrows) { fprintf (stderr, "%4s = %-2d", readable_form (i), ecgroup[i]); putc (' ', stderr); } putc ('\n', stderr); } } } /* Generate the code to find the action number. */ void gen_find_action (void) { if (fullspd) indent_puts ("yy_act = yy_current_state[-1].yy_nxt;"); else if (fulltbl) indent_puts ("yy_act = yy_accept[yy_current_state];"); else if (reject) { indent_puts ("yy_current_state = *--YY_G(yy_state_ptr);"); indent_puts ("YY_G(yy_lp) = yy_accept[yy_current_state];"); if (!variable_trailing_context_rules) outn ("m4_ifdef( [[M4_YY_USES_REJECT]],\n[["); if(reject_really_used) outn ("find_rule: /* we branch to this label when backing up */"); if (!variable_trailing_context_rules) outn ("]])\n"); indent_puts ("for ( ; ; ) /* until we find what rule we matched */"); ++indent_level; indent_puts ("{"); indent_puts ("if ( YY_G(yy_lp) && YY_G(yy_lp) < yy_accept[yy_current_state + 1] )"); ++indent_level; indent_puts ("{"); indent_puts ("yy_act = yy_acclist[YY_G(yy_lp)];"); if (variable_trailing_context_rules) { indent_puts ("if ( yy_act & YY_TRAILING_HEAD_MASK ||"); indent_puts (" YY_G(yy_looking_for_trail_begin) )"); ++indent_level; indent_puts ("{"); indent_puts ("if ( yy_act == YY_G(yy_looking_for_trail_begin) )"); ++indent_level; indent_puts ("{"); indent_puts ("YY_G(yy_looking_for_trail_begin) = 0;"); indent_puts ("yy_act &= ~YY_TRAILING_HEAD_MASK;"); indent_puts ("break;"); indent_puts ("}"); --indent_level; indent_puts ("}"); --indent_level; indent_puts ("else if ( yy_act & YY_TRAILING_MASK )"); ++indent_level; indent_puts ("{"); indent_puts ("YY_G(yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK;"); indent_puts ("YY_G(yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK;"); if (real_reject) { /* Remember matched text in case we back up * due to REJECT. */ indent_puts ("YY_G(yy_full_match) = yy_cp;"); indent_puts ("YY_G(yy_full_state) = YY_G(yy_state_ptr);"); indent_puts ("YY_G(yy_full_lp) = YY_G(yy_lp);"); } indent_puts ("}"); --indent_level; indent_puts ("else"); ++indent_level; indent_puts ("{"); indent_puts ("YY_G(yy_full_match) = yy_cp;"); indent_puts ("YY_G(yy_full_state) = YY_G(yy_state_ptr);"); indent_puts ("YY_G(yy_full_lp) = YY_G(yy_lp);"); indent_puts ("break;"); indent_puts ("}"); --indent_level; indent_puts ("++YY_G(yy_lp);"); indent_puts ("goto find_rule;"); } else { /* Remember matched text in case we back up due to * trailing context plus REJECT. */ ++indent_level; indent_puts ("{"); indent_puts ("YY_G(yy_full_match) = yy_cp;"); indent_puts ("break;"); indent_puts ("}"); --indent_level; } indent_puts ("}"); --indent_level; indent_puts ("--yy_cp;"); /* We could consolidate the following two lines with those at * the beginning, but at the cost of complaints that we're * branching inside a loop. */ indent_puts ("yy_current_state = *--YY_G(yy_state_ptr);"); indent_puts ("YY_G(yy_lp) = yy_accept[yy_current_state];"); indent_puts ("}"); --indent_level; } else { /* compressed */ indent_puts ("yy_act = yy_accept[yy_current_state];"); if (interactive && !reject) { /* Do the guaranteed-needed backing up to figure out * the match. */ indent_puts ("if ( yy_act == 0 )"); ++indent_level; indent_puts ("{ /* have to back up */"); indent_puts ("yy_cp = YY_G(yy_last_accepting_cpos);"); indent_puts ("yy_current_state = YY_G(yy_last_accepting_state);"); indent_puts ("yy_act = yy_accept[yy_current_state];"); indent_puts ("}"); --indent_level; } } } /* mkftbl - make the full table and return the struct . * you should call mkecstbl() after this. */ struct yytbl_data *mkftbl (void) { int i; int end_of_buffer_action = num_rules + 1; struct yytbl_data *tbl; flex_int32_t *tdata = 0; tbl = calloc(1, sizeof (struct yytbl_data)); yytbl_data_init (tbl, YYTD_ID_ACCEPT); tbl->td_flags |= YYTD_DATA32; tbl->td_hilen = 0; /* it's a one-dimensional array */ tbl->td_lolen = (flex_uint32_t) (lastdfa + 1); tbl->td_data = tdata = calloc(tbl->td_lolen, sizeof (flex_int32_t)); dfaacc[end_of_buffer_state].dfaacc_state = end_of_buffer_action; for (i = 1; i <= lastdfa; ++i) { int anum = dfaacc[i].dfaacc_state; tdata[i] = anum; if (trace && anum) fprintf (stderr, _("state # %d accepts: [%d]\n"), i, anum); } buf_prints (&yydmap_buf, "\t{YYTD_ID_ACCEPT, (void**)&yy_accept, sizeof(%s)},\n", long_align ? "flex_int32_t" : "flex_int16_t"); return tbl; } /* genftbl - generate full transition table */ void genftbl (void) { int i; int end_of_buffer_action = num_rules + 1; out_str_dec (long_align ? get_int32_decl () : get_int16_decl (), "yy_accept", lastdfa + 1); dfaacc[end_of_buffer_state].dfaacc_state = end_of_buffer_action; for (i = 1; i <= lastdfa; ++i) { int anum = dfaacc[i].dfaacc_state; mkdata (anum); if (trace && anum) fprintf (stderr, _("state # %d accepts: [%d]\n"), i, anum); } dataend (); if (useecs) genecs (); /* Don't have to dump the actual full table entries - they were * created on-the-fly. */ } /* Generate the code to find the next compressed-table state. */ void gen_next_compressed_state (char *char_map) { indent_put2s ("YY_CHAR yy_c = %s;", char_map); /* Save the backing-up info \before/ computing the next state * because we always compute one more state than needed - we * always proceed until we reach a jam state */ gen_backing_up (); indent_puts ("while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )"); ++indent_level; indent_puts ("{"); indent_puts ("yy_current_state = (int) yy_def[yy_current_state];"); if (usemecs) { /* We've arrange it so that templates are never chained * to one another. This means we can afford to make a * very simple test to see if we need to convert to * yy_c's meta-equivalence class without worrying * about erroneously looking up the meta-equivalence * class twice */ do_indent (); /* lastdfa + 2 is the beginning of the templates */ out_dec ("if ( yy_current_state >= %d )\n", lastdfa + 2); ++indent_level; indent_puts ("yy_c = yy_meta[yy_c];"); --indent_level; } indent_puts ("}"); --indent_level; indent_puts ("yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];"); } /* Generate the code to find the next match. */ void gen_next_match (void) { /* NOTE - changes in here should be reflected in gen_next_state() and * gen_NUL_trans(). */ char *char_map = useecs ? "yy_ec[YY_SC_TO_UI(*yy_cp)] " : "YY_SC_TO_UI(*yy_cp)"; char *char_map_2 = useecs ? "yy_ec[YY_SC_TO_UI(*++yy_cp)] " : "YY_SC_TO_UI(*++yy_cp)"; if (fulltbl) { if (gentables) indent_put2s ("while ( (yy_current_state = yy_nxt[yy_current_state][ %s ]) > 0 )", char_map); else indent_put2s ("while ( (yy_current_state = yy_nxt[yy_current_state*YY_NXT_LOLEN + %s ]) > 0 )", char_map); ++indent_level; if (num_backing_up > 0) { indent_puts ("{"); gen_backing_up (); outc ('\n'); } indent_puts ("++yy_cp;"); if (num_backing_up > 0) indent_puts ("}"); --indent_level; outc ('\n'); indent_puts ("yy_current_state = -yy_current_state;"); } else if (fullspd) { indent_puts ("{"); indent_puts ("const struct yy_trans_info *yy_trans_info;\n"); indent_puts ("YY_CHAR yy_c;\n"); indent_put2s ("for ( yy_c = %s;", char_map); indent_puts (" (yy_trans_info = &yy_current_state[yy_c])->"); indent_puts ("yy_verify == yy_c;"); indent_put2s (" yy_c = %s )", char_map_2); ++indent_level; if (num_backing_up > 0) indent_puts ("{"); indent_puts ("yy_current_state += yy_trans_info->yy_nxt;"); if (num_backing_up > 0) { outc ('\n'); gen_backing_up (); indent_puts ("}"); } --indent_level; indent_puts ("}"); } else { /* compressed */ indent_puts ("do"); ++indent_level; indent_puts ("{"); gen_next_state (false); indent_puts ("++yy_cp;"); indent_puts ("}"); --indent_level; do_indent (); if (interactive) out_dec ("while ( yy_base[yy_current_state] != %d );\n", jambase); else out_dec ("while ( yy_current_state != %d );\n", jamstate); if (!reject && !interactive) { /* Do the guaranteed-needed backing up to figure out * the match. */ indent_puts ("yy_cp = YY_G(yy_last_accepting_cpos);"); indent_puts ("yy_current_state = YY_G(yy_last_accepting_state);"); } } } /* Generate the code to find the next state. */ void gen_next_state (int worry_about_NULs) { /* NOTE - changes in here should be reflected in gen_next_match() */ char char_map[256]; if (worry_about_NULs && !nultrans) { if (useecs) snprintf (char_map, sizeof(char_map), "(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : %d)", NUL_ec); else snprintf (char_map, sizeof(char_map), "(*yy_cp ? YY_SC_TO_UI(*yy_cp) : %d)", NUL_ec); } else strcpy (char_map, useecs ? "yy_ec[YY_SC_TO_UI(*yy_cp)] " : "YY_SC_TO_UI(*yy_cp)"); if (worry_about_NULs && nultrans) { if (!fulltbl && !fullspd) /* Compressed tables back up *before* they match. */ gen_backing_up (); indent_puts ("if ( *yy_cp )"); ++indent_level; indent_puts ("{"); } if (fulltbl) { if (gentables) indent_put2s ("yy_current_state = yy_nxt[yy_current_state][%s];", char_map); else indent_put2s ("yy_current_state = yy_nxt[yy_current_state*YY_NXT_LOLEN + %s];", char_map); } else if (fullspd) indent_put2s ("yy_current_state += yy_current_state[%s].yy_nxt;", char_map); else gen_next_compressed_state (char_map); if (worry_about_NULs && nultrans) { indent_puts ("}"); --indent_level; indent_puts ("else"); ++indent_level; indent_puts ("yy_current_state = yy_NUL_trans[yy_current_state];"); --indent_level; } if (fullspd || fulltbl) gen_backing_up (); if (reject) indent_puts ("*YY_G(yy_state_ptr)++ = yy_current_state;"); } /* Generate the code to make a NUL transition. */ void gen_NUL_trans (void) { /* NOTE - changes in here should be reflected in gen_next_match() */ /* Only generate a definition for "yy_cp" if we'll generate code * that uses it. Otherwise lint and the like complain. */ int need_backing_up = (num_backing_up > 0 && !reject); if (need_backing_up && (!nultrans || fullspd || fulltbl)) /* We're going to need yy_cp lying around for the call * below to gen_backing_up(). */ indent_puts ("char *yy_cp = YY_G(yy_c_buf_p);"); outc ('\n'); if (nultrans) { indent_puts ("yy_current_state = yy_NUL_trans[yy_current_state];"); indent_puts ("yy_is_jam = (yy_current_state == 0);"); } else if (fulltbl) { do_indent (); if (gentables) out_dec ("yy_current_state = yy_nxt[yy_current_state][%d];\n", NUL_ec); else out_dec ("yy_current_state = yy_nxt[yy_current_state*YY_NXT_LOLEN + %d];\n", NUL_ec); indent_puts ("yy_is_jam = (yy_current_state <= 0);"); } else if (fullspd) { do_indent (); out_dec ("int yy_c = %d;\n", NUL_ec); indent_puts ("const struct yy_trans_info *yy_trans_info;\n"); indent_puts ("yy_trans_info = &yy_current_state[(unsigned int) yy_c];"); indent_puts ("yy_current_state += yy_trans_info->yy_nxt;"); indent_puts ("yy_is_jam = (yy_trans_info->yy_verify != yy_c);"); } else { char NUL_ec_str[20]; snprintf (NUL_ec_str, sizeof(NUL_ec_str), "%d", NUL_ec); gen_next_compressed_state (NUL_ec_str); do_indent (); out_dec ("yy_is_jam = (yy_current_state == %d);\n", jamstate); if (reject) { /* Only stack this state if it's a transition we * actually make. If we stack it on a jam, then * the state stack and yy_c_buf_p get out of sync. */ indent_puts ("if ( ! yy_is_jam )"); ++indent_level; indent_puts ("*YY_G(yy_state_ptr)++ = yy_current_state;"); --indent_level; } } /* If we've entered an accepting state, back up; note that * compressed tables have *already* done such backing up, so * we needn't bother with it again. */ if (need_backing_up && (fullspd || fulltbl)) { outc ('\n'); indent_puts ("if ( ! yy_is_jam )"); ++indent_level; indent_puts ("{"); gen_backing_up (); indent_puts ("}"); --indent_level; } } /* Generate the code to find the start state. */ void gen_start_state (void) { if (fullspd) { if (bol_needed) { indent_puts ("yy_current_state = yy_start_state_list[YY_G(yy_start) + YY_AT_BOL()];"); } else indent_puts ("yy_current_state = yy_start_state_list[YY_G(yy_start)];"); } else { indent_puts ("yy_current_state = YY_G(yy_start);"); if (bol_needed) indent_puts ("yy_current_state += YY_AT_BOL();"); if (reject) { /* Set up for storing up states. */ outn ("m4_ifdef( [[M4_YY_USES_REJECT]],\n[["); indent_puts ("YY_G(yy_state_ptr) = YY_G(yy_state_buf);"); indent_puts ("*YY_G(yy_state_ptr)++ = yy_current_state;"); outn ("]])"); } } } /* gentabs - generate data statements for the transition tables */ void gentabs (void) { int i, j, k, *accset, nacc, *acc_array, total_states; int end_of_buffer_action = num_rules + 1; struct yytbl_data *yyacc_tbl = 0, *yymeta_tbl = 0, *yybase_tbl = 0, *yydef_tbl = 0, *yynxt_tbl = 0, *yychk_tbl = 0, *yyacclist_tbl=0; flex_int32_t *yyacc_data = 0, *yybase_data = 0, *yydef_data = 0, *yynxt_data = 0, *yychk_data = 0, *yyacclist_data=0; flex_int32_t yybase_curr = 0, yyacclist_curr=0,yyacc_curr=0; acc_array = allocate_integer_array (current_max_dfas); nummt = 0; /* The compressed table format jams by entering the "jam state", * losing information about the previous state in the process. * In order to recover the previous state, we effectively need * to keep backing-up information. */ ++num_backing_up; if (reject) { /* Write out accepting list and pointer list. * First we generate the "yy_acclist" array. In the process, * we compute the indices that will go into the "yy_accept" * array, and save the indices in the dfaacc array. */ int EOB_accepting_list[2]; /* Set up accepting structures for the End Of Buffer state. */ EOB_accepting_list[0] = 0; EOB_accepting_list[1] = end_of_buffer_action; accsiz[end_of_buffer_state] = 1; dfaacc[end_of_buffer_state].dfaacc_set = EOB_accepting_list; out_str_dec (long_align ? get_int32_decl () : get_int16_decl (), "yy_acclist", MAX (numas, 1) + 1); buf_prints (&yydmap_buf, "\t{YYTD_ID_ACCLIST, (void**)&yy_acclist, sizeof(%s)},\n", long_align ? "flex_int32_t" : "flex_int16_t"); yyacclist_tbl = calloc(1,sizeof(struct yytbl_data)); yytbl_data_init (yyacclist_tbl, YYTD_ID_ACCLIST); yyacclist_tbl->td_lolen = (flex_uint32_t) (MAX(numas,1) + 1); yyacclist_tbl->td_data = yyacclist_data = calloc(yyacclist_tbl->td_lolen, sizeof (flex_int32_t)); yyacclist_curr = 1; j = 1; /* index into "yy_acclist" array */ for (i = 1; i <= lastdfa; ++i) { acc_array[i] = j; if (accsiz[i] != 0) { accset = dfaacc[i].dfaacc_set; nacc = accsiz[i]; if (trace) fprintf (stderr, _("state # %d accepts: "), i); for (k = 1; k <= nacc; ++k) { int accnum = accset[k]; ++j; if (variable_trailing_context_rules && !(accnum & YY_TRAILING_HEAD_MASK) && accnum > 0 && accnum <= num_rules && rule_type[accnum] == RULE_VARIABLE) { /* Special hack to flag * accepting number as part * of trailing context rule. */ accnum |= YY_TRAILING_MASK; } mkdata (accnum); yyacclist_data[yyacclist_curr++] = accnum; if (trace) { fprintf (stderr, "[%d]", accset[k]); if (k < nacc) fputs (", ", stderr); else putc ('\n', stderr); } } } } /* add accepting number for the "jam" state */ acc_array[i] = j; dataend (); if (tablesext) { yytbl_data_compress (yyacclist_tbl); if (yytbl_data_fwrite (&tableswr, yyacclist_tbl) < 0) flexerror (_("Could not write yyacclist_tbl")); yytbl_data_destroy (yyacclist_tbl); yyacclist_tbl = NULL; } } else { dfaacc[end_of_buffer_state].dfaacc_state = end_of_buffer_action; for (i = 1; i <= lastdfa; ++i) acc_array[i] = dfaacc[i].dfaacc_state; /* add accepting number for jam state */ acc_array[i] = 0; } /* Begin generating yy_accept */ /* Spit out "yy_accept" array. If we're doing "reject", it'll be * pointers into the "yy_acclist" array. Otherwise it's actual * accepting numbers. In either case, we just dump the numbers. */ /* "lastdfa + 2" is the size of "yy_accept"; includes room for C arrays * beginning at 0 and for "jam" state. */ k = lastdfa + 2; if (reject) /* We put a "cap" on the table associating lists of accepting * numbers with state numbers. This is needed because we tell * where the end of an accepting list is by looking at where * the list for the next state starts. */ ++k; out_str_dec (long_align ? get_int32_decl () : get_int16_decl (), "yy_accept", k); buf_prints (&yydmap_buf, "\t{YYTD_ID_ACCEPT, (void**)&yy_accept, sizeof(%s)},\n", long_align ? "flex_int32_t" : "flex_int16_t"); yyacc_tbl = calloc(1, sizeof (struct yytbl_data)); yytbl_data_init (yyacc_tbl, YYTD_ID_ACCEPT); yyacc_tbl->td_lolen = (flex_uint32_t) k; yyacc_tbl->td_data = yyacc_data = calloc(yyacc_tbl->td_lolen, sizeof (flex_int32_t)); yyacc_curr=1; for (i = 1; i <= lastdfa; ++i) { mkdata (acc_array[i]); yyacc_data[yyacc_curr++] = acc_array[i]; if (!reject && trace && acc_array[i]) fprintf (stderr, _("state # %d accepts: [%d]\n"), i, acc_array[i]); } /* Add entry for "jam" state. */ mkdata (acc_array[i]); yyacc_data[yyacc_curr++] = acc_array[i]; if (reject) { /* Add "cap" for the list. */ mkdata (acc_array[i]); yyacc_data[yyacc_curr++] = acc_array[i]; } dataend (); if (tablesext) { yytbl_data_compress (yyacc_tbl); if (yytbl_data_fwrite (&tableswr, yyacc_tbl) < 0) flexerror (_("Could not write yyacc_tbl")); yytbl_data_destroy (yyacc_tbl); yyacc_tbl = NULL; } /* End generating yy_accept */ if (useecs) { genecs (); if (tablesext) { struct yytbl_data *tbl; tbl = mkecstbl (); yytbl_data_compress (tbl); if (yytbl_data_fwrite (&tableswr, tbl) < 0) flexerror (_("Could not write ecstbl")); yytbl_data_destroy (tbl); tbl = 0; } } if (usemecs) { /* Begin generating yy_meta */ /* Write out meta-equivalence classes (used to index * templates with). */ flex_int32_t *yymecs_data = 0; yymeta_tbl = calloc(1, sizeof (struct yytbl_data)); yytbl_data_init (yymeta_tbl, YYTD_ID_META); yymeta_tbl->td_lolen = (flex_uint32_t) (numecs + 1); yymeta_tbl->td_data = yymecs_data = calloc(yymeta_tbl->td_lolen, sizeof (flex_int32_t)); if (trace) fputs (_("\n\nMeta-Equivalence Classes:\n"), stderr); out_str_dec (get_yy_char_decl (), "yy_meta", numecs + 1); buf_prints (&yydmap_buf, "\t{YYTD_ID_META, (void**)&yy_meta, sizeof(%s)},\n", "YY_CHAR"); for (i = 1; i <= numecs; ++i) { if (trace) fprintf (stderr, "%d = %d\n", i, ABS (tecbck[i])); mkdata (ABS (tecbck[i])); yymecs_data[i] = ABS (tecbck[i]); } dataend (); if (tablesext) { yytbl_data_compress (yymeta_tbl); if (yytbl_data_fwrite (&tableswr, yymeta_tbl) < 0) flexerror (_ ("Could not write yymeta_tbl")); yytbl_data_destroy (yymeta_tbl); yymeta_tbl = NULL; } /* End generating yy_meta */ } total_states = lastdfa + numtemps; /* Begin generating yy_base */ out_str_dec ((tblend >= INT16_MAX || long_align) ? get_int32_decl () : get_int16_decl (), "yy_base", total_states + 1); buf_prints (&yydmap_buf, "\t{YYTD_ID_BASE, (void**)&yy_base, sizeof(%s)},\n", (tblend >= INT16_MAX || long_align) ? "flex_int32_t" : "flex_int16_t"); yybase_tbl = calloc (1, sizeof (struct yytbl_data)); yytbl_data_init (yybase_tbl, YYTD_ID_BASE); yybase_tbl->td_lolen = (flex_uint32_t) (total_states + 1); yybase_tbl->td_data = yybase_data = calloc(yybase_tbl->td_lolen, sizeof (flex_int32_t)); yybase_curr = 1; for (i = 1; i <= lastdfa; ++i) { int d = def[i]; if (base[i] == JAMSTATE) base[i] = jambase; if (d == JAMSTATE) def[i] = jamstate; else if (d < 0) { /* Template reference. */ ++tmpuses; def[i] = lastdfa - d + 1; } mkdata (base[i]); yybase_data[yybase_curr++] = base[i]; } /* Generate jam state's base index. */ mkdata (base[i]); yybase_data[yybase_curr++] = base[i]; for (++i /* skip jam state */ ; i <= total_states; ++i) { mkdata (base[i]); yybase_data[yybase_curr++] = base[i]; def[i] = jamstate; } dataend (); if (tablesext) { yytbl_data_compress (yybase_tbl); if (yytbl_data_fwrite (&tableswr, yybase_tbl) < 0) flexerror (_("Could not write yybase_tbl")); yytbl_data_destroy (yybase_tbl); yybase_tbl = NULL; } /* End generating yy_base */ /* Begin generating yy_def */ out_str_dec ((total_states >= INT16_MAX || long_align) ? get_int32_decl () : get_int16_decl (), "yy_def", total_states + 1); buf_prints (&yydmap_buf, "\t{YYTD_ID_DEF, (void**)&yy_def, sizeof(%s)},\n", (total_states >= INT16_MAX || long_align) ? "flex_int32_t" : "flex_int16_t"); yydef_tbl = calloc(1, sizeof (struct yytbl_data)); yytbl_data_init (yydef_tbl, YYTD_ID_DEF); yydef_tbl->td_lolen = (flex_uint32_t) (total_states + 1); yydef_tbl->td_data = yydef_data = calloc(yydef_tbl->td_lolen, sizeof (flex_int32_t)); for (i = 1; i <= total_states; ++i) { mkdata (def[i]); yydef_data[i] = def[i]; } dataend (); if (tablesext) { yytbl_data_compress (yydef_tbl); if (yytbl_data_fwrite (&tableswr, yydef_tbl) < 0) flexerror (_("Could not write yydef_tbl")); yytbl_data_destroy (yydef_tbl); yydef_tbl = NULL; } /* End generating yy_def */ /* Begin generating yy_nxt */ out_str_dec ((total_states >= INT16_MAX || long_align) ? get_int32_decl () : get_int16_decl (), "yy_nxt", tblend + 1); buf_prints (&yydmap_buf, "\t{YYTD_ID_NXT, (void**)&yy_nxt, sizeof(%s)},\n", (total_states >= INT16_MAX || long_align) ? "flex_int32_t" : "flex_int16_t"); yynxt_tbl = calloc (1, sizeof (struct yytbl_data)); yytbl_data_init (yynxt_tbl, YYTD_ID_NXT); yynxt_tbl->td_lolen = (flex_uint32_t) (tblend + 1); yynxt_tbl->td_data = yynxt_data = calloc (yynxt_tbl->td_lolen, sizeof (flex_int32_t)); for (i = 1; i <= tblend; ++i) { /* Note, the order of the following test is important. * If chk[i] is 0, then nxt[i] is undefined. */ if (chk[i] == 0 || nxt[i] == 0) nxt[i] = jamstate; /* new state is the JAM state */ mkdata (nxt[i]); yynxt_data[i] = nxt[i]; } dataend (); if (tablesext) { yytbl_data_compress (yynxt_tbl); if (yytbl_data_fwrite (&tableswr, yynxt_tbl) < 0) flexerror (_("Could not write yynxt_tbl")); yytbl_data_destroy (yynxt_tbl); yynxt_tbl = NULL; } /* End generating yy_nxt */ /* Begin generating yy_chk */ out_str_dec ((total_states >= INT16_MAX || long_align) ? get_int32_decl () : get_int16_decl (), "yy_chk", tblend + 1); buf_prints (&yydmap_buf, "\t{YYTD_ID_CHK, (void**)&yy_chk, sizeof(%s)},\n", (total_states >= INT16_MAX || long_align) ? "flex_int32_t" : "flex_int16_t"); yychk_tbl = calloc (1, sizeof (struct yytbl_data)); yytbl_data_init (yychk_tbl, YYTD_ID_CHK); yychk_tbl->td_lolen = (flex_uint32_t) (tblend + 1); yychk_tbl->td_data = yychk_data = calloc(yychk_tbl->td_lolen, sizeof (flex_int32_t)); for (i = 1; i <= tblend; ++i) { if (chk[i] == 0) ++nummt; mkdata (chk[i]); yychk_data[i] = chk[i]; } dataend (); if (tablesext) { yytbl_data_compress (yychk_tbl); if (yytbl_data_fwrite (&tableswr, yychk_tbl) < 0) flexerror (_("Could not write yychk_tbl")); yytbl_data_destroy (yychk_tbl); yychk_tbl = NULL; } /* End generating yy_chk */ free(acc_array); } /* Write out a formatted string (with a secondary string argument) at the * current indentation level, adding a final newline. */ void indent_put2s (const char *fmt, const char *arg) { do_indent (); out_str (fmt, arg); outn (""); } /* Write out a string at the current indentation level, adding a final * newline. */ void indent_puts (const char *str) { do_indent (); outn (str); } /* make_tables - generate transition tables and finishes generating output file */ void make_tables (void) { int i; int did_eof_rule = false; struct yytbl_data *yynultrans_tbl = NULL; skelout (); /* %% [2.0] - break point in skel */ /* First, take care of YY_DO_BEFORE_ACTION depending on yymore * being used. */ set_indent (1); if (yymore_used && !yytext_is_array) { indent_puts ("YY_G(yytext_ptr) -= YY_G(yy_more_len); \\"); indent_puts ("yyleng = (int) (yy_cp - YY_G(yytext_ptr)); \\"); } else indent_puts ("yyleng = (int) (yy_cp - yy_bp); \\"); /* Now also deal with copying yytext_ptr to yytext if needed. */ skelout (); /* %% [3.0] - break point in skel */ if (yytext_is_array) { if (yymore_used) indent_puts ("if ( yyleng + YY_G(yy_more_offset) >= YYLMAX ) \\"); else indent_puts ("if ( yyleng >= YYLMAX ) \\"); ++indent_level; indent_puts ("YY_FATAL_ERROR( \"token too large, exceeds YYLMAX\" ); \\"); --indent_level; if (yymore_used) { indent_puts ("yy_flex_strncpy( &yytext[YY_G(yy_more_offset)], YY_G(yytext_ptr), yyleng + 1 M4_YY_CALL_LAST_ARG); \\"); indent_puts ("yyleng += YY_G(yy_more_offset); \\"); indent_puts ("YY_G(yy_prev_more_offset) = YY_G(yy_more_offset); \\"); indent_puts ("YY_G(yy_more_offset) = 0; \\"); } else { indent_puts ("yy_flex_strncpy( yytext, YY_G(yytext_ptr), yyleng + 1 M4_YY_CALL_LAST_ARG); \\"); } } set_indent (0); skelout (); /* %% [4.0] - break point in skel */ /* This is where we REALLY begin generating the tables. */ out_dec ("#define YY_NUM_RULES %d\n", num_rules); out_dec ("#define YY_END_OF_BUFFER %d\n", num_rules + 1); if (fullspd) { /* Need to define the transet type as a size large * enough to hold the biggest offset. */ int total_table_size = tblend + numecs + 1; char *trans_offset_type = (total_table_size >= INT16_MAX || long_align) ? "flex_int32_t" : "flex_int16_t"; set_indent (0); indent_puts ("struct yy_trans_info"); ++indent_level; indent_puts ("{"); /* We require that yy_verify and yy_nxt must be of the same size int. */ indent_put2s ("%s yy_verify;", trans_offset_type); /* In cases where its sister yy_verify *is* a "yes, there is * a transition", yy_nxt is the offset (in records) to the * next state. In most cases where there is no transition, * the value of yy_nxt is irrelevant. If yy_nxt is the -1th * record of a state, though, then yy_nxt is the action number * for that state. */ indent_put2s ("%s yy_nxt;", trans_offset_type); indent_puts ("};"); --indent_level; } else { /* We generate a bogus 'struct yy_trans_info' data type * so we can guarantee that it is always declared in the skel. * This is so we can compile "sizeof(struct yy_trans_info)" * in any scanner. */ indent_puts ("/* This struct is not used in this scanner,"); indent_puts (" but its presence is necessary. */"); indent_puts ("struct yy_trans_info"); ++indent_level; indent_puts ("{"); indent_puts ("flex_int32_t yy_verify;"); indent_puts ("flex_int32_t yy_nxt;"); indent_puts ("};"); --indent_level; } if (fullspd) { genctbl (); if (tablesext) { struct yytbl_data *tbl; tbl = mkctbl (); yytbl_data_compress (tbl); if (yytbl_data_fwrite (&tableswr, tbl) < 0) flexerror (_("Could not write ftbl")); yytbl_data_destroy (tbl); tbl = mkssltbl (); yytbl_data_compress (tbl); if (yytbl_data_fwrite (&tableswr, tbl) < 0) flexerror (_("Could not write ssltbl")); yytbl_data_destroy (tbl); tbl = 0; if (useecs) { tbl = mkecstbl (); yytbl_data_compress (tbl); if (yytbl_data_fwrite (&tableswr, tbl) < 0) flexerror (_ ("Could not write ecstbl")); yytbl_data_destroy (tbl); tbl = 0; } } } else if (fulltbl) { genftbl (); if (tablesext) { struct yytbl_data *tbl; tbl = mkftbl (); yytbl_data_compress (tbl); if (yytbl_data_fwrite (&tableswr, tbl) < 0) flexerror (_("Could not write ftbl")); yytbl_data_destroy (tbl); tbl = 0; if (useecs) { tbl = mkecstbl (); yytbl_data_compress (tbl); if (yytbl_data_fwrite (&tableswr, tbl) < 0) flexerror (_ ("Could not write ecstbl")); yytbl_data_destroy (tbl); tbl = 0; } } } else gentabs (); if (do_yylineno) { geneoltbl (); if (tablesext) { struct yytbl_data *tbl; tbl = mkeoltbl (); yytbl_data_compress (tbl); if (yytbl_data_fwrite (&tableswr, tbl) < 0) flexerror (_("Could not write eoltbl")); yytbl_data_destroy (tbl); tbl = 0; } } /* Definitions for backing up. We don't need them if REJECT * is being used because then we use an alternative backin-up * technique instead. */ if (num_backing_up > 0 && !reject) { if (!C_plus_plus && !reentrant) { indent_puts ("static yy_state_type yy_last_accepting_state;"); indent_puts ("static char *yy_last_accepting_cpos;\n"); } } if (nultrans) { flex_int32_t *yynultrans_data = 0; /* Begin generating yy_NUL_trans */ out_str_dec (get_state_decl (), "yy_NUL_trans", lastdfa + 1); buf_prints (&yydmap_buf, "\t{YYTD_ID_NUL_TRANS, (void**)&yy_NUL_trans, sizeof(%s)},\n", (fullspd) ? "struct yy_trans_info*" : "flex_int32_t"); yynultrans_tbl = calloc(1, sizeof (struct yytbl_data)); yytbl_data_init (yynultrans_tbl, YYTD_ID_NUL_TRANS); if (fullspd) yynultrans_tbl->td_flags |= YYTD_PTRANS; yynultrans_tbl->td_lolen = (flex_uint32_t) (lastdfa + 1); yynultrans_tbl->td_data = yynultrans_data = calloc(yynultrans_tbl->td_lolen, sizeof (flex_int32_t)); for (i = 1; i <= lastdfa; ++i) { if (fullspd) { out_dec (" &yy_transition[%d],\n", base[i]); yynultrans_data[i] = base[i]; } else { mkdata (nultrans[i]); yynultrans_data[i] = nultrans[i]; } } dataend (); if (tablesext) { yytbl_data_compress (yynultrans_tbl); if (yytbl_data_fwrite (&tableswr, yynultrans_tbl) < 0) flexerror (_ ("Could not write yynultrans_tbl")); } if (yynultrans_tbl != NULL) { yytbl_data_destroy (yynultrans_tbl); yynultrans_tbl = NULL; } /* End generating yy_NUL_trans */ } if (!C_plus_plus && !reentrant) { indent_puts ("extern int yy_flex_debug;"); indent_put2s ("int yy_flex_debug = %s;\n", ddebug ? "1" : "0"); } if (ddebug) { /* Spit out table mapping rules to line numbers. */ out_str_dec (long_align ? get_int32_decl () : get_int16_decl (), "yy_rule_linenum", num_rules); for (i = 1; i < num_rules; ++i) mkdata (rule_linenum[i]); dataend (); } if (reject) { outn ("m4_ifdef( [[M4_YY_USES_REJECT]],\n[["); /* Declare state buffer variables. */ if (!C_plus_plus && !reentrant) { outn ("static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;"); outn ("static char *yy_full_match;"); outn ("static int yy_lp;"); } if (variable_trailing_context_rules) { if (!C_plus_plus && !reentrant) { outn ("static int yy_looking_for_trail_begin = 0;"); outn ("static int yy_full_lp;"); outn ("static int *yy_full_state;"); } out_hex ("#define YY_TRAILING_MASK 0x%x\n", (unsigned int) YY_TRAILING_MASK); out_hex ("#define YY_TRAILING_HEAD_MASK 0x%x\n", (unsigned int) YY_TRAILING_HEAD_MASK); } outn ("#define REJECT \\"); outn ("{ \\"); outn ("*yy_cp = YY_G(yy_hold_char); /* undo effects of setting up yytext */ \\"); outn ("yy_cp = YY_G(yy_full_match); /* restore poss. backed-over text */ \\"); if (variable_trailing_context_rules) { outn ("YY_G(yy_lp) = YY_G(yy_full_lp); /* restore orig. accepting pos. */ \\"); outn ("YY_G(yy_state_ptr) = YY_G(yy_full_state); /* restore orig. state */ \\"); outn ("yy_current_state = *YY_G(yy_state_ptr); /* restore curr. state */ \\"); } outn ("++YY_G(yy_lp); \\"); outn ("goto find_rule; \\"); outn ("}"); outn ("]])\n"); } else { outn ("/* The intent behind this definition is that it'll catch"); outn (" * any uses of REJECT which flex missed."); outn (" */"); outn ("#define REJECT reject_used_but_not_detected"); } if (yymore_used) { if (!C_plus_plus) { if (yytext_is_array) { if (!reentrant){ indent_puts ("static int yy_more_offset = 0;"); indent_puts ("static int yy_prev_more_offset = 0;"); } } else if (!reentrant) { indent_puts ("static int yy_more_flag = 0;"); indent_puts ("static int yy_more_len = 0;"); } } if (yytext_is_array) { indent_puts ("#define yymore() (YY_G(yy_more_offset) = yy_flex_strlen( yytext M4_YY_CALL_LAST_ARG))"); indent_puts ("#define YY_NEED_STRLEN"); indent_puts ("#define YY_MORE_ADJ 0"); indent_puts ("#define YY_RESTORE_YY_MORE_OFFSET \\"); ++indent_level; indent_puts ("{ \\"); indent_puts ("YY_G(yy_more_offset) = YY_G(yy_prev_more_offset); \\"); indent_puts ("yyleng -= YY_G(yy_more_offset); \\"); indent_puts ("}"); --indent_level; } else { indent_puts ("#define yymore() (YY_G(yy_more_flag) = 1)"); indent_puts ("#define YY_MORE_ADJ YY_G(yy_more_len)"); indent_puts ("#define YY_RESTORE_YY_MORE_OFFSET"); } } else { indent_puts ("#define yymore() yymore_used_but_not_detected"); indent_puts ("#define YY_MORE_ADJ 0"); indent_puts ("#define YY_RESTORE_YY_MORE_OFFSET"); } if (!C_plus_plus) { if (yytext_is_array) { outn ("#ifndef YYLMAX"); outn ("#define YYLMAX 8192"); outn ("#endif\n"); if (!reentrant){ outn ("char yytext[YYLMAX];"); outn ("char *yytext_ptr;"); } } else { if(! reentrant) outn ("char *yytext;"); } } out (&action_array[defs1_offset]); line_directive_out (stdout, 0); skelout (); /* %% [5.0] - break point in skel */ if (!C_plus_plus) { if (use_read) { outn ("\terrno=0; \\"); outn ("\twhile ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \\"); outn ("\t{ \\"); outn ("\t\tif( errno != EINTR) \\"); outn ("\t\t{ \\"); outn ("\t\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" ); \\"); outn ("\t\t\tbreak; \\"); outn ("\t\t} \\"); outn ("\t\terrno=0; \\"); outn ("\t\tclearerr(yyin); \\"); outn ("\t}\\"); } else { outn ("\tif ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \\"); outn ("\t\t{ \\"); outn ("\t\tint c = '*'; \\"); outn ("\t\tint n; \\"); outn ("\t\tfor ( n = 0; n < max_size && \\"); outn ("\t\t\t (c = getc( yyin )) != EOF && c != '\\n'; ++n ) \\"); outn ("\t\t\tbuf[n] = (char) c; \\"); outn ("\t\tif ( c == '\\n' ) \\"); outn ("\t\t\tbuf[n++] = (char) c; \\"); outn ("\t\tif ( c == EOF && ferror( yyin ) ) \\"); outn ("\t\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" ); \\"); outn ("\t\tresult = n; \\"); outn ("\t\t} \\"); outn ("\telse \\"); outn ("\t\t{ \\"); outn ("\t\terrno=0; \\"); outn ("\t\twhile ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \\"); outn ("\t\t\t{ \\"); outn ("\t\t\tif( errno != EINTR) \\"); outn ("\t\t\t\t{ \\"); outn ("\t\t\t\tYY_FATAL_ERROR( \"input in flex scanner failed\" ); \\"); outn ("\t\t\t\tbreak; \\"); outn ("\t\t\t\t} \\"); outn ("\t\t\terrno=0; \\"); outn ("\t\t\tclearerr(yyin); \\"); outn ("\t\t\t} \\"); outn ("\t\t}\\"); } } skelout (); /* %% [6.0] - break point in skel */ indent_puts ("#define YY_RULE_SETUP \\"); ++indent_level; if (bol_needed) { indent_puts ("if ( yyleng > 0 ) \\"); ++indent_level; indent_puts ("YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \\"); indent_puts ("\t\t(yytext[yyleng - 1] == '\\n'); \\"); --indent_level; } indent_puts ("YY_USER_ACTION"); --indent_level; skelout (); /* %% [7.0] - break point in skel */ /* Copy prolog to output file. */ out (&action_array[prolog_offset]); line_directive_out (stdout, 0); skelout (); /* %% [8.0] - break point in skel */ set_indent (2); if (yymore_used && !yytext_is_array) { indent_puts ("YY_G(yy_more_len) = 0;"); indent_puts ("if ( YY_G(yy_more_flag) )"); ++indent_level; indent_puts ("{"); indent_puts ("YY_G(yy_more_len) = (int) (YY_G(yy_c_buf_p) - YY_G(yytext_ptr));"); indent_puts ("YY_G(yy_more_flag) = 0;"); indent_puts ("}"); --indent_level; } skelout (); /* %% [9.0] - break point in skel */ gen_start_state (); /* Note, don't use any indentation. */ outn ("yy_match:"); gen_next_match (); skelout (); /* %% [10.0] - break point in skel */ set_indent (2); gen_find_action (); skelout (); /* %% [11.0] - break point in skel */ outn ("m4_ifdef( [[M4_YY_USE_LINENO]],[["); indent_puts ("if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )"); ++indent_level; indent_puts ("{"); indent_puts ("int yyl;"); do_indent (); out_str ("for ( yyl = %s; yyl < yyleng; ++yyl )\n", yymore_used ? (yytext_is_array ? "YY_G(yy_prev_more_offset)" : "YY_G(yy_more_len)") : "0"); ++indent_level; indent_puts ("if ( yytext[yyl] == '\\n' )"); ++indent_level; indent_puts ("M4_YY_INCR_LINENO();"); --indent_level; --indent_level; indent_puts ("}"); --indent_level; outn ("]])"); skelout (); /* %% [12.0] - break point in skel */ if (ddebug) { indent_puts ("if ( yy_flex_debug )"); ++indent_level; indent_puts ("{"); indent_puts ("if ( yy_act == 0 )"); ++indent_level; indent_puts (C_plus_plus ? "std::cerr << \"--scanner backing up\\n\";" : "fprintf( stderr, \"--scanner backing up\\n\" );"); --indent_level; do_indent (); out_dec ("else if ( yy_act < %d )\n", num_rules); ++indent_level; if (C_plus_plus) { indent_puts ("std::cerr << \"--accepting rule at line \" << yy_rule_linenum[yy_act] <<"); indent_puts (" \"(\\\"\" << yytext << \"\\\")\\n\";"); } else { indent_puts ("fprintf( stderr, \"--accepting rule at line %ld (\\\"%s\\\")\\n\","); indent_puts (" (long)yy_rule_linenum[yy_act], yytext );"); } --indent_level; do_indent (); out_dec ("else if ( yy_act == %d )\n", num_rules); ++indent_level; if (C_plus_plus) { indent_puts ("std::cerr << \"--accepting default rule (\\\"\" << yytext << \"\\\")\\n\";"); } else { indent_puts ("fprintf( stderr, \"--accepting default rule (\\\"%s\\\")\\n\","); indent_puts (" yytext );"); } --indent_level; do_indent (); out_dec ("else if ( yy_act == %d )\n", num_rules + 1); ++indent_level; indent_puts (C_plus_plus ? "std::cerr << \"--(end of buffer or a NUL)\\n\";" : "fprintf( stderr, \"--(end of buffer or a NUL)\\n\" );"); --indent_level; do_indent (); outn ("else"); ++indent_level; if (C_plus_plus) { indent_puts ("std::cerr << \"--EOF (start condition \" << YY_START << \")\\n\";"); } else { indent_puts ("fprintf( stderr, \"--EOF (start condition %d)\\n\", YY_START );"); } --indent_level; indent_puts ("}"); --indent_level; } /* Copy actions to output file. */ skelout (); /* %% [13.0] - break point in skel */ ++indent_level; gen_bu_action (); out (&action_array[action_offset]); line_directive_out (stdout, 0); /* generate cases for any missing EOF rules */ for (i = 1; i <= lastsc; ++i) if (!sceof[i]) { do_indent (); out_str ("case YY_STATE_EOF(%s):\n", scname[i]); did_eof_rule = true; } if (did_eof_rule) { ++indent_level; indent_puts ("yyterminate();"); --indent_level; } /* Generate code for handling NUL's, if needed. */ /* First, deal with backing up and setting up yy_cp if the scanner * finds that it should JAM on the NUL. */ skelout (); /* %% [14.0] - break point in skel */ set_indent (4); if (fullspd || fulltbl) indent_puts ("yy_cp = YY_G(yy_c_buf_p);"); else { /* compressed table */ if (!reject && !interactive) { /* Do the guaranteed-needed backing up to figure * out the match. */ indent_puts ("yy_cp = YY_G(yy_last_accepting_cpos);"); indent_puts ("yy_current_state = YY_G(yy_last_accepting_state);"); } else /* Still need to initialize yy_cp, though * yy_current_state was set up by * yy_get_previous_state(). */ indent_puts ("yy_cp = YY_G(yy_c_buf_p);"); } /* Generate code for yy_get_previous_state(). */ set_indent (1); skelout (); /* %% [15.0] - break point in skel */ gen_start_state (); set_indent (2); skelout (); /* %% [16.0] - break point in skel */ gen_next_state (true); set_indent (1); skelout (); /* %% [17.0] - break point in skel */ gen_NUL_trans (); skelout (); /* %% [18.0] - break point in skel */ skelout (); /* %% [19.0] - break point in skel */ /* Update BOL and yylineno inside of input(). */ if (bol_needed) { indent_puts ("YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\\n');"); if (do_yylineno) { indent_puts ("if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )"); ++indent_level; indent_puts ("M4_YY_INCR_LINENO();"); --indent_level; } } else if (do_yylineno) { indent_puts ("if ( c == '\\n' )"); ++indent_level; indent_puts ("M4_YY_INCR_LINENO();"); --indent_level; } skelout (); /* Copy remainder of input to output. */ line_directive_out (stdout, 1); if (sectnum == 3) { OUT_BEGIN_CODE (); if (!no_section3_escape) fputs("[[", stdout); (void) flexscan (); /* copy remainder of input to output */ if (!no_section3_escape) fputs("]]", stdout); OUT_END_CODE (); } } flex-2.6.4/src/options.h0000664000175000017500000000621313002262300012025 00000000000000/* flex - tool to generate fast lexical analyzers */ /* Copyright (c) 1990 The Regents of the University of California. */ /* All rights reserved. */ /* This code is derived from software contributed to Berkeley by */ /* Vern Paxson. */ /* The United States Government has rights in this work pursuant */ /* to contract no. DE-AC03-76SF00098 between the United States */ /* Department of Energy and the University of California. */ /* This file is part of flex. */ /* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ /* are met: */ /* 1. Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* 2. Redistributions in binary form must reproduce the above copyright */ /* notice, this list of conditions and the following disclaimer in the */ /* documentation and/or other materials provided with the distribution. */ /* Neither the name of the University nor the names of its contributors */ /* may be used to endorse or promote products derived from this software */ /* without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */ /* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */ /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ /* PURPOSE. */ #ifndef OPTIONS_H #define OPTIONS_H #include "scanopt.h" extern optspec_t flexopts[]; enum flexopt_flag_t { /* Use positive integers only, since they are return codes for scanopt. * Order is not important. */ OPT_7BIT = 1, OPT_8BIT, OPT_ALIGN, OPT_ALWAYS_INTERACTIVE, OPT_ARRAY, OPT_BACKUP, OPT_BATCH, OPT_BISON_BRIDGE, OPT_BISON_BRIDGE_LOCATIONS, OPT_CASE_INSENSITIVE, OPT_COMPRESSION, OPT_CPLUSPLUS, OPT_DEBUG, OPT_DEFAULT, OPT_DONOTHING, OPT_ECS, OPT_FAST, OPT_FULL, OPT_HEADER_FILE, OPT_HELP, OPT_HEX, OPT_INTERACTIVE, OPT_LEX_COMPAT, OPT_POSIX_COMPAT, OPT_MAIN, OPT_META_ECS, OPT_NEVER_INTERACTIVE, OPT_NO_ALIGN, OPT_NO_DEBUG, OPT_NO_DEFAULT, OPT_NO_ECS, OPT_NO_LINE, OPT_NO_MAIN, OPT_NO_META_ECS, OPT_NO_REENTRANT, OPT_NO_REJECT, OPT_NO_STDINIT, OPT_NO_UNPUT, OPT_NO_WARN, OPT_NO_YYGET_EXTRA, OPT_NO_YYGET_IN, OPT_NO_YYGET_LENG, OPT_NO_YYGET_LINENO, OPT_NO_YYGET_LLOC, OPT_NO_YYGET_LVAL, OPT_NO_YYGET_OUT, OPT_NO_YYGET_TEXT, OPT_NO_YYLINENO, OPT_NO_YYMORE, OPT_NO_YYSET_EXTRA, OPT_NO_YYSET_IN, OPT_NO_YYSET_LINENO, OPT_NO_YYSET_LLOC, OPT_NO_YYSET_LVAL, OPT_NO_YYSET_OUT, OPT_NO_YYWRAP, OPT_NO_YY_POP_STATE, OPT_NO_YY_PUSH_STATE, OPT_NO_YY_SCAN_BUFFER, OPT_NO_YY_SCAN_BYTES, OPT_NO_YY_SCAN_STRING, OPT_NO_YY_TOP_STATE, OPT_OUTFILE, OPT_PERF_REPORT, OPT_POINTER, OPT_PREFIX, OPT_PREPROCDEFINE, OPT_PREPROC_LEVEL, OPT_READ, OPT_REENTRANT, OPT_REJECT, OPT_SKEL, OPT_STACK, OPT_STDINIT, OPT_STDOUT, OPT_TABLES_FILE, OPT_TABLES_VERIFY, OPT_TRACE, OPT_NO_UNISTD_H, OPT_VERBOSE, OPT_VERSION, OPT_WARN, OPT_YYCLASS, OPT_YYLINENO, OPT_YYMORE, OPT_YYWRAP, OPT_NO_SECT3_ESCAPE, }; #endif /* vim:set tabstop=8 softtabstop=4 shiftwidth=4 textwidth=0: */ flex-2.6.4/src/parse.c0000664000175000017500000024540013103361154011453 00000000000000/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.0.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 0 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Copy the first part of user declarations. */ #line 34 "parse.y" /* yacc.c:339 */ /* Copyright (c) 1990 The Regents of the University of California. */ /* All rights reserved. */ /* This code is derived from software contributed to Berkeley by */ /* Vern Paxson. */ /* The United States Government has rights in this work pursuant */ /* to contract no. DE-AC03-76SF00098 between the United States */ /* Department of Energy and the University of California. */ /* This file is part of flex. */ /* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ /* are met: */ /* 1. Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* 2. Redistributions in binary form must reproduce the above copyright */ /* notice, this list of conditions and the following disclaimer in the */ /* documentation and/or other materials provided with the distribution. */ /* Neither the name of the University nor the names of its contributors */ /* may be used to endorse or promote products derived from this software */ /* without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */ /* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */ /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ /* PURPOSE. */ #include "flexdef.h" #include "tables.h" int pat, scnum, eps, headcnt, trailcnt, lastchar, i, rulelen; int trlcontxt, xcluflg, currccl, cclsorted, varlength, variable_trail_rule; int *scon_stk; int scon_stk_ptr; static int madeany = false; /* whether we've made the '.' character class */ static int ccldot, cclany; int previous_continued_action; /* whether the previous rule's action was '|' */ #define format_warn3(fmt, a1, a2) \ do{ \ char fw3_msg[MAXLINE];\ snprintf( fw3_msg, MAXLINE,(fmt), (a1), (a2) );\ lwarn( fw3_msg );\ }while(0) /* Expand a POSIX character class expression. */ #define CCL_EXPR(func) \ do{ \ int c; \ for ( c = 0; c < csize; ++c ) \ if ( isascii(c) && func(c) ) \ ccladd( currccl, c ); \ }while(0) /* negated class */ #define CCL_NEG_EXPR(func) \ do{ \ int c; \ for ( c = 0; c < csize; ++c ) \ if ( !func(c) ) \ ccladd( currccl, c ); \ }while(0) /* While POSIX defines isblank(), it's not ANSI C. */ #define IS_BLANK(c) ((c) == ' ' || (c) == '\t') /* On some over-ambitious machines, such as DEC Alpha's, the default * token type is "long" instead of "int"; this leads to problems with * declaring yylval in flexdef.h. But so far, all the yacc's I've seen * wrap their definitions of YYSTYPE with "#ifndef YYSTYPE"'s, so the * following should ensure that the default token type is "int". */ #define YYSTYPE int #line 149 "parse.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* In a future release of Bison, this section will be replaced by #include "y.tab.h". */ #ifndef YY_YY_PARSE_H_INCLUDED # define YY_YY_PARSE_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int yydebug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { CHAR = 258, NUMBER = 259, SECTEND = 260, SCDECL = 261, XSCDECL = 262, NAME = 263, PREVCCL = 264, EOF_OP = 265, TOK_OPTION = 266, TOK_OUTFILE = 267, TOK_PREFIX = 268, TOK_YYCLASS = 269, TOK_HEADER_FILE = 270, TOK_EXTRA_TYPE = 271, TOK_TABLES_FILE = 272, CCE_ALNUM = 273, CCE_ALPHA = 274, CCE_BLANK = 275, CCE_CNTRL = 276, CCE_DIGIT = 277, CCE_GRAPH = 278, CCE_LOWER = 279, CCE_PRINT = 280, CCE_PUNCT = 281, CCE_SPACE = 282, CCE_UPPER = 283, CCE_XDIGIT = 284, CCE_NEG_ALNUM = 285, CCE_NEG_ALPHA = 286, CCE_NEG_BLANK = 287, CCE_NEG_CNTRL = 288, CCE_NEG_DIGIT = 289, CCE_NEG_GRAPH = 290, CCE_NEG_LOWER = 291, CCE_NEG_PRINT = 292, CCE_NEG_PUNCT = 293, CCE_NEG_SPACE = 294, CCE_NEG_UPPER = 295, CCE_NEG_XDIGIT = 296, CCL_OP_DIFF = 297, CCL_OP_UNION = 298, BEGIN_REPEAT_POSIX = 299, END_REPEAT_POSIX = 300, BEGIN_REPEAT_FLEX = 301, END_REPEAT_FLEX = 302 }; #endif /* Tokens. */ #define CHAR 258 #define NUMBER 259 #define SECTEND 260 #define SCDECL 261 #define XSCDECL 262 #define NAME 263 #define PREVCCL 264 #define EOF_OP 265 #define TOK_OPTION 266 #define TOK_OUTFILE 267 #define TOK_PREFIX 268 #define TOK_YYCLASS 269 #define TOK_HEADER_FILE 270 #define TOK_EXTRA_TYPE 271 #define TOK_TABLES_FILE 272 #define CCE_ALNUM 273 #define CCE_ALPHA 274 #define CCE_BLANK 275 #define CCE_CNTRL 276 #define CCE_DIGIT 277 #define CCE_GRAPH 278 #define CCE_LOWER 279 #define CCE_PRINT 280 #define CCE_PUNCT 281 #define CCE_SPACE 282 #define CCE_UPPER 283 #define CCE_XDIGIT 284 #define CCE_NEG_ALNUM 285 #define CCE_NEG_ALPHA 286 #define CCE_NEG_BLANK 287 #define CCE_NEG_CNTRL 288 #define CCE_NEG_DIGIT 289 #define CCE_NEG_GRAPH 290 #define CCE_NEG_LOWER 291 #define CCE_NEG_PRINT 292 #define CCE_NEG_PUNCT 293 #define CCE_NEG_SPACE 294 #define CCE_NEG_UPPER 295 #define CCE_NEG_XDIGIT 296 #define CCL_OP_DIFF 297 #define CCL_OP_UNION 298 #define BEGIN_REPEAT_POSIX 299 #define END_REPEAT_POSIX 300 #define BEGIN_REPEAT_FLEX 301 #define END_REPEAT_FLEX 302 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif extern YYSTYPE yylval; int yyparse (void); #endif /* !YY_YY_PARSE_H_INCLUDED */ /* Copy the second part of user declarations. */ #line 294 "parse.c" /* yacc.c:358 */ #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YY_ATTRIBUTE # if (defined __GNUC__ \ && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C # define YY_ATTRIBUTE(Spec) __attribute__(Spec) # else # define YY_ATTRIBUTE(Spec) /* empty */ # endif #endif #ifndef YY_ATTRIBUTE_PURE # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) #endif #ifndef YY_ATTRIBUTE_UNUSED # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) #endif #if !defined _Noreturn \ && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) # if defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn YY_ATTRIBUTE ((__noreturn__)) # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 3 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 161 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 69 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 27 /* YYNRULES -- Number of rules. */ #define YYNRULES 97 /* YYNSTATES -- Number of states. */ #define YYNSTATES 140 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 302 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex, without out-of-bounds checking. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 63, 2, 57, 2, 2, 2, 64, 65, 55, 60, 56, 68, 62, 59, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 53, 48, 54, 61, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 66, 2, 67, 52, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 58, 51, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { 0, 118, 118, 148, 155, 156, 157, 158, 162, 170, 173, 177, 180, 183, 187, 190, 191, 194, 199, 201, 205, 207, 209, 213, 215, 217, 221, 233, 269, 293, 316, 321, 324, 327, 345, 348, 350, 352, 356, 379, 435, 438, 481, 499, 505, 510, 537, 545, 548, 576, 590, 612, 619, 625, 631, 659, 673, 692, 726, 744, 754, 757, 760, 775, 776, 777, 782, 784, 791, 851, 869, 877, 885, 886, 887, 888, 889, 890, 891, 896, 897, 898, 899, 900, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 922, 930, 946 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "CHAR", "NUMBER", "SECTEND", "SCDECL", "XSCDECL", "NAME", "PREVCCL", "EOF_OP", "TOK_OPTION", "TOK_OUTFILE", "TOK_PREFIX", "TOK_YYCLASS", "TOK_HEADER_FILE", "TOK_EXTRA_TYPE", "TOK_TABLES_FILE", "CCE_ALNUM", "CCE_ALPHA", "CCE_BLANK", "CCE_CNTRL", "CCE_DIGIT", "CCE_GRAPH", "CCE_LOWER", "CCE_PRINT", "CCE_PUNCT", "CCE_SPACE", "CCE_UPPER", "CCE_XDIGIT", "CCE_NEG_ALNUM", "CCE_NEG_ALPHA", "CCE_NEG_BLANK", "CCE_NEG_CNTRL", "CCE_NEG_DIGIT", "CCE_NEG_GRAPH", "CCE_NEG_LOWER", "CCE_NEG_PRINT", "CCE_NEG_PUNCT", "CCE_NEG_SPACE", "CCE_NEG_UPPER", "CCE_NEG_XDIGIT", "CCL_OP_DIFF", "CCL_OP_UNION", "BEGIN_REPEAT_POSIX", "END_REPEAT_POSIX", "BEGIN_REPEAT_FLEX", "END_REPEAT_FLEX", "'='", "'\\n'", "'{'", "'}'", "'^'", "'<'", "'>'", "'*'", "','", "'$'", "'|'", "'/'", "'+'", "'?'", "'.'", "'\"'", "'('", "')'", "'['", "']'", "'-'", "$accept", "goal", "initlex", "sect1", "sect1end", "startconddecl", "namelist1", "options", "optionlist", "option", "sect2", "initforrule", "flexrule", "scon_stk_ptr", "scon", "namelist2", "sconname", "rule", "re", "re2", "series", "singleton", "fullccl", "braceccl", "ccl", "ccl_expr", "string", YY_NULLPTR }; #endif # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 61, 10, 123, 125, 94, 60, 62, 42, 44, 36, 124, 47, 43, 63, 46, 34, 40, 41, 91, 93, 45 }; # endif #define YYPACT_NINF -52 #define yypact_value_is_default(Yystate) \ (!!((Yystate) == (-52))) #define YYTABLE_NINF -27 #define yytable_value_is_error(Yytable_value) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { -52, 17, 103, -52, -52, 113, -52, -52, -52, -52, -52, 48, -52, 114, 6, -52, -52, 42, 7, 12, 58, 77, 88, 89, -52, 43, -52, 73, -52, 130, 131, 132, 133, 134, 135, 90, 91, -52, -1, -52, -52, -52, -52, -52, -52, -52, -52, -52, 40, -52, 44, -52, -52, -52, -52, 39, -52, -52, 39, 93, 97, -52, -12, 39, 49, 61, -31, -52, -52, 139, -52, -52, 1, -51, -52, 0, -52, -52, 39, -52, 75, 144, 61, 145, -52, -52, -52, 84, 84, -52, -52, -52, -52, 50, 83, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 49, -52, -40, 10, -52, -52, -52, 149, -52, 9, -52, -3, -52, 108, -52, 107, -52, -52, -52 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 3, 0, 0, 1, 7, 0, 8, 9, 10, 16, 25, 0, 5, 14, 34, 13, 12, 4, 0, 0, 0, 0, 0, 0, 15, 31, 2, 26, 11, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 17, 19, 20, 21, 18, 22, 33, 37, 38, 0, 36, 34, 30, 62, 59, 29, 0, 57, 97, 0, 71, 0, 28, 42, 0, 44, 47, 58, 65, 32, 0, 24, 27, 0, 0, 71, 0, 23, 41, 0, 45, 39, 0, 46, 0, 51, 52, 53, 0, 0, 35, 96, 60, 61, 0, 69, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 82, 84, 85, 86, 87, 88, 89, 94, 90, 91, 92, 95, 93, 66, 70, 43, 40, 0, 0, 63, 64, 67, 0, 50, 0, 56, 0, 68, 0, 49, 0, 55, 48, 54 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, 118, 129, -52, -52, -52, -52, 92, 102, -48, -52, 80, -21, -52, 47, 85, -52, -52 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 1, 2, 5, 10, 11, 17, 12, 13, 24, 14, 26, 60, 36, 27, 48, 49, 61, 62, 63, 64, 65, 66, 67, 75, 120, 72 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { 51, 136, 52, 94, 90, 129, -26, 78, 53, 54, 73, 87, 88, 134, 92, 80, 130, 3, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 52, 82, 137, 77, 78, 79, 53, 15, 28, 55, 52, 94, 135, 29, 16, 131, 53, 25, 30, 56, 57, 58, 91, 59, 132, 119, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 46, 81, 68, 70, 69, 25, 35, 47, 82, 56, 57, 58, 4, 59, 31, 83, -6, -6, -6, 56, 57, 58, -6, 59, 84, 127, 6, 7, 8, 85, 86, 37, 9, 32, 18, 19, 20, 21, 22, 23, 122, 78, 125, 126, 33, 34, 39, 40, 41, 42, 43, 44, 45, 74, 76, 47, 123, 124, 59, 128, 133, 138, 139, 50, 38, 71, 121, 93, 0, 89 }; static const yytype_int8 yycheck[] = { 1, 4, 3, 3, 3, 45, 0, 58, 9, 10, 58, 42, 43, 4, 65, 63, 56, 0, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 3, 64, 47, 57, 58, 59, 9, 1, 8, 52, 3, 3, 45, 48, 8, 47, 9, 53, 48, 62, 63, 64, 63, 66, 56, 67, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 1, 44, 54, 51, 56, 53, 55, 8, 121, 62, 63, 64, 1, 66, 48, 46, 5, 6, 7, 62, 63, 64, 11, 66, 55, 67, 5, 6, 7, 60, 61, 50, 11, 48, 12, 13, 14, 15, 16, 17, 57, 58, 87, 88, 48, 48, 8, 8, 8, 8, 8, 8, 54, 52, 49, 8, 4, 4, 66, 68, 3, 45, 47, 37, 27, 55, 78, 74, -1, 69 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 70, 71, 0, 1, 72, 5, 6, 7, 11, 73, 74, 76, 77, 79, 1, 8, 75, 12, 13, 14, 15, 16, 17, 78, 53, 80, 83, 8, 48, 48, 48, 48, 48, 48, 55, 82, 50, 80, 8, 8, 8, 8, 8, 8, 54, 1, 8, 84, 85, 79, 1, 3, 9, 10, 52, 62, 63, 64, 66, 81, 86, 87, 88, 89, 90, 91, 92, 54, 56, 51, 86, 95, 87, 52, 93, 49, 57, 58, 59, 87, 44, 90, 46, 55, 60, 61, 42, 43, 85, 3, 63, 65, 93, 3, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 67, 94, 89, 57, 4, 4, 92, 92, 67, 68, 45, 56, 47, 56, 3, 4, 45, 4, 47, 45, 47 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 69, 70, 71, 72, 72, 72, 72, 73, 74, 74, 75, 75, 75, 76, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 80, 81, 81, 81, 81, 82, 83, 83, 83, 84, 84, 84, 85, 86, 86, 86, 86, 87, 87, 88, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 92, 92, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 5, 0, 3, 2, 0, 1, 1, 1, 1, 2, 1, 1, 2, 2, 0, 3, 3, 3, 3, 3, 3, 5, 5, 0, 0, 2, 1, 1, 1, 0, 4, 3, 0, 3, 1, 1, 1, 2, 3, 2, 1, 3, 1, 2, 2, 1, 6, 5, 4, 2, 2, 2, 6, 5, 4, 1, 1, 1, 3, 3, 1, 3, 3, 1, 3, 4, 4, 2, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) /* This macro is provided for backward compatibility. */ #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*----------------------------------------. | Print this symbol's value on YYOUTPUT. | `----------------------------------------*/ static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) { FILE *yyo = yyoutput; YYUSE (yyo); if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # endif YYUSE (yytype); } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) { YYFPRINTF (yyoutput, "%s %s (", yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) { unsigned long int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yystos[yyssp[yyi + 1 - yynrhs]], &(yyvsp[(yyi + 1) - (yynrhs)]) ); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, Rule); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ static YYSIZE_T yystrlen (const char *yystr) { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * yystpcpy (char *yydest, const char *yysrc) { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } } } } switch (yycount) { # define YYCASE_(N, S) \ case N: \ yyformat = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { YYSIZE_T yysize1 = yysize + yystrlen (yyformat); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); YY_IGNORE_MAYBE_UNINITIALIZED_END } /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; /*----------. | yyparse. | `----------*/ int yyparse (void) { int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = yylex (); } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: #line 119 "parse.y" /* yacc.c:1646 */ { /* add default rule */ int def_rule; pat = cclinit(); cclnegate( pat ); def_rule = mkstate( -pat ); /* Remember the number of the default rule so we * don't generate "can't match" warnings for it. */ default_rule = num_rules; finish_rule( def_rule, false, 0, 0, 0); for ( i = 1; i <= lastsc; ++i ) scset[i] = mkbranch( scset[i], def_rule ); if ( spprdflt ) add_action( "YY_FATAL_ERROR( \"flex scanner jammed\" )" ); else add_action( "ECHO" ); add_action( ";\n\tYY_BREAK]]\n" ); } #line 1512 "parse.c" /* yacc.c:1646 */ break; case 3: #line 148 "parse.y" /* yacc.c:1646 */ { /* initialize for processing rules */ /* Create default DFA start condition. */ scinstal( "INITIAL", false ); } #line 1522 "parse.c" /* yacc.c:1646 */ break; case 7: #line 159 "parse.y" /* yacc.c:1646 */ { synerr( _("unknown error processing section 1") ); } #line 1528 "parse.c" /* yacc.c:1646 */ break; case 8: #line 163 "parse.y" /* yacc.c:1646 */ { check_options(); scon_stk = allocate_integer_array( lastsc + 1 ); scon_stk_ptr = 0; } #line 1538 "parse.c" /* yacc.c:1646 */ break; case 9: #line 171 "parse.y" /* yacc.c:1646 */ { xcluflg = false; } #line 1544 "parse.c" /* yacc.c:1646 */ break; case 10: #line 174 "parse.y" /* yacc.c:1646 */ { xcluflg = true; } #line 1550 "parse.c" /* yacc.c:1646 */ break; case 11: #line 178 "parse.y" /* yacc.c:1646 */ { scinstal( nmstr, xcluflg ); } #line 1556 "parse.c" /* yacc.c:1646 */ break; case 12: #line 181 "parse.y" /* yacc.c:1646 */ { scinstal( nmstr, xcluflg ); } #line 1562 "parse.c" /* yacc.c:1646 */ break; case 13: #line 184 "parse.y" /* yacc.c:1646 */ { synerr( _("bad start condition list") ); } #line 1568 "parse.c" /* yacc.c:1646 */ break; case 17: #line 195 "parse.y" /* yacc.c:1646 */ { outfilename = xstrdup(nmstr); did_outfilename = 1; } #line 1577 "parse.c" /* yacc.c:1646 */ break; case 18: #line 200 "parse.y" /* yacc.c:1646 */ { extra_type = xstrdup(nmstr); } #line 1583 "parse.c" /* yacc.c:1646 */ break; case 19: #line 202 "parse.y" /* yacc.c:1646 */ { prefix = xstrdup(nmstr); if (strchr(prefix, '[') || strchr(prefix, ']')) flexerror(_("Prefix must not contain [ or ]")); } #line 1591 "parse.c" /* yacc.c:1646 */ break; case 20: #line 206 "parse.y" /* yacc.c:1646 */ { yyclass = xstrdup(nmstr); } #line 1597 "parse.c" /* yacc.c:1646 */ break; case 21: #line 208 "parse.y" /* yacc.c:1646 */ { headerfilename = xstrdup(nmstr); } #line 1603 "parse.c" /* yacc.c:1646 */ break; case 22: #line 210 "parse.y" /* yacc.c:1646 */ { tablesext = true; tablesfilename = xstrdup(nmstr); } #line 1609 "parse.c" /* yacc.c:1646 */ break; case 23: #line 214 "parse.y" /* yacc.c:1646 */ { scon_stk_ptr = (yyvsp[-3]); } #line 1615 "parse.c" /* yacc.c:1646 */ break; case 24: #line 216 "parse.y" /* yacc.c:1646 */ { scon_stk_ptr = (yyvsp[-3]); } #line 1621 "parse.c" /* yacc.c:1646 */ break; case 26: #line 221 "parse.y" /* yacc.c:1646 */ { /* Initialize for a parse of one rule. */ trlcontxt = variable_trail_rule = varlength = false; trailcnt = headcnt = rulelen = 0; current_state_type = STATE_NORMAL; previous_continued_action = continued_action; in_rule = true; new_rule(); } #line 1636 "parse.c" /* yacc.c:1646 */ break; case 27: #line 234 "parse.y" /* yacc.c:1646 */ { pat = (yyvsp[0]); finish_rule( pat, variable_trail_rule, headcnt, trailcnt , previous_continued_action); if ( scon_stk_ptr > 0 ) { for ( i = 1; i <= scon_stk_ptr; ++i ) scbol[scon_stk[i]] = mkbranch( scbol[scon_stk[i]], pat ); } else { /* Add to all non-exclusive start conditions, * including the default (0) start condition. */ for ( i = 1; i <= lastsc; ++i ) if ( ! scxclu[i] ) scbol[i] = mkbranch( scbol[i], pat ); } if ( ! bol_needed ) { bol_needed = true; if ( performance_report > 1 ) pinpoint_message( "'^' operator results in sub-optimal performance" ); } } #line 1675 "parse.c" /* yacc.c:1646 */ break; case 28: #line 270 "parse.y" /* yacc.c:1646 */ { pat = (yyvsp[0]); finish_rule( pat, variable_trail_rule, headcnt, trailcnt , previous_continued_action); if ( scon_stk_ptr > 0 ) { for ( i = 1; i <= scon_stk_ptr; ++i ) scset[scon_stk[i]] = mkbranch( scset[scon_stk[i]], pat ); } else { for ( i = 1; i <= lastsc; ++i ) if ( ! scxclu[i] ) scset[i] = mkbranch( scset[i], pat ); } } #line 1702 "parse.c" /* yacc.c:1646 */ break; case 29: #line 294 "parse.y" /* yacc.c:1646 */ { if ( scon_stk_ptr > 0 ) build_eof_action(); else { /* This EOF applies to all start conditions * which don't already have EOF actions. */ for ( i = 1; i <= lastsc; ++i ) if ( ! sceof[i] ) scon_stk[++scon_stk_ptr] = i; if ( scon_stk_ptr == 0 ) lwarn( "all start conditions already have <> rules" ); else build_eof_action(); } } #line 1728 "parse.c" /* yacc.c:1646 */ break; case 30: #line 317 "parse.y" /* yacc.c:1646 */ { synerr( _("unrecognized rule") ); } #line 1734 "parse.c" /* yacc.c:1646 */ break; case 31: #line 321 "parse.y" /* yacc.c:1646 */ { (yyval) = scon_stk_ptr; } #line 1740 "parse.c" /* yacc.c:1646 */ break; case 32: #line 325 "parse.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[-2]); } #line 1746 "parse.c" /* yacc.c:1646 */ break; case 33: #line 328 "parse.y" /* yacc.c:1646 */ { (yyval) = scon_stk_ptr; for ( i = 1; i <= lastsc; ++i ) { int j; for ( j = 1; j <= scon_stk_ptr; ++j ) if ( scon_stk[j] == i ) break; if ( j > scon_stk_ptr ) scon_stk[++scon_stk_ptr] = i; } } #line 1766 "parse.c" /* yacc.c:1646 */ break; case 34: #line 345 "parse.y" /* yacc.c:1646 */ { (yyval) = scon_stk_ptr; } #line 1772 "parse.c" /* yacc.c:1646 */ break; case 37: #line 353 "parse.y" /* yacc.c:1646 */ { synerr( _("bad start condition list") ); } #line 1778 "parse.c" /* yacc.c:1646 */ break; case 38: #line 357 "parse.y" /* yacc.c:1646 */ { if ( (scnum = sclookup( nmstr )) == 0 ) format_pinpoint_message( "undeclared start condition %s", nmstr ); else { for ( i = 1; i <= scon_stk_ptr; ++i ) if ( scon_stk[i] == scnum ) { format_warn( "<%s> specified twice", scname[scnum] ); break; } if ( i > scon_stk_ptr ) scon_stk[++scon_stk_ptr] = scnum; } } #line 1803 "parse.c" /* yacc.c:1646 */ break; case 39: #line 380 "parse.y" /* yacc.c:1646 */ { if ( transchar[lastst[(yyvsp[0])]] != SYM_EPSILON ) /* Provide final transition \now/ so it * will be marked as a trailing context * state. */ (yyvsp[0]) = link_machines( (yyvsp[0]), mkstate( SYM_EPSILON ) ); mark_beginning_as_normal( (yyvsp[0]) ); current_state_type = STATE_NORMAL; if ( previous_continued_action ) { /* We need to treat this as variable trailing * context so that the backup does not happen * in the action but before the action switch * statement. If the backup happens in the * action, then the rules "falling into" this * one's action will *also* do the backup, * erroneously. */ if ( ! varlength || headcnt != 0 ) lwarn( "trailing context made variable due to preceding '|' action" ); /* Mark as variable. */ varlength = true; headcnt = 0; } if ( lex_compat || (varlength && headcnt == 0) ) { /* variable trailing context rule */ /* Mark the first part of the rule as the * accepting "head" part of a trailing * context rule. * * By the way, we didn't do this at the * beginning of this production because back * then current_state_type was set up for a * trail rule, and add_accept() can create * a new state ... */ add_accept( (yyvsp[-1]), num_rules | YY_TRAILING_HEAD_MASK ); variable_trail_rule = true; } else trailcnt = rulelen; (yyval) = link_machines( (yyvsp[-1]), (yyvsp[0]) ); } #line 1862 "parse.c" /* yacc.c:1646 */ break; case 40: #line 436 "parse.y" /* yacc.c:1646 */ { synerr( _("trailing context used twice") ); } #line 1868 "parse.c" /* yacc.c:1646 */ break; case 41: #line 439 "parse.y" /* yacc.c:1646 */ { headcnt = 0; trailcnt = 1; rulelen = 1; varlength = false; current_state_type = STATE_TRAILING_CONTEXT; if ( trlcontxt ) { synerr( _("trailing context used twice") ); (yyval) = mkstate( SYM_EPSILON ); } else if ( previous_continued_action ) { /* See the comment in the rule for "re2 re" * above. */ lwarn( "trailing context made variable due to preceding '|' action" ); varlength = true; } if ( lex_compat || varlength ) { /* Again, see the comment in the rule for * "re2 re" above. */ add_accept( (yyvsp[-1]), num_rules | YY_TRAILING_HEAD_MASK ); variable_trail_rule = true; } trlcontxt = true; eps = mkstate( SYM_EPSILON ); (yyval) = link_machines( (yyvsp[-1]), link_machines( eps, mkstate( '\n' ) ) ); } #line 1914 "parse.c" /* yacc.c:1646 */ break; case 42: #line 482 "parse.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[0]); if ( trlcontxt ) { if ( lex_compat || (varlength && headcnt == 0) ) /* Both head and trail are * variable-length. */ variable_trail_rule = true; else trailcnt = rulelen; } } #line 1933 "parse.c" /* yacc.c:1646 */ break; case 43: #line 500 "parse.y" /* yacc.c:1646 */ { varlength = true; (yyval) = mkor( (yyvsp[-2]), (yyvsp[0]) ); } #line 1942 "parse.c" /* yacc.c:1646 */ break; case 44: #line 506 "parse.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[0]); } #line 1948 "parse.c" /* yacc.c:1646 */ break; case 45: #line 511 "parse.y" /* yacc.c:1646 */ { /* This rule is written separately so the * reduction will occur before the trailing * series is parsed. */ if ( trlcontxt ) synerr( _("trailing context used twice") ); else trlcontxt = true; if ( varlength ) /* We hope the trailing context is * fixed-length. */ varlength = false; else headcnt = rulelen; rulelen = 0; current_state_type = STATE_TRAILING_CONTEXT; (yyval) = (yyvsp[-1]); } #line 1977 "parse.c" /* yacc.c:1646 */ break; case 46: #line 538 "parse.y" /* yacc.c:1646 */ { /* This is where concatenation of adjacent patterns * gets done. */ (yyval) = link_machines( (yyvsp[-1]), (yyvsp[0]) ); } #line 1988 "parse.c" /* yacc.c:1646 */ break; case 47: #line 546 "parse.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[0]); } #line 1994 "parse.c" /* yacc.c:1646 */ break; case 48: #line 549 "parse.y" /* yacc.c:1646 */ { varlength = true; if ( (yyvsp[-3]) > (yyvsp[-1]) || (yyvsp[-3]) < 0 ) { synerr( _("bad iteration values") ); (yyval) = (yyvsp[-5]); } else { if ( (yyvsp[-3]) == 0 ) { if ( (yyvsp[-1]) <= 0 ) { synerr( _("bad iteration values") ); (yyval) = (yyvsp[-5]); } else (yyval) = mkopt( mkrep( (yyvsp[-5]), 1, (yyvsp[-1]) ) ); } else (yyval) = mkrep( (yyvsp[-5]), (yyvsp[-3]), (yyvsp[-1]) ); } } #line 2025 "parse.c" /* yacc.c:1646 */ break; case 49: #line 577 "parse.y" /* yacc.c:1646 */ { varlength = true; if ( (yyvsp[-2]) <= 0 ) { synerr( _("iteration value must be positive") ); (yyval) = (yyvsp[-4]); } else (yyval) = mkrep( (yyvsp[-4]), (yyvsp[-2]), INFINITE_REPEAT ); } #line 2042 "parse.c" /* yacc.c:1646 */ break; case 50: #line 591 "parse.y" /* yacc.c:1646 */ { /* The series could be something like "(foo)", * in which case we have no idea what its length * is, so we punt here. */ varlength = true; if ( (yyvsp[-1]) <= 0 ) { synerr( _("iteration value must be positive") ); (yyval) = (yyvsp[-3]); } else (yyval) = link_machines( (yyvsp[-3]), copysingl( (yyvsp[-3]), (yyvsp[-1]) - 1 ) ); } #line 2065 "parse.c" /* yacc.c:1646 */ break; case 51: #line 613 "parse.y" /* yacc.c:1646 */ { varlength = true; (yyval) = mkclos( (yyvsp[-1]) ); } #line 2075 "parse.c" /* yacc.c:1646 */ break; case 52: #line 620 "parse.y" /* yacc.c:1646 */ { varlength = true; (yyval) = mkposcl( (yyvsp[-1]) ); } #line 2084 "parse.c" /* yacc.c:1646 */ break; case 53: #line 626 "parse.y" /* yacc.c:1646 */ { varlength = true; (yyval) = mkopt( (yyvsp[-1]) ); } #line 2093 "parse.c" /* yacc.c:1646 */ break; case 54: #line 632 "parse.y" /* yacc.c:1646 */ { varlength = true; if ( (yyvsp[-3]) > (yyvsp[-1]) || (yyvsp[-3]) < 0 ) { synerr( _("bad iteration values") ); (yyval) = (yyvsp[-5]); } else { if ( (yyvsp[-3]) == 0 ) { if ( (yyvsp[-1]) <= 0 ) { synerr( _("bad iteration values") ); (yyval) = (yyvsp[-5]); } else (yyval) = mkopt( mkrep( (yyvsp[-5]), 1, (yyvsp[-1]) ) ); } else (yyval) = mkrep( (yyvsp[-5]), (yyvsp[-3]), (yyvsp[-1]) ); } } #line 2124 "parse.c" /* yacc.c:1646 */ break; case 55: #line 660 "parse.y" /* yacc.c:1646 */ { varlength = true; if ( (yyvsp[-2]) <= 0 ) { synerr( _("iteration value must be positive") ); (yyval) = (yyvsp[-4]); } else (yyval) = mkrep( (yyvsp[-4]), (yyvsp[-2]), INFINITE_REPEAT ); } #line 2141 "parse.c" /* yacc.c:1646 */ break; case 56: #line 674 "parse.y" /* yacc.c:1646 */ { /* The singleton could be something like "(foo)", * in which case we have no idea what its length * is, so we punt here. */ varlength = true; if ( (yyvsp[-1]) <= 0 ) { synerr( _("iteration value must be positive") ); (yyval) = (yyvsp[-3]); } else (yyval) = link_machines( (yyvsp[-3]), copysingl( (yyvsp[-3]), (yyvsp[-1]) - 1 ) ); } #line 2163 "parse.c" /* yacc.c:1646 */ break; case 57: #line 693 "parse.y" /* yacc.c:1646 */ { if ( ! madeany ) { /* Create the '.' character class. */ ccldot = cclinit(); ccladd( ccldot, '\n' ); cclnegate( ccldot ); if ( useecs ) mkeccl( ccltbl + cclmap[ccldot], ccllen[ccldot], nextecm, ecgroup, csize, csize ); /* Create the (?s:'.') character class. */ cclany = cclinit(); cclnegate( cclany ); if ( useecs ) mkeccl( ccltbl + cclmap[cclany], ccllen[cclany], nextecm, ecgroup, csize, csize ); madeany = true; } ++rulelen; if (sf_dot_all()) (yyval) = mkstate( -cclany ); else (yyval) = mkstate( -ccldot ); } #line 2200 "parse.c" /* yacc.c:1646 */ break; case 58: #line 727 "parse.y" /* yacc.c:1646 */ { /* Sort characters for fast searching. */ qsort( ccltbl + cclmap[(yyvsp[0])], (size_t) ccllen[(yyvsp[0])], sizeof (*ccltbl), cclcmp ); if ( useecs ) mkeccl( ccltbl + cclmap[(yyvsp[0])], ccllen[(yyvsp[0])], nextecm, ecgroup, csize, csize ); ++rulelen; if (ccl_has_nl[(yyvsp[0])]) rule_has_nl[num_rules] = true; (yyval) = mkstate( -(yyvsp[0]) ); } #line 2221 "parse.c" /* yacc.c:1646 */ break; case 59: #line 745 "parse.y" /* yacc.c:1646 */ { ++rulelen; if (ccl_has_nl[(yyvsp[0])]) rule_has_nl[num_rules] = true; (yyval) = mkstate( -(yyvsp[0]) ); } #line 2234 "parse.c" /* yacc.c:1646 */ break; case 60: #line 755 "parse.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[-1]); } #line 2240 "parse.c" /* yacc.c:1646 */ break; case 61: #line 758 "parse.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[-1]); } #line 2246 "parse.c" /* yacc.c:1646 */ break; case 62: #line 761 "parse.y" /* yacc.c:1646 */ { ++rulelen; if ((yyvsp[0]) == nlch) rule_has_nl[num_rules] = true; if (sf_case_ins() && has_case((yyvsp[0]))) /* create an alternation, as in (a|A) */ (yyval) = mkor (mkstate((yyvsp[0])), mkstate(reverse_case((yyvsp[0])))); else (yyval) = mkstate( (yyvsp[0]) ); } #line 2263 "parse.c" /* yacc.c:1646 */ break; case 63: #line 775 "parse.y" /* yacc.c:1646 */ { (yyval) = ccl_set_diff ((yyvsp[-2]), (yyvsp[0])); } #line 2269 "parse.c" /* yacc.c:1646 */ break; case 64: #line 776 "parse.y" /* yacc.c:1646 */ { (yyval) = ccl_set_union ((yyvsp[-2]), (yyvsp[0])); } #line 2275 "parse.c" /* yacc.c:1646 */ break; case 66: #line 782 "parse.y" /* yacc.c:1646 */ { (yyval) = (yyvsp[-1]); } #line 2281 "parse.c" /* yacc.c:1646 */ break; case 67: #line 785 "parse.y" /* yacc.c:1646 */ { cclnegate( (yyvsp[-1]) ); (yyval) = (yyvsp[-1]); } #line 2290 "parse.c" /* yacc.c:1646 */ break; case 68: #line 792 "parse.y" /* yacc.c:1646 */ { if (sf_case_ins()) { /* If one end of the range has case and the other * does not, or the cases are different, then we're not * sure what range the user is trying to express. * Examples: [@-z] or [S-t] */ if (has_case ((yyvsp[-2])) != has_case ((yyvsp[0])) || (has_case ((yyvsp[-2])) && (b_islower ((yyvsp[-2])) != b_islower ((yyvsp[0])))) || (has_case ((yyvsp[-2])) && (b_isupper ((yyvsp[-2])) != b_isupper ((yyvsp[0]))))) format_warn3 ( _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"), (yyvsp[-2]), (yyvsp[0])); /* If the range spans uppercase characters but not * lowercase (or vice-versa), then should we automatically * include lowercase characters in the range? * Example: [@-_] spans [a-z] but not [A-Z] */ else if (!has_case ((yyvsp[-2])) && !has_case ((yyvsp[0])) && !range_covers_case ((yyvsp[-2]), (yyvsp[0]))) format_warn3 ( _("the character range [%c-%c] is ambiguous in a case-insensitive scanner"), (yyvsp[-2]), (yyvsp[0])); } if ( (yyvsp[-2]) > (yyvsp[0]) ) synerr( _("negative range in character class") ); else { for ( i = (yyvsp[-2]); i <= (yyvsp[0]); ++i ) ccladd( (yyvsp[-3]), i ); /* Keep track if this ccl is staying in * alphabetical order. */ cclsorted = cclsorted && ((yyvsp[-2]) > lastchar); lastchar = (yyvsp[0]); /* Do it again for upper/lowercase */ if (sf_case_ins() && has_case((yyvsp[-2])) && has_case((yyvsp[0]))){ (yyvsp[-2]) = reverse_case ((yyvsp[-2])); (yyvsp[0]) = reverse_case ((yyvsp[0])); for ( i = (yyvsp[-2]); i <= (yyvsp[0]); ++i ) ccladd( (yyvsp[-3]), i ); cclsorted = cclsorted && ((yyvsp[-2]) > lastchar); lastchar = (yyvsp[0]); } } (yyval) = (yyvsp[-3]); } #line 2353 "parse.c" /* yacc.c:1646 */ break; case 69: #line 852 "parse.y" /* yacc.c:1646 */ { ccladd( (yyvsp[-1]), (yyvsp[0]) ); cclsorted = cclsorted && ((yyvsp[0]) > lastchar); lastchar = (yyvsp[0]); /* Do it again for upper/lowercase */ if (sf_case_ins() && has_case((yyvsp[0]))){ (yyvsp[0]) = reverse_case ((yyvsp[0])); ccladd ((yyvsp[-1]), (yyvsp[0])); cclsorted = cclsorted && ((yyvsp[0]) > lastchar); lastchar = (yyvsp[0]); } (yyval) = (yyvsp[-1]); } #line 2374 "parse.c" /* yacc.c:1646 */ break; case 70: #line 870 "parse.y" /* yacc.c:1646 */ { /* Too hard to properly maintain cclsorted. */ cclsorted = false; (yyval) = (yyvsp[-1]); } #line 2384 "parse.c" /* yacc.c:1646 */ break; case 71: #line 877 "parse.y" /* yacc.c:1646 */ { cclsorted = true; lastchar = 0; currccl = (yyval) = cclinit(); } #line 2394 "parse.c" /* yacc.c:1646 */ break; case 72: #line 885 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(isalnum); } #line 2400 "parse.c" /* yacc.c:1646 */ break; case 73: #line 886 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(isalpha); } #line 2406 "parse.c" /* yacc.c:1646 */ break; case 74: #line 887 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(IS_BLANK); } #line 2412 "parse.c" /* yacc.c:1646 */ break; case 75: #line 888 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(iscntrl); } #line 2418 "parse.c" /* yacc.c:1646 */ break; case 76: #line 889 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(isdigit); } #line 2424 "parse.c" /* yacc.c:1646 */ break; case 77: #line 890 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(isgraph); } #line 2430 "parse.c" /* yacc.c:1646 */ break; case 78: #line 891 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(islower); if (sf_case_ins()) CCL_EXPR(isupper); } #line 2440 "parse.c" /* yacc.c:1646 */ break; case 79: #line 896 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(isprint); } #line 2446 "parse.c" /* yacc.c:1646 */ break; case 80: #line 897 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(ispunct); } #line 2452 "parse.c" /* yacc.c:1646 */ break; case 81: #line 898 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(isspace); } #line 2458 "parse.c" /* yacc.c:1646 */ break; case 82: #line 899 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(isxdigit); } #line 2464 "parse.c" /* yacc.c:1646 */ break; case 83: #line 900 "parse.y" /* yacc.c:1646 */ { CCL_EXPR(isupper); if (sf_case_ins()) CCL_EXPR(islower); } #line 2474 "parse.c" /* yacc.c:1646 */ break; case 84: #line 906 "parse.y" /* yacc.c:1646 */ { CCL_NEG_EXPR(isalnum); } #line 2480 "parse.c" /* yacc.c:1646 */ break; case 85: #line 907 "parse.y" /* yacc.c:1646 */ { CCL_NEG_EXPR(isalpha); } #line 2486 "parse.c" /* yacc.c:1646 */ break; case 86: #line 908 "parse.y" /* yacc.c:1646 */ { CCL_NEG_EXPR(IS_BLANK); } #line 2492 "parse.c" /* yacc.c:1646 */ break; case 87: #line 909 "parse.y" /* yacc.c:1646 */ { CCL_NEG_EXPR(iscntrl); } #line 2498 "parse.c" /* yacc.c:1646 */ break; case 88: #line 910 "parse.y" /* yacc.c:1646 */ { CCL_NEG_EXPR(isdigit); } #line 2504 "parse.c" /* yacc.c:1646 */ break; case 89: #line 911 "parse.y" /* yacc.c:1646 */ { CCL_NEG_EXPR(isgraph); } #line 2510 "parse.c" /* yacc.c:1646 */ break; case 90: #line 912 "parse.y" /* yacc.c:1646 */ { CCL_NEG_EXPR(isprint); } #line 2516 "parse.c" /* yacc.c:1646 */ break; case 91: #line 913 "parse.y" /* yacc.c:1646 */ { CCL_NEG_EXPR(ispunct); } #line 2522 "parse.c" /* yacc.c:1646 */ break; case 92: #line 914 "parse.y" /* yacc.c:1646 */ { CCL_NEG_EXPR(isspace); } #line 2528 "parse.c" /* yacc.c:1646 */ break; case 93: #line 915 "parse.y" /* yacc.c:1646 */ { CCL_NEG_EXPR(isxdigit); } #line 2534 "parse.c" /* yacc.c:1646 */ break; case 94: #line 916 "parse.y" /* yacc.c:1646 */ { if ( sf_case_ins() ) lwarn(_("[:^lower:] is ambiguous in case insensitive scanner")); else CCL_NEG_EXPR(islower); } #line 2545 "parse.c" /* yacc.c:1646 */ break; case 95: #line 922 "parse.y" /* yacc.c:1646 */ { if ( sf_case_ins() ) lwarn(_("[:^upper:] ambiguous in case insensitive scanner")); else CCL_NEG_EXPR(isupper); } #line 2556 "parse.c" /* yacc.c:1646 */ break; case 96: #line 931 "parse.y" /* yacc.c:1646 */ { if ( (yyvsp[0]) == nlch ) rule_has_nl[num_rules] = true; ++rulelen; if (sf_case_ins() && has_case((yyvsp[0]))) (yyval) = mkor (mkstate((yyvsp[0])), mkstate(reverse_case((yyvsp[0])))); else (yyval) = mkstate ((yyvsp[0])); (yyval) = link_machines( (yyvsp[-1]), (yyval)); } #line 2574 "parse.c" /* yacc.c:1646 */ break; case 97: #line 946 "parse.y" /* yacc.c:1646 */ { (yyval) = mkstate( SYM_EPSILON ); } #line 2580 "parse.c" /* yacc.c:1646 */ break; #line 2584 "parse.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror (yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } # undef YYSYNTAX_ERROR #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif return yyresult; } #line 949 "parse.y" /* yacc.c:1906 */ /* build_eof_action - build the "<>" action for the active start * conditions */ void build_eof_action(void) { int i; char action_text[MAXLINE]; for ( i = 1; i <= scon_stk_ptr; ++i ) { if ( sceof[scon_stk[i]] ) format_pinpoint_message( "multiple <> rules for start condition %s", scname[scon_stk[i]] ); else { sceof[scon_stk[i]] = true; if (previous_continued_action /* && previous action was regular */) add_action("YY_RULE_SETUP\n"); snprintf( action_text, sizeof(action_text), "case YY_STATE_EOF(%s):\n", scname[scon_stk[i]] ); add_action( action_text ); } } line_directive_out(NULL, 1); add_action("[["); /* This isn't a normal rule after all - don't count it as * such, so we don't have any holes in the rule numbering * (which make generating "rule can never match" warnings * more difficult. */ --num_rules; ++num_eof_rules; } /* format_synerr - write out formatted syntax error */ void format_synerr( const char *msg, const char arg[] ) { char errmsg[MAXLINE]; (void) snprintf( errmsg, sizeof(errmsg), msg, arg ); synerr( errmsg ); } /* synerr - report a syntax error */ void synerr( const char *str ) { syntaxerror = true; pinpoint_message( str ); } /* format_warn - write out formatted warning */ void format_warn( const char *msg, const char arg[] ) { char warn_msg[MAXLINE]; snprintf( warn_msg, sizeof(warn_msg), msg, arg ); lwarn( warn_msg ); } /* lwarn - report a warning, unless -w was given */ void lwarn( const char *str ) { line_warning( str, linenum ); } /* format_pinpoint_message - write out a message formatted with one string, * pinpointing its location */ void format_pinpoint_message( const char *msg, const char arg[] ) { char errmsg[MAXLINE]; snprintf( errmsg, sizeof(errmsg), msg, arg ); pinpoint_message( errmsg ); } /* pinpoint_message - write out a message, pinpointing its location */ void pinpoint_message( const char *str ) { line_pinpoint( str, linenum ); } /* line_warning - report a warning at a given line, unless -w was given */ void line_warning( const char *str, int line ) { char warning[MAXLINE]; if ( ! nowarn ) { snprintf( warning, sizeof(warning), "warning, %s", str ); line_pinpoint( warning, line ); } } /* line_pinpoint - write out a message, pinpointing it at the given line */ void line_pinpoint( const char *str, int line ) { fprintf( stderr, "%s:%d: %s\n", infilename, line, str ); } /* yyerror - eat up an error message from the parser; * currently, messages are ignore */ void yyerror( const char *msg ) { (void)msg; } flex-2.6.4/src/scanflags.c0000664000175000017500000000431713002262300012271 00000000000000/* scanflags - flags used by scanning. */ /* Copyright (c) 1990 The Regents of the University of California. */ /* All rights reserved. */ /* This code is derived from software contributed to Berkeley by */ /* Vern Paxson. */ /* The United States Government has rights in this work pursuant */ /* to contract no. DE-AC03-76SF00098 between the United States */ /* Department of Energy and the University of California. */ /* This file is part of flex. */ /* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ /* are met: */ /* 1. Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* 2. Redistributions in binary form must reproduce the above copyright */ /* notice, this list of conditions and the following disclaimer in the */ /* documentation and/or other materials provided with the distribution. */ /* Neither the name of the University nor the names of its contributors */ /* may be used to endorse or promote products derived from this software */ /* without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */ /* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */ /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ /* PURPOSE. */ #include "flexdef.h" scanflags_t* _sf_stk = NULL; size_t _sf_top_ix=0, _sf_max=0; void sf_push (void) { if (_sf_top_ix + 1 >= _sf_max) { _sf_max += 32; _sf_stk = realloc(_sf_stk, sizeof(scanflags_t) * _sf_max); } // copy the top element _sf_stk[_sf_top_ix + 1] = _sf_stk[_sf_top_ix]; ++_sf_top_ix; } void sf_pop (void) { assert(_sf_top_ix > 0); --_sf_top_ix; } /* one-time initialization. Should be called before any sf_ functions. */ void sf_init (void) { assert(_sf_stk == NULL); _sf_max = 32; _sf_stk = malloc(sizeof(scanflags_t) * _sf_max); if (!_sf_stk) lerr_fatal(_("Unable to allocate %zu of stack"), sizeof(scanflags_t)); _sf_stk[_sf_top_ix] = 0; } /* vim:set expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */ flex-2.6.4/src/tables.c0000664000175000017500000003220613002262300011600 00000000000000/* tables.c - tables serialization code * * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. * * This code is derived from software contributed to Berkeley by * Vern Paxson. * * The United States Government has rights in this work pursuant * to contract no. DE-AC03-76SF00098 between the United States * Department of Energy and the University of California. * * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #include "flexdef.h" #include "tables.h" /** Convert size_t to t_flag. * @param n in {1,2,4} * @return YYTD_DATA*. */ #define BYTES2TFLAG(n)\ (((n) == sizeof(flex_int8_t))\ ? YYTD_DATA8\ :(((n)== sizeof(flex_int16_t))\ ? YYTD_DATA16\ : YYTD_DATA32)) /** Clear YYTD_DATA* bit flags * @return the flag with the YYTD_DATA* bits cleared */ #define TFLAGS_CLRDATA(flg) ((flg) & ~(YYTD_DATA8 | YYTD_DATA16 | YYTD_DATA32)) int yytbl_write32 (struct yytbl_writer *wr, flex_uint32_t v); int yytbl_write16 (struct yytbl_writer *wr, flex_uint16_t v); int yytbl_write8 (struct yytbl_writer *wr, flex_uint8_t v); int yytbl_writen (struct yytbl_writer *wr, void *v, int len); static flex_int32_t yytbl_data_geti (const struct yytbl_data *tbl, int i); /* XXX Not used static flex_int32_t yytbl_data_getijk (const struct yytbl_data *tbl, int i, int j, int k); */ /** Initialize the table writer. * @param wr an uninitialized writer * @param out the output file * @return 0 on success */ int yytbl_writer_init (struct yytbl_writer *wr, FILE * out) { wr->out = out; wr->total_written = 0; return 0; } /** Initialize a table header. * @param th The uninitialized structure * @param version_str the version string * @param name the name of this table set */ int yytbl_hdr_init (struct yytbl_hdr *th, const char *version_str, const char *name) { memset (th, 0, sizeof (struct yytbl_hdr)); th->th_magic = YYTBL_MAGIC; th->th_hsize = (flex_uint32_t) (14 + strlen (version_str) + 1 + strlen (name) + 1); th->th_hsize += yypad64 (th->th_hsize); th->th_ssize = 0; // Not known at this point. th->th_flags = 0; th->th_version = xstrdup(version_str); th->th_name = xstrdup(name); return 0; } /** Allocate and initialize a table data structure. * @param td a pointer to an uninitialized table * @param id the table identifier * @return 0 on success */ int yytbl_data_init (struct yytbl_data *td, enum yytbl_id id) { memset (td, 0, sizeof (struct yytbl_data)); td->td_id = id; td->td_flags = YYTD_DATA32; return 0; } /** Clean up table and data array. * @param td will be destroyed * @return 0 on success */ int yytbl_data_destroy (struct yytbl_data *td) { free(td->td_data); td->td_data = 0; free (td); return 0; } /** Write enough padding to bring the file pointer to a 64-bit boundary. */ static int yytbl_write_pad64 (struct yytbl_writer *wr) { int pad, bwritten = 0; pad = yypad64 (wr->total_written); while (pad-- > 0) if (yytbl_write8 (wr, 0) < 0) return -1; else bwritten++; return bwritten; } /** write the header. * @param wr the output stream * @param th table header to be written * @return -1 on error, or bytes written on success. */ int yytbl_hdr_fwrite (struct yytbl_writer *wr, const struct yytbl_hdr *th) { int sz, rv; int bwritten = 0; if (yytbl_write32 (wr, th->th_magic) < 0 || yytbl_write32 (wr, th->th_hsize) < 0) flex_die (_("th_magic|th_hsize write32 failed")); bwritten += 8; if (fgetpos (wr->out, &(wr->th_ssize_pos)) != 0) flex_die (_("fgetpos failed")); if (yytbl_write32 (wr, th->th_ssize) < 0 || yytbl_write16 (wr, th->th_flags) < 0) flex_die (_("th_ssize|th_flags write failed")); bwritten += 6; sz = (int) strlen (th->th_version) + 1; if ((rv = yytbl_writen (wr, th->th_version, sz)) != sz) flex_die (_("th_version writen failed")); bwritten += rv; sz = (int) strlen (th->th_name) + 1; if ((rv = yytbl_writen (wr, th->th_name, sz)) != sz) flex_die (_("th_name writen failed")); bwritten += rv; /* add padding */ if ((rv = yytbl_write_pad64 (wr)) < 0) flex_die (_("pad64 failed")); bwritten += rv; /* Sanity check */ if (bwritten != (int) th->th_hsize) flex_die (_("pad64 failed")); return bwritten; } /** Write this table. * @param wr the file writer * @param td table data to be written * @return -1 on error, or bytes written on success. */ int yytbl_data_fwrite (struct yytbl_writer *wr, struct yytbl_data *td) { int rv; flex_int32_t bwritten = 0; flex_int32_t i, total_len; fpos_t pos; if ((rv = yytbl_write16 (wr, td->td_id)) < 0) return -1; bwritten += rv; if ((rv = yytbl_write16 (wr, td->td_flags)) < 0) return -1; bwritten += rv; if ((rv = yytbl_write32 (wr, td->td_hilen)) < 0) return -1; bwritten += rv; if ((rv = yytbl_write32 (wr, td->td_lolen)) < 0) return -1; bwritten += rv; total_len = yytbl_calc_total_len (td); for (i = 0; i < total_len; i++) { switch (YYTDFLAGS2BYTES (td->td_flags)) { case sizeof (flex_int8_t): rv = yytbl_write8 (wr, (flex_uint8_t) yytbl_data_geti (td, i)); break; case sizeof (flex_int16_t): rv = yytbl_write16 (wr, (flex_uint16_t) yytbl_data_geti (td, i)); break; case sizeof (flex_int32_t): rv = yytbl_write32 (wr, (flex_uint32_t) yytbl_data_geti (td, i)); break; default: flex_die (_("invalid td_flags detected")); } if (rv < 0) { flex_die (_("error while writing tables")); return -1; } bwritten += rv; } /* Sanity check */ if (bwritten != (12 + total_len * (int) YYTDFLAGS2BYTES (td->td_flags))) { flex_die (_("insanity detected")); return -1; } /* add padding */ if ((rv = yytbl_write_pad64 (wr)) < 0) { flex_die (_("pad64 failed")); return -1; } bwritten += rv; /* Now go back and update the th_hsize member */ if (fgetpos (wr->out, &pos) != 0 || fsetpos (wr->out, &(wr->th_ssize_pos)) != 0 || yytbl_write32 (wr, (flex_uint32_t) wr->total_written) < 0 || fsetpos (wr->out, &pos)) { flex_die (_("get|set|fwrite32 failed")); return -1; } else /* Don't count the int we just wrote. */ wr->total_written -= (int) sizeof (flex_int32_t); return bwritten; } /** Write n bytes. * @param wr the table writer * @param v data to be written * @param len number of bytes * @return -1 on error. number of bytes written on success. */ int yytbl_writen (struct yytbl_writer *wr, void *v, int len) { int rv; rv = (int) fwrite (v, 1, (size_t) len, wr->out); if (rv != len) return -1; wr->total_written += len; return len; } /** Write four bytes in network byte order * @param wr the table writer * @param v a dword in host byte order * @return -1 on error. number of bytes written on success. */ int yytbl_write32 (struct yytbl_writer *wr, flex_uint32_t v) { flex_uint32_t vnet; int bytes, rv; vnet = htonl (v); bytes = (int) sizeof (flex_uint32_t); rv = (int) fwrite (&vnet, (size_t) bytes, 1, wr->out); if (rv != 1) return -1; wr->total_written += bytes; return bytes; } /** Write two bytes in network byte order. * @param wr the table writer * @param v a word in host byte order * @return -1 on error. number of bytes written on success. */ int yytbl_write16 (struct yytbl_writer *wr, flex_uint16_t v) { flex_uint16_t vnet; int bytes, rv; vnet = htons (v); bytes = (int) sizeof (flex_uint16_t); rv = (int) fwrite (&vnet, (size_t) bytes, 1, wr->out); if (rv != 1) return -1; wr->total_written += bytes; return bytes; } /** Write a byte. * @param wr the table writer * @param v the value to be written * @return -1 on error. number of bytes written on success. */ int yytbl_write8 (struct yytbl_writer *wr, flex_uint8_t v) { int bytes, rv; bytes = (int) sizeof (flex_uint8_t); rv = (int) fwrite (&v, (size_t) bytes, 1, wr->out); if (rv != 1) return -1; wr->total_written += bytes; return bytes; } /* XXX Not Used */ #if 0 /** Extract data element [i][j] from array data tables. * @param tbl data table * @param i index into higher dimension array. i should be zero for one-dimensional arrays. * @param j index into lower dimension array. * @param k index into struct, must be 0 or 1. Only valid for YYTD_ID_TRANSITION table * @return data[i][j + k] */ static flex_int32_t yytbl_data_getijk (const struct yytbl_data *tbl, int i, int j, int k) { flex_int32_t lo; k %= 2; lo = tbl->td_lolen; switch (YYTDFLAGS2BYTES (tbl->td_flags)) { case sizeof (flex_int8_t): return ((flex_int8_t *) (tbl->td_data))[(i * lo + j) * (k + 1) + k]; case sizeof (flex_int16_t): return ((flex_int16_t *) (tbl->td_data))[(i * lo + j) * (k + 1) + k]; case sizeof (flex_int32_t): return ((flex_int32_t *) (tbl->td_data))[(i * lo + j) * (k + 1) + k]; default: flex_die (_("invalid td_flags detected")); break; } return 0; } #endif /* Not used */ /** Extract data element [i] from array data tables treated as a single flat array of integers. * Be careful for 2-dimensional arrays or for YYTD_ID_TRANSITION, which is an array * of structs. * @param tbl data table * @param i index into array. * @return data[i] */ static flex_int32_t yytbl_data_geti (const struct yytbl_data *tbl, int i) { switch (YYTDFLAGS2BYTES (tbl->td_flags)) { case sizeof (flex_int8_t): return ((flex_int8_t *) (tbl->td_data))[i]; case sizeof (flex_int16_t): return ((flex_int16_t *) (tbl->td_data))[i]; case sizeof (flex_int32_t): return ((flex_int32_t *) (tbl->td_data))[i]; default: flex_die (_("invalid td_flags detected")); break; } return 0; } /** Set data element [i] in array data tables treated as a single flat array of integers. * Be careful for 2-dimensional arrays or for YYTD_ID_TRANSITION, which is an array * of structs. * @param tbl data table * @param i index into array. * @param newval new value for data[i] */ static void yytbl_data_seti (const struct yytbl_data *tbl, int i, flex_int32_t newval) { switch (YYTDFLAGS2BYTES (tbl->td_flags)) { case sizeof (flex_int8_t): ((flex_int8_t *) (tbl->td_data))[i] = (flex_int8_t) newval; break; case sizeof (flex_int16_t): ((flex_int16_t *) (tbl->td_data))[i] = (flex_int16_t) newval; break; case sizeof (flex_int32_t): ((flex_int32_t *) (tbl->td_data))[i] = (flex_int32_t) newval; break; default: flex_die (_("invalid td_flags detected")); break; } } /** Calculate the number of bytes needed to hold the largest * absolute value in this data array. * @param tbl the data table * @return sizeof(n) where n in {flex_int8_t, flex_int16_t, flex_int32_t} */ static size_t min_int_size (struct yytbl_data *tbl) { flex_int32_t i, total_len; flex_int32_t max = 0; total_len = yytbl_calc_total_len (tbl); for (i = 0; i < total_len; i++) { flex_int32_t n; n = abs (yytbl_data_geti (tbl, i)); if (max < n) max = n; } if (max <= INT8_MAX) return sizeof (flex_int8_t); else if (max <= INT16_MAX) return sizeof (flex_int16_t); else return sizeof (flex_int32_t); } /** Transform data to smallest possible of (int32, int16, int8). * For example, we may have generated an int32 array due to user options * (e.g., %option align), but if the maximum value in that array * is 80 (for example), then we can serialize it with only 1 byte per int. * This is NOT the same as compressed DFA tables. We're just trying * to save storage space here. * * @param tbl the table to be compressed */ void yytbl_data_compress (struct yytbl_data *tbl) { flex_int32_t i, total_len; size_t newsz; struct yytbl_data newtbl; yytbl_data_init (&newtbl, tbl->td_id); newtbl.td_hilen = tbl->td_hilen; newtbl.td_lolen = tbl->td_lolen; newtbl.td_flags = tbl->td_flags; newsz = min_int_size (tbl); if (newsz == YYTDFLAGS2BYTES (tbl->td_flags)) /* No change in this table needed. */ return; if (newsz > YYTDFLAGS2BYTES (tbl->td_flags)) { flex_die (_("detected negative compression")); return; } total_len = yytbl_calc_total_len (tbl); newtbl.td_data = calloc ((size_t) total_len, newsz); newtbl.td_flags = (flex_uint16_t) (TFLAGS_CLRDATA (newtbl.td_flags) | BYTES2TFLAG (newsz)); for (i = 0; i < total_len; i++) { flex_int32_t g; g = yytbl_data_geti (tbl, i); yytbl_data_seti (&newtbl, i, g); } /* Now copy over the old table */ free (tbl->td_data); *tbl = newtbl; } /* vim:set noexpandtab cindent tabstop=8 softtabstop=0 shiftwidth=8 textwidth=0: */ flex-2.6.4/src/tables.h0000664000175000017500000000553013002262300011605 00000000000000/* tables.h - tables serialization code * * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. * * This code is derived from software contributed to Berkeley by * Vern Paxson. * * The United States Government has rights in this work pursuant * to contract no. DE-AC03-76SF00098 between the United States * Department of Energy and the University of California. * * This file is part of flex. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE. */ #ifndef TABLES_H #define TABLES_H #ifdef __cplusplus /* *INDENT-OFF* */ extern "C" { /* *INDENT-ON* */ #endif /* Tables serialization API declarations. */ #include "tables_shared.h" struct yytbl_writer { FILE *out; int total_written; /**< bytes written so far */ fpos_t th_ssize_pos; /**< position of th_ssize */ }; /* These are used by main.c, gen.c, etc. * tablesext - if true, create external tables * tablesfilename - filename for external tables * tablesname - name that goes in serialized data, e.g., "yytables" * tableswr - writer for external tables * tablesverify - true if tables-verify option specified * gentables - true if we should spit out the normal C tables */ extern bool tablesext, tablesverify,gentables; extern char *tablesfilename, *tablesname; extern struct yytbl_writer tableswr; int yytbl_writer_init (struct yytbl_writer *, FILE *); int yytbl_hdr_init (struct yytbl_hdr *th, const char *version_str, const char *name); int yytbl_data_init (struct yytbl_data *tbl, enum yytbl_id id); int yytbl_data_destroy (struct yytbl_data *td); int yytbl_hdr_fwrite (struct yytbl_writer *wr, const struct yytbl_hdr *th); int yytbl_data_fwrite (struct yytbl_writer *wr, struct yytbl_data *td); void yytbl_data_compress (struct yytbl_data *tbl); struct yytbl_data *mkftbl (void); #ifdef __cplusplus /* *INDENT-OFF* */ } /* *INDENT-ON* */ #endif #endif /* vim:set expandtab cindent tabstop=4 softtabstop=4 shiftwidth=4 textwidth=0: */ flex-2.6.4/src/skel.c0000664000175000017500000036142613103361720011305 00000000000000/* File created from flex.skl via mkskel.sh */ #include "flexdef.h" const char *skel[] = { "/* A lexical scanner generated by flex */", "", "", "", "m4_changecom", "m4_changequote", "m4_changequote([[, ]])", "", "", "%not-for-header", "%if-c-only", "%if-not-reentrant", "m4_ifelse(M4_YY_PREFIX,yy,,", "#define yy_create_buffer M4_YY_PREFIX[[_create_buffer]]", "#define yy_delete_buffer M4_YY_PREFIX[[_delete_buffer]]", "#define yy_scan_buffer M4_YY_PREFIX[[_scan_buffer]]", "#define yy_scan_string M4_YY_PREFIX[[_scan_string]]", "#define yy_scan_bytes M4_YY_PREFIX[[_scan_bytes]]", "#define yy_init_buffer M4_YY_PREFIX[[_init_buffer]]", "#define yy_flush_buffer M4_YY_PREFIX[[_flush_buffer]]", "#define yy_load_buffer_state M4_YY_PREFIX[[_load_buffer_state]]", "#define yy_switch_to_buffer M4_YY_PREFIX[[_switch_to_buffer]]", "#define yypush_buffer_state M4_YY_PREFIX[[push_buffer_state]]", "#define yypop_buffer_state M4_YY_PREFIX[[pop_buffer_state]]", "#define yyensure_buffer_stack M4_YY_PREFIX[[ensure_buffer_stack]]", "#define yy_flex_debug M4_YY_PREFIX[[_flex_debug]]", "#define yyin M4_YY_PREFIX[[in]]", "#define yyleng M4_YY_PREFIX[[leng]]", "#define yylex M4_YY_PREFIX[[lex]]", "#define yylineno M4_YY_PREFIX[[lineno]]", "#define yyout M4_YY_PREFIX[[out]]", "#define yyrestart M4_YY_PREFIX[[restart]]", "#define yytext M4_YY_PREFIX[[text]]", "#define yywrap M4_YY_PREFIX[[wrap]]", "#define yyalloc M4_YY_PREFIX[[alloc]]", "#define yyrealloc M4_YY_PREFIX[[realloc]]", "#define yyfree M4_YY_PREFIX[[free]]", ")", "%endif", "%endif", "%ok-for-header", "", "#define FLEX_SCANNER", "#define YY_FLEX_MAJOR_VERSION 2", "#define YY_FLEX_MINOR_VERSION 6", "#define YY_FLEX_SUBMINOR_VERSION 4", "#if YY_FLEX_SUBMINOR_VERSION > 0", "#define FLEX_BETA", "#endif", "", "m4_ifdef( [[M4_YY_IN_HEADER]], , [[m4_define([[M4_YY_NOT_IN_HEADER]], [[]])]])", "m4_ifdef( [[M4_YY_REENTRANT]], , [[m4_define([[M4_YY_NOT_REENTRANT]], [[]])]])", "", "m4_ifdef( [[M4_YY_STACK_USED]], [[m4_define([[M4_YY_HAS_START_STACK_VARS]])]])", "m4_ifdef( [[M4_YY_REENTRANT]], [[m4_define([[M4_YY_HAS_START_STACK_VARS]])]])", "", "", "", "m4_ifdef( [[M4_YY_PREFIX]],, [[m4_define([[M4_YY_PREFIX]], [[yy]])]])", "", "", "", "%if-c++-only", " /* The c++ scanner is a mess. The FlexLexer.h header file relies on the", " * following macro. This is required in order to pass the c++-multiple-scanners", " * test in the regression suite. We get reports that it breaks inheritance.", " * We will address this in a future release of flex, or omit the C++ scanner", " * altogether.", " */", " #define yyFlexLexer M4_YY_PREFIX[[FlexLexer]]", "%endif", "", "%if-c-only", "m4_ifelse(M4_YY_PREFIX,yy,,", " ", "[[#ifdef yy_create_buffer", "#define ]]M4_YY_PREFIX[[_create_buffer_ALREADY_DEFINED", "#else", "#define yy_create_buffer ]]M4_YY_PREFIX[[_create_buffer", "#endif]]", "", " ", "[[#ifdef yy_delete_buffer", "#define ]]M4_YY_PREFIX[[_delete_buffer_ALREADY_DEFINED", "#else", "#define yy_delete_buffer ]]M4_YY_PREFIX[[_delete_buffer", "#endif]]", "", " ", "[[#ifdef yy_scan_buffer", "#define ]]M4_YY_PREFIX[[_scan_buffer_ALREADY_DEFINED", "#else", "#define yy_scan_buffer ]]M4_YY_PREFIX[[_scan_buffer", "#endif]]", "", " ", "[[#ifdef yy_scan_string", "#define ]]M4_YY_PREFIX[[_scan_string_ALREADY_DEFINED", "#else", "#define yy_scan_string ]]M4_YY_PREFIX[[_scan_string", "#endif]]", "", " ", "[[#ifdef yy_scan_bytes", "#define ]]M4_YY_PREFIX[[_scan_bytes_ALREADY_DEFINED", "#else", "#define yy_scan_bytes ]]M4_YY_PREFIX[[_scan_bytes", "#endif]]", "", " ", "[[#ifdef yy_init_buffer", "#define ]]M4_YY_PREFIX[[_init_buffer_ALREADY_DEFINED", "#else", "#define yy_init_buffer ]]M4_YY_PREFIX[[_init_buffer", "#endif]]", "", " ", "[[#ifdef yy_flush_buffer", "#define ]]M4_YY_PREFIX[[_flush_buffer_ALREADY_DEFINED", "#else", "#define yy_flush_buffer ]]M4_YY_PREFIX[[_flush_buffer", "#endif]]", "", " ", "[[#ifdef yy_load_buffer_state", "#define ]]M4_YY_PREFIX[[_load_buffer_state_ALREADY_DEFINED", "#else", "#define yy_load_buffer_state ]]M4_YY_PREFIX[[_load_buffer_state", "#endif]]", "", " ", "[[#ifdef yy_switch_to_buffer", "#define ]]M4_YY_PREFIX[[_switch_to_buffer_ALREADY_DEFINED", "#else", "#define yy_switch_to_buffer ]]M4_YY_PREFIX[[_switch_to_buffer", "#endif]]", "", " ", "[[#ifdef yypush_buffer_state", "#define ]]M4_YY_PREFIX[[push_buffer_state_ALREADY_DEFINED", "#else", "#define yypush_buffer_state ]]M4_YY_PREFIX[[push_buffer_state", "#endif]]", "", " ", "[[#ifdef yypop_buffer_state", "#define ]]M4_YY_PREFIX[[pop_buffer_state_ALREADY_DEFINED", "#else", "#define yypop_buffer_state ]]M4_YY_PREFIX[[pop_buffer_state", "#endif]]", "", " ", "[[#ifdef yyensure_buffer_stack", "#define ]]M4_YY_PREFIX[[ensure_buffer_stack_ALREADY_DEFINED", "#else", "#define yyensure_buffer_stack ]]M4_YY_PREFIX[[ensure_buffer_stack", "#endif]]", "", " ", "[[#ifdef yylex", "#define ]]M4_YY_PREFIX[[lex_ALREADY_DEFINED", "#else", "#define yylex ]]M4_YY_PREFIX[[lex", "#endif]]", "", " ", "[[#ifdef yyrestart", "#define ]]M4_YY_PREFIX[[restart_ALREADY_DEFINED", "#else", "#define yyrestart ]]M4_YY_PREFIX[[restart", "#endif]]", "", " ", "[[#ifdef yylex_init", "#define ]]M4_YY_PREFIX[[lex_init_ALREADY_DEFINED", "#else", "#define yylex_init ]]M4_YY_PREFIX[[lex_init", "#endif]]", "", " ", "[[#ifdef yylex_init_extra", "#define ]]M4_YY_PREFIX[[lex_init_extra_ALREADY_DEFINED", "#else", "#define yylex_init_extra ]]M4_YY_PREFIX[[lex_init_extra", "#endif]]", "", " ", "[[#ifdef yylex_destroy", "#define ]]M4_YY_PREFIX[[lex_destroy_ALREADY_DEFINED", "#else", "#define yylex_destroy ]]M4_YY_PREFIX[[lex_destroy", "#endif]]", "", " ", "[[#ifdef yyget_debug", "#define ]]M4_YY_PREFIX[[get_debug_ALREADY_DEFINED", "#else", "#define yyget_debug ]]M4_YY_PREFIX[[get_debug", "#endif]]", "", " ", "[[#ifdef yyset_debug", "#define ]]M4_YY_PREFIX[[set_debug_ALREADY_DEFINED", "#else", "#define yyset_debug ]]M4_YY_PREFIX[[set_debug", "#endif]]", "", " ", "[[#ifdef yyget_extra", "#define ]]M4_YY_PREFIX[[get_extra_ALREADY_DEFINED", "#else", "#define yyget_extra ]]M4_YY_PREFIX[[get_extra", "#endif]]", "", " ", "[[#ifdef yyset_extra", "#define ]]M4_YY_PREFIX[[set_extra_ALREADY_DEFINED", "#else", "#define yyset_extra ]]M4_YY_PREFIX[[set_extra", "#endif]]", "", " ", "[[#ifdef yyget_in", "#define ]]M4_YY_PREFIX[[get_in_ALREADY_DEFINED", "#else", "#define yyget_in ]]M4_YY_PREFIX[[get_in", "#endif]]", "", " ", "[[#ifdef yyset_in", "#define ]]M4_YY_PREFIX[[set_in_ALREADY_DEFINED", "#else", "#define yyset_in ]]M4_YY_PREFIX[[set_in", "#endif]]", "", " ", "[[#ifdef yyget_out", "#define ]]M4_YY_PREFIX[[get_out_ALREADY_DEFINED", "#else", "#define yyget_out ]]M4_YY_PREFIX[[get_out", "#endif]]", "", " ", "[[#ifdef yyset_out", "#define ]]M4_YY_PREFIX[[set_out_ALREADY_DEFINED", "#else", "#define yyset_out ]]M4_YY_PREFIX[[set_out", "#endif]]", "", " ", "[[#ifdef yyget_leng", "#define ]]M4_YY_PREFIX[[get_leng_ALREADY_DEFINED", "#else", "#define yyget_leng ]]M4_YY_PREFIX[[get_leng", "#endif]]", "", " ", "[[#ifdef yyget_text", "#define ]]M4_YY_PREFIX[[get_text_ALREADY_DEFINED", "#else", "#define yyget_text ]]M4_YY_PREFIX[[get_text", "#endif]]", "", " ", "[[#ifdef yyget_lineno", "#define ]]M4_YY_PREFIX[[get_lineno_ALREADY_DEFINED", "#else", "#define yyget_lineno ]]M4_YY_PREFIX[[get_lineno", "#endif]]", "", " ", "[[#ifdef yyset_lineno", "#define ]]M4_YY_PREFIX[[set_lineno_ALREADY_DEFINED", "#else", "#define yyset_lineno ]]M4_YY_PREFIX[[set_lineno", "#endif]]", "", " m4_ifdef( [[M4_YY_REENTRANT]],", " [[", " ", "[[#ifdef yyget_column", "#define ]]M4_YY_PREFIX[[get_column_ALREADY_DEFINED", "#else", "#define yyget_column ]]M4_YY_PREFIX[[get_column", "#endif]]", "", " ", "[[#ifdef yyset_column", "#define ]]M4_YY_PREFIX[[set_column_ALREADY_DEFINED", "#else", "#define yyset_column ]]M4_YY_PREFIX[[set_column", "#endif]]", "", " ]])", " ", "[[#ifdef yywrap", "#define ]]M4_YY_PREFIX[[wrap_ALREADY_DEFINED", "#else", "#define yywrap ]]M4_YY_PREFIX[[wrap", "#endif]]", "", ")", "%endif", "", "m4_ifdef( [[M4_YY_BISON_LVAL]],", "[[", " ", "[[#ifdef yyget_lval", "#define ]]M4_YY_PREFIX[[get_lval_ALREADY_DEFINED", "#else", "#define yyget_lval ]]M4_YY_PREFIX[[get_lval", "#endif]]", "", " ", "[[#ifdef yyset_lval", "#define ]]M4_YY_PREFIX[[set_lval_ALREADY_DEFINED", "#else", "#define yyset_lval ]]M4_YY_PREFIX[[set_lval", "#endif]]", "", "]])", "", "m4_ifdef( [[]],", "[[", " ", "[[#ifdef yyget_lloc", "#define ]]M4_YY_PREFIX[[get_lloc_ALREADY_DEFINED", "#else", "#define yyget_lloc ]]M4_YY_PREFIX[[get_lloc", "#endif]]", "", " ", "[[#ifdef yyset_lloc", "#define ]]M4_YY_PREFIX[[set_lloc_ALREADY_DEFINED", "#else", "#define yyset_lloc ]]M4_YY_PREFIX[[set_lloc", "#endif]]", "", "]])", "", "", "m4_ifelse(M4_YY_PREFIX,yy,,", " ", "[[#ifdef yyalloc", "#define ]]M4_YY_PREFIX[[alloc_ALREADY_DEFINED", "#else", "#define yyalloc ]]M4_YY_PREFIX[[alloc", "#endif]]", "", " ", "[[#ifdef yyrealloc", "#define ]]M4_YY_PREFIX[[realloc_ALREADY_DEFINED", "#else", "#define yyrealloc ]]M4_YY_PREFIX[[realloc", "#endif]]", "", " ", "[[#ifdef yyfree", "#define ]]M4_YY_PREFIX[[free_ALREADY_DEFINED", "#else", "#define yyfree ]]M4_YY_PREFIX[[free", "#endif]]", "", ")", "", "%if-c-only", "m4_ifelse(M4_YY_PREFIX,yy,,", "m4_ifdef( [[M4_YY_NOT_REENTRANT]],", "[[", " ", "[[#ifdef yytext", "#define ]]M4_YY_PREFIX[[text_ALREADY_DEFINED", "#else", "#define yytext ]]M4_YY_PREFIX[[text", "#endif]]", "", " ", "[[#ifdef yyleng", "#define ]]M4_YY_PREFIX[[leng_ALREADY_DEFINED", "#else", "#define yyleng ]]M4_YY_PREFIX[[leng", "#endif]]", "", " ", "[[#ifdef yyin", "#define ]]M4_YY_PREFIX[[in_ALREADY_DEFINED", "#else", "#define yyin ]]M4_YY_PREFIX[[in", "#endif]]", "", " ", "[[#ifdef yyout", "#define ]]M4_YY_PREFIX[[out_ALREADY_DEFINED", "#else", "#define yyout ]]M4_YY_PREFIX[[out", "#endif]]", "", " ", "[[#ifdef yy_flex_debug", "#define ]]M4_YY_PREFIX[[_flex_debug_ALREADY_DEFINED", "#else", "#define yy_flex_debug ]]M4_YY_PREFIX[[_flex_debug", "#endif]]", "", " ", "[[#ifdef yylineno", "#define ]]M4_YY_PREFIX[[lineno_ALREADY_DEFINED", "#else", "#define yylineno ]]M4_YY_PREFIX[[lineno", "#endif]]", "", "]])", ")", "%endif", "", "", "m4_ifdef( [[M4_YY_TABLES_EXTERNAL]],", "[[", " ", "[[#ifdef yytables_fload", "#define ]]M4_YY_PREFIX[[tables_fload_ALREADY_DEFINED", "#else", "#define yytables_fload ]]M4_YY_PREFIX[[tables_fload", "#endif]]", "", " ", "[[#ifdef yytables_destroy", "#define ]]M4_YY_PREFIX[[tables_destroy_ALREADY_DEFINED", "#else", "#define yytables_destroy ]]M4_YY_PREFIX[[tables_destroy", "#endif]]", "", " ", "[[#ifdef yyTABLES_NAME", "#define ]]M4_YY_PREFIX[[TABLES_NAME_ALREADY_DEFINED", "#else", "#define yyTABLES_NAME ]]M4_YY_PREFIX[[TABLES_NAME", "#endif]]", "", "]])", "", "/* First, we deal with platform-specific or compiler-specific issues. */", "", "/* begin standard C headers. */", "%if-c-only", "#include ", "#include ", "#include ", "#include ", "%endif", "", "%if-tables-serialization", "#include ", "#include ", "%endif", "/* end standard C headers. */", "", "%if-c-or-c++", "/* flex integer type definitions */", "", "#ifndef FLEXINT_H", "#define FLEXINT_H", "", "/* C99 systems have . Non-C99 systems may or may not. */", "", "#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L", "", "/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,", " * if you want the limit (max/min) macros for int types. ", " */", "#ifndef __STDC_LIMIT_MACROS", "#define __STDC_LIMIT_MACROS 1", "#endif", "", "#include ", "typedef int8_t flex_int8_t;", "typedef uint8_t flex_uint8_t;", "typedef int16_t flex_int16_t;", "typedef uint16_t flex_uint16_t;", "typedef int32_t flex_int32_t;", "typedef uint32_t flex_uint32_t;", "#else", "typedef signed char flex_int8_t;", "typedef short int flex_int16_t;", "typedef int flex_int32_t;", "typedef unsigned char flex_uint8_t; ", "typedef unsigned short int flex_uint16_t;", "typedef unsigned int flex_uint32_t;", "", "/* Limits of integral types. */", "#ifndef INT8_MIN", "#define INT8_MIN (-128)", "#endif", "#ifndef INT16_MIN", "#define INT16_MIN (-32767-1)", "#endif", "#ifndef INT32_MIN", "#define INT32_MIN (-2147483647-1)", "#endif", "#ifndef INT8_MAX", "#define INT8_MAX (127)", "#endif", "#ifndef INT16_MAX", "#define INT16_MAX (32767)", "#endif", "#ifndef INT32_MAX", "#define INT32_MAX (2147483647)", "#endif", "#ifndef UINT8_MAX", "#define UINT8_MAX (255U)", "#endif", "#ifndef UINT16_MAX", "#define UINT16_MAX (65535U)", "#endif", "#ifndef UINT32_MAX", "#define UINT32_MAX (4294967295U)", "#endif", "", "#ifndef SIZE_MAX", "#define SIZE_MAX (~(size_t)0)", "#endif", "", "#endif /* ! C99 */", "", "#endif /* ! FLEXINT_H */", "", "%endif", "", "/* begin standard C++ headers. */", "%if-c++-only", "#include ", "#include ", "#include ", "#include ", "#include ", "/* end standard C++ headers. */", "%endif", "", "/* TODO: this is always defined, so inline it */", "#define yyconst const", "", "#if defined(__GNUC__) && __GNUC__ >= 3", "#define yynoreturn __attribute__((__noreturn__))", "#else", "#define yynoreturn", "#endif", "", "%not-for-header", "/* Returned upon end-of-file. */", "#define YY_NULL 0", "%ok-for-header", "", "%not-for-header", "/* Promotes a possibly negative, possibly signed char to an", " * integer in range [0..255] for use as an array index.", " */", "#define YY_SC_TO_UI(c) ((YY_CHAR) (c))", "%ok-for-header", "", "", "", "%if-reentrant", "", "/* An opaque pointer. */", "#ifndef YY_TYPEDEF_YY_SCANNER_T", "#define YY_TYPEDEF_YY_SCANNER_T", "typedef void* yyscan_t;", "#endif", "", "m4_define( [[M4_YY_DECL_GUTS_VAR]], [[struct yyguts_t * yyg = (struct yyguts_t*)yyscanner]])", "m4_define( [[M4_YY_NOOP_GUTS_VAR]], [[(void)yyg]])", "m4_define( [[YY_G]], [[yyg->$1]])", "", "m4_define( [[M4_YY_PROTO_LAST_ARG]], [[, yyscan_t yyscanner]])", "m4_define( [[M4_YY_PROTO_ONLY_ARG]], [[yyscan_t yyscanner]])", "", "m4_define( [[M4_YY_DEF_LAST_ARG]], [[, yyscan_t yyscanner]])", "m4_define( [[M4_YY_DEF_ONLY_ARG]], [[yyscan_t yyscanner]])", "m4_define( [[M4_YY_DECL_LAST_ARG]], [[yyscan_t yyscanner;]])", "", "m4_define( [[M4_YY_CALL_LAST_ARG]], [[, yyscanner]])", "m4_define( [[M4_YY_CALL_ONLY_ARG]], [[yyscanner]])", "", "m4_define( [[M4_YY_DOC_PARAM]], [[@param yyscanner The scanner object.]])", "", "/* For convenience, these vars (plus the bison vars far below)", " are macros in the reentrant scanner. */", "#define yyin YY_G(yyin_r)", "#define yyout YY_G(yyout_r)", "#define yyextra YY_G(yyextra_r)", "#define yyleng YY_G(yyleng_r)", "#define yytext YY_G(yytext_r)", "#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno)", "#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column)", "#define yy_flex_debug YY_G(yy_flex_debug_r)", "", "m4_define( [[M4_YY_INCR_LINENO]],", "[[", " do{ yylineno++;", " yycolumn=0;", " }while(0)", "]])", "", "%endif", "", "", "", "%if-not-reentrant", "", "m4_define( [[M4_YY_INCR_LINENO]],", "[[", " yylineno++;", "]])", "", "m4_define( [[M4_YY_DECL_GUTS_VAR]], [[m4_dnl]])", "m4_define( [[M4_YY_NOOP_GUTS_VAR]], [[m4_dnl]])", "m4_define( [[YY_G]], [[($1)]])", "m4_define( [[M4_YY_PROTO_LAST_ARG]])", "m4_define( [[M4_YY_PROTO_ONLY_ARG]], [[void]])", "m4_define( [[M4_YY_DEF_LAST_ARG]])", "", "m4_define( [[M4_YY_DEF_ONLY_ARG]], [[void]])", "m4_define([[M4_YY_DECL_LAST_ARG]])", "m4_define([[M4_YY_CALL_LAST_ARG]])", "m4_define([[M4_YY_CALL_ONLY_ARG]])", "m4_define( [[M4_YY_DOC_PARAM]], )", "", "%endif", "", "", "m4_define( [[YYFARGS1]], [[($1 $2 M4_YY_DEF_LAST_ARG)]])", "m4_define( [[YYFARGS2]], [[($1 $2, $3 $4 M4_YY_DEF_LAST_ARG)]])", "m4_define( [[YYFARGS3]], [[($1 $2, $3 $4, $5 $6 M4_YY_DEF_LAST_ARG)]])", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* Enter a start condition. This macro really ought to take a parameter,", " * but we do it the disgusting crufty way forced on us by the ()-less", " * definition of BEGIN.", " */", "#define BEGIN YY_G(yy_start) = 1 + 2 *", "/* Translate the current start state into a value that can be later handed", " * to BEGIN to return to the state. The YYSTATE alias is for lex", " * compatibility.", " */", "#define YY_START ((YY_G(yy_start) - 1) / 2)", "#define YYSTATE YY_START", "/* Action number for EOF rule of a given start state. */", "#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)", "/* Special action meaning \"start processing a new file\". */", "#define YY_NEW_FILE yyrestart( yyin M4_YY_CALL_LAST_ARG )", "#define YY_END_OF_BUFFER_CHAR 0", "]])", "", "/* Size of default input buffer. */", "#ifndef YY_BUF_SIZE", "#ifdef __ia64__", "/* On IA-64, the buffer size is 16k, not 8k.", " * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.", " * Ditto for the __ia64__ case accordingly.", " */", "#define YY_BUF_SIZE 32768", "#else", "#define YY_BUF_SIZE 16384", "#endif /* __ia64__ */", "#endif", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* The state buf must be large enough to hold one state per character in the main buffer.", " */", "#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))", "]])", "", "", "#ifndef YY_TYPEDEF_YY_BUFFER_STATE", "#define YY_TYPEDEF_YY_BUFFER_STATE", "typedef struct yy_buffer_state *YY_BUFFER_STATE;", "#endif", "", "#ifndef YY_TYPEDEF_YY_SIZE_T", "#define YY_TYPEDEF_YY_SIZE_T", "typedef size_t yy_size_t;", "#endif", "", "%if-not-reentrant", "extern int yyleng;", "%endif", "", "%if-c-only", "%if-not-reentrant", "extern FILE *yyin, *yyout;", "%endif", "%endif", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "#define EOB_ACT_CONTINUE_SCAN 0", "#define EOB_ACT_END_OF_FILE 1", "#define EOB_ACT_LAST_MATCH 2", " m4_ifdef( [[M4_YY_USE_LINENO]],", " [[", " /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires", " * access to the local variable yy_act. Since yyless() is a macro, it would break", " * existing scanners that call yyless() from OUTSIDE yylex.", " * One obvious solution it to make yy_act a global. I tried that, and saw", " * a 5% performance hit in a non-yylineno scanner, because yy_act is", " * normally declared as a register variable-- so it is not worth it.", " */", " #define YY_LESS_LINENO(n) \\", " do { \\", " int yyl;\\", " for ( yyl = n; yyl < yyleng; ++yyl )\\", " if ( yytext[yyl] == '\\n' )\\", " --yylineno;\\", " }while(0)", " #define YY_LINENO_REWIND_TO(dst) \\", " do {\\", " const char *p;\\", " for ( p = yy_cp-1; p >= (dst); --p)\\", " if ( *p == '\\n' )\\", " --yylineno;\\", " }while(0)", " ]],", " [[", " #define YY_LESS_LINENO(n)", " #define YY_LINENO_REWIND_TO(ptr)", " ]])", "/* Return all but the first \"n\" matched characters back to the input stream. */", "#define yyless(n) \\", " do \\", " { \\", " /* Undo effects of setting up yytext. */ \\", " int yyless_macro_arg = (n); \\", " YY_LESS_LINENO(yyless_macro_arg);\\", " *yy_cp = YY_G(yy_hold_char); \\", " YY_RESTORE_YY_MORE_OFFSET \\", " YY_G(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \\", " YY_DO_BEFORE_ACTION; /* set up yytext again */ \\", " } \\", " while ( 0 )", "#define unput(c) yyunput( c, YY_G(yytext_ptr) M4_YY_CALL_LAST_ARG )", "]])", "", "#ifndef YY_STRUCT_YY_BUFFER_STATE", "#define YY_STRUCT_YY_BUFFER_STATE", "struct yy_buffer_state", " {", "%if-c-only", " FILE *yy_input_file;", "%endif", "", "%if-c++-only", " std::streambuf* yy_input_file;", "%endif", "", "", " char *yy_ch_buf; /* input buffer */", " char *yy_buf_pos; /* current position in input buffer */", "", " /* Size of input buffer in bytes, not including room for EOB", " * characters.", " */", " int yy_buf_size;", "", " /* Number of characters read into yy_ch_buf, not including EOB", " * characters.", " */", " int yy_n_chars;", "", " /* Whether we \"own\" the buffer - i.e., we know we created it,", " * and can realloc() it to grow it, and should free() it to", " * delete it.", " */", " int yy_is_our_buffer;", "", " /* Whether this is an \"interactive\" input source; if so, and", " * if we're using stdio for input, then we want to use getc()", " * instead of fread(), to make sure we stop fetching input after", " * each newline.", " */", " int yy_is_interactive;", "", " /* Whether we're considered to be at the beginning of a line.", " * If so, '^' rules will be active on the next match, otherwise", " * not.", " */", " int yy_at_bol;", "", " int yy_bs_lineno; /**< The line count. */", " int yy_bs_column; /**< The column count. */", "", "", " /* Whether to try to fill the input buffer when we reach the", " * end of it.", " */", " int yy_fill_buffer;", "", " int yy_buffer_status;", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "#define YY_BUFFER_NEW 0", "#define YY_BUFFER_NORMAL 1", " /* When an EOF's been seen but there's still some text to process", " * then we mark the buffer as YY_EOF_PENDING, to indicate that we", " * shouldn't try reading from the input source any more. We might", " * still have a bunch of tokens to match, though, because of", " * possible backing-up.", " *", " * When we actually see the EOF, we change the status to \"new\"", " * (via yyrestart()), so that the user can continue scanning by", " * just pointing yyin at a new input file.", " */", "#define YY_BUFFER_EOF_PENDING 2", "]])", " };", "#endif /* !YY_STRUCT_YY_BUFFER_STATE */", "", "%if-c-only Standard (non-C++) definition", "%not-for-header", "%if-not-reentrant", "", "/* Stack of input buffers. */", "static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */", "static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */", "static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */", "%endif", "%ok-for-header", "%endif", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* We provide macros for accessing buffer states in case in the", " * future we want to put the buffer states in a more general", " * \"scanner state\".", " *", " * Returns the top of the stack, or NULL.", " */", "#define YY_CURRENT_BUFFER ( YY_G(yy_buffer_stack) \\", " ? YY_G(yy_buffer_stack)[YY_G(yy_buffer_stack_top)] \\", " : NULL)", "/* Same as previous macro, but useful when we know that the buffer stack is not", " * NULL or when we need an lvalue. For internal use only.", " */", "#define YY_CURRENT_BUFFER_LVALUE YY_G(yy_buffer_stack)[YY_G(yy_buffer_stack_top)]", "]])", "", "%if-c-only Standard (non-C++) definition", "", "%if-not-reentrant", "%not-for-header", "/* yy_hold_char holds the character lost when yytext is formed. */", "static char yy_hold_char;", "static int yy_n_chars; /* number of characters read into yy_ch_buf */", "int yyleng;", "", "/* Points to current character in buffer. */", "static char *yy_c_buf_p = NULL;", "static int yy_init = 0; /* whether we need to initialize */", "static int yy_start = 0; /* start state number */", "", "/* Flag which is used to allow yywrap()'s to do buffer switches", " * instead of setting up a fresh yyin. A bit of a hack ...", " */", "static int yy_did_buffer_switch_on_eof;", "%ok-for-header", "%endif", "", "void yyrestart ( FILE *input_file M4_YY_PROTO_LAST_ARG );", "void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer M4_YY_PROTO_LAST_ARG );", "YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size M4_YY_PROTO_LAST_ARG );", "void yy_delete_buffer ( YY_BUFFER_STATE b M4_YY_PROTO_LAST_ARG );", "void yy_flush_buffer ( YY_BUFFER_STATE b M4_YY_PROTO_LAST_ARG );", "void yypush_buffer_state ( YY_BUFFER_STATE new_buffer M4_YY_PROTO_LAST_ARG );", "void yypop_buffer_state ( M4_YY_PROTO_ONLY_ARG );", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "static void yyensure_buffer_stack ( M4_YY_PROTO_ONLY_ARG );", "static void yy_load_buffer_state ( M4_YY_PROTO_ONLY_ARG );", "static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file M4_YY_PROTO_LAST_ARG );", "#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG)", "]])", "", "YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size M4_YY_PROTO_LAST_ARG );", "YY_BUFFER_STATE yy_scan_string ( const char *yy_str M4_YY_PROTO_LAST_ARG );", "YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len M4_YY_PROTO_LAST_ARG );", "", "%endif", "", "void *yyalloc ( yy_size_t M4_YY_PROTO_LAST_ARG );", "void *yyrealloc ( void *, yy_size_t M4_YY_PROTO_LAST_ARG );", "void yyfree ( void * M4_YY_PROTO_LAST_ARG );", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "#define yy_new_buffer yy_create_buffer", "#define yy_set_interactive(is_interactive) \\", " { \\", " if ( ! YY_CURRENT_BUFFER ){ \\", " yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG); \\", " YY_CURRENT_BUFFER_LVALUE = \\", " yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG); \\", " } \\", " YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \\", " }", "#define yy_set_bol(at_bol) \\", " { \\", " if ( ! YY_CURRENT_BUFFER ){\\", " yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG); \\", " YY_CURRENT_BUFFER_LVALUE = \\", " yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG); \\", " } \\", " YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \\", " }", "#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)", "]])", "", "%% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "%% [1.5] DFA", "]])", "", "%if-c-only Standard (non-C++) definition", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "static yy_state_type yy_get_previous_state ( M4_YY_PROTO_ONLY_ARG );", "static yy_state_type yy_try_NUL_trans ( yy_state_type current_state M4_YY_PROTO_LAST_ARG);", "static int yy_get_next_buffer ( M4_YY_PROTO_ONLY_ARG );", "static void yynoreturn yy_fatal_error ( const char* msg M4_YY_PROTO_LAST_ARG );", "]])", "", "%endif", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* Done after the current pattern has been matched and before the", " * corresponding action - sets up yytext.", " */", "#define YY_DO_BEFORE_ACTION \\", " YY_G(yytext_ptr) = yy_bp; \\", "%% [2.0] code to fiddle yytext and yyleng for yymore() goes here \\", " YY_G(yy_hold_char) = *yy_cp; \\", " *yy_cp = '\\0'; \\", "%% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \\", " YY_G(yy_c_buf_p) = yy_cp;", "%% [4.0] data tables for the DFA and the user's section 1 definitions go here", "]])", "", "m4_ifdef( [[M4_YY_IN_HEADER]], [[#ifdef YY_HEADER_EXPORT_START_CONDITIONS]])", "M4_YY_SC_DEFS", "m4_ifdef( [[M4_YY_IN_HEADER]], [[#endif]])", "", "m4_ifdef( [[M4_YY_NO_UNISTD_H]],,", "[[", "#ifndef YY_NO_UNISTD_H", "/* Special case for \"unistd.h\", since it is non-ANSI. We include it way", " * down here because we want the user's section 1 to have been scanned first.", " * The user has a chance to override it with an option.", " */", "%if-c-only", "#include ", "%endif", "%if-c++-only", "#include ", "%endif", "#endif", "]])", "", "m4_ifdef( [[M4_EXTRA_TYPE_DEFS]],", "[[", "#define YY_EXTRA_TYPE M4_EXTRA_TYPE_DEFS", "]],", "[[", "#ifndef YY_EXTRA_TYPE", "#define YY_EXTRA_TYPE void *", "#endif", "]]", ")", "", "%if-c-only Reentrant structure and macros (non-C++).", "%if-reentrant", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* Holds the entire state of the reentrant scanner. */", "struct yyguts_t", " {", "", " /* User-defined. Not touched by flex. */", " YY_EXTRA_TYPE yyextra_r;", "", " /* The rest are the same as the globals declared in the non-reentrant scanner. */", " FILE *yyin_r, *yyout_r;", " size_t yy_buffer_stack_top; /**< index of top of stack. */", " size_t yy_buffer_stack_max; /**< capacity of stack. */", " YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */", " char yy_hold_char;", " int yy_n_chars;", " int yyleng_r;", " char *yy_c_buf_p;", " int yy_init;", " int yy_start;", " int yy_did_buffer_switch_on_eof;", " int yy_start_stack_ptr;", " int yy_start_stack_depth;", " int *yy_start_stack;", " yy_state_type yy_last_accepting_state;", " char* yy_last_accepting_cpos;", "", " int yylineno_r;", " int yy_flex_debug_r;", "", "m4_ifdef( [[M4_YY_USES_REJECT]],", "[[", " yy_state_type *yy_state_buf;", " yy_state_type *yy_state_ptr;", " char *yy_full_match;", " int yy_lp;", "", " /* These are only needed for trailing context rules,", " * but there's no conditional variable for that yet. */", " int yy_looking_for_trail_begin;", " int yy_full_lp;", " int *yy_full_state;", "]])", "", "m4_ifdef( [[M4_YY_TEXT_IS_ARRAY]],", "[[", " char yytext_r[YYLMAX];", " char *yytext_ptr;", " int yy_more_offset;", " int yy_prev_more_offset;", "]],", "[[", " char *yytext_r;", " int yy_more_flag;", " int yy_more_len;", "]])", "", "m4_ifdef( [[M4_YY_BISON_LVAL]],", "[[", " YYSTYPE * yylval_r;", "]])", "", "m4_ifdef( [[]],", "[[", " YYLTYPE * yylloc_r;", "]])", "", " }; /* end struct yyguts_t */", "]])", "", "", "%if-c-only", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "static int yy_init_globals ( M4_YY_PROTO_ONLY_ARG );", "]])", "%endif", "", "%if-reentrant", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", " m4_ifdef( [[M4_YY_BISON_LVAL]],", " [[", " /* This must go here because YYSTYPE and YYLTYPE are included", " * from bison output in section 1.*/", " # define yylval YY_G(yylval_r)", " ]])", "", " m4_ifdef( [[]],", " [[", " # define yylloc YY_G(yylloc_r)", " ]])", "]])", "", "int yylex_init (yyscan_t* scanner);", "", "int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner);", "", "%endif", "", "%endif End reentrant structures and macros.", "", "/* Accessor methods to globals.", " These are made visible to non-reentrant scanners for convenience. */", "", "m4_ifdef( [[M4_YY_NO_DESTROY]],,", "[[", "int yylex_destroy ( M4_YY_PROTO_ONLY_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_GET_DEBUG]],,", "[[", "int yyget_debug ( M4_YY_PROTO_ONLY_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_SET_DEBUG]],,", "[[", "void yyset_debug ( int debug_flag M4_YY_PROTO_LAST_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_GET_EXTRA]],,", "[[", "YY_EXTRA_TYPE yyget_extra ( M4_YY_PROTO_ONLY_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_SET_EXTRA]],,", "[[", "void yyset_extra ( YY_EXTRA_TYPE user_defined M4_YY_PROTO_LAST_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_GET_IN]],,", "[[", "FILE *yyget_in ( M4_YY_PROTO_ONLY_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_SET_IN]],,", "[[", "void yyset_in ( FILE * _in_str M4_YY_PROTO_LAST_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_GET_OUT]],,", "[[", "FILE *yyget_out ( M4_YY_PROTO_ONLY_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_SET_OUT]],,", "[[", "void yyset_out ( FILE * _out_str M4_YY_PROTO_LAST_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_GET_LENG]],,", "[[", " int yyget_leng ( M4_YY_PROTO_ONLY_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_GET_TEXT]],,", "[[", "char *yyget_text ( M4_YY_PROTO_ONLY_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_GET_LINENO]],,", "[[", "int yyget_lineno ( M4_YY_PROTO_ONLY_ARG );", "]])", "", "m4_ifdef( [[M4_YY_NO_SET_LINENO]],,", "[[", "void yyset_lineno ( int _line_number M4_YY_PROTO_LAST_ARG );", "]])", "", "m4_ifdef( [[M4_YY_REENTRANT]],", "[[", "m4_ifdef( [[M4_YY_NO_GET_COLUMN]],,", "[[", "int yyget_column ( M4_YY_PROTO_ONLY_ARG );", "]])", "]])", "", "m4_ifdef( [[M4_YY_REENTRANT]],", "[[", "m4_ifdef( [[M4_YY_NO_SET_COLUMN]],,", "[[", "void yyset_column ( int _column_no M4_YY_PROTO_LAST_ARG );", "]])", "]])", "", "%if-bison-bridge", "m4_ifdef( [[M4_YY_NO_GET_LVAL]],,", "[[", "YYSTYPE * yyget_lval ( M4_YY_PROTO_ONLY_ARG );", "]])", "", "void yyset_lval ( YYSTYPE * yylval_param M4_YY_PROTO_LAST_ARG );", "", "m4_ifdef( [[]],", "[[", " m4_ifdef( [[M4_YY_NO_GET_LLOC]],,", " [[", " YYLTYPE *yyget_lloc ( M4_YY_PROTO_ONLY_ARG );", " ]])", "", " m4_ifdef( [[M4_YY_NO_SET_LLOC]],,", " [[", " void yyset_lloc ( YYLTYPE * yylloc_param M4_YY_PROTO_LAST_ARG );", " ]])", "]])", "%endif", "", "/* Macros after this point can all be overridden by user definitions in", " * section 1.", " */", "", "#ifndef YY_SKIP_YYWRAP", "#ifdef __cplusplus", "extern \"C\" int yywrap ( M4_YY_PROTO_ONLY_ARG );", "#else", "extern int yywrap ( M4_YY_PROTO_ONLY_ARG );", "#endif", "#endif", "", "%not-for-header", "#ifndef YY_NO_UNPUT", " m4_ifdef( [[M4_YY_NO_UNPUT]],,", " [[", " static void yyunput ( int c, char *buf_ptr M4_YY_PROTO_LAST_ARG);", " ]])", "#endif", "%ok-for-header", "%endif", "", "#ifndef yytext_ptr", "static void yy_flex_strncpy ( char *, const char *, int M4_YY_PROTO_LAST_ARG);", "#endif", "", "#ifdef YY_NEED_STRLEN", "static int yy_flex_strlen ( const char * M4_YY_PROTO_LAST_ARG);", "#endif", "", "#ifndef YY_NO_INPUT", "%if-c-only Standard (non-C++) definition", "%not-for-header", "#ifdef __cplusplus", "static int yyinput ( M4_YY_PROTO_ONLY_ARG );", "#else", "static int input ( M4_YY_PROTO_ONLY_ARG );", "#endif", "%ok-for-header", "%endif", "#endif", "", "", "%if-c-only", "m4_ifdef( [[M4_YY_STACK_USED]],", "[[", "", "m4_ifdef( [[M4_YY_NOT_REENTRANT]],", "[[", " m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", " [[", " static int yy_start_stack_ptr = 0;", " static int yy_start_stack_depth = 0;", " static int *yy_start_stack = NULL;", " ]])", "]])", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", " m4_ifdef( [[M4_YY_NO_PUSH_STATE]],,", " [[", " static void yy_push_state ( int _new_state M4_YY_PROTO_LAST_ARG);", " ]])", " m4_ifdef( [[M4_YY_NO_POP_STATE]],,", " [[", " static void yy_pop_state ( M4_YY_PROTO_ONLY_ARG );", " ]])", " m4_ifdef( [[M4_YY_NO_TOP_STATE]],,", " [[", " static int yy_top_state ( M4_YY_PROTO_ONLY_ARG );", " ]])", "]])", "", "]],", "[[", "m4_define( [[M4_YY_NO_PUSH_STATE]])", "m4_define( [[M4_YY_NO_POP_STATE]])", "m4_define( [[M4_YY_NO_TOP_STATE]])", "]])", "%endif", "", "/* Amount of stuff to slurp up with each read. */", "#ifndef YY_READ_BUF_SIZE", "#ifdef __ia64__", "/* On IA-64, the buffer size is 16k, not 8k */", "#define YY_READ_BUF_SIZE 16384", "#else", "#define YY_READ_BUF_SIZE 8192", "#endif /* __ia64__ */", "#endif", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* Copy whatever the last rule matched to the standard output. */", "#ifndef ECHO", "%if-c-only Standard (non-C++) definition", "/* This used to be an fputs(), but since the string might contain NUL's,", " * we now use fwrite().", " */", "#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0)", "%endif", "%if-c++-only C++ definition", "#define ECHO LexerOutput( yytext, yyleng )", "%endif", "#endif", "]])", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* Gets input and stuffs it into \"buf\". number of characters read, or YY_NULL,", " * is returned in \"result\".", " */", "#ifndef YY_INPUT", "#define YY_INPUT(buf,result,max_size) \\", "%% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \\", "\\", "%if-c++-only C++ definition \\", " if ( (int)(result = LexerInput( (char *) buf, max_size )) < 0 ) \\", " YY_FATAL_ERROR( \"input in flex scanner failed\" );", "%endif", "", "#endif", "]])", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* No semi-colon after return; correct usage is to write \"yyterminate();\" -", " * we don't want an extra ';' after the \"return\" because that will cause", " * some compilers to complain about unreachable statements.", " */", "#ifndef yyterminate", "#define yyterminate() return YY_NULL", "#endif", "]])", "", "/* Number of entries by which start-condition stack grows. */", "#ifndef YY_START_STACK_INCR", "#define YY_START_STACK_INCR 25", "#endif", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* Report a fatal error. */", "#ifndef YY_FATAL_ERROR", "%if-c-only", "#define YY_FATAL_ERROR(msg) yy_fatal_error( msg M4_YY_CALL_LAST_ARG)", "%endif", "%if-c++-only", "#define YY_FATAL_ERROR(msg) LexerError( msg )", "%endif", "#endif", "]])", "", "%if-tables-serialization structures and prototypes", "#ifdef FLEX_SCANNER", "/*", "dnl tables_shared.h - tables serialization header", "dnl", "dnl Copyright (c) 1990 The Regents of the University of California.", "dnl All rights reserved.", "dnl", "dnl This code is derived from software contributed to Berkeley by", "dnl Vern Paxson.", "dnl", "dnl The United States Government has rights in this work pursuant", "dnl to contract no. DE-AC03-76SF00098 between the United States", "dnl Department of Energy and the University of California.", "dnl", "dnl This file is part of flex.", "dnl", "dnl Redistribution and use in source and binary forms, with or without", "dnl modification, are permitted provided that the following conditions", "dnl are met:", "dnl", "dnl 1. Redistributions of source code must retain the above copyright", "dnl notice, this list of conditions and the following disclaimer.", "dnl 2. Redistributions in binary form must reproduce the above copyright", "dnl notice, this list of conditions and the following disclaimer in the", "dnl documentation and/or other materials provided with the distribution.", "dnl", "dnl Neither the name of the University nor the names of its contributors", "dnl may be used to endorse or promote products derived from this software", "dnl without specific prior written permission.", "dnl", "dnl THIS SOFTWARE IS PROVIDED `AS IS' AND WITHOUT ANY EXPRESS OR", "dnl IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED", "dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR", "dnl PURPOSE.", " ", "dnl", "dnl This file is meant to be included in both the skeleton and the actual", "dnl flex code (hence the name \"_shared\").", "*/", "#ifndef yyskel_static", "#define yyskel_static static", "#endif", "#else", "#ifndef yyskel_static", "#define yyskel_static", "#endif", "#endif", "", "/* Structures and prototypes for serializing flex tables. The", " * binary format is documented in the manual.", " *", " * Design considerations:", " *", " * - The format allows many tables per file.", " * - The tables can be streamed.", " * - All data is stored in network byte order.", " * - We do not hinder future unicode support.", " * - We can lookup tables by name.", " */", "", "/** Magic number for serialized format. */", "#ifndef YYTBL_MAGIC", "#define YYTBL_MAGIC 0xF13C57B1", "#endif", "", "/** Calculate (0-7) = number bytes needed to pad n to next 64-bit boundary. */", "#ifndef yypad64", "#define yypad64(n) ((8-((n)%8))%8)", "#endif", "", "", "#ifndef YYTABLES_TYPES", "#define YYTABLES_TYPES", "/** Possible values for td_id field. Each one corresponds to a", " * scanner table of the same name.", " */", "enum yytbl_id {", " YYTD_ID_ACCEPT = 0x01, /**< 1-dim ints */", " YYTD_ID_BASE = 0x02, /**< 1-dim ints */", " YYTD_ID_CHK = 0x03, /**< 1-dim ints */", " YYTD_ID_DEF = 0x04, /**< 1-dim ints */", " YYTD_ID_EC = 0x05, /**< 1-dim ints */", " YYTD_ID_META = 0x06, /**< 1-dim ints */", " YYTD_ID_NUL_TRANS = 0x07, /**< 1-dim ints, maybe indices */", " YYTD_ID_NXT = 0x08, /**< may be 2 dimensional ints */", " YYTD_ID_RULE_CAN_MATCH_EOL = 0x09, /**< 1-dim ints */", " YYTD_ID_START_STATE_LIST = 0x0A, /**< 1-dim indices into trans tbl */", " YYTD_ID_TRANSITION = 0x0B, /**< structs */", " YYTD_ID_ACCLIST = 0x0C /**< 1-dim ints */", "};", "", "/** bit flags for t_flags field of struct yytbl_data */", "enum yytbl_flags {", " /* These first three are mutually exclusive */", " YYTD_DATA8 = 0x01, /**< data is an array of type flex_int8_t */", " YYTD_DATA16 = 0x02, /**< data is an array of type flex_int16_t */", " YYTD_DATA32 = 0x04, /**< data is an array of type flex_int32_t */", "", " /* These two are mutually exclusive. */", " YYTD_PTRANS = 0x08, /**< data is a list of indexes of entries", " into the expanded yy_transition", " array. See notes in manual. */", " YYTD_STRUCT = 0x10 /**< data consists of yy_trans_info structs */", "};", "", "/* The serialized tables header. */", "struct yytbl_hdr {", " flex_uint32_t th_magic; /**< Must be 0xF13C57B1 (comes from \"Flex Table\") */", " flex_uint32_t th_hsize; /**< Size of this header in bytes. */", " flex_uint32_t th_ssize; /**< Size of this dataset, in bytes, including header. */", " flex_uint16_t th_flags; /**< Currently unused, must be 0 */", " char *th_version; /**< Flex version string. NUL terminated. */", " char *th_name; /**< The name of this table set. NUL terminated. */", "};", "", "/** A single serialized table */", "struct yytbl_data {", " flex_uint16_t td_id; /**< enum yytbl_id table identifier */", " flex_uint16_t td_flags; /**< how to interpret this data */", " flex_uint32_t td_hilen; /**< num elements in highest dimension array */", " flex_uint32_t td_lolen; /**< num elements in lowest dimension array */", " void *td_data; /**< table data */", "};", "#endif", "", "/** Extract corresponding data size_t from td_flags */", "#ifndef YYTDFLAGS2BYTES", "#define YYTDFLAGS2BYTES(td_flags)\\", " (((td_flags) & YYTD_DATA8)\\", " ? sizeof(flex_int8_t)\\", " :(((td_flags) & YYTD_DATA16)\\", " ? sizeof(flex_int16_t)\\", " :sizeof(flex_int32_t)))", "#endif", "", "#ifdef FLEX_SCANNER", "%not-for-header", "#endif", "yyskel_static flex_int32_t yytbl_calc_total_len (const struct yytbl_data *tbl);", "#ifdef FLEX_SCANNER", "%ok-for-header", "#endif", "", "/* vim:set noexpandtab cindent tabstop=8 softtabstop=0 shiftwidth=8 textwidth=0: */", "", "", "/* Load the DFA tables from the given stream. */", "int yytables_fload (FILE * fp M4_YY_PROTO_LAST_ARG);", "", "/* Unload the tables from memory. */", "int yytables_destroy (M4_YY_PROTO_ONLY_ARG);", "%not-for-header", "", "/** Describes a mapping from a serialized table id to its deserialized state in", " * this scanner. This is the bridge between our \"generic\" deserialization code", " * and the specifics of this scanner.", " */", "struct yytbl_dmap {", " enum yytbl_id dm_id;/**< table identifier */", " void **dm_arr; /**< address of pointer to store the deserialized table. */", " size_t dm_sz; /**< local sizeof() each element in table. */", "};", "", "/** A {0,0,0}-terminated list of structs, forming the map */", "static struct yytbl_dmap yydmap[] =", "{", "%tables-yydmap generated elements", " {0,0,0}", "};", "", "/** A tables-reader object to maintain some state in the read. */", "struct yytbl_reader {", " FILE * fp; /**< input stream */", " flex_uint32_t bread; /**< bytes read since beginning of current tableset */", "};", "", "%endif", "/* end tables serialization structures and prototypes */", "", "%ok-for-header", "", "/* Default declaration of generated scanner - a define so the user can", " * easily add parameters.", " */", "#ifndef YY_DECL", "#define YY_DECL_IS_OURS 1", "%if-c-only Standard (non-C++) definition", "", "", "m4_define( [[M4_YY_LEX_PROTO]], [[(M4_YY_PROTO_ONLY_ARG)]])", "m4_define( [[M4_YY_LEX_DECLARATION]], [[(M4_YY_DEF_ONLY_ARG)]])", "", "m4_ifdef( [[M4_YY_BISON_LVAL]],", "[[", " m4_dnl The bison pure parser is used. Redefine yylex to", " m4_dnl accept the lval parameter.", "", " m4_define( [[M4_YY_LEX_PROTO]], [[\\]]", " [[(YYSTYPE * yylval_param M4_YY_PROTO_LAST_ARG)]])", " m4_define( [[M4_YY_LEX_DECLARATION]], [[\\]]", " [[YYFARGS1(YYSTYPE *,yylval_param)]])", "]])", "", "m4_ifdef( [[]],", "[[", " m4_dnl Locations are used. yylex should also accept the ylloc parameter.", "", " m4_define( [[M4_YY_LEX_PROTO]], [[\\]]", " [[(YYSTYPE * yylval_param, YYLTYPE * yylloc_param M4_YY_PROTO_LAST_ARG)]])", " m4_define( [[M4_YY_LEX_DECLARATION]], [[\\]]", " [[YYFARGS2(YYSTYPE *,yylval_param, YYLTYPE *,yylloc_param)]])", "]])", "", "extern int yylex M4_YY_LEX_PROTO;", "", "#define YY_DECL int yylex M4_YY_LEX_DECLARATION", "%endif", "%if-c++-only C++ definition", "#define YY_DECL int yyFlexLexer::yylex()", "%endif", "#endif /* !YY_DECL */", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* Code executed at the beginning of each rule, after yytext and yyleng", " * have been set up.", " */", "#ifndef YY_USER_ACTION", "#define YY_USER_ACTION", "#endif", "]])", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* Code executed at the end of each rule. */", "#ifndef YY_BREAK", "#define YY_BREAK /*LINTED*/break;", "#endif", "]])", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "%% [6.0] YY_RULE_SETUP definition goes here", "]])", "", "%not-for-header", "/** The main scanner function which does all the work.", " */", "YY_DECL", "{", " yy_state_type yy_current_state;", " char *yy_cp, *yy_bp;", " int yy_act;", " M4_YY_DECL_GUTS_VAR();", "", "m4_ifdef( [[M4_YY_NOT_REENTRANT]],", "[[", " m4_ifdef( [[M4_YY_BISON_LVAL]],", " [[", " YYSTYPE * yylval;", " ]])", " m4_ifdef( [[]],", " [[", " YYLTYPE * yylloc;", " ]])", "]])", "", "m4_ifdef( [[M4_YY_BISON_LVAL]],", "[[", " yylval = yylval_param;", "]])", "", "m4_ifdef( [[]],", "[[", " yylloc = yylloc_param;", "]])", "", " if ( !YY_G(yy_init) )", " {", " YY_G(yy_init) = 1;", "", "#ifdef YY_USER_INIT", " YY_USER_INIT;", "#endif", "", "m4_ifdef( [[M4_YY_USES_REJECT]],", "[[", " /* Create the reject buffer large enough to save one state per allowed character. */", " if ( ! YY_G(yy_state_buf) )", " YY_G(yy_state_buf) = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE M4_YY_CALL_LAST_ARG);", " if ( ! YY_G(yy_state_buf) )", " YY_FATAL_ERROR( \"out of dynamic memory in yylex()\" );", "]])", "", " if ( ! YY_G(yy_start) )", " YY_G(yy_start) = 1; /* first start state */", "", " if ( ! yyin )", "%if-c-only", " yyin = stdin;", "%endif", "%if-c++-only", " yyin.rdbuf(std::cin.rdbuf());", "%endif", "", " if ( ! yyout )", "%if-c-only", " yyout = stdout;", "%endif", "%if-c++-only", " yyout.rdbuf(std::cout.rdbuf());", "%endif", "", " if ( ! YY_CURRENT_BUFFER ) {", " yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);", " YY_CURRENT_BUFFER_LVALUE =", " yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG);", " }", "", " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );", " }", "", " {", "%% [7.0] user's declarations go here", "", " while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */", " {", "%% [8.0] yymore()-related code goes here", " yy_cp = YY_G(yy_c_buf_p);", "", " /* Support of yytext. */", " *yy_cp = YY_G(yy_hold_char);", "", " /* yy_bp points to the position in yy_ch_buf of the start of", " * the current run.", " */", " yy_bp = yy_cp;", "", "%% [9.0] code to set up and find next match goes here", "", "yy_find_action:", "%% [10.0] code to find the action number goes here", "", " YY_DO_BEFORE_ACTION;", "", "%% [11.0] code for yylineno update goes here", "", "do_action: /* This label is used only to access EOF actions. */", "", "%% [12.0] debug code goes here", "", " switch ( yy_act )", " { /* beginning of action switch */", "%% [13.0] actions go here", "", " case YY_END_OF_BUFFER:", " {", " /* Amount of text matched not including the EOB char. */", " int yy_amount_of_matched_text = (int) (yy_cp - YY_G(yytext_ptr)) - 1;", "", " /* Undo the effects of YY_DO_BEFORE_ACTION. */", " *yy_cp = YY_G(yy_hold_char);", " YY_RESTORE_YY_MORE_OFFSET", "", " if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )", " {", " /* We're scanning a new file or input source. It's", " * possible that this happened because the user", " * just pointed yyin at a new source and called", " * yylex(). If so, then we have to assure", " * consistency between YY_CURRENT_BUFFER and our", " * globals. Here is the right place to do so, because", " * this is the first action (other than possibly a", " * back-up) that will match for the new input source.", " */", " YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;", "%if-c-only", " YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;", "%endif", "%if-c++-only", " YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin.rdbuf();", "%endif", " YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;", " }", "", " /* Note that here we test for yy_c_buf_p \"<=\" to the position", " * of the first EOB in the buffer, since yy_c_buf_p will", " * already have been incremented past the NUL character", " * (since all states make transitions on EOB to the", " * end-of-buffer state). Contrast this with the test", " * in input().", " */", " if ( YY_G(yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] )", " { /* This was really a NUL. */", " yy_state_type yy_next_state;", "", " YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + yy_amount_of_matched_text;", "", " yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );", "", " /* Okay, we're now positioned to make the NUL", " * transition. We couldn't have", " * yy_get_previous_state() go ahead and do it", " * for us because it doesn't know how to deal", " * with the possibility of jamming (and we don't", " * want to build jamming into it because then it", " * will run more slowly).", " */", "", " yy_next_state = yy_try_NUL_trans( yy_current_state M4_YY_CALL_LAST_ARG);", "", " yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;", "", " if ( yy_next_state )", " {", " /* Consume the NUL. */", " yy_cp = ++YY_G(yy_c_buf_p);", " yy_current_state = yy_next_state;", " goto yy_match;", " }", "", " else", " {", "%% [14.0] code to do back-up for compressed tables and set up yy_cp goes here", " goto yy_find_action;", " }", " }", "", " else switch ( yy_get_next_buffer( M4_YY_CALL_ONLY_ARG ) )", " {", " case EOB_ACT_END_OF_FILE:", " {", " YY_G(yy_did_buffer_switch_on_eof) = 0;", "", " if ( yywrap( M4_YY_CALL_ONLY_ARG ) )", " {", " /* Note: because we've taken care in", " * yy_get_next_buffer() to have set up", " * yytext, we can now set up", " * yy_c_buf_p so that if some total", " * hoser (like flex itself) wants to", " * call the scanner after we return the", " * YY_NULL, it'll still work - another", " * YY_NULL will get returned.", " */", " YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + YY_MORE_ADJ;", "", " yy_act = YY_STATE_EOF(YY_START);", " goto do_action;", " }", "", " else", " {", " if ( ! YY_G(yy_did_buffer_switch_on_eof) )", " YY_NEW_FILE;", " }", " break;", " }", "", " case EOB_ACT_CONTINUE_SCAN:", " YY_G(yy_c_buf_p) =", " YY_G(yytext_ptr) + yy_amount_of_matched_text;", "", " yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );", "", " yy_cp = YY_G(yy_c_buf_p);", " yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;", " goto yy_match;", "", " case EOB_ACT_LAST_MATCH:", " YY_G(yy_c_buf_p) =", " &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)];", "", " yy_current_state = yy_get_previous_state( M4_YY_CALL_ONLY_ARG );", "", " yy_cp = YY_G(yy_c_buf_p);", " yy_bp = YY_G(yytext_ptr) + YY_MORE_ADJ;", " goto yy_find_action;", " }", " break;", " }", "", " default:", " YY_FATAL_ERROR(", " \"fatal flex scanner internal error--no action found\" );", " } /* end of action switch */", " } /* end of scanning one token */", " } /* end of user's declarations */", "} /* end of yylex */", "%ok-for-header", "", "%if-c++-only", "%not-for-header", "/* The contents of this function are C++ specific, so the YY_G macro is not used.", " * This constructor simply maintains backward compatibility.", " * DEPRECATED", " */", "yyFlexLexer::yyFlexLexer( std::istream* arg_yyin, std::ostream* arg_yyout ):", " yyin(arg_yyin ? arg_yyin->rdbuf() : std::cin.rdbuf()),", " yyout(arg_yyout ? arg_yyout->rdbuf() : std::cout.rdbuf())", "{", " ctor_common();", "}", "", "/* The contents of this function are C++ specific, so the YY_G macro is not used.", " */", "yyFlexLexer::yyFlexLexer( std::istream& arg_yyin, std::ostream& arg_yyout ):", " yyin(arg_yyin.rdbuf()),", " yyout(arg_yyout.rdbuf())", "{", " ctor_common();", "}", "", "/* The contents of this function are C++ specific, so the YY_G macro is not used.", " */", "void yyFlexLexer::ctor_common()", "{", " yy_c_buf_p = 0;", " yy_init = 0;", " yy_start = 0;", " yy_flex_debug = 0;", " yylineno = 1; // this will only get updated if %option yylineno", "", " yy_did_buffer_switch_on_eof = 0;", "", " yy_looking_for_trail_begin = 0;", " yy_more_flag = 0;", " yy_more_len = 0;", " yy_more_offset = yy_prev_more_offset = 0;", "", " yy_start_stack_ptr = yy_start_stack_depth = 0;", " yy_start_stack = NULL;", "", " yy_buffer_stack = NULL;", " yy_buffer_stack_top = 0;", " yy_buffer_stack_max = 0;", "", "", "m4_ifdef( [[M4_YY_USES_REJECT]],", "[[", " yy_state_buf = new yy_state_type[YY_STATE_BUF_SIZE];", "]],", "[[", " yy_state_buf = 0;", "]])", "}", "", "/* The contents of this function are C++ specific, so the YY_G macro is not used.", " */", "yyFlexLexer::~yyFlexLexer()", "{", " delete [] yy_state_buf;", " yyfree( yy_start_stack M4_YY_CALL_LAST_ARG );", " yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);", " yyfree( yy_buffer_stack M4_YY_CALL_LAST_ARG );", "}", "", "/* The contents of this function are C++ specific, so the YY_G macro is not used.", " */", "void yyFlexLexer::switch_streams( std::istream& new_in, std::ostream& new_out )", "{", " // was if( new_in )", " yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);", " yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE M4_YY_CALL_LAST_ARG) M4_YY_CALL_LAST_ARG);", "", " // was if( new_out )", " yyout.rdbuf(new_out.rdbuf());", "}", "", "/* The contents of this function are C++ specific, so the YY_G macro is not used.", " */", "void yyFlexLexer::switch_streams( std::istream* new_in, std::ostream* new_out )", "{", " if( ! new_in ) {", " new_in = &yyin;", " }", "", " if ( ! new_out ) {", " new_out = &yyout;", " }", "", " switch_streams(*new_in, *new_out);", "}", "", "#ifdef YY_INTERACTIVE", "int yyFlexLexer::LexerInput( char* buf, int /* max_size */ )", "#else", "int yyFlexLexer::LexerInput( char* buf, int max_size )", "#endif", "{", " if ( yyin.eof() || yyin.fail() )", " return 0;", "", "#ifdef YY_INTERACTIVE", " yyin.get( buf[0] );", "", " if ( yyin.eof() )", " return 0;", "", " if ( yyin.bad() )", " return -1;", "", " return 1;", "", "#else", " (void) yyin.read( buf, max_size );", "", " if ( yyin.bad() )", " return -1;", " else", " return yyin.gcount();", "#endif", "}", "", "void yyFlexLexer::LexerOutput( const char* buf, int size )", "{", " (void) yyout.write( buf, size );", "}", "%ok-for-header", "%endif", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/* yy_get_next_buffer - try to read in a new buffer", " *", " * Returns a code representing an action:", " * EOB_ACT_LAST_MATCH -", " * EOB_ACT_CONTINUE_SCAN - continue scanning from current position", " * EOB_ACT_END_OF_FILE - end of file", " */", "%if-c-only", "static int yy_get_next_buffer (M4_YY_DEF_ONLY_ARG)", "%endif", "%if-c++-only", "int yyFlexLexer::yy_get_next_buffer()", "%endif", "{", " M4_YY_DECL_GUTS_VAR();", " char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;", " char *source = YY_G(yytext_ptr);", " int number_to_move, i;", " int ret_val;", "", " if ( YY_G(yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars) + 1] )", " YY_FATAL_ERROR(", " \"fatal flex scanner internal error--end of buffer missed\" );", "", " if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )", " { /* Don't try to fill the buffer, so this is an EOF. */", " if ( YY_G(yy_c_buf_p) - YY_G(yytext_ptr) - YY_MORE_ADJ == 1 )", " {", " /* We matched a single character, the EOB, so", " * treat this as a final EOF.", " */", " return EOB_ACT_END_OF_FILE;", " }", "", " else", " {", " /* We matched some text prior to the EOB, first", " * process it.", " */", " return EOB_ACT_LAST_MATCH;", " }", " }", "", " /* Try to read more data. */", "", " /* First move last chars to start of buffer. */", " number_to_move = (int) (YY_G(yy_c_buf_p) - YY_G(yytext_ptr) - 1);", "", " for ( i = 0; i < number_to_move; ++i )", " *(dest++) = *(source++);", "", " if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )", " /* don't do the read, it's not guaranteed to return an EOF,", " * just force an EOF", " */", " YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars) = 0;", "", " else", " {", " int num_to_read =", " YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;", "", " while ( num_to_read <= 0 )", " { /* Not enough room in the buffer - grow it. */", "m4_ifdef( [[M4_YY_USES_REJECT]],", "[[", " YY_FATAL_ERROR(", "\"input buffer overflow, can't enlarge buffer because scanner uses REJECT\" );", "]],", "[[", " /* just a shorter name for the current buffer */", " YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;", "", " int yy_c_buf_p_offset =", " (int) (YY_G(yy_c_buf_p) - b->yy_ch_buf);", "", " if ( b->yy_is_our_buffer )", " {", " int new_size = b->yy_buf_size * 2;", "", " if ( new_size <= 0 )", " b->yy_buf_size += b->yy_buf_size / 8;", " else", " b->yy_buf_size *= 2;", "", " b->yy_ch_buf = (char *)", " /* Include room in for 2 EOB chars. */", " yyrealloc( (void *) b->yy_ch_buf,", " (yy_size_t) (b->yy_buf_size + 2) M4_YY_CALL_LAST_ARG );", " }", " else", " /* Can't grow it, we don't own it. */", " b->yy_ch_buf = NULL;", "", " if ( ! b->yy_ch_buf )", " YY_FATAL_ERROR(", " \"fatal error - scanner input buffer overflow\" );", "", " YY_G(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];", "", " num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -", " number_to_move - 1;", "]])", " }", "", " if ( num_to_read > YY_READ_BUF_SIZE )", " num_to_read = YY_READ_BUF_SIZE;", "", " /* Read in more data. */", " YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),", " YY_G(yy_n_chars), num_to_read );", "", " YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);", " }", "", " if ( YY_G(yy_n_chars) == 0 )", " {", " if ( number_to_move == YY_MORE_ADJ )", " {", " ret_val = EOB_ACT_END_OF_FILE;", " yyrestart( yyin M4_YY_CALL_LAST_ARG);", " }", "", " else", " {", " ret_val = EOB_ACT_LAST_MATCH;", " YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =", " YY_BUFFER_EOF_PENDING;", " }", " }", "", " else", " ret_val = EOB_ACT_CONTINUE_SCAN;", "", " if ((YY_G(yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {", " /* Extend the array by 50%, plus the number we really need. */", " int new_size = YY_G(yy_n_chars) + number_to_move + (YY_G(yy_n_chars) >> 1);", " YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc(", " (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size M4_YY_CALL_LAST_ARG );", " if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )", " YY_FATAL_ERROR( \"out of dynamic memory in yy_get_next_buffer()\" );", " /* \"- 2\" to take care of EOB's */", " YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);", " }", "", " YY_G(yy_n_chars) += number_to_move;", " YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;", " YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;", "", " YY_G(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];", "", " return ret_val;", "}", "]])", "", "/* yy_get_previous_state - get the state just before the EOB char was reached */", "", "%if-c-only", "%not-for-header", " static yy_state_type yy_get_previous_state (M4_YY_DEF_ONLY_ARG)", "%endif", "%if-c++-only", " yy_state_type yyFlexLexer::yy_get_previous_state()", "%endif", "{", " yy_state_type yy_current_state;", " char *yy_cp;", " M4_YY_DECL_GUTS_VAR();", "", "%% [15.0] code to get the start state into yy_current_state goes here", "", " for ( yy_cp = YY_G(yytext_ptr) + YY_MORE_ADJ; yy_cp < YY_G(yy_c_buf_p); ++yy_cp )", " {", "%% [16.0] code to find the next state goes here", " }", "", " return yy_current_state;", "}", "", "", "/* yy_try_NUL_trans - try to make a transition on the NUL character", " *", " * synopsis", " * next_state = yy_try_NUL_trans( current_state );", " */", "%if-c-only", " static yy_state_type yy_try_NUL_trans YYFARGS1( yy_state_type, yy_current_state)", "%endif", "%if-c++-only", " yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )", "%endif", "{", " int yy_is_jam;", " M4_YY_DECL_GUTS_VAR(); /* This var may be unused depending upon options. */", "%% [17.0] code to find the next state, and perhaps do backing up, goes here", "", " M4_YY_NOOP_GUTS_VAR();", " return yy_is_jam ? 0 : yy_current_state;", "}", "", "", "#ifndef YY_NO_UNPUT", "%if-c-only", "m4_ifdef( [[M4_YY_NO_UNPUT]],,", "[[", " static void yyunput YYFARGS2( int,c, char *,yy_bp)", "%endif", "%if-c++-only", " void yyFlexLexer::yyunput( int c, char* yy_bp)", "%endif", "{", " char *yy_cp;", " M4_YY_DECL_GUTS_VAR();", "", " yy_cp = YY_G(yy_c_buf_p);", "", " /* undo effects of setting up yytext */", " *yy_cp = YY_G(yy_hold_char);", "", " if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )", " { /* need to shift things up to make room */", " /* +2 for EOB chars. */", " int number_to_move = YY_G(yy_n_chars) + 2;", " char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[", " YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];", " char *source =", " &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];", "", " while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )", " *--dest = *--source;", "", " yy_cp += (int) (dest - source);", " yy_bp += (int) (dest - source);", " YY_CURRENT_BUFFER_LVALUE->yy_n_chars =", " YY_G(yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size;", "", " if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )", " YY_FATAL_ERROR( \"flex scanner push-back overflow\" );", " }", "", " *--yy_cp = (char) c;", "", "%% [18.0] update yylineno here", "m4_ifdef( [[M4_YY_USE_LINENO]],", "[[", " if ( c == '\\n' ){", " --yylineno;", " }", "]])", "", " YY_G(yytext_ptr) = yy_bp;", " YY_G(yy_hold_char) = *yy_cp;", " YY_G(yy_c_buf_p) = yy_cp;", "}", "%if-c-only", "]])", "%endif", "#endif", "", "%if-c-only", "#ifndef YY_NO_INPUT", "#ifdef __cplusplus", " static int yyinput (M4_YY_DEF_ONLY_ARG)", "#else", " static int input (M4_YY_DEF_ONLY_ARG)", "#endif", "", "%endif", "%if-c++-only", " int yyFlexLexer::yyinput()", "%endif", "{", " int c;", " M4_YY_DECL_GUTS_VAR();", "", " *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);", "", " if ( *YY_G(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )", " {", " /* yy_c_buf_p now points to the character we want to return.", " * If this occurs *before* the EOB characters, then it's a", " * valid NUL; if not, then we've hit the end of the buffer.", " */", " if ( YY_G(yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[YY_G(yy_n_chars)] )", " /* This was really a NUL. */", " *YY_G(yy_c_buf_p) = '\\0';", "", " else", " { /* need more input */", " int offset = (int) (YY_G(yy_c_buf_p) - YY_G(yytext_ptr));", " ++YY_G(yy_c_buf_p);", "", " switch ( yy_get_next_buffer( M4_YY_CALL_ONLY_ARG ) )", " {", " case EOB_ACT_LAST_MATCH:", " /* This happens because yy_g_n_b()", " * sees that we've accumulated a", " * token and flags that we need to", " * try matching the token before", " * proceeding. But for input(),", " * there's no matching to consider.", " * So convert the EOB_ACT_LAST_MATCH", " * to EOB_ACT_END_OF_FILE.", " */", "", " /* Reset buffer status. */", " yyrestart( yyin M4_YY_CALL_LAST_ARG);", "", " /*FALLTHROUGH*/", "", " case EOB_ACT_END_OF_FILE:", " {", " if ( yywrap( M4_YY_CALL_ONLY_ARG ) )", " return 0;", "", " if ( ! YY_G(yy_did_buffer_switch_on_eof) )", " YY_NEW_FILE;", "#ifdef __cplusplus", " return yyinput(M4_YY_CALL_ONLY_ARG);", "#else", " return input(M4_YY_CALL_ONLY_ARG);", "#endif", " }", "", " case EOB_ACT_CONTINUE_SCAN:", " YY_G(yy_c_buf_p) = YY_G(yytext_ptr) + offset;", " break;", " }", " }", " }", "", " c = *(unsigned char *) YY_G(yy_c_buf_p); /* cast for 8-bit char's */", " *YY_G(yy_c_buf_p) = '\\0'; /* preserve yytext */", " YY_G(yy_hold_char) = *++YY_G(yy_c_buf_p);", "", "%% [19.0] update BOL and yylineno", "", " return c;", "}", "%if-c-only", "#endif /* ifndef YY_NO_INPUT */", "%endif", "", "/** Immediately switch to a different input stream.", " * @param input_file A readable stream.", " * M4_YY_DOC_PARAM", " * @note This function does not reset the start condition to @c INITIAL .", " */", "%if-c-only", " void yyrestart YYFARGS1( FILE *,input_file)", "%endif", "%if-c++-only", " void yyFlexLexer::yyrestart( std::istream& input_file )", "%endif", "{", " M4_YY_DECL_GUTS_VAR();", "", " if ( ! YY_CURRENT_BUFFER ){", " yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);", " YY_CURRENT_BUFFER_LVALUE =", " yy_create_buffer( yyin, YY_BUF_SIZE M4_YY_CALL_LAST_ARG);", " }", "", " yy_init_buffer( YY_CURRENT_BUFFER, input_file M4_YY_CALL_LAST_ARG);", " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );", "}", "", "%if-c++-only", "/** Delegate to the new version that takes an istream reference.", " * @param input_file A readable stream.", " * M4_YY_DOC_PARAM", " * @note This function does not reset the start condition to @c INITIAL .", " */", "void yyFlexLexer::yyrestart( std::istream* input_file )", "{", " if( ! input_file ) {", " input_file = &yyin;", " }", " yyrestart( *input_file );", "}", "%endif", "", "/** Switch to a different input buffer.", " * @param new_buffer The new input buffer.", " * M4_YY_DOC_PARAM", " */", "%if-c-only", " void yy_switch_to_buffer YYFARGS1( YY_BUFFER_STATE ,new_buffer)", "%endif", "%if-c++-only", " void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )", "%endif", "{", " M4_YY_DECL_GUTS_VAR();", "", " /* TODO. We should be able to replace this entire function body", " * with", " * yypop_buffer_state();", " * yypush_buffer_state(new_buffer);", " */", " yyensure_buffer_stack (M4_YY_CALL_ONLY_ARG);", " if ( YY_CURRENT_BUFFER == new_buffer )", " return;", "", " if ( YY_CURRENT_BUFFER )", " {", " /* Flush out information for old buffer. */", " *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);", " YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = YY_G(yy_c_buf_p);", " YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);", " }", "", " YY_CURRENT_BUFFER_LVALUE = new_buffer;", " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );", "", " /* We don't actually know whether we did this switch during", " * EOF (yywrap()) processing, but the only time this flag", " * is looked at is after yywrap() is called, so it's safe", " * to go ahead and always set it.", " */", " YY_G(yy_did_buffer_switch_on_eof) = 1;", "}", "", "", "%if-c-only", "static void yy_load_buffer_state (M4_YY_DEF_ONLY_ARG)", "%endif", "%if-c++-only", " void yyFlexLexer::yy_load_buffer_state()", "%endif", "{", " M4_YY_DECL_GUTS_VAR();", " YY_G(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;", " YY_G(yytext_ptr) = YY_G(yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;", "%if-c-only", " yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;", "%endif", "%if-c++-only", " yyin.rdbuf(YY_CURRENT_BUFFER_LVALUE->yy_input_file);", "%endif", " YY_G(yy_hold_char) = *YY_G(yy_c_buf_p);", "}", "", "/** Allocate and initialize an input buffer state.", " * @param file A readable stream.", " * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.", " * M4_YY_DOC_PARAM", " * @return the allocated buffer state.", " */", "%if-c-only", " YY_BUFFER_STATE yy_create_buffer YYFARGS2( FILE *,file, int ,size)", "%endif", "%if-c++-only", " YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream& file, int size )", "%endif", "{", " YY_BUFFER_STATE b;", " m4_dnl M4_YY_DECL_GUTS_VAR();", "", " b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) M4_YY_CALL_LAST_ARG );", " if ( ! b )", " YY_FATAL_ERROR( \"out of dynamic memory in yy_create_buffer()\" );", "", " b->yy_buf_size = size;", "", " /* yy_ch_buf has to be 2 characters longer than the size given because", " * we need to put in 2 end-of-buffer characters.", " */", " b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) M4_YY_CALL_LAST_ARG );", " if ( ! b->yy_ch_buf )", " YY_FATAL_ERROR( \"out of dynamic memory in yy_create_buffer()\" );", "", " b->yy_is_our_buffer = 1;", "", " yy_init_buffer( b, file M4_YY_CALL_LAST_ARG);", "", " return b;", "}", "", "%if-c++-only", "/** Delegate creation of buffers to the new version that takes an istream reference.", " * @param file A readable stream.", " * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.", " * M4_YY_DOC_PARAM", " * @return the allocated buffer state.", " */", " YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( std::istream* file, int size )", "{", " return yy_create_buffer( *file, size );", "}", "%endif", "", "/** Destroy the buffer.", " * @param b a buffer created with yy_create_buffer()", " * M4_YY_DOC_PARAM", " */", "%if-c-only", " void yy_delete_buffer YYFARGS1( YY_BUFFER_STATE ,b)", "%endif", "%if-c++-only", " void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )", "%endif", "{", " M4_YY_DECL_GUTS_VAR();", "", " if ( ! b )", " return;", "", " if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */", " YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;", "", " if ( b->yy_is_our_buffer )", " yyfree( (void *) b->yy_ch_buf M4_YY_CALL_LAST_ARG );", "", " yyfree( (void *) b M4_YY_CALL_LAST_ARG );", "}", "", "", "/* Initializes or reinitializes a buffer.", " * This function is sometimes called more than once on the same buffer,", " * such as during a yyrestart() or at EOF.", " */", "%if-c-only", " static void yy_init_buffer YYFARGS2( YY_BUFFER_STATE ,b, FILE *,file)", "%endif", "%if-c++-only", " void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, std::istream& file )", "%endif", "", "{", " int oerrno = errno;", " M4_YY_DECL_GUTS_VAR();", "", " yy_flush_buffer( b M4_YY_CALL_LAST_ARG);", "", "%if-c-only", " b->yy_input_file = file;", "%endif", "%if-c++-only", " b->yy_input_file = file.rdbuf();", "%endif", " b->yy_fill_buffer = 1;", "", " /* If b is the current buffer, then yy_init_buffer was _probably_", " * called from yyrestart() or through yy_get_next_buffer.", " * In that case, we don't want to reset the lineno or column.", " */", " if (b != YY_CURRENT_BUFFER){", " b->yy_bs_lineno = 1;", " b->yy_bs_column = 0;", " }", "", "%if-c-only", "m4_ifdef( [[M4_YY_ALWAYS_INTERACTIVE]],", "[[", " b->yy_is_interactive = 1;", "]],", "[[", " m4_ifdef( [[M4_YY_NEVER_INTERACTIVE]],", " [[", " b->yy_is_interactive = 0;", " ]],", " [[", " b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;", " ]])", "]])", "%endif", "%if-c++-only", " b->yy_is_interactive = 0;", "%endif", " errno = oerrno;", "}", "", "/** Discard all buffered characters. On the next scan, YY_INPUT will be called.", " * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.", " * M4_YY_DOC_PARAM", " */", "%if-c-only", " void yy_flush_buffer YYFARGS1( YY_BUFFER_STATE ,b)", "%endif", "%if-c++-only", " void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )", "%endif", "{", " M4_YY_DECL_GUTS_VAR();", " if ( ! b )", " return;", "", " b->yy_n_chars = 0;", "", " /* We always need two end-of-buffer characters. The first causes", " * a transition to the end-of-buffer state. The second causes", " * a jam in that state.", " */", " b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;", " b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;", "", " b->yy_buf_pos = &b->yy_ch_buf[0];", "", " b->yy_at_bol = 1;", " b->yy_buffer_status = YY_BUFFER_NEW;", "", " if ( b == YY_CURRENT_BUFFER )", " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );", "}", "", "%if-c-or-c++", "/** Pushes the new state onto the stack. The new state becomes", " * the current state. This function will allocate the stack", " * if necessary.", " * @param new_buffer The new state.", " * M4_YY_DOC_PARAM", " */", "%if-c-only", "void yypush_buffer_state YYFARGS1(YY_BUFFER_STATE,new_buffer)", "%endif", "%if-c++-only", "void yyFlexLexer::yypush_buffer_state (YY_BUFFER_STATE new_buffer)", "%endif", "{", " M4_YY_DECL_GUTS_VAR();", " if (new_buffer == NULL)", " return;", "", " yyensure_buffer_stack(M4_YY_CALL_ONLY_ARG);", "", " /* This block is copied from yy_switch_to_buffer. */", " if ( YY_CURRENT_BUFFER )", " {", " /* Flush out information for old buffer. */", " *YY_G(yy_c_buf_p) = YY_G(yy_hold_char);", " YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = YY_G(yy_c_buf_p);", " YY_CURRENT_BUFFER_LVALUE->yy_n_chars = YY_G(yy_n_chars);", " }", "", " /* Only push if top exists. Otherwise, replace top. */", " if (YY_CURRENT_BUFFER)", " YY_G(yy_buffer_stack_top)++;", " YY_CURRENT_BUFFER_LVALUE = new_buffer;", "", " /* copied from yy_switch_to_buffer. */", " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );", " YY_G(yy_did_buffer_switch_on_eof) = 1;", "}", "%endif", "", "", "%if-c-or-c++", "/** Removes and deletes the top of the stack, if present.", " * The next element becomes the new top.", " * M4_YY_DOC_PARAM", " */", "%if-c-only", "void yypop_buffer_state (M4_YY_DEF_ONLY_ARG)", "%endif", "%if-c++-only", "void yyFlexLexer::yypop_buffer_state (void)", "%endif", "{", " M4_YY_DECL_GUTS_VAR();", " if (!YY_CURRENT_BUFFER)", " return;", "", " yy_delete_buffer(YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG);", " YY_CURRENT_BUFFER_LVALUE = NULL;", " if (YY_G(yy_buffer_stack_top) > 0)", " --YY_G(yy_buffer_stack_top);", "", " if (YY_CURRENT_BUFFER) {", " yy_load_buffer_state( M4_YY_CALL_ONLY_ARG );", " YY_G(yy_did_buffer_switch_on_eof) = 1;", " }", "}", "%endif", "", "", "%if-c-or-c++", "/* Allocates the stack if it does not exist.", " * Guarantees space for at least one push.", " */", "%if-c-only", "static void yyensure_buffer_stack (M4_YY_DEF_ONLY_ARG)", "%endif", "%if-c++-only", "void yyFlexLexer::yyensure_buffer_stack(void)", "%endif", "{", " yy_size_t num_to_alloc;", " M4_YY_DECL_GUTS_VAR();", "", " if (!YY_G(yy_buffer_stack)) {", "", " /* First allocation is just for 2 elements, since we don't know if this", " * scanner will even need a stack. We use 2 instead of 1 to avoid an", " * immediate realloc on the next call.", " */", " num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */", " YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc", " (num_to_alloc * sizeof(struct yy_buffer_state*)", " M4_YY_CALL_LAST_ARG);", " if ( ! YY_G(yy_buffer_stack) )", " YY_FATAL_ERROR( \"out of dynamic memory in yyensure_buffer_stack()\" );", "", "", " memset(YY_G(yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));", "", " YY_G(yy_buffer_stack_max) = num_to_alloc;", " YY_G(yy_buffer_stack_top) = 0;", " return;", " }", "", " if (YY_G(yy_buffer_stack_top) >= (YY_G(yy_buffer_stack_max)) - 1){", "", " /* Increase the buffer to prepare for a possible push. */", " yy_size_t grow_size = 8 /* arbitrary grow size */;", "", " num_to_alloc = YY_G(yy_buffer_stack_max) + grow_size;", " YY_G(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc", " (YY_G(yy_buffer_stack),", " num_to_alloc * sizeof(struct yy_buffer_state*)", " M4_YY_CALL_LAST_ARG);", " if ( ! YY_G(yy_buffer_stack) )", " YY_FATAL_ERROR( \"out of dynamic memory in yyensure_buffer_stack()\" );", "", " /* zero only the new slots.*/", " memset(YY_G(yy_buffer_stack) + YY_G(yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));", " YY_G(yy_buffer_stack_max) = num_to_alloc;", " }", "}", "%endif", "", "", "", "", "m4_ifdef( [[M4_YY_NO_SCAN_BUFFER]],,", "[[", "%if-c-only", "/** Setup the input buffer state to scan directly from a user-specified character buffer.", " * @param base the character buffer", " * @param size the size in bytes of the character buffer", " * M4_YY_DOC_PARAM", " * @return the newly allocated buffer state object.", " */", "YY_BUFFER_STATE yy_scan_buffer YYFARGS2( char *,base, yy_size_t ,size)", "{", " YY_BUFFER_STATE b;", " m4_dnl M4_YY_DECL_GUTS_VAR();", "", " if ( size < 2 ||", " base[size-2] != YY_END_OF_BUFFER_CHAR ||", " base[size-1] != YY_END_OF_BUFFER_CHAR )", " /* They forgot to leave room for the EOB's. */", " return NULL;", "", " b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) M4_YY_CALL_LAST_ARG );", " if ( ! b )", " YY_FATAL_ERROR( \"out of dynamic memory in yy_scan_buffer()\" );", "", " b->yy_buf_size = (int) (size - 2); /* \"- 2\" to take care of EOB's */", " b->yy_buf_pos = b->yy_ch_buf = base;", " b->yy_is_our_buffer = 0;", " b->yy_input_file = NULL;", " b->yy_n_chars = b->yy_buf_size;", " b->yy_is_interactive = 0;", " b->yy_at_bol = 1;", " b->yy_fill_buffer = 0;", " b->yy_buffer_status = YY_BUFFER_NEW;", "", " yy_switch_to_buffer( b M4_YY_CALL_LAST_ARG );", "", " return b;", "}", "%endif", "]])", "", "", "m4_ifdef( [[M4_YY_NO_SCAN_STRING]],,", "[[", "%if-c-only", "/** Setup the input buffer state to scan a string. The next call to yylex() will", " * scan from a @e copy of @a str.", " * @param yystr a NUL-terminated string to scan", " * M4_YY_DOC_PARAM", " * @return the newly allocated buffer state object.", " * @note If you want to scan bytes that may contain NUL values, then use", " * yy_scan_bytes() instead.", " */", "YY_BUFFER_STATE yy_scan_string YYFARGS1( const char *, yystr)", "{", " m4_dnl M4_YY_DECL_GUTS_VAR();", "", " return yy_scan_bytes( yystr, (int) strlen(yystr) M4_YY_CALL_LAST_ARG);", "}", "%endif", "]])", "", "", "m4_ifdef( [[M4_YY_NO_SCAN_BYTES]],,", "[[", "%if-c-only", "/** Setup the input buffer state to scan the given bytes. The next call to yylex() will", " * scan from a @e copy of @a bytes.", " * @param yybytes the byte buffer to scan", " * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.", " * M4_YY_DOC_PARAM", " * @return the newly allocated buffer state object.", " */", "YY_BUFFER_STATE yy_scan_bytes YYFARGS2( const char *,yybytes, int ,_yybytes_len)", "{", " YY_BUFFER_STATE b;", " char *buf;", " yy_size_t n;", " int i;", " m4_dnl M4_YY_DECL_GUTS_VAR();", "", " /* Get memory for full buffer, including space for trailing EOB's. */", " n = (yy_size_t) (_yybytes_len + 2);", " buf = (char *) yyalloc( n M4_YY_CALL_LAST_ARG );", " if ( ! buf )", " YY_FATAL_ERROR( \"out of dynamic memory in yy_scan_bytes()\" );", "", " for ( i = 0; i < _yybytes_len; ++i )", " buf[i] = yybytes[i];", "", " buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;", "", " b = yy_scan_buffer( buf, n M4_YY_CALL_LAST_ARG);", " if ( ! b )", " YY_FATAL_ERROR( \"bad buffer in yy_scan_bytes()\" );", "", " /* It's okay to grow etc. this buffer, and we should throw it", " * away when we're done.", " */", " b->yy_is_our_buffer = 1;", "", " return b;", "}", "%endif", "]])", "", "", "m4_ifdef( [[M4_YY_NO_PUSH_STATE]],,", "[[", "%if-c-only", " static void yy_push_state YYFARGS1( int ,_new_state)", "%endif", "%if-c++-only", " void yyFlexLexer::yy_push_state( int _new_state )", "%endif", "{", " M4_YY_DECL_GUTS_VAR();", " if ( YY_G(yy_start_stack_ptr) >= YY_G(yy_start_stack_depth) )", " {", " yy_size_t new_size;", "", " YY_G(yy_start_stack_depth) += YY_START_STACK_INCR;", " new_size = (yy_size_t) YY_G(yy_start_stack_depth) * sizeof( int );", "", " if ( ! YY_G(yy_start_stack) )", " YY_G(yy_start_stack) = (int *) yyalloc( new_size M4_YY_CALL_LAST_ARG );", "", " else", " YY_G(yy_start_stack) = (int *) yyrealloc(", " (void *) YY_G(yy_start_stack), new_size M4_YY_CALL_LAST_ARG );", "", " if ( ! YY_G(yy_start_stack) )", " YY_FATAL_ERROR( \"out of memory expanding start-condition stack\" );", " }", "", " YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr)++] = YY_START;", "", " BEGIN(_new_state);", "}", "]])", "", "", "m4_ifdef( [[M4_YY_NO_POP_STATE]],,", "[[", "%if-c-only", " static void yy_pop_state (M4_YY_DEF_ONLY_ARG)", "%endif", "%if-c++-only", " void yyFlexLexer::yy_pop_state()", "%endif", "{", " M4_YY_DECL_GUTS_VAR();", " if ( --YY_G(yy_start_stack_ptr) < 0 )", " YY_FATAL_ERROR( \"start-condition stack underflow\" );", "", " BEGIN(YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr)]);", "}", "]])", "", "", "m4_ifdef( [[M4_YY_NO_TOP_STATE]],,", "[[", "%if-c-only", " static int yy_top_state (M4_YY_DEF_ONLY_ARG)", "%endif", "%if-c++-only", " int yyFlexLexer::yy_top_state()", "%endif", "{", " M4_YY_DECL_GUTS_VAR();", " return YY_G(yy_start_stack)[YY_G(yy_start_stack_ptr) - 1];", "}", "]])", "", "#ifndef YY_EXIT_FAILURE", "#define YY_EXIT_FAILURE 2", "#endif", "", "%if-c-only", "static void yynoreturn yy_fatal_error YYFARGS1(const char*, msg)", "{", " M4_YY_DECL_GUTS_VAR();", " M4_YY_NOOP_GUTS_VAR();", " fprintf( stderr, \"%s\\n\", msg );", " exit( YY_EXIT_FAILURE );", "}", "%endif", "%if-c++-only", "void yyFlexLexer::LexerError( const char* msg )", "{", " M4_YY_DECL_GUTS_VAR();", " std::cerr << msg << std::endl;", " exit( YY_EXIT_FAILURE );", "}", "%endif", "", "/* Redefine yyless() so it works in section 3 code. */", "", "#undef yyless", "#define yyless(n) \\", " do \\", " { \\", " /* Undo effects of setting up yytext. */ \\", " int yyless_macro_arg = (n); \\", " YY_LESS_LINENO(yyless_macro_arg);\\", " yytext[yyleng] = YY_G(yy_hold_char); \\", " YY_G(yy_c_buf_p) = yytext + yyless_macro_arg; \\", " YY_G(yy_hold_char) = *YY_G(yy_c_buf_p); \\", " *YY_G(yy_c_buf_p) = '\\0'; \\", " yyleng = yyless_macro_arg; \\", " } \\", " while ( 0 )", "", "", "", "/* Accessor methods (get/set functions) to struct members. */", "", "%if-c-only", "%if-reentrant", "m4_ifdef( [[M4_YY_NO_GET_EXTRA]],,", "[[", "/** Get the user-defined data for this scanner.", " * M4_YY_DOC_PARAM", " */", "YY_EXTRA_TYPE yyget_extra (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", " return yyextra;", "}", "]])", "%endif", "", "m4_ifdef( [[M4_YY_NO_GET_LINENO]],,", "[[", "/** Get the current line number.", " * M4_YY_DOC_PARAM", " */", "int yyget_lineno (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", "", " m4_ifdef( [[M4_YY_REENTRANT]],", " [[", " if (! YY_CURRENT_BUFFER)", " return 0;", " ]])", " return yylineno;", "}", "]])", "", "m4_ifdef( [[M4_YY_REENTRANT]],", "[[", "m4_ifdef( [[M4_YY_NO_GET_COLUMN]],,", "[[", "/** Get the current column number.", " * M4_YY_DOC_PARAM", " */", "int yyget_column (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", "", " m4_ifdef( [[M4_YY_REENTRANT]],", " [[", " if (! YY_CURRENT_BUFFER)", " return 0;", " ]])", " return yycolumn;", "}", "]])", "]])", "", "m4_ifdef( [[M4_YY_NO_GET_IN]],,", "[[", "/** Get the input stream.", " * M4_YY_DOC_PARAM", " */", "FILE *yyget_in (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", " return yyin;", "}", "]])", "", "m4_ifdef( [[M4_YY_NO_GET_OUT]],,", "[[", "/** Get the output stream.", " * M4_YY_DOC_PARAM", " */", "FILE *yyget_out (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", " return yyout;", "}", "]])", "", "m4_ifdef( [[M4_YY_NO_GET_LENG]],,", "[[", "/** Get the length of the current token.", " * M4_YY_DOC_PARAM", " */", "int yyget_leng (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", " return yyleng;", "}", "]])", "", "/** Get the current token.", " * M4_YY_DOC_PARAM", " */", "m4_ifdef( [[M4_YY_NO_GET_TEXT]],,", "[[", "char *yyget_text (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", " return yytext;", "}", "]])", "", "%if-reentrant", "m4_ifdef( [[M4_YY_NO_SET_EXTRA]],,", "[[", "/** Set the user-defined data. This data is never touched by the scanner.", " * @param user_defined The data to be associated with this scanner.", " * M4_YY_DOC_PARAM", " */", "void yyset_extra YYFARGS1( YY_EXTRA_TYPE ,user_defined)", "{", " M4_YY_DECL_GUTS_VAR();", " yyextra = user_defined ;", "}", "]])", "%endif", "", "m4_ifdef( [[M4_YY_NO_SET_LINENO]],,", "[[", "/** Set the current line number.", " * @param _line_number line number", " * M4_YY_DOC_PARAM", " */", "void yyset_lineno YYFARGS1( int ,_line_number)", "{", " M4_YY_DECL_GUTS_VAR();", "", " m4_ifdef( [[M4_YY_REENTRANT]],", " [[", " /* lineno is only valid if an input buffer exists. */", " if (! YY_CURRENT_BUFFER )", " YY_FATAL_ERROR( \"yyset_lineno called with no buffer\" );", " ]])", " yylineno = _line_number;", "}", "]])", "", "m4_ifdef( [[M4_YY_REENTRANT]],", "[[", "m4_ifdef( [[M4_YY_NO_SET_COLUMN]],,", "[[", "/** Set the current column.", " * @param _column_no column number", " * M4_YY_DOC_PARAM", " */", "void yyset_column YYFARGS1( int , _column_no)", "{", " M4_YY_DECL_GUTS_VAR();", "", " m4_ifdef( [[M4_YY_REENTRANT]],", " [[", " /* column is only valid if an input buffer exists. */", " if (! YY_CURRENT_BUFFER )", " YY_FATAL_ERROR( \"yyset_column called with no buffer\" );", " ]])", " yycolumn = _column_no;", "}", "]])", "]])", "", "", "m4_ifdef( [[M4_YY_NO_SET_IN]],,", "[[", "/** Set the input stream. This does not discard the current", " * input buffer.", " * @param _in_str A readable stream.", " * M4_YY_DOC_PARAM", " * @see yy_switch_to_buffer", " */", "void yyset_in YYFARGS1( FILE * ,_in_str)", "{", " M4_YY_DECL_GUTS_VAR();", " yyin = _in_str ;", "}", "]])", "", "m4_ifdef( [[M4_YY_NO_SET_OUT]],,", "[[", "void yyset_out YYFARGS1( FILE * ,_out_str)", "{", " M4_YY_DECL_GUTS_VAR();", " yyout = _out_str ;", "}", "]])", "", "", "m4_ifdef( [[M4_YY_NO_GET_DEBUG]],,", "[[", "int yyget_debug (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", " return yy_flex_debug;", "}", "]])", "", "m4_ifdef( [[M4_YY_NO_SET_DEBUG]],,", "[[", "void yyset_debug YYFARGS1( int ,_bdebug)", "{", " M4_YY_DECL_GUTS_VAR();", " yy_flex_debug = _bdebug ;", "}", "]])", "%endif", "", "%if-reentrant", "/* Accessor methods for yylval and yylloc */", "", "%if-bison-bridge", "m4_ifdef( [[M4_YY_NO_GET_LVAL]],,", "[[", "YYSTYPE * yyget_lval (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", " return yylval;", "}", "]])", "", "m4_ifdef( [[M4_YY_NO_SET_LVAL]],,", "[[", "void yyset_lval YYFARGS1( YYSTYPE * ,yylval_param)", "{", " M4_YY_DECL_GUTS_VAR();", " yylval = yylval_param;", "}", "]])", "", "m4_ifdef( [[]],", "[[", " m4_ifdef( [[M4_YY_NO_GET_LLOC]],,", " [[", "YYLTYPE *yyget_lloc (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", " return yylloc;", "}", " ]])", "", " m4_ifdef( [[M4_YY_NO_SET_LLOC]],,", " [[", "void yyset_lloc YYFARGS1( YYLTYPE * ,yylloc_param)", "{", " M4_YY_DECL_GUTS_VAR();", " yylloc = yylloc_param;", "}", " ]])", "]])", "", "%endif", "", "", "/* User-visible API */", "", "/* yylex_init is special because it creates the scanner itself, so it is", " * the ONLY reentrant function that doesn't take the scanner as the last argument.", " * That's why we explicitly handle the declaration, instead of using our macros.", " */", "int yylex_init(yyscan_t* ptr_yy_globals)", "{", " if (ptr_yy_globals == NULL){", " errno = EINVAL;", " return 1;", " }", "", " *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL );", "", " if (*ptr_yy_globals == NULL){", " errno = ENOMEM;", " return 1;", " }", "", " /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */", " memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));", "", " return yy_init_globals ( *ptr_yy_globals );", "}", "", "", "/* yylex_init_extra has the same functionality as yylex_init, but follows the", " * convention of taking the scanner as the last argument. Note however, that", " * this is a *pointer* to a scanner, as it will be allocated by this call (and", " * is the reason, too, why this function also must handle its own declaration).", " * The user defined value in the first argument will be available to yyalloc in", " * the yyextra field.", " */", "int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals )", "{", " struct yyguts_t dummy_yyguts;", "", " yyset_extra (yy_user_defined, &dummy_yyguts);", "", " if (ptr_yy_globals == NULL){", " errno = EINVAL;", " return 1;", " }", "", " *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts );", "", " if (*ptr_yy_globals == NULL){", " errno = ENOMEM;", " return 1;", " }", "", " /* By setting to 0xAA, we expose bugs in", " yy_init_globals. Leave at 0x00 for releases. */", " memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t));", "", " yyset_extra (yy_user_defined, *ptr_yy_globals);", "", " return yy_init_globals ( *ptr_yy_globals );", "}", "", "%endif if-c-only", "", "%if-c-only", "static int yy_init_globals (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", " /* Initialization is the same as for the non-reentrant scanner.", " * This function is called from yylex_destroy(), so don't allocate here.", " */", "", "m4_ifdef( [[M4_YY_USE_LINENO]],", "[[", " m4_ifdef( [[M4_YY_NOT_REENTRANT]],", " [[", " /* We do not touch yylineno unless the option is enabled. */", " yylineno = 1;", " ]])", "]])", " YY_G(yy_buffer_stack) = NULL;", " YY_G(yy_buffer_stack_top) = 0;", " YY_G(yy_buffer_stack_max) = 0;", " YY_G(yy_c_buf_p) = NULL;", " YY_G(yy_init) = 0;", " YY_G(yy_start) = 0;", "", "m4_ifdef( [[M4_YY_HAS_START_STACK_VARS]],", "[[", " YY_G(yy_start_stack_ptr) = 0;", " YY_G(yy_start_stack_depth) = 0;", " YY_G(yy_start_stack) = NULL;", "]])", "", "m4_ifdef( [[M4_YY_USES_REJECT]],", "[[", " YY_G(yy_state_buf) = 0;", " YY_G(yy_state_ptr) = 0;", " YY_G(yy_full_match) = 0;", " YY_G(yy_lp) = 0;", "]])", "", "m4_ifdef( [[M4_YY_TEXT_IS_ARRAY]],", "[[", " YY_G(yytext_ptr) = 0;", " YY_G(yy_more_offset) = 0;", " YY_G(yy_prev_more_offset) = 0;", "]])", "", "/* Defined in main.c */", "#ifdef YY_STDINIT", " yyin = stdin;", " yyout = stdout;", "#else", " yyin = NULL;", " yyout = NULL;", "#endif", "", " /* For future reference: Set errno on error, since we are called by", " * yylex_init()", " */", " return 0;", "}", "%endif", "", "", "%if-c-only SNIP! this currently causes conflicts with the c++ scanner", "/* yylex_destroy is for both reentrant and non-reentrant scanners. */", "int yylex_destroy (M4_YY_DEF_ONLY_ARG)", "{", " M4_YY_DECL_GUTS_VAR();", "", " /* Pop the buffer stack, destroying each element. */", " while(YY_CURRENT_BUFFER){", " yy_delete_buffer( YY_CURRENT_BUFFER M4_YY_CALL_LAST_ARG );", " YY_CURRENT_BUFFER_LVALUE = NULL;", " yypop_buffer_state(M4_YY_CALL_ONLY_ARG);", " }", "", " /* Destroy the stack itself. */", " yyfree(YY_G(yy_buffer_stack) M4_YY_CALL_LAST_ARG);", " YY_G(yy_buffer_stack) = NULL;", "", "m4_ifdef( [[M4_YY_HAS_START_STACK_VARS]],", "[[", " /* Destroy the start condition stack. */", " yyfree( YY_G(yy_start_stack) M4_YY_CALL_LAST_ARG );", " YY_G(yy_start_stack) = NULL;", "]])", "", "m4_ifdef( [[M4_YY_USES_REJECT]],", "[[", " yyfree ( YY_G(yy_state_buf) M4_YY_CALL_LAST_ARG);", " YY_G(yy_state_buf) = NULL;", "]])", "", " /* Reset the globals. This is important in a non-reentrant scanner so the next time", " * yylex() is called, initialization will occur. */", " yy_init_globals( M4_YY_CALL_ONLY_ARG);", "", "%if-reentrant", " /* Destroy the main struct (reentrant only). */", " yyfree ( yyscanner M4_YY_CALL_LAST_ARG );", " yyscanner = NULL;", "%endif", " return 0;", "}", "%endif", "", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "/*", " * Internal utility routines.", " */", "]])", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "#ifndef yytext_ptr", "static void yy_flex_strncpy YYFARGS3( char*,s1, const char *,s2, int,n)", "{", " M4_YY_DECL_GUTS_VAR();", " M4_YY_NOOP_GUTS_VAR();", "", " int i;", " for ( i = 0; i < n; ++i )", " s1[i] = s2[i];", "}", "#endif", "]])", "", "m4_ifdef( [[M4_YY_NOT_IN_HEADER]],", "[[", "#ifdef YY_NEED_STRLEN", "static int yy_flex_strlen YYFARGS1( const char *,s)", "{", " int n;", " for ( n = 0; s[n]; ++n )", " ;", "", " return n;", "}", "#endif", "]])", "", "m4_ifdef( [[M4_YY_NO_FLEX_ALLOC]],,", "[[", "void *yyalloc YYFARGS1( yy_size_t ,size)", "{", " M4_YY_DECL_GUTS_VAR();", " M4_YY_NOOP_GUTS_VAR();", " return malloc(size);", "}", "]])", "", "m4_ifdef( [[M4_YY_NO_FLEX_REALLOC]],,", "[[", "void *yyrealloc YYFARGS2( void *,ptr, yy_size_t ,size)", "{", " M4_YY_DECL_GUTS_VAR();", " M4_YY_NOOP_GUTS_VAR();", "", " /* The cast to (char *) in the following accommodates both", " * implementations that use char* generic pointers, and those", " * that use void* generic pointers. It works with the latter", " * because both ANSI C and C++ allow castless assignment from", " * any pointer type to void*, and deal with argument conversions", " * as though doing an assignment.", " */", " return realloc(ptr, size);", "}", "]])", "", "m4_ifdef( [[M4_YY_NO_FLEX_FREE]],,", "[[", "void yyfree YYFARGS1( void *,ptr)", "{", " M4_YY_DECL_GUTS_VAR();", " M4_YY_NOOP_GUTS_VAR();", " free( (char *) ptr ); /* see yyrealloc() for (char *) cast */", "}", "]])", "", "%if-tables-serialization definitions", "#ifdef FLEX_SCANNER", "/*", "dnl tables_shared.c - tables serialization code", "dnl ", "dnl Copyright (c) 1990 The Regents of the University of California.", "dnl All rights reserved.", "dnl ", "dnl This code is derived from software contributed to Berkeley by", "dnl Vern Paxson.", "dnl ", "dnl The United States Government has rights in this work pursuant", "dnl to contract no. DE-AC03-76SF00098 between the United States", "dnl Department of Energy and the University of California.", "dnl ", "dnl This file is part of flex.", "dnl ", "dnl Redistribution and use in source and binary forms, with or without", "dnl modification, are permitted provided that the following conditions", "dnl are met:", "dnl ", "dnl 1. Redistributions of source code must retain the above copyright", "dnl notice, this list of conditions and the following disclaimer.", "dnl 2. Redistributions in binary form must reproduce the above copyright", "dnl notice, this list of conditions and the following disclaimer in the", "dnl documentation and/or other materials provided with the distribution.", "dnl ", "dnl Neither the name of the University nor the names of its contributors", "dnl may be used to endorse or promote products derived from this software", "dnl without specific prior written permission.", "dnl ", "dnl THIS SOFTWARE IS PROVIDED `AS IS' AND WITHOUT ANY EXPRESS OR", "dnl IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED", "dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR", "dnl PURPOSE.", "dnl ", "*/", " ", "/* This file is meant to be included in both the skeleton and the actual", " * flex code (hence the name \"_shared\"). ", " */", "#ifndef yyskel_static", "#define yyskel_static static", "#endif", "#else", "#include \"flexdef.h\"", "#include \"tables.h\"", "#ifndef yyskel_static", "#define yyskel_static", "#endif", "#endif", "", "", "/** Get the number of integers in this table. This is NOT the", " * same thing as the number of elements.", " * @param tbl the table", " * @return the number of integers in the table", " */", "yyskel_static flex_int32_t yytbl_calc_total_len (const struct yytbl_data *tbl)", "{", " flex_uint32_t n;", "", " /* total number of ints */", " n = tbl->td_lolen;", " if (tbl->td_hilen > 0)", " n *= tbl->td_hilen;", "", " if (tbl->td_id == YYTD_ID_TRANSITION)", " n *= 2;", " return (flex_int32_t) n;", "}", "", "", "static int yytbl_read8 (void *v, struct yytbl_reader * rd)", "{", " errno = 0;", " if (fread (v, sizeof (flex_uint8_t), 1, rd->fp) != 1){", " errno = EIO;", " return -1;", " }", " rd->bread += (flex_uint32_t) sizeof(flex_uint8_t);", " return 0;", "}", "", "static int yytbl_read16 (void *v, struct yytbl_reader * rd)", "{", " errno = 0;", " if (fread (v, sizeof (flex_uint16_t), 1, rd->fp) != 1){", " errno = EIO;", " return -1;", " }", " *((flex_uint16_t *) v) = ntohs (*((flex_uint16_t *) v));", " rd->bread += (flex_uint32_t) sizeof(flex_uint16_t);", " return 0;", "}", "", "static int yytbl_read32 (void *v, struct yytbl_reader * rd)", "{", " errno = 0;", " if (fread (v, sizeof (flex_uint32_t), 1, rd->fp) != 1){", " errno = EIO;", " return -1;", " }", " *((flex_uint32_t *) v) = ntohl (*((flex_uint32_t *) v));", " rd->bread += (flex_uint32_t) sizeof(flex_uint32_t);", " return 0;", "}", "", "/** Read the header */", "static int yytbl_hdr_read YYFARGS2(struct yytbl_hdr *, th, struct yytbl_reader *, rd)", "{", " size_t bytes;", " memset (th, 0, sizeof (struct yytbl_hdr));", "", " if (yytbl_read32 (&(th->th_magic), rd) != 0)", " return -1;", "", " if (th->th_magic != YYTBL_MAGIC){", " YY_FATAL_ERROR( \"bad magic number\" ); /* TODO: not fatal. */", " return -1;", " }", "", " if (yytbl_read32 (&(th->th_hsize), rd) != 0", " || yytbl_read32 (&(th->th_ssize), rd) != 0", " || yytbl_read16 (&(th->th_flags), rd) != 0)", " return -1;", "", " /* Sanity check on header size. Greater than 1k suggests some funny business. */", " if (th->th_hsize < 16 || th->th_hsize > 1024){", " YY_FATAL_ERROR( \"insane header size detected\" ); /* TODO: not fatal. */", " return -1;", " }", "", " /* Allocate enough space for the version and name fields */", " bytes = th->th_hsize - 14;", " th->th_version = (char *) yyalloc (bytes M4_YY_CALL_LAST_ARG);", " if ( ! th->th_version )", " YY_FATAL_ERROR( \"out of dynamic memory in yytbl_hdr_read()\" );", "", " /* we read it all into th_version, and point th_name into that data */", " if (fread (th->th_version, 1, bytes, rd->fp) != bytes){", " errno = EIO;", " yyfree(th->th_version M4_YY_CALL_LAST_ARG);", " th->th_version = NULL;", " return -1;", " }", " else", " rd->bread += (flex_uint32_t) bytes;", "", " th->th_name = th->th_version + strlen (th->th_version) + 1;", " return 0;", "}", "", "/** lookup id in the dmap list.", " * @param dmap pointer to first element in list", " * @return NULL if not found.", " */", "static struct yytbl_dmap *yytbl_dmap_lookup YYFARGS2(struct yytbl_dmap *, dmap,", " int, id)", "{", " M4_YY_DECL_GUTS_VAR();", " M4_YY_NOOP_GUTS_VAR();", "", " while (dmap->dm_id)", " if ((int)(dmap->dm_id) == id)", " return dmap;", " else", " dmap++;", " return NULL;", "}", "", "/** Read a table while mapping its contents to the local array.", " * @param dmap used to performing mapping", " * @return 0 on success", " */", "static int yytbl_data_load YYFARGS2(struct yytbl_dmap *, dmap, struct yytbl_reader*, rd)", "{", " struct yytbl_data td;", " struct yytbl_dmap *transdmap=0;", " int len, i, rv, inner_loop_count;", " void *p=0;", "", " memset (&td, 0, sizeof (struct yytbl_data));", "", " if (yytbl_read16 (&td.td_id, rd) != 0", " || yytbl_read16 (&td.td_flags, rd) != 0", " || yytbl_read32 (&td.td_hilen, rd) != 0", " || yytbl_read32 (&td.td_lolen, rd) != 0)", " return -1;", "", " /* Lookup the map for the transition table so we have it in case we need it", " * inside the loop below. This scanner might not even have a transition", " * table, which is ok.", " */", " transdmap = yytbl_dmap_lookup (dmap, YYTD_ID_TRANSITION M4_YY_CALL_LAST_ARG);", "", " if ((dmap = yytbl_dmap_lookup (dmap, td.td_id M4_YY_CALL_LAST_ARG)) == NULL){", " YY_FATAL_ERROR( \"table id not found in map.\" ); /* TODO: not fatal. */", " return -1;", " }", "", " /* Allocate space for table.", " * The --full yy_transition table is a special case, since we", " * need the dmap.dm_sz entry to tell us the sizeof the individual", " * struct members.", " */", " {", " size_t bytes;", "", " if ((td.td_flags & YYTD_STRUCT))", " bytes = sizeof(struct yy_trans_info) * td.td_lolen * (td.td_hilen ? td.td_hilen : 1);", " else", " bytes = td.td_lolen * (td.td_hilen ? td.td_hilen : 1) * dmap->dm_sz;", "", " if(M4_YY_TABLES_VERIFY)", " /* We point to the array itself */", " p = dmap->dm_arr;", " else", " /* We point to the address of a pointer. */", " *dmap->dm_arr = p = (void *) yyalloc (bytes M4_YY_CALL_LAST_ARG);", " if ( ! p )", " YY_FATAL_ERROR( \"out of dynamic memory in yytbl_data_load()\" );", " }", "", " /* If it's a struct, we read 2 integers to get one element */", " if ((td.td_flags & YYTD_STRUCT) != 0)", " inner_loop_count = 2;", " else", " inner_loop_count = 1;", "", " /* read and map each element.", " * This loop iterates once for each element of the td_data array.", " * Notice that we increment 'i' in the inner loop.", " */", " len = yytbl_calc_total_len (&td);", " for (i = 0; i < len; ){", " int j;", "", "", " /* This loop really executes exactly 1 or 2 times.", " * The second time is to handle the second member of the", " * YYTD_STRUCT for the yy_transition array.", " */", " for (j = 0; j < inner_loop_count; j++, i++) {", " flex_int32_t t32;", "", " /* read into t32 no matter what the real size is. */", " {", " flex_int16_t t16;", " flex_int8_t t8;", "", " switch (YYTDFLAGS2BYTES (td.td_flags)) {", " case sizeof (flex_int32_t):", " rv = yytbl_read32 (&t32, rd);", " break;", " case sizeof (flex_int16_t):", " rv = yytbl_read16 (&t16, rd);", " t32 = t16;", " break;", " case sizeof (flex_int8_t):", " rv = yytbl_read8 (&t8, rd);", " t32 = t8;", " break;", " default:", " YY_FATAL_ERROR( \"invalid td_flags\" ); /* TODO: not fatal. */", " return -1;", " }", " }", " if (rv != 0)", " return -1;", "", " /* copy into the deserialized array... */", "", " if ((td.td_flags & YYTD_STRUCT)) {", " /* t32 is the j'th member of a two-element struct. */", " void *v;", "", " v = j == 0 ? &(((struct yy_trans_info *) p)->yy_verify)", " : &(((struct yy_trans_info *) p)->yy_nxt);", "", " switch (dmap->dm_sz) {", " case sizeof (flex_int32_t):", " if (M4_YY_TABLES_VERIFY){", " if( ((flex_int32_t *) v)[0] != (flex_int32_t) t32)", " YY_FATAL_ERROR( \"tables verification failed at YYTD_STRUCT flex_int32_t\" );", " }else", " ((flex_int32_t *) v)[0] = (flex_int32_t) t32;", " break;", " case sizeof (flex_int16_t):", " if (M4_YY_TABLES_VERIFY ){", " if(((flex_int16_t *) v)[0] != (flex_int16_t) t32)", " YY_FATAL_ERROR( \"tables verification failed at YYTD_STRUCT flex_int16_t\" );", " }else", " ((flex_int16_t *) v)[0] = (flex_int16_t) t32;", " break;", " case sizeof(flex_int8_t):", " if (M4_YY_TABLES_VERIFY ){", " if( ((flex_int8_t *) v)[0] != (flex_int8_t) t32)", " YY_FATAL_ERROR( \"tables verification failed at YYTD_STRUCT flex_int8_t\" );", " }else", " ((flex_int8_t *) v)[0] = (flex_int8_t) t32;", " break;", " default:", " YY_FATAL_ERROR( \"invalid dmap->dm_sz for struct\" ); /* TODO: not fatal. */", " return -1;", " }", "", " /* if we're done with j, increment p */", " if (j == 1)", " p = (struct yy_trans_info *) p + 1;", " }", " else if ((td.td_flags & YYTD_PTRANS)) {", " /* t32 is an index into the transition array. */", " struct yy_trans_info *v;", "", "", " if (!transdmap){", " YY_FATAL_ERROR( \"transition table not found\" ); /* TODO: not fatal. */", " return -1;", " }", "", " if( M4_YY_TABLES_VERIFY)", " v = &(((struct yy_trans_info *) (transdmap->dm_arr))[t32]);", " else", " v = &((*((struct yy_trans_info **) (transdmap->dm_arr)))[t32]);", "", " if(M4_YY_TABLES_VERIFY ){", " if( ((struct yy_trans_info **) p)[0] != v)", " YY_FATAL_ERROR( \"tables verification failed at YYTD_PTRANS\" );", " }else", " ((struct yy_trans_info **) p)[0] = v;", "", " /* increment p */", " p = (struct yy_trans_info **) p + 1;", " }", " else {", " /* t32 is a plain int. copy data, then incrememnt p. */", " switch (dmap->dm_sz) {", " case sizeof (flex_int32_t):", " if(M4_YY_TABLES_VERIFY ){", " if( ((flex_int32_t *) p)[0] != (flex_int32_t) t32)", " YY_FATAL_ERROR( \"tables verification failed at flex_int32_t\" );", " }else", " ((flex_int32_t *) p)[0] = (flex_int32_t) t32;", " p = ((flex_int32_t *) p) + 1;", " break;", " case sizeof (flex_int16_t):", " if(M4_YY_TABLES_VERIFY ){", " if( ((flex_int16_t *) p)[0] != (flex_int16_t) t32)", " YY_FATAL_ERROR( \"tables verification failed at flex_int16_t\" );", " }else", " ((flex_int16_t *) p)[0] = (flex_int16_t) t32;", " p = ((flex_int16_t *) p) + 1;", " break;", " case sizeof (flex_int8_t):", " if(M4_YY_TABLES_VERIFY ){", " if( ((flex_int8_t *) p)[0] != (flex_int8_t) t32)", " YY_FATAL_ERROR( \"tables verification failed at flex_int8_t\" );", " }else", " ((flex_int8_t *) p)[0] = (flex_int8_t) t32;", " p = ((flex_int8_t *) p) + 1;", " break;", " default:", " YY_FATAL_ERROR( \"invalid dmap->dm_sz for plain int\" ); /* TODO: not fatal. */", " return -1;", " }", " }", " }", "", " }", "", " /* Now eat padding. */", " {", " int pad;", " pad = yypad64(rd->bread);", " while(--pad >= 0){", " flex_int8_t t8;", " if(yytbl_read8(&t8,rd) != 0)", " return -1;", " }", " }", "", " return 0;", "}", "", "%define-yytables The name for this specific scanner's tables.", "", "/* Find the key and load the DFA tables from the given stream. */", "static int yytbl_fload YYFARGS2(FILE *, fp, const char *, key)", "{", " int rv=0;", " struct yytbl_hdr th;", " struct yytbl_reader rd;", "", " rd.fp = fp;", " th.th_version = NULL;", "", " /* Keep trying until we find the right set of tables or end of file. */", " while (!feof(rd.fp)) {", " rd.bread = 0;", " if (yytbl_hdr_read (&th, &rd M4_YY_CALL_LAST_ARG) != 0){", " rv = -1;", " goto return_rv;", " }", "", " /* A NULL key means choose the first set of tables. */", " if (key == NULL)", " break;", "", " if (strcmp(th.th_name,key) != 0){", " /* Skip ahead to next set */", " fseek(rd.fp, th.th_ssize - th.th_hsize, SEEK_CUR);", " yyfree(th.th_version M4_YY_CALL_LAST_ARG);", " th.th_version = NULL;", " }", " else", " break;", " }", "", " while (rd.bread < th.th_ssize){", " /* Load the data tables */", " if(yytbl_data_load (yydmap,&rd M4_YY_CALL_LAST_ARG) != 0){", " rv = -1;", " goto return_rv;", " }", " }", "", "return_rv:", " if(th.th_version){", " yyfree(th.th_version M4_YY_CALL_LAST_ARG);", " th.th_version = NULL;", " }", "", " return rv;", "}", "", "/** Load the DFA tables for this scanner from the given stream. */", "int yytables_fload YYFARGS1(FILE *, fp)", "{", "", " if( yytbl_fload(fp, YYTABLES_NAME M4_YY_CALL_LAST_ARG) != 0)", " return -1;", " return 0;", "}", "", "/** Destroy the loaded tables, freeing memory, etc.. */", "int yytables_destroy (M4_YY_DEF_ONLY_ARG)", "{", " struct yytbl_dmap *dmap=0;", "", " if(!M4_YY_TABLES_VERIFY){", " /* Walk the dmap, freeing the pointers */", " for(dmap=yydmap; dmap->dm_id; dmap++) {", " void * v;", " v = dmap->dm_arr;", " if(v && *(char**)v){", " yyfree(*(char**)v M4_YY_CALL_LAST_ARG);", " *(char**)v = NULL;", " }", " }", " }", "", " return 0;", "}", "", "/* end table serialization code definitions */", "%endif", "", "", "m4_ifdef([[M4_YY_MAIN]], [[", "int main (void);", "", "int main ()", "{", "", "%if-reentrant", " yyscan_t lexer;", " yylex_init(&lexer);", " yylex( lexer );", " yylex_destroy( lexer);", "", "%endif", "%if-not-reentrant", " yylex();", "%endif", "", " return 0;", "}", "]])", "", "%ok-for-header", "m4_ifdef( [[M4_YY_IN_HEADER]],", "[[", "#undef YY_NEW_FILE", "#undef YY_FLUSH_BUFFER", "#undef yy_set_bol", "#undef yy_new_buffer", "#undef yy_set_interactive", "#undef YY_DO_BEFORE_ACTION", "", "#ifdef YY_DECL_IS_OURS", "#undef YY_DECL_IS_OURS", "#undef YY_DECL", "#endif", "", "[[#ifndef ]]M4_YY_PREFIX[[_create_buffer_ALREADY_DEFINED", "#undef yy_create_buffer", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[_delete_buffer_ALREADY_DEFINED", "#undef yy_delete_buffer", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[_scan_buffer_ALREADY_DEFINED", "#undef yy_scan_buffer", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[_scan_string_ALREADY_DEFINED", "#undef yy_scan_string", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[_scan_bytes_ALREADY_DEFINED", "#undef yy_scan_bytes", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[_init_buffer_ALREADY_DEFINED", "#undef yy_init_buffer", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[_flush_buffer_ALREADY_DEFINED", "#undef yy_flush_buffer", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[_load_buffer_state_ALREADY_DEFINED", "#undef yy_load_buffer_state", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[_switch_to_buffer_ALREADY_DEFINED", "#undef yy_switch_to_buffer", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[push_buffer_state_ALREADY_DEFINED", "#undef yypush_buffer_state", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[pop_buffer_state_ALREADY_DEFINED", "#undef yypop_buffer_state", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[ensure_buffer_stack_ALREADY_DEFINED", "#undef yyensure_buffer_stack", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[lex_ALREADY_DEFINED", "#undef yylex", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[restart_ALREADY_DEFINED", "#undef yyrestart", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[lex_init_ALREADY_DEFINED", "#undef yylex_init", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[lex_init_extra_ALREADY_DEFINED", "#undef yylex_init_extra", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[lex_destroy_ALREADY_DEFINED", "#undef yylex_destroy", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[get_debug_ALREADY_DEFINED", "#undef yyget_debug", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[set_debug_ALREADY_DEFINED", "#undef yyset_debug", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[get_extra_ALREADY_DEFINED", "#undef yyget_extra", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[set_extra_ALREADY_DEFINED", "#undef yyset_extra", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[get_in_ALREADY_DEFINED", "#undef yyget_in", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[set_in_ALREADY_DEFINED", "#undef yyset_in", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[get_out_ALREADY_DEFINED", "#undef yyget_out", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[set_out_ALREADY_DEFINED", "#undef yyset_out", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[get_leng_ALREADY_DEFINED", "#undef yyget_leng", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[get_text_ALREADY_DEFINED", "#undef yyget_text", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[get_lineno_ALREADY_DEFINED", "#undef yyget_lineno", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[set_lineno_ALREADY_DEFINED", "#undef yyset_lineno", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[get_column_ALREADY_DEFINED", "#undef yyget_column", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[set_column_ALREADY_DEFINED", "#undef yyset_column", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[wrap_ALREADY_DEFINED", "#undef yywrap", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[get_lval_ALREADY_DEFINED", "#undef yyget_lval", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[set_lval_ALREADY_DEFINED", "#undef yyset_lval", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[get_lloc_ALREADY_DEFINED", "#undef yyget_lloc", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[set_lloc_ALREADY_DEFINED", "#undef yyset_lloc", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[alloc_ALREADY_DEFINED", "#undef yyalloc", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[realloc_ALREADY_DEFINED", "#undef yyrealloc", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[free_ALREADY_DEFINED", "#undef yyfree", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[text_ALREADY_DEFINED", "#undef yytext", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[leng_ALREADY_DEFINED", "#undef yyleng", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[in_ALREADY_DEFINED", "#undef yyin", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[out_ALREADY_DEFINED", "#undef yyout", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[_flex_debug_ALREADY_DEFINED", "#undef yy_flex_debug", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[lineno_ALREADY_DEFINED", "#undef yylineno", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[tables_fload_ALREADY_DEFINED", "#undef yytables_fload", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[tables_destroy_ALREADY_DEFINED", "#undef yytables_destroy", "#endif]]", "[[#ifndef ]]M4_YY_PREFIX[[TABLES_NAME_ALREADY_DEFINED", "#undef yyTABLES_NAME", "#endif]]", "]])", 0 }; flex-2.6.4/src/scan.l0000664000175000017500000006607313102435245011307 00000000000000/* scan.l - scanner for flex input -*-C-*- */ %{ /* Copyright (c) 1990 The Regents of the University of California. */ /* All rights reserved. */ /* This code is derived from software contributed to Berkeley by */ /* Vern Paxson. */ /* The United States Government has rights in this work pursuant */ /* to contract no. DE-AC03-76SF00098 between the United States */ /* Department of Energy and the University of California. */ /* This file is part of flex. */ /* Redistribution and use in source and binary forms, with or without */ /* modification, are permitted provided that the following conditions */ /* are met: */ /* 1. Redistributions of source code must retain the above copyright */ /* notice, this list of conditions and the following disclaimer. */ /* 2. Redistributions in binary form must reproduce the above copyright */ /* notice, this list of conditions and the following disclaimer in the */ /* documentation and/or other materials provided with the distribution. */ /* Neither the name of the University nor the names of its contributors */ /* may be used to endorse or promote products derived from this software */ /* without specific prior written permission. */ /* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR */ /* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED */ /* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */ /* PURPOSE. */ #include "flexdef.h" #include "parse.h" extern bool tablesverify, tablesext; extern int trlcontxt; /* Set in parse.y for each rule. */ extern const char *escaped_qstart, *escaped_qend; #define M4QSTART "[""[" #define M4QEND "]""]" #define ESCAPED_QSTART "[" M4QEND M4QSTART "[" M4QEND M4QSTART #define ESCAPED_QEND M4QEND "]" M4QSTART M4QEND "]" M4QSTART #define ACTION_ECHO add_action( yytext ) #define ACTION_IFDEF(def, should_define) \ { \ if ( should_define ) \ action_define( def, 1 ); \ } #define ACTION_ECHO_QSTART add_action (ESCAPED_QSTART) #define ACTION_ECHO_QEND add_action (ESCAPED_QEND) #define ACTION_M4_IFDEF(def, should_define) \ do{ \ if ( should_define ) \ buf_m4_define( &m4defs_buf, def, NULL);\ else \ buf_m4_undefine( &m4defs_buf, def);\ } while(0) #define MARK_END_OF_PROLOG mark_prolog(); #define YY_DECL \ int flexscan(void) #define RETURNCHAR \ yylval = (unsigned char) yytext[0]; \ return CHAR; #define RETURNNAME \ if(yyleng < MAXLINE) \ { \ strncpy( nmstr, yytext, sizeof(nmstr) ); \ return NAME; \ } \ else \ do { \ synerr(_("Input line too long\n")); \ FLEX_EXIT(EXIT_FAILURE); \ } while (0) #define PUT_BACK_STRING(str, start) \ { size_t i = strlen( str ); \ while ( i > start ) \ unput((str)[--i]); \ } #define CHECK_REJECT(str) \ if ( all_upper( str ) ) \ reject = true; #define CHECK_YYMORE(str) \ if ( all_lower( str ) ) \ yymore_used = true; #define YY_USER_INIT \ if ( getenv("POSIXLY_CORRECT") ) \ posix_compat = true; #define START_CODEBLOCK(x) do { \ /* Emit the needed line directive... */\ if (indented_code == false) { \ linenum++; \ line_directive_out(NULL, 1); \ } \ add_action(M4QSTART); \ yy_push_state(CODEBLOCK); \ if ((indented_code = x)) ACTION_ECHO; \ } while(0) #define END_CODEBLOCK do { \ yy_pop_state();\ add_action(M4QEND); \ if (!indented_code) line_directive_out(NULL, 0);\ } while (0) %} %option caseless nodefault noreject stack noyy_top_state %option nostdinit %x SECT2 SECT2PROLOG SECT3 CODEBLOCK PICKUPDEF SC CARETISBOL NUM QUOTE %x FIRSTCCL CCL ACTION RECOVER COMMENT ACTION_STRING PERCENT_BRACE_ACTION %x OPTION LINEDIR CODEBLOCK_MATCH_BRACE %x GROUP_WITH_PARAMS %x GROUP_MINUS_PARAMS %x EXTENDED_COMMENT %x COMMENT_DISCARD CODE_COMMENT %x SECT3_NOESCAPE %x CHARACTER_CONSTANT WS [[:blank:]]+ OPTWS [[:blank:]]* NOT_WS [^[:blank:]\r\n] NL \r?\n NAME ([[:alpha:]_][[:alnum:]_-]*) NOT_NAME [^[:alpha:]_*\n]+ SCNAME {NAME} ESCSEQ (\\([^\n]|[0-7]{1,3}|x[[:xdigit:]]{1,2})) FIRST_CCL_CHAR ([^\\\n]|{ESCSEQ}) CCL_CHAR ([^\\\n\]]|{ESCSEQ}) CCL_EXPR ("[:"^?[[:alpha:]]+":]") LEXOPT [aceknopr] M4QSTART "[""[" M4QEND "]""]" %% static int bracelevel, didadef, indented_code; static int doing_rule_action = false; static int option_sense; int doing_codeblock = false; int brace_depth=0, brace_start_line=0; char nmdef[MAXLINE]; { ^{WS} START_CODEBLOCK(true); ^"/*" add_action("/*[""["); yy_push_state( COMMENT ); ^#{OPTWS}line{WS} yy_push_state( LINEDIR ); ^"%s"{NAME}? return SCDECL; ^"%x"{NAME}? return XSCDECL; ^"%{".*{NL} START_CODEBLOCK(false); ^"%top"[[:blank:]]*"{"[[:blank:]]*{NL} { brace_start_line = linenum; ++linenum; buf_linedir( &top_buf, infilename?infilename:"", linenum); brace_depth = 1; yy_push_state(CODEBLOCK_MATCH_BRACE); } ^"%top".* synerr( _("malformed '%top' directive") ); {WS} /* discard */ ^"%%".* { sectnum = 2; bracelevel = 0; mark_defs1(); line_directive_out(NULL, 1); BEGIN(SECT2PROLOG); return SECTEND; } ^"%pointer".*{NL} yytext_is_array = false; ++linenum; ^"%array".*{NL} yytext_is_array = true; ++linenum; ^"%option" BEGIN(OPTION); return TOK_OPTION; ^"%"{LEXOPT}{OPTWS}[[:digit:]]*{OPTWS}{NL} ++linenum; /* ignore */ ^"%"{LEXOPT}{WS}.*{NL} ++linenum; /* ignore */ /* xgettext: no-c-format */ ^"%"[^sxaceknopr{}].* synerr( _( "unrecognized '%' directive" ) ); ^{NAME} { if(yyleng < MAXLINE) { strncpy( nmstr, yytext, sizeof(nmstr) ); } else { synerr( _("Definition name too long\n")); FLEX_EXIT(EXIT_FAILURE); } didadef = false; BEGIN(PICKUPDEF); } {SCNAME} RETURNNAME; ^{OPTWS}{NL} ++linenum; /* allows blank lines in section 1 */ {OPTWS}{NL} ACTION_ECHO; ++linenum; /* maybe end of comment line */ } { /* */ [^\[\]\*\n]* ACTION_ECHO; . ACTION_ECHO; {NL} ++linenum; ACTION_ECHO; } { "*/" add_action("*/]""]"); yy_pop_state(); } { "*/" ACTION_ECHO; yy_pop_state(); } { /* This is the same as COMMENT, but is discarded rather than output. */ "*/" yy_pop_state(); "*" ; [^*\n] ; {NL} ++linenum; } { ")" yy_pop_state(); [^\n\)]+ ; {NL} ++linenum; } { \n yy_pop_state(); [[:digit:]]+ linenum = myctoi( yytext ); \"[^"\n]*\" { free(infilename); infilename = xstrdup(yytext + 1); infilename[strlen( infilename ) - 1] = '\0'; } . /* ignore spurious characters */ } { {M4QSTART} ACTION_ECHO_QSTART; {M4QEND} ACTION_ECHO_QEND; } { ^"%}".*{NL} ++linenum; END_CODEBLOCK; [^\n%\[\]]* ACTION_ECHO; . ACTION_ECHO; {NL} { ++linenum; ACTION_ECHO; if ( indented_code ) END_CODEBLOCK; } } { "}" { if( --brace_depth == 0){ /* TODO: Matched. */ yy_pop_state(); }else buf_strnappend(&top_buf, yytext, yyleng); } "{" { brace_depth++; buf_strnappend(&top_buf, yytext, yyleng); } {NL} { ++linenum; buf_strnappend(&top_buf, yytext, yyleng); } {M4QSTART} buf_strnappend(&top_buf, escaped_qstart, (int) strlen(escaped_qstart)); {M4QEND} buf_strnappend(&top_buf, escaped_qend, (int) strlen(escaped_qend)); ([^{}\r\n\[\]]+)|[^{}\r\n] { buf_strnappend(&top_buf, yytext, yyleng); } <> { linenum = brace_start_line; synerr(_("Unmatched '{'")); yyterminate(); } } { {WS} /* separates name and definition */ {NOT_WS}[^\r\n]* { if(yyleng < MAXLINE) { strncpy( nmdef, yytext, sizeof(nmdef) ); } else { format_synerr( _("Definition value for {%s} too long\n"), nmstr); FLEX_EXIT(EXIT_FAILURE); } /* Skip trailing whitespace. */ { size_t i = strlen( nmdef ); while (i > 0 && (nmdef[i-1] == ' ' || nmdef[i-1] == '\t')) --i; nmdef[i] = '\0'; } ndinstal( nmstr, nmdef ); didadef = true; } {NL} { if ( ! didadef ) synerr( _( "incomplete name definition" ) ); BEGIN(INITIAL); ++linenum; } }