#!/bin/sh # This is a shell archive (produced by GNU sharutils 4.2c). # To extract the files from this archive, save it to some FILE, remove # everything before the `!/bin/sh' line above, then type `sh FILE'. # # Made on 1999-10-21 10:09 MDT by . # Source directory was `/export/home/0074/sy/beebe/tex/bibparse/bibparse-1.04'. # # Existing files will *not* be overwritten unless `-c' is specified. # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 1762 -rwxr-xr-x BUILD-BIBPARSE.sh # 4249 -rw-r--r-- ChangeLog # 21072 -rw-r--r-- Makefile.in # 34797 -rw-r--r-- README # 76322 -rw-r--r-- README.html # 202 -rw-r--r-- acconfig.h # 338 -rw-r--r-- args.h # 987 -rw-r--r-- bibdup.awk # 554 -rwxr-xr-x bibdup.sin # 4316 -rw-r--r-- bibdup.man # 779 -rw-r--r-- bibfiles.sok # 457 -r--r--r-- biblex.dat # 13061 -rw-r--r-- biblex.l # 7101 -rw-r--r-- biblex.man # 1622 -r--r--r-- biblex.ok # 15645 -rw-r--r-- bibparse.man # 13927 -rw-r--r-- bibparse.y # 9604 -rw-r--r-- bibunlex.l # 4123 -rw-r--r-- bibunlex.man # 1418 -rw-r--r-- bibyydcl.h # 82621 -rwxrwxr-x configure # 6234 -rw-r--r-- configure.in # 516 -rw-r--r-- config.hin # 1223 -rw-r--r-- lexmain.c # 1528 -rw-r--r-- token.h # 2418 -r--r--r-- test/check.bat # 1599 -r-xr-xr-x test/docheck.sh # 457 -r--r--r-- test/lex001.in # 331 -r--r--r-- test/lex002.in # 457 -r--r--r-- test/lex003.in # 427150 -r--r--r-- test/lex004.in # 81416 -r--r--r-- test/lex005.in # 0 -r--r--r-- test/okay/lex001.err # 1682 -r--r--r-- test/okay/lex001.out # 0 -r--r--r-- test/okay/lex002.err # 896 -r--r--r-- test/okay/lex002.out # 0 -r--r--r-- test/okay/lex003.err # 3576 -r--r--r-- test/okay/lex003.out # 0 -r--r--r-- test/okay/lex004.err # 1369101 -r--r--r-- test/okay/lex004.out # 0 -r--r--r-- test/okay/lex005.err # 242991 -r--r--r-- test/okay/lex005.out # 0 -r--r--r-- test/okay/parse001.err # 0 -r--r--r-- test/okay/parse001.out # 0 -r--r--r-- test/okay/parse002.err # 0 -r--r--r-- test/okay/parse002.out # 0 -r--r--r-- test/okay/parse003.err # 0 -r--r--r-- test/okay/parse003.out # 1298 -r--r--r-- test/okay/parse004.err # 0 -r--r--r-- test/okay/parse004.out # 0 -r--r--r-- test/okay/parse005.err # 0 -r--r--r-- test/okay/parse005.out # 84 -r--r--r-- test/okay/parse006.err # 0 -r--r--r-- test/okay/parse006.out # 55 -r--r--r-- test/okay/parse007.err # 0 -r--r--r-- test/okay/parse007.out # 0 -r--r--r-- test/okay/parse008.err # 0 -r--r--r-- test/okay/parse008.out # 0 -r--r--r-- test/okay/parse009.err # 0 -r--r--r-- test/okay/parse009.out # 0 -r--r--r-- test/okay/parse010.err # 0 -r--r--r-- test/okay/parse010.out # 55 -r--r--r-- test/okay/parse011.err # 0 -r--r--r-- test/okay/parse011.out # 55 -r--r--r-- test/okay/parse012.err # 0 -r--r--r-- test/okay/parse012.out # 0 -r--r--r-- test/okay/parse013.err # 0 -r--r--r-- test/okay/parse013.out # 0 -r--r--r-- test/okay/parse014.err # 0 -r--r--r-- test/okay/parse014.out # 0 -r--r--r-- test/okay/parse015.err # 0 -r--r--r-- test/okay/parse015.out # 0 -r--r--r-- test/okay/unlex001.err # 401 -r--r--r-- test/okay/unlex001.out # 0 -r--r--r-- test/okay/unlex002.err # 350 -r--r--r-- test/okay/unlex002.out # 0 -r--r--r-- test/okay/unlex003.err # 522 -r--r--r-- test/okay/unlex003.out # 0 -r--r--r-- test/okay/unlex004.err # 387933 -r--r--r-- test/okay/unlex004.out # 0 -r--r--r-- test/okay/unlex005.err # 74532 -r--r--r-- test/okay/unlex005.out # 1682 -r--r--r-- test/parse001.in # 896 -r--r--r-- test/parse002.in # 3576 -r--r--r-- test/parse003.in # 1369101 -r--r--r-- test/parse004.in # 242991 -r--r--r-- test/parse005.in # 275 -r--r--r-- test/parse006.in # 12 -r--r--r-- test/parse007.in # 311 -r--r--r-- test/parse008.in # 59076 -r--r--r-- test/parse009.in # 4170 -r--r--r-- test/parse010.in # 579 -r--r--r-- test/parse011.in # 126 -r--r--r-- test/parse012.in # 1287 -r--r--r-- test/parse013.in # 228690 -r--r--r-- test/parse014.in # 15060 -r--r--r-- test/parse015.in # 1682 -r--r--r-- test/unlex001.in # 896 -r--r--r-- test/unlex002.in # 3576 -r--r--r-- test/unlex003.in # 1369101 -r--r--r-- test/unlex004.in # 242991 -r--r--r-- test/unlex005.in # 1388 -r-xr-xr-x test/update.sh # 6082 -rw-r--r-- bibdup.html # 9251 -rw-r--r-- biblex.html # 18652 -rw-r--r-- bibparse.html # 5862 -rw-r--r-- bibunlex.html # 5062 -rw-r--r-- bibdup.pdf # 8413 -rw-r--r-- biblex.pdf # 15548 -rw-r--r-- bibparse.pdf # 4937 -rw-r--r-- bibunlex.pdf # 8552 -rw-r--r-- bibdup.ps # 13362 -rw-r--r-- biblex.ps # 24440 -rw-r--r-- bibparse.ps # 8295 -rw-r--r-- bibunlex.ps # 2565 -rw-r--r-- bibdup.txt # 6146 -rw-r--r-- biblex.txt # 13970 -rw-r--r-- bibparse.txt # 2482 -rw-r--r-- bibunlex.txt # 21083 -r--r--r-- save/Makefile # 27073 -r--r--r-- save/biblex.c # 20947 -r--r--r-- save/bibunlex.c # 30959 -r--r--r-- save/bibparse.c # 602 -r--r--r-- save/config.h # 82621 -r-xr-xr-x save/configure # save_IFS="${IFS}" IFS="${IFS}:" gettext_dir=FAILED locale_dir=FAILED first_param="$1" for dir in $PATH do if test "$gettext_dir" = FAILED && test -f $dir/gettext \ && ($dir/gettext --version >/dev/null 2>&1) then set `$dir/gettext --version 2>&1` if test "$3" = GNU then gettext_dir=$dir fi fi if test "$locale_dir" = FAILED && test -f $dir/shar \ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1) then locale_dir=`$dir/shar --print-text-domain-dir` fi done IFS="$save_IFS" if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED then echo=echo else TEXTDOMAINDIR=$locale_dir export TEXTDOMAINDIR TEXTDOMAIN=sharutils export TEXTDOMAIN echo="$gettext_dir/gettext -s" fi if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then shar_n= shar_c=' ' else shar_n=-n shar_c= fi else shar_n= shar_c='\c' fi touch -am 1231235999 $$.touch >/dev/null 2>&1 if test ! -f 1231235999 && test -f $$.touch; then shar_touch=touch else shar_touch=: echo $echo 'WARNING: not restoring timestamps. Consider getting and' $echo "installing GNU \`touch', distributed in GNU File Utilities..." echo fi rm -f 1231235999 $$.touch # $echo $shar_n 'x -' 'lock directory' "\`_sh27754': "$shar_c if mkdir _sh27754; then $echo 'created' else $echo 'failed to create' exit 1 fi # ============= BUILD-BIBPARSE.sh ============== if test -f 'BUILD-BIBPARSE.sh' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'BUILD-BIBPARSE.sh' '(file already exists)' else $echo 'x -' extracting 'BUILD-BIBPARSE.sh' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'BUILD-BIBPARSE.sh' && #! /bin/sh # This script configures and builds an optimized version of bibparse on # all local systems at the University of Utah Mathematics and Physics # Departments. # # Usage: # ./BUILD-BIBPARSE.sh # # [08-May-1999] X # Default C compiler CC=c89 YACC=yacc X # Adjustments for particular systems X case "`uname -s`" in X AIX) X CC=c89 X OPT='-O3 -qarch=ppc' X # Don't use -qarch=ppc: AIX doesn't emulate those extra instructions X # on older models that lack them, sigh... Sun does a much better job X OPT='-O3' X ;; X HP-UX) X CC=c89 X OPT='+O4' X ;; X IRIX) X CC='cc -cckr' X OPT='-O2' X # IRIX 5.3 yacc quits with ``Redeclaration of precedence of ASGNOP, line 75'' X # so switch to bison, sigh... X YACC='bison -y' X ;; X IRIX64) X CC=c89 X OPT='-O2' X ;; X Linux) X CC=gcc X OPT='-O3' X ;; X Mach) X CC=gcc X OPT='-O3 -m68030' X ;; X OSF1) X CC=c89 X OPT=-O4 X ;; X SunOS) X case "`uname -r`" in X 4.*) X CC='acc' X OPT='-O2 -dalign -libmil -cg89' X ;; X 5.5) X CC="gcc -ansi" X CC=c89 X OPT='-xO5 -dalign -xlibmil -fsimple=2 -fns -xsafe=mem -xtarget=ultra1/2200' X ;; X 5.*) X CC="gcc -ansi" X CC=c89 X OPT='-xO5 -dalign -xlibmil -fsimple=2 -fns -xsafe=mem -xtarget=ultra2/2300' X ;; X *) X echo "Unrecognized SunOS version...proceeding with defaults and fingers crossed :^)" X CC=c89 X OPT='-O' X ;; X esac X ;; X *) X echo "Unrecognized operating system...proceeding with defaults and fingers crossed :^)" X OPT='-O' X ;; esac X if test -f Makefile then X make distclean else X rm -f *.o config.cache config.log config.status awklex maketab \ X proctab.c ytab.c ytab.h fi X echo 'CC =' $CC echo 'OPT =' $OPT echo 'YACC =' $YACC X env CC="${CC}" ./configure && make OPT="$OPT" YACC="${YACC}" all check SHAR_EOF $shar_touch -am 0508145899 'BUILD-BIBPARSE.sh' && chmod 0755 'BUILD-BIBPARSE.sh' || $echo 'restore of' 'BUILD-BIBPARSE.sh' 'failed' if ( md5sum --help &1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version &1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'BUILD-BIBPARSE.sh:' 'MD5 check failed' b1f6627a14dc50f70449c1c64392f910 BUILD-BIBPARSE.sh SHAR_EOF else shar_count="`LC_ALL=C wc -c < 'BUILD-BIBPARSE.sh'`" test 1762 -eq "$shar_count" || $echo 'BUILD-BIBPARSE.sh:' 'original size' '1762,' 'current size' "$shar_count!" fi fi # ============= ChangeLog ============== if test -f 'ChangeLog' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'ChangeLog' '(file already exists)' else $echo 'x -' extracting 'ChangeLog' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'ChangeLog' && 1999-05-26 Nelson H. F. Beebe X X * Release version 1.04. Its major new feature for users is the X ability of bibparse to handle BibTeX files directly, as well as X the lexical token streams from biblex and bibclean that previous X versions expected. This version has been tested under more than X 460 combinations of lex (AT&T lex and GNU flex) and yacc (AT&T X yacc, Berkeley byacc, and GNU bison) implementations, and C and X C++ compilers, and the enhancements to the autoconfig process X make it likely to be successful on almost all UNIX platforms, as X well as providing for simple builds on Microsoft Windows 9x and X NT systems. Binaries are provided for IBM PC DOS and Windows X systems. X X * bibyydcl.h: add function prototype for yylex(void). X X * Makefile.in: substantial rewrite with many small changes X too numerous to document here. X X * bibdup.sin: new file from which bibdup.sh (installed as bibdup) X is derived automatically. X X * config.hin: add #undef statements for HAVE_LIBFL and HAVE_LIBL. X X * configure.in: substantial rewirte with many new checks for X programs, more complex tests for lex/flex library variations X to handle GNU/Linux and C++ variations better, and generation X of bibdup.sh from bibdup.sin. X X * biblex.l: token printing now happens only when global variable X do_lex_output is nonzero, so that biblex can be embedded in X bibparse. X X * biblex.l, bibparse.y, bibunlex.l: define YYLMAX in terms of X BIBYYLMAX, which is now set in just a single place, in X Makefile.in. X X * biblex.l: add test against EOF as well as EOFILE, so flex can be X used reliably in place of lex. X X * bibparse.y: extend docstring in file comment header. X X * bibparse.y: add support for direct internal parsing of BibTeX X files, using a renamed biblex() parser linked into bibparse, so X that either token streams or BibTeX files can be used as input; X recognition of the input type is automatic. X X * bibparse.y: add new function zzlex() to handle input of token X stream. Function xxlex() (renamed from yylex() at compile time X in biblex) handles input of BibTeX files. Simple lookahead at X file beginning distinguishes between the two input types, and X pyylex is set to either xxlex or zzlex, and yylex() is defined X to call (*pyylex)(), so that yyparse() continues to work X unmodified, without knowledge of how its token stream was X obtained. X X * *.man: update author address in file comment header and AUTHOR X section. X X * *.man: add additional cross-references to newer BibTeX tools in X SEE ALSO section. X X * bibparse.man: document new direct BibTeX-file input support. X X * bibparse.man: substantially extend DESCRIPTION section. X X * bibparse.man: add entirely new OPTIONS section. X X * bibparse.man: add entirely new BIBTEX GRAMMAR section, so that X the user does not need to refer to the original TUGboat paper, X or the bibparse source code, to find the grammar. X X * bibparse.man: add entirely new PERFORMANCE section. X 1998-06-01 Nelson H. F. Beebe X X * Update biblex/bibparse/bibunlex distribution to use GNU X autoconfigure. This work added new files Makefile.in and X configure.in, from which autoconf produces configure, and X autoheader produces config.hin. When configure is run at the X installer's site, it produces config.h and Makefile. X X * Add new file arg.h with common header code from biblex.l, X bibparse.y, bibunlex.l, and lexmain.c. X X * Add support for flex in place of lex, and bison in place of X yacc. The choice is made by configure, with lex being X preferred. However, some Linux systems lack lex and yacc. X This required a few minor changes in biblex.l to get a lex X description acceptable to both lex and flex, and additional X support in bibyydcl.h for flex. X X * Add subdirectory save/ with backup copies of generated files X Makefile, biblex.c, bibparse.c, bibunlex.c, config.h, and X configure from the author's Sun Solaris 2.6 system. X X * Add .html and .pdf files to the distribution. X X * Update Makefile.in targets to match current GNU conventions. X X * Add ChangeLog and INSTALL files to the distribution. X X * Move symbolic token names into new token.h file to avoid X duplication. SHAR_EOF $shar_touch -am 0526073699 'ChangeLog' && chmod 0644 'ChangeLog' || $echo 'restore of' 'ChangeLog' 'failed' if ( md5sum --help &1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version &1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'ChangeLog:' 'MD5 check failed' 18adfbb26ea5ee48952895d9dab8cb90 ChangeLog SHAR_EOF else shar_count="`LC_ALL=C wc -c < 'ChangeLog'`" test 4249 -eq "$shar_count" || $echo 'ChangeLog:' 'original size' '4249,' 'current size' "$shar_count!" fi fi # ============= Makefile.in ============== if test -f 'Makefile.in' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'Makefile.in' '(file already exists)' else $echo 'x -' extracting 'Makefile.in' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'Makefile.in' && # ====================================================================== # Makefile for biblex (lexically analyze BibTeX file), bibparse (parse # BibTeX file according to prototype grammar), and bibunlex # (reconstruct BibTeX file from lexical token stream). biblex and # bibunlex are lex/flex-based, and bibparse is yacc/bison-based. # # Current target list: # all (default) make biblex and test # biblex lex-based BibTeX lexer # biblex.o # bibparse.c # bibparse.o # bibparse yacc-based BibTeX parser # bibparse.jar Java Jar distribution archive # bibparse.shr shar bundle of distribution archive # bibparse.tar UNIX tar distribution archive # bibparse.txt ASCII text of formatted manual pages # bibparse.zip InfoZIP distribution archive # bibparse.zoo Zoo distribution archive # bibunlex filter to convert biblex token stream to # BibTeX format # bibunlex.c # bibunlex.o # check same as check-programs # check-docs spelling and doubled-word checks on # documentation # check-programs run validation suite # clean clean up trash and object files # clobber same as distclean # configure regenerate configure script (NB: # requires GNU autoheader and autoconf) # configure.time-stamp dummy file to record that patches # have been applied to the configure script # distclean clean up everything for a rebuild or # redistribution # docs make HTML, PostScript, PDF, and formatted # text files from man pages # dw doubled-word check on manual pages # html-files make HTML files from manual pages # install install bibdup, biblex, bibparse, and # bibunlex in system directories # install-ftp install distributions at author's ftp site # lexmain.o # maintainer-clean remove everything that can be rebuilt # with tools available at the author's # site (for maintainer only: do NOT do this # yourself!) # mostlyclean same as clean # pdf-files make PDF files from PostScript files # programs compile and link executable programs # ps-files make PostScript files from man pages # spell spell check manual pages # TAGS GNU Emacs tags file for fast editing # test-version check version number extraction for # other make targets # txt-files make ASCII text files from man pages # uninstall remove all files installed in system # directories by "make install" # # [08-May-1999] -- update for bibparse version 1.04 release # [01-Jun-1998] -- update for use with GNU autoconfigure # [16-Jan-1993] # ====================================================================== X prefix = /usr/local X # Change these to suit local conventions: BINDIR = $(prefix)/bin FTPDIR = /u/ftp/pub/tex/bib SHRLIBDIR = $(prefix)/share/lib/bibdup MANDIR = $(prefix)/man MANEXT = 1 X # Use lcc or gcc with extra flags for extensive error checking, or use # C++ compiler (g++ or CC). DO NOT CHANGE ANY OF THESE VALUES: # instead, copy one of these to the end of the CC list to select your # compiler. You may also set the DEFINES value below too, though that # is rarely necessary. X ## # NB: On SGI IRIX 4.0.x, if you do not have C++, then you must use ## # 'CC = cc -cckr' to compile biblex.c and bibunlex.c, because the ## # lex-generated code contains a line ## # FILE *yyin = {stdin}, *yyout = {stdout}; ## # which will not compile when the c89 version of stdio.h is used. ## ## CC = c89 ## DEC Alpha OSF/1 Standard C compiler ## CC = cxx ## DEC Alpha OSF/1 C++ compiler ## CC = CC ## C++ for BSD 4.3 UNIX on HP 370 ## CC = CC +a1 -xansi +w ## C++ for SGI IRIX 4.0 (see LOADLIBES below) ## CC = cc -ansiposix -fullwarn -woff 22,24,183,205,262,269,302,303 ## ## C for SGI IRIX 4.0 ## CC = CC +a1 +p +w -D_POSIX_SOURCE -Hansi -D__STDC__ -D_BSD -D_AIX -Dps2 \ ## -DHAVE_TERMIO_H ## ## C++ on AIX 370 and PS/2: +a1 (ANSI ## ## declarations), +p (no anachronisms), +w ## ## (warnings) -D-BSD (to get toupper() and ## ## tolower() declared in ctype.h). ## ## Need -DHAVE_TERMIO_H because termios.h ## ## has wrong prototypes for C++ ## CC = CC +a1 +p +w -D_POSIX_SOURCE -Hansi -D__STDC__ -D_BSD -D_AIX -D_AIX370 ## ## C++ on AIX 370 ## CC = cc -Hansi -D_POSIX_SOURCE ## cc on AIX 370 and AIX PS/2 ## CC = /usr/CC/sun4/CC -I/usr/CC/incl -D__SUNCC__ ## C++ on SunOS 4.1.1 ## CC = acc -Xc -vc -strconst -D__ACC__ -D_POSIX_SOURCE -DHAVE_TERMIOS_H ## ## SunOS Standard C compiler (neither ## ## -DHAVE_SGTTY_H nor -DHAVE_TERMIO_H gives ## ## char-at-a-time input, sigh...; they work ## ## fine on other systems). ## CC = c89 -D_POSIX_SOURCE -D_ALL_SOURCE ## IBM RS/6000 ## CC = xlC ## IBM RS/6000 C++ ## CC = c89 -D_HPUX_SOURCE ## HP 9000/8xx HP-UX A.08 ## CC = cc ## most systems ## CC = cc ## Stardent (NB: remove -g in OPT below) ## CC = cc -systype bsd43 -D__CC__ ## MIPS RCxxxx RISCos 4.52 and 5.2: ## CC = cc $(GCCFLAGS) ## NeXT (cc is really GNU C compiler) ## CC = g++ $(GCCFLAGS) ## GNU C++ ## CC = lcc -A -A -n ## Princeton/AT&T Standard C compiler ## CC = gcc $(GCCFLAGS) ## GNU C ## ## # Compiler for this site: ## CC = g++ $(GCCFLAGS) ## GNU C++ ## CC = gcc $(GCCFLAGS) ## GNU C ## CC = cc -Xc -D__ACC__ -D__solaris ## Sun Solaris 2.x ## X # These values are set when configure is run: CC = @CC@ CXX = @CXX@ CFLAGS = @CFLAGS@ $(DEFINES) $(INCLUDES) $(OPT) CXXFLAGS = @CXXFLAGS@ $(DEFINES) $(INCLUDES) $(OPT) X # ====================================================================== # The remainder of this Makefile should not need changes X # Need new awk (nawk) or gawk here: AWK = @AWK@ X # Where the executables are during "make check": BIBLEX = ../biblex X BIBPARSE = ../bibparse X BIBUNLEX = ../bibunlex X # Because we need to support rather long BibTeX tokens (e.g., a long # abstract string), we need a MUCH larger yytext[] token buffer than the # default, which is often just 512 or 1024. # # Unfortunately, some lex implementations (e.g., Sun Solaris 2.x) emit # use of YYLMAX before the code from the %{...%} section of the .l file, # or without allowing a command-line definition to set it, so even # though biblex.l redefines YYLMAX internally, that definition may be # too late. # # Thus, we must also define it on the compiler command line, and use it # in $(SEDFILTER) below. # # These values MUST all match, so we call them all BIBYYLMAX. This # is now the ONLY place where the magic value is set, so it can be # trivially redefined at make time if needed. # # Note: For a long time, this value was 40960 (or 32768 on IBM PC # systems). However, a few bibliographies in the TeX User Group # collection have even longer strings, and setting it to 81920 proved # to be big enough for all of them. To allow for growth, we set it # even larger, to 128K. BIBYYLMAX = 131072 X CHMOD = @CHMOD@ X # Extra flags for gcc and g++ to get maximal checking GCCFLAGS = -Wall -Wshadow -Wcast-qual -Wpointer-arith -Wwrite-strings X COMPRESS = @COMPRESS@ X CP = @CP@ X DEFINES = @DEFINES@ -DBIBYYLMAX=$(BIBYYLMAX) X DEROFF = @DEROFF@ X DIFF = @DIFF@ X DISTILL = @DISTILL@ X DITROFF = @DITROFF@ X ETAGS = @ETAGS@ X EXPAND = @EXPAND@ X INCLUDES = -I. X JAR = @JAR@ X LDFLAGS = @LDFLAGS@ X LIBS = @LIBS@ X # For flex, need to manually remove the %a and %o table size lines LEX = @LEX@ X LN = @LN@ -s X LS = @LS@ X # man2html is available at ftp://ftp.math.utah.edu/pub/sgml/man2html-x.yy.* MAN2HTML = @MAN2HTML@ X MKDIR = @MKDIR@ -p X MV = @MV@ X NROFF = @NROFF@ X # This variable defined to be empty, with the intent that the user can # set it on the make command line at build time to choose fancy # compiler-dependent optimization switches. OPT = X # NB: Put bibparse before biblex to avoid unnecessary recompilation # of biblex: bibparse creates a special temporary version of biblex.o PROGRAMS = bibparse biblex bibunlex X RM = @RM@ -f X RMDIR = @RMDIR@ X SED = @SED@ X # See above for why we need to substitute YYLMAX by BIBYYLMAX in the # first sed pattern. # # The peculiar second sed pattern removes a line generated by HP HP-UX # 10.x lex which causes a fatal compilation error because of an # argument mismatch with the real definition of main(). # # The third sed pattern resets any definition of YYLMAX to make it # equal to BIBYYLMAX, in case it gets used before it is reset later. # # The fourth sed pattern removes an erroneous declation of getenv() by # yacc on GNU/Linux systems. SEDFILTER = $(SED) -e 's/char *yytext *\[YYLMAX\]/char yytext[$(BIBYYLMAX)]/' \ X -e '/static void __yy__unused() { main(); }/d' \ X -e 's/\#[ ]*define[ ]*YYLMAX.*$$/\#define YYLMAX BIBYYLMAX/' \ X -e '/extern[ ]*char[ ]*[*]getenv[ ]*[(][ ]*[)]/d' X SHAR = @SHAR@ X # This variable is not used directly, but some make implementations # (e.g., SGI IRIX) use it to decide what shell to invoke commands in. # We require the original Bourne shell, sh (or a syntax-compatible # variant, such as ksh or bash). SHELL = /bin/sh X SPELL = @SPELL@ +bibfiles.sok X TAR = @TAR@ X TOUCH = @TOUCH@ X UNZIP = @UNZIP@ X VERSION = `$(AWK) '/^[ \t]*version *= *"[0-9.]+", *$$/ \ X { gsub(/[^0-9.]/,"",$$3); print $$3 }' bibparse.y` X YACC = @YACC@ X YFLAGS = -v @YFLAGS@ X ZIP = @ZIP@ X ZOO = @ZOO@ X #======================================================================= # File lists: X BASEPROGS = $(PROGRAMS) bibdup X CHECK-FILES = test/check.bat test/docheck.sh test/lex001.in \ X test/lex002.in test/lex003.in test/lex004.in test/lex005.in \ X test/okay/lex001.err test/okay/lex001.out \ X test/okay/lex002.err test/okay/lex002.out \ X test/okay/lex003.err test/okay/lex003.out \ X test/okay/lex004.err test/okay/lex004.out \ X test/okay/lex005.err test/okay/lex005.out \ X test/okay/parse001.err test/okay/parse001.out \ X test/okay/parse002.err test/okay/parse002.out \ X test/okay/parse003.err test/okay/parse003.out \ X test/okay/parse004.err test/okay/parse004.out \ X test/okay/parse005.err test/okay/parse005.out \ X test/okay/parse006.err test/okay/parse006.out \ X test/okay/parse007.err test/okay/parse007.out \ X test/okay/parse008.err test/okay/parse008.out \ X test/okay/parse009.err test/okay/parse009.out \ X test/okay/parse010.err test/okay/parse010.out \ X test/okay/parse011.err test/okay/parse011.out \ X test/okay/parse012.err test/okay/parse012.out \ X test/okay/parse013.err test/okay/parse013.out \ X test/okay/parse014.err test/okay/parse014.out \ X test/okay/parse015.err test/okay/parse015.out \ X test/okay/unlex001.err test/okay/unlex001.out \ X test/okay/unlex002.err test/okay/unlex002.out \ X test/okay/unlex003.err test/okay/unlex003.out \ X test/okay/unlex004.err test/okay/unlex004.out \ X test/okay/unlex005.err test/okay/unlex005.out \ X test/parse001.in test/parse002.in test/parse003.in \ X test/parse004.in test/parse005.in test/parse006.in \ X test/parse007.in test/parse008.in test/parse009.in \ X test/parse010.in test/parse011.in test/parse012.in \ X test/parse013.in test/parse014.in test/parse015.in \ X test/unlex001.in test/unlex002.in test/unlex003.in \ X test/unlex004.in test/unlex005.in test/update.sh X # These variables list the basenames of the test files. Those named XXX*.in # are input files for bibXXX, those named okay/XXX*.out contain correct # output on stdout from bibXXX for comparison with the .out files created by # "make check", and those named okay/XXX*.err contain correct output on # stderr from bibXXX for comparison with the XXX*.err files created by "make # check". All of these tests are done in the test subdirectory. X CHECK-NAMES-LEX = lex001 lex002 lex003 lex004 lex005 X CHECK-NAMES-PARSE = parse001 parse002 parse003 parse004 parse005 \ X parse006 parse007 parse008 parse009 parse010 \ X parse011 parse012 parse013 parse014 parse015 X CHECK-NAMES-UNLEX = unlex001 unlex002 unlex003 unlex004 unlex005 X # This is the list of everything that is distributed in the various # archive formats installed in the ftp tree: X DIST-FILES = BUILD-BIBPARSE.sh ChangeLog Makefile.in README README.html \ X acconfig.h args.h bibdup.awk bibdup.sin bibdup.man \ X bibfiles.sok biblex.dat biblex.l biblex.man biblex.ok \ X bibparse.man bibparse.y bibunlex.l bibunlex.man bibyydcl.h \ X configure configure.in config.hin lexmain.c token.h \ X $(CHECK-FILES) $(HTML-FILES) $(PDF-FILES) $(PS-FILES) \ X $(TXT-FILES) save/Makefile save/biblex.c save/bibunlex.c \ X save/bibparse.c save/config.h save/configure X HTML-FILES = $(MAN-FILES:.man=.html) X MAN-FILES = bibdup.man biblex.man bibparse.man bibunlex.man X PDF-FILES = $(MAN-FILES:.man=.pdf) X PS-FILES = $(MAN-FILES:.man=.ps) X TAGS-FILES = biblex.l bibparse.y bibunlex.l X TXT-FILES = $(MAN-FILES:.man=.txt) X #======================================================================= X X.SUFFIXES: .html .pdf .ps .txt .man .i .c .y X X.c.i: X $(CC) -E $(CFLAGS) $< >$@ X X.l.c: X $(LEX) -t $< | $(SEDFILTER) > $@ X X.man.html: X $(MAN2HTML) $< X X.ps.pdf: X $(DISTILL) $< X X.y.c: X $(YACC) $(YFLAGS) $< X $(SEDFILTER) < y.tab.c > $@ X -$(RM) y.tab.c X X.y.i: X $(MAKE) $*.c X $(MAKE) $*.i X -$(RM) $*.c X X.man.ps: X $(DITROFF) -Tps -man $? >$@ X X.man.txt: X $(DITROFF) -Tascii -man $? >$@ X #======================================================================= X all: programs X bibdup.sh: bibdup.sin Makefile X -$(RM) -f $@ X $(SED) -e 's=_LIBDIR_=$(SHRLIBDIR)=g' \ X -e 's=_BINDIR_=$(BINDIR)=g' \ X -e 's=_AWK_=$(AWK)=g' \ X $@ X $(CHMOD) 555 $@ X biblex: lexmain.c biblex.c args.h bibyydcl.h token.h X $(CC) $(CFLAGS) -o biblex lexmain.c biblex.c $(LDFLAGS) $(LIBS) X biblex.c: biblex.l X bibparse.c: bibparse.y X # We create a temporary empty yacc.h file to avoid a compilation # error from HP's version, and g++'s failure to find it at all. # This is harmless on other systems. bibparse.o: bibparse.c args.h bibyydcl.h X @$(TOUCH) yacc.h X $(CC) $(CFLAGS) -c bibparse.c X @-$(RM) yacc.h X # We make this dependency on biblex.c, not biblex.o, because we need # to recompile it with yylex changed to xxlex for use inside bibparse bibparse: bibparse.o biblex.c args.h bibyydcl.h token.h X $(CC) $(CFLAGS) -Dyylex=xxlex -o bibparse bibparse.o biblex.c $(LDFLAGS) $(LIBS) X @-$(RM) biblex.o X bibparse.jar: $(DIST-FILES) X -$(RM) bibparse.jar bibparse.jar-lst X $(JAR) cf bibparse.jar $(DIST-FILES) X -$(MKDIR) bibparse-$(VERSION) X cd bibparse-$(VERSION); $(JAR) xf ../bibparse.jar X $(JAR) cf bibparse-$(VERSION).jar bibparse-$(VERSION) X -$(RM) -rf bibparse-$(VERSION) X -$(RM) bibparse.jar X $(LN) bibparse-$(VERSION).jar bibparse.jar X # The shar bundle intentionally omits the leading directory name, # bibparse-x.y.z, because shar bundles can be extracted on other systems # (e.g., IBM PC DOS) which do not permit multiple periods in file names, or # seriously limit the length of file names. bibparse.shr: $(DIST-FILES) X -$(RM) bibparse*.shr X $(SHAR) $(DIST-FILES) >bibparse-$(VERSION).shr X $(LN) bibparse-$(VERSION).shr bibparse.shr X bibparse.tar: $(DIST-FILES) X -$(RM) bibparse.tar bibparse.tar-lst X $(TAR) chf bibparse.tar $(DIST-FILES) X -$(MKDIR) bibparse-$(VERSION) X cd bibparse-$(VERSION); tar xf ../bibparse.tar X $(TAR) cf bibparse-$(VERSION).tar bibparse-$(VERSION) X -$(RM) -r bibparse-$(VERSION) X -$(RM) bibparse.tar X $(LN) bibparse-$(VERSION).tar bibparse.tar X bibparse.txt: bibparse.man X $(NROFF) -man bibparse.man | col -b | $(EXPAND) >$@ X bibparse.zip: $(DIST-FILES) X -$(RM) bibparse*.zip bibparse*.zip-lst X $(ZIP) bibparse-$(VERSION).zip $(DIST-FILES) X $(UNZIP) -v bibparse-$(VERSION).zip >bibparse-$(VERSION).zip-lst X $(LN) bibparse-$(VERSION).zip bibparse.zip X bibparse.zoo: $(DIST-FILES) X -$(RM) bibparse*.zoo bibparse*.zoo-lst X $(ZOO) a bibparse-$(VERSION).zoo $(DIST-FILES) X $(ZOO) v bibparse-$(VERSION).zoo >bibparse-$(VERSION).zoo-lst X $(LN) bibparse-$(VERSION).zoo bibparse.zoo X bibunlex: bibunlex.c X $(CC) $(CFLAGS) -o bibunlex bibunlex.c $(LDFLAGS) $(LIBS) X bibunlex.c: bibunlex.l X check: check-programs X check-docs: dw spell X check-programs: check-biblex check-bibparse check-bibunlex X check-biblex: biblex X @echo "" X @echo "The following checks should produce no output, other than their names" X @cd test; ./docheck.sh $(BIBLEX) $(CHECK-NAMES-LEX) X check-bibparse: bibparse X @echo "" X @echo "The following checks should produce no output, other than their names" X @cd test; ./docheck.sh $(BIBPARSE) $(CHECK-NAMES-PARSE) X check-bibunlex: bibunlex X @echo "" X @echo "The following checks should produce no output, other than their names" X @cd test; ./docheck.sh $(BIBUNLEX) $(CHECK-NAMES-UNLEX) X clean: X -$(RM) *.i X -$(RM) *.o X -$(RM) *~ X -$(RM) \#* X -$(RM) biblex.tmp X -$(RM) bibparse.output X -$(RM) core X -$(RM) lex.yy.c X -$(RM) y.output X -$(RM) yacc.h X clobber: distclean X configure: X autoconf X autoheader X -$(RM) config.cache X $(MAKE) configure.time-stamp X # Work around a serious flaw in GNU configure: it always inserts -g # -O2 in CFLAGS and CXXFLAGS. -g cannot be used with $(OPT) on many # systems, and -O2 is not supported on many systems. configure.time-stamp: configure Makefile.in X $(MV) configure configure.tmp X $(SED) \ X -e 's/CFLAGS=" *-g */CFLAGS="/' \ X -e 's/CFLAGS=" *-O2 */CFLAGS="/' \ X -e 's/CXXFLAGS=" *-g */CXXFLAGS="/' \ X -e 's/CXXFLAGS=" *-O2 */CXXFLAGS="/' \ X < configure.tmp > configure X $(CHMOD) 775 configure X $(TOUCH) configure.time-stamp X -$(RM) configure.tmp X distclean: mostlyclean X -$(RM) $(PROGRAMS) bibdup.sh X -$(RM) Makefile X -$(RM) TAGS X -$(RM) bibparse.output X -$(RM) bibparse*.jar X -$(RM) bibparse*.jar-lst X -$(RM) bibparse*.shr X -$(RM) bibparse.tab.c X -$(RM) bibparse*.tar X -$(RM) bibparse*.tar-lst X -$(RM) bibparse*.zip X -$(RM) bibparse*.zip-lst X -$(RM) bibparse*.zoo X -$(RM) bibparse*.zoo-lst X -$(RM) config.cache X -$(RM) config.h X -$(RM) config.log X -$(RM) config.status X -$(RM) y.output X -$(RM) y.tab.c X docs: html-files ps-files pdf-files txt-files X dw: X @for f in $(MAN-FILES) ; \ X do \ X echo "==================== doubled words in $$f\ ====================" ; \ X $(DEROFF) $$f | dw ; \ X done X html-files: $(HTML-FILES) X install: install-programs install-lib install-man install-show X install-ftp: bibparse.jar bibparse.shr bibparse.tar bibparse.zip \ X bibparse.zoo uninstall-ftp X $(CP) bibparse-$(VERSION).jar $(FTPDIR) X $(JAR) tvf bibparse-$(VERSION).jar 2>$(FTPDIR)/bibparse-$(VERSION).jar-lst X $(CP) bibparse-$(VERSION).shr $(FTPDIR) X $(TAR) tvf bibparse-$(VERSION).tar >$(FTPDIR)/bibparse-$(VERSION).tar-lst X $(COMPRESS) $(FTPDIR)/bibparse-$(VERSION).tar.gz X $(CP) bibparse-$(VERSION).zip $(FTPDIR) X $(CP) bibparse-$(VERSION).zip-lst $(FTPDIR) X $(CP) bibparse-$(VERSION).zoo $(FTPDIR) X $(CP) bibparse-$(VERSION).zoo-lst $(FTPDIR) X $(LS) -l $(FTPDIR)/bibparse-$(VERSION)* X install-lib: uninstall-lib X -$(MKDIR) $(SHRLIBDIR) X $(CP) bibdup.awk $(SHRLIBDIR)/bibdup.awk X $(CHMOD) 664 $(SHRLIBDIR)/bibdup.awk X install-man: uninstall-man X for program in $(BASEPROGS) ; \ X do \ X $(CP) $$program.man $(MANDIR)/man$(MANEXT)/$$program.1 ; \ X $(CHMOD) 664 $(MANDIR)/man$(MANEXT)/$$program.1 ; \ X done X install-programs: $(PROGRAMS) bibdup.sh uninstall-programs X for program in $(PROGRAMS) ; \ X do \ X $(CP) $$program $(BINDIR)/$$program ; \ X $(CHMOD) 775 $(BINDIR)/$$program ; \ X done ; \ X $(CP) bibdup.sh $(BINDIR)/bibdup ; \ X $(CHMOD) 775 $(BINDIR)/bibdup X install-show: X @echo '' X @echo Installed files... X @for program in $(BASEPROGS) ; \ X do \ X $(LS) -l $(BINDIR)/$$program ; \ X done X @for program in $(BASEPROGS) ; \ X do \ X $(LS) -l $(MANDIR)/man$(MANEXT)/$$program.$(MANEXT) ; \ X done X @if test -d $(SHRLIBDIR) ; then $(LS) -lR $(SHRLIBDIR)/* ; fi X @echo '' X maintainer-clean: distclean X @echo "This command is intended for maintainers to use;" X @echo "it deletes files that may require special tools to rebuild." X -for f in $(PROGRAMS) ; \ X do \ X $(RM) $$.html ; \ X $(RM) $$.ps ; \ X $(RM) $$.pdf ; \ X $(RM) $$.txt ; \ X done X -$(RM) config.hin X -$(RM) configure X -$(RM) configure.time-stamp X mostlyclean: clean X -$(RM) biblex.c X -$(RM) bibparse.c X -$(RM) bibunlex.c X pdf-files: $(PDF-FILES) X programs: $(PROGRAMS) X ps-files: $(PS-FILES) X spell: X @for f in $(MAN-FILES) ; \ X do \ X echo "==================== spelling exceptions in $$f\ ====================" ; \ X $(DEROFF) $$f | $(SPELL) ; \ X done X TAGS: $(TAGS-FILES) X $(ETAGS) $(TAGS-FILES) X test-version: Makefile X @echo "Version number is ""'"$(VERSION)"'" X txt-files: $(TXT-FILES) X uninstall: uninstall-programs uninstall-lib uninstall-man X uninstall-ftp: X -$(RM) $(FTPDIR)/bibparse-$(VERSION).jar X -$(RM) $(FTPDIR)/bibparse-$(VERSION).jar-lst X -$(RM) $(FTPDIR)/bibparse-$(VERSION).shr X -$(RM) $(FTPDIR)/bibparse-$(VERSION).tar-lst X -$(RM) $(FTPDIR)/bibparse-$(VERSION).tar.gz X -$(RM) $(FTPDIR)/bibparse-$(VERSION).zip X -$(RM) $(FTPDIR)/bibparse-$(VERSION).zip-lst X -$(RM) $(FTPDIR)/bibparse-$(VERSION).zoo X -$(RM) $(FTPDIR)/bibparse-$(VERSION).zoo-lst X uninstall-lib: X -$(RM) $(SHRLIBDIR)/bibdup.awk X -$(RMDIR) $(SHRLIBDIR) X uninstall-man: X -for program in $(BASEPROGS) ; \ X do \ X $(RM) $(MANDIR)/man$(MANEXT)/$$program.1 ; \ X $(RM) $(MANDIR)/man$(MANEXT)/../cat$(MANEXT)/$$program.1 ; \ X done X uninstall-programs: X -for program in $(BASEPROGS) ; \ X do \ X $(RM) $(BINDIR)/$$program ; \ X done SHAR_EOF $shar_touch -am 1021100899 'Makefile.in' && chmod 0644 'Makefile.in' || $echo 'restore of' 'Makefile.in' 'failed' if ( md5sum --help &1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version &1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'Makefile.in:' 'MD5 check failed' 0b047e36da0a076645154b03704ad8ba Makefile.in SHAR_EOF else shar_count="`LC_ALL=C wc -c < 'Makefile.in'`" test 21072 -eq "$shar_count" || $echo 'Makefile.in:' 'original size' '21072,' 'current size' "$shar_count!" fi fi # ============= README ============== if test -f 'README' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'README' '(file already exists)' else $echo 'x -' extracting 'README' '(binary)' sed 's/^X//' << 'SHAR_EOF' | uudecode && begin 600 README M4D5!1$U%.B!);G-T86QL871I;VX@:6YS=')U8W1I;VX@9F]R"BHJ*BHJ*BHJ M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*@IB:6)P87)S92TQ+C`T(`HJ M*BHJ*BHJ*BHJ*BHJ*@H*5&%B;&4@;V8@8V]N=&5N=',@"CT]/3T]/3T]/3T] M/3T]/3T]/0H*("`@*B!*=6UP('-T87)T(`H@("`J($EN=')O9'5C=&EO;B`* M("`@*B!);G-T86QL871I;VX@"B`@("H@0G5G(')E<&]R=',@"B`@("H@54Y) M6"!3>7-T96US(`H@("`J($E"32!00R!$3U,@"B`@("H@5&5S="!S=6ET92`* M("`@*B!386UP;&4@8G5I;&0@;W5T<'5T(&9O6]U6]U('=I2!M86ME(&EN"P@8FEB=6YL97@L(&%N9"`*8FEB9'5P+"!A('-U:71E M(&]F('!R;V=R86US(&9OT)E96)E.E1",30M-"TS.34L"F%U=&AOWM":6)L:6]G"!C:&5C:VEN9WU](BP*:F]U'0@;V8@=&AE(%151V)O870@87)T:6-L92!I2!O9B!F;W)M871S(&EN('1H92!S86UE"G!L86-E('1H870@>6]U(&9O=6YD M('1H92!B:6)P87)S92`H970@86PI(&1I6]U M('-T87)T960N(`H*5&AR964@9FEL97,L(&)I8FQE>"YC+"!B:6)P87)S92YC M+"!A;F0@8FEB=6YL97@N8RP@87)E"F=E;F5R871E9"!B>2!L97@@*&]R(&9L M97@I+"!A;F0@>6%C8R`H;W(@8FES;VXI+B!#;W!I97,@;V8@=&AE2!F;W(@;6%N=6%L"F)O;W1S=')A<'!I;F6]U(&1O(&$@;6%K92!M86EN=&%I;F5R+6-L96%N(%MN;W0@2!F M"!A;F0@>6%C8R]B:7-O;B!S=7!P;W)T+"!O2!E M=F5N="!O9B!A(&9A:6QU2!O9B!Y;W5R(&-O;F9I9RYH('5N9&5R(&$@9&EF M9F5R96YT(&YA;64L(&)E8V%U2YT87(N9WHI+"`H>"YY M(#T@,BXQ,R!A="!T:&4@=&EM92!O9B!W6]U2!C;VYF:6=U M"]F;&5X+2!A M;F0@"GEA8V,O8FES;VXM9V5N97)A=&5D(&-O9&4@9&5P96YD2!B92!N96-E"(I+@H*3VX@54Y)6"!S>7-T96US+"!T:&4@;VYL>2!V M87)I86)L97,@=&AA="!Y;W4@87)E(&QI:V5L>2!T;R!N965D('1O(&]V97)R M:61E(&]N"G1H92!M86ME(&-O;6UA;F0@;&EN92!A"X@"@I)9B!Y M;W4@87)E(&EN&5R"!A;F0@;&5X*2P@86YD('1H6EN9RP@=&AE(&9A:6QU2!E=F5N M(&UO"!A;F0O;W(@8FES;VXO8GEA8V,O>6%C8R!W M:&EC:"!I65A`H@("`@("!S>7-T96US M*2X@"B`@("H@0G)O:V5N('9E;F1O"`K(&)I"`M>"!C>'@*"0D)"0D@+W5S&Q#"@D)"0D)("]U"`R+C$N,3,R M("]U"`R+C`N,S4@("`O=7-R M+V)I;B]C8PH)"0D)"2`O=7-R+V)I;B]G8V,*"0D)"0D@+W5S6%C8R`H-S4@8V]M M<&EL97)S*2`*+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+0H*"DUA8VAI M;F4@86YD(&UO9&5L("`@("!/+U,)"2!#;VUP:6QE`H)"0D)"2`O=7-R M+VQO8V%L+V)I;B]L8V,@+4$@+4$*"0D)"0D@+W5SB!'3E4O3&EN M=7@@,BXQ+C$S,B`O=7-R+V)I;B]C8PH)"0D)"2`O=7-R+W!G:2]L:6YU>#@V M+V)I;B]P9T-#"@D)"0D)("]U6%C8R`H-C8@8V]M<&EL97)S*2`*+2TM+2TM+2TM M+2TM+2TM+2TM+2TM+2TM+2TM"@H*36%C:&EN92!A;F0@;6]D96P@("`@($\O M4PD)($-O;7!I;&5R"`M>"!C>'@*"0D)"0D@+W5S#@V+V)I;B]P9T-#"@D)"0D)("]U"`R+C`N,S4@("`O=7-R+V)I M;B]C8PH)"0D)"2`O=7-R+VQO8V%L+V)I;B]G8V,*"0D)"0D@+W5SB!'3E4O3&EN=7@@,BXQ+C$S,B`O=7-R+V)I M;B]G8V,*"0D)"0D@+W5S"`R+C`N,S4@("`O=7-R+V)I;B]C8PH) M"0D)"2`O=7-R+V)I;B]G8V,*"0D)"0D@+W5S"`R M+C`N,S4@("`O=7-R+V)I;B]C8PH)"0D)"2`O=7-R+V)I;B]G8V,*"0D)"0D@ M+W5S"`K(&)Y M86-C("@W,B!C;VUP:6QE&Q#"@D)"0D)("]U"`R+C$N,3,R("]U6%C M8R`H-C,@8V]M<&EL97)S*2`*+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2T* M"@I-86-H:6YE(&%N9"!M;V1E;"`@("`@3R]3"0D@0V]M<&EL97)S"BTM+2TM M+2TM+2TM+2TM+2TM("`@("`M+2T)"2`M+2TM+2TM+2T*1$5#($%L<&AA(#(Q M,#`M-2\R-3`@3U-&+S$@,RXR(`D)("]U"`R+C`N,S4@("`O=7-R+VQO8V%L+V)I;B]G8V,*"0D)"0D@+W5S M"`R+C$N,3,R("]U"`K(&)I'@@+7@@8WAX(`I(4"`Y,#`P+SB!'3E4O3&EN=7@@,BXQ+C$S,B`O=7-R+W!G M:2]L:6YU>#@V+V)I;B]P9T-#(`I.95A4(%1U"`K(&)Y86-C("@U(&-O;7!I;&5R`H)"0D) M+W5S"`K('EA8V,@*#$T(&-O;7!I M;&5R"`M>"!C>'@*"0D)"2`O=7-R+VQO8V%L+V)I;B]G M*RL@"DE"32!0;W=E2!A('1Y<&5D968L(&$@;VYE+6QI;F4@8VAA;F=E(&9R;VT@ M:6YT('1O(&QO;F<@=V]U;&0@<&5R;6ET('1H90IT2P@=&AE('-O;'5T:6]N(&ES('-I;7!L>2!T M;R!U"P@ M9FQE>"P@;W(@>6%C8R!L:6)R87)I97,L('!R;W9I9&5D('1H870@=&AE('-Y M;6)O;"`*2$%615])0DU00R!I2!R97%U:7)E;65N=',@=&\@9FET(&EN('1H90HV-$M"+7-E9VUE;G0@ M;&EM:70N(`H*5&AE(&EB;7!C+V1O2!M87D@86QS;R!R=6X@;VX@96%R;&EE2!3=6X*=6YD97(@4V]L M87)I7-T96US+"!T:&4@:6)M<&,O9&]S+V-H96-K+F)A M="!F:6QE"F9O2!S;VUE=VAE7-T96TN(`H*4V%M<&QE M(&)U:6QD(&]U='!U="!F;W(@54Y)6"`*/3T]/3T]/3T]/3T]/3T]/3T]/3T] M/3T]/3T]/3T*"DAE65S"F-H96-K:6YG(&9O'!A;F0N+BX@97AP86YD"F-H96-K:6YG(&9O`IC:&5C:VEN9R!F;W(@;&XN+BX@;&X*8VAE8VMI;F<@9F]R M(&QS+BXN(&QS"F-H96-K:6YG(&9O6%C8PIC:&5C:VEN9R!F;W(@>FEP+BXN('II<`IC:&5C:VEN9R!F M;W(@>F]O+BXN('IO;PIC:&5C:VEN9R!F;W(@9FEL96YO+BXN(&YO"F-H96-K M:6YG(&9O2XN+B`M;&P*8VAE8VMI;F<@9F]R('EA8V,@;&EB2XN+B`M;'D*8VAE8VMI;F<@9F]R(&)I6%C M8R`M=B`@8FEB<&%R0H*8V]N9FQI8W1S.B`V('-H:69T+W)E9'5C90IS M960@+64@)W,O8VAA7ET97AT("I<6UE93$U!6%Q=+V-H87(@>7ET97AT M6S0P.38P72\G("UE("5]?=6YUR!M M86EN*"D[('TO9"<@+64@)W,O(UL@("`@("`@("!=*F1E9FEN95L@("`@("`@ M72I964Q-05@N*B0O(V1E9FEN92!964Q-05@@0DE"65E,34%8+R<@+64@)R]E M>'1E"YL('P@7E?7W5N M=7-E9"@I('L@;6%I;B@I.R!]+V0G("UE("=S+R-;("`@("`@(%TJ9&5F:6YE M6R`@("`@("!=*EE93$U!6"XJ)"\C9&5F:6YE(%E93$U!6"!"24)964Q-05@O M)R`M92`G+V5X=&5R;EL@("`@(%TJ8VAA"YC"C$S-B\Q,#`P(&YO M9&5S*"5E*2P@,S$Q+S(U,#`@<&]S:71I;VYS*"5P*2P@-3`O-3`P("@E;BDL M(#,P.34@=')A;G-I=&EO;G,L"C$X."\Q,#`P,"!P86-K960@8VAA7EL M97@]>'AL97@@+6\@8FEB<&%R0HO;W!T+U-53E=S<')O+V)I;B]#0R`@+41?7T585$523E]#7U\@+41" M24)964Q-05@]-#`Y-C`@+4DN("`M;R!B:6)L97@@;&5X;6%I;BYC(&)I8FQE M>"YC("`M;&P@+6QY"FQE>&UA:6XN8SH*8FEB;&5X+F,Z"FQE>"`M="!B:6)U M;FQE>"YL('P@7E?7W5N M=7-E9"@I('L@;6%I;B@I.R!]+V0G("UE("=S+R-;("`@("!=*F1E9FEN95L@ M("`@("`@72I964Q-05@N*B0O(V1E9FEN92!964Q-05@@0DE"65E,34%8+R<@ M+64@)R]E>'1E"YC"B]O<'0O4U5.5W-P M#`P,PIL97@P,#0* M;&5X,#`U"@I4:&4@9F]L;&]W:6YG(&-H96-K#`P,0IU;FQE>#`P,@IU;FQE>#`P,PIU;FQE M>#`P-`IU;FQE>#`P-0H*26UP;&5M96YT871I;VX@3F]T97,@"CT]/3T]/3T] M/3T]/3T]/3T]/3T]/0H*5VAI;&4@=&AE($=.52!A=71O8V]N9FEG=7)E('-Y M2!H879I;F<@861A<'1E9"!S M979E2!A="!M;W-T(&5N9"UU7-T96T@<&5C=6QI87)I=&EE2!O;@I'3E4O3&EN=7@N(`H*02!M86IO7-T96US+"!T:&4@=F5N9&]R+7!R;W9I9&5D(&QE>"!I M7!E6%C8R!O=71P=70L(&)U="!T:&4@;&]C871I;VX@;V8@=&AA M="!H96%D97(@9FEL92!I"!O=71P M=70@=VAI8V@*=&AE;B!F86EL7!E+"!A M;F0@8V%U2!A;B!E9&ET('-T97`@:6X@36%K969I;&4N:6X@=&\@"P@=&AE M>0IB96-O;64@;&5X7VEN<'5T*"D@86YD(&QE>%]O=71P=70H*2P@7ED8VPN:"!H87,*=&\@:&%N9&QE('1H:7,@8V%S92!S<&5C:6%L;'DN($D@ M9&]N)W0@2!G;V]D('=A>2!T;R!D;R!T:&ES('=I=&@@"F-O;F9I M9W5R92P@2!A=VMW87)D('1O('!R;V1U8V4@=&5S M=',@:6X@;&%N9W5A9V5S(&]T:&5R"G1H86X@0RX@"@I4:&4@1TY5+TQI;G5X M("A#86QD97)A($QI9VAT(#(N,"XS,"D@2P@"P@8G5T(&YO="!I=',@;&EB M2P@+6QL+"!A;F0*=V]R2!F;&5X M+"!W:&EC:"!D;V5S(&YO="!B96AA=F4@8V]M<&%T:6)L>2P@=6YL97-S(&ET M"FES(&EN=F]K960@=VET:"!T:&4@8V]M<&%T:6)I;&ET>2UM;V1E(&9L862!L97@Z(&]N($A0('-Y7-T96US+"!I="!C875S97,@ M"FQE>"!T;R!H86YG(&EN(&%N(&%P<&%R96YT($DO3R!W86ET+B!)="!T;V]K M('-E=F5R86P@=')I97,@;VX@=F%R:6]U7-T96US"F)E9F]R92!)('-E M='1L960@;VX@=&AE(&-O9&4@9FEN86QL>2!U6%C8R!W:&EC:"!R97-U M;'1S(&EN(&$@8F]G=7,*8V]M<&QA:6YT(`H*55@Z>6%C8SH@15)23U(Z(%)E M9&5C;&%R871I;VX@;V8@<')E8V5D96YC92!O9B!43TM%3E]%455!3%,L(&QI M;F4@,C$P"@I4:'5S+"!O;B!T:&%T('-Y2!Y86-C*2!M=7-T(&)E"G5S960L(&%N9"!N96ET M:&5R(&%R92!P2!T:&4@=F5N9&]R+B`*"EEO=2!C86X@9V5T M(&)I6=N=7,*1E10('-I=&4Z(&9T<#HO M+V9T<"YC>6=N=7,N8V]M+W!U8B]G9&(O:6YFB`*5&AA="!V97)S:6]N(&AA&5S(&)E>6]N9"!T:&4@8GEA8V,@=F5R2!"4T0@9&5V96QO<&UE;G0@2YE9'4O<'5B+S1B6=N=7,*=F5R6%C8RTY-#`S,C0O8GEA8V,O4D-3+W-K96QE=&]N M+F,L=@IR971R:65V:6YG(')E=FES:6]N(#$N,0ID:69F("UR,2XQ(&)Y86-C M+3DT,#,R-"]B>6%C8R]S:V5L971O;BYC"CDX83DY+#$P,@H^("`@("`B(VEF M9&5F(%]?8W!L=7-P;'5S(BP*/B`@("`@(F5X=&5R;B!<(D-<(B(L"CX@("`@ M("(C96YD:68B+`H^("`@("`B("`@(&5X=&5R;B!C:&%R("IG971E;G8H*3LB M+`HQ,#4L,3`X9#$P.`H\("`@("`B(VEF9&5F(%]?8W!L=7-P;'5S(BP*/"`@ M("`@(F5X=&5R;B!<(D-<(B(L"CP@("`@("(C96YD:68B+`H\("`@("`B("`@ M(&5X=&5R;B!C:&%R("IG971E;G8H*3LB+`H]/3T]/3T]/3T]/3T]/3T]/3T] M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T] M/3T]"@I/;B!3=6X@4V]L87)I6UB;VP@7U]%6%1%4DY? M0U]?(&UU'!O2!L97@@86YD(`IY86-C+B!C;VYF:6=U0ID969A=6QT+"!E=F5N M('1H;W5G:"!T:&ES(&AA2UI;G-T86QL960@;&EB2`M;&9L(&ES"G)E<75I&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version &1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'README:' 'MD5 check failed' f1a9368f79b7c7653097dcbd1ac81605 README SHAR_EOF else shar_count="`LC_ALL=C wc -c < 'README'`" test 34797 -eq "$shar_count" || $echo 'README:' 'original size' '34797,' 'current size' "$shar_count!" fi fi # ============= README.html ============== if test -f 'README.html' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'README.html' '(file already exists)' else $echo 'x -' extracting 'README.html' '(binary)' sed 's/^X//' << 'SHAR_EOF' | uudecode && begin 600 README.html M/"$M+2`M*BUH=&UL+2HM("TM/@H\(2TM(%)%041-12`M+3X*/"$M+2!07-T96US(CX*("`@("`@ M("`@("`@("`@("`@("!53DE8(%-Y6]U6]U(&AA=F4@/%14/F5N=CPO5%0^("AM;W-T"B`@ M("`@("`@("`@(&UO9&5R;B!53DE8('-Y6]U('=I7-T96US+@H@("`@("`@(#PO4#X*("`@("`@ M("`\(2TM(#T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T] M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/2`M+3X*("`@("`@("`\2#(^"B`@ M("`@("`@("`@(#Q!($Y!344](DEN=')O9'5C=&EO;B(^"B`@("`@("`@("`@ M("`@("!);G1R;V1U8W1I;VX*("`@("`@("`@("`@/"]!/@H@("`@("`@(#PO M2#(^"B`@("`@("`@/%`^"B`@("`@("`@("`@(%1H:7,@9&ER96-T;W)Y(&-O M;G1A:6YS(#Q45#YB:6)P87)S93PO5%0^+"`\5%0^8FEB;&5X/"]45#XL"B`@ M("`@("`@("`@(#Q45#YB:6)U;FQE>#PO5%0^+"!A;F0@/%14/F)I8F1U<#PO M5%0^+"!A('-U:71E(&]F('!R;V=R86US"B`@("`@("`@("`@(&9OT)I8FQI;V=R87!H>2!P0H@("`@("`@ M("`@("!O9B!F;W)M871S(&EN('1H92!S86UE('!L86-E('1H870@>6]U(&9O M=6YD('1H92`\5%0^8FEB<&%R"]B M:6(\+U14/BX@(%9I82!E;&5C=')O;FEC"B`@("`@("`@("`@(&UA:6PL(&$@ M;65S"!F"]B:6(*/"]04D4^"B`@("`@("`@/%`^ M"B`@("`@("`@("`@('1O(#Q45#YT=6=L:6)`;6%T:"YU=&%H+F5D=3PO5%0^ M('=I;&P@9V5T('EO=2!S=&%R=&5D+@H@("`@("`@(#PO4#X*("`@("`@("`\ M4#X*("`@("`@("`@("`@5&AR964@9FEL97,L(#Q45#YB:6)L97@N8SPO5%0^ M+"`\5%0^8FEB<&%R2`\5%0^;&5X/"]45#X@ M*&]R(#Q45#X*("`@("`@("`@("`@9FQE>#PO5%0^*2P@86YD(#Q45#YY86-C M/"]45#X@*&]R(#Q45#YB:7-O;CPO5%0^*2X@($-O<&EE2!F;W(@;6%N=6%L(&)O;W1S=')A<'!I;F2UG96YE6]U(&1O(&$@/$5- M/FUA:V4@;6%I;G1A:6YE"!C;VYF:6=U2P@=&AE(&1I2!N86UE9"`\5%0^"YC/"]45#X@86YD"B`@("`@("`@("`@(#Q45#YB:6)U;FQE>"YC/"]4 M5#X@9V5N97)A=&5D(&)Y(#Q45#YL97@\+U14/BP@86YD('1H92!F:6QE"B`@ M("`@("`@("`@(#Q45#YB:6)P87)S92YC/"]45#X@9V5N97)A=&5D(&)Y(#Q4 M5#YY86-C/"]45#XN("!4:&ES('=I;&P*("`@("`@("`@("`@86QL;W<@2!E=F5N="!O9B!A(&9A:6QU2!P2!O9B`\5%0^"B`@("`@ M("`@("`@(&-O;F9I9RYH:6X\+U14/B!W:71H(&$@9F5W('-E8V]N9',@;V8@ M961I=&EN9R!W;W)K+B`@268@>6]U"B`@("`@("`@("`@(&1O('1H:7,L(')E M;65M8F5R('1O('-A=F4@82!C;W!Y(&]F('EO=7(@/%14/F-O;F9I9RYH/"]4 M5#X*("`@("`@("`@("`@=6YD97(@82!D:69F97)E;G0@;F%M92P@8F5C875S M92!R=6YN:6YG(#Q45#YC;VYF:6=U"YY M/"]%33X\5%0^+G1ACPO5%0^*2P*("`@("`@("`@("`@*#Q45#YX+GD\ M+U14/B`](#(N,3,@870@=&AE('1I;64@;V8@=W)I=&EN9R!T:&ES*2P@>6]U M"B`@("`@("`@("`@(&UI9VAT('1R>2!A=6=M96YT:6YG(#Q45#YC;VYF:6=U M2!C;VYS:7-T6]U M2!P M2!L96%D('1O(&9A:6QU2`\ M5%0^8V]N9FEG=7)E/"]45#X*("`@("`@("`@("`@=VEL;"!L96%D('1O(&%N M(&EN8V]R2!O9B!5=&%H/$)2/@H@ M("`@("`@("`@("!$97!A#PO5%0^+SQ45#YF;&5X/"]45#XM(&%N9`H@ M("`@("`@("`@("`\5%0^>6%C8SPO5%0^+SQ45#YB:7-O;CPO5%0^+6=E;F5R M871E9"!C;V1E(&1E<&5N9',@;VX@:&]W"B`@("`@("`@("`@(&UO9&5R;B!T M:&5I2!T;R!S=7!P;'D@861D M:71I;VYA;"!S=VET8VAE6]U(&UU"`M>"!C>'@F(S,T.SPO5%0^*2X*("`@("`@("`\+U`^"B`@ M("`@("`@/%`^"B`@("`@("`@("`@($]N(%5.25@@6]U(&%R92!L:6ME;'D@=&\*("`@("`@("`@ M("`@;F5E9"!T;R!O=F5R6]U('=I6]U7-T96TN("!386UP;&4@;W5T<'5T M(&]F(#Q%33YM86ME(&-H96-K/"]%33X*("`@("`@("`@("`@9G)O;2!A(%5. M25@@#PO5%0^(&%N9"`\5%0^ M;&5X/"]45#XI+"!A;F0*("`@("`@("`@("`@=&AR964@:6YD97!E;F1E;G0@ M<&%R7-T96US(&9O0H@("`@("`@("`@("!C86X@8F4@=')A8V5D('1O(&1E9FEC:65N8VEE2!C;V1E+B`@0VQO"]F;&5X/"]45#X@ M86YD+V]R"B`@("`@("`@("`@(#Q45#YB:7-O;B]B>6%C8R]Y86-C/"]45#X@ M=VAI8V@@:7,@;F]T($,K*RUC;VUP871I8FQE.PH@("`@("`@("`@("!T:&5R M92!I&-U&ES=',N("!#(&AA6%C8SPO5%0^("A31TD@25)) M6"`U+C,I+@H@("`@("`@("`@/"],23X@"B`@("`@("`@("`\3$D^"B`@("`@ M("`@("`@($)R;VME;B!V96YD;W(M<')O=FED960@:&5A9&5R(&9I;&4L(#Q4 M5#YA;&QO8V$N:#PO5%0^("AP9T-#*2X*("`@("`@("`@("`@02!B=6<@F4I M"BL@(VEF9&5F(%]?8W!L=7-P;'5S"BL@97AT97)N(")#(B!C:&%R("H@7U]B M=6EL=&EN7V%L;&]C82`H:6YT*3L**R`C96YD:68*("`*("!?7T5.1%]$14-, M4PH\+U!213X*("`@("`@("`@(#PO3$D^(`H@("`@("`@(#PO54P^"B`@("`@ M("`@("`@(`H)/"$M+2!.0CH@5&AE"`M>"!C>'@\0E(^"B`@("`@("`@("`@("`@("`@("`@+W5S"`R+C$N,3,R"B`@("`@("`@("`@ M("`@("`\+U1$/@H@("`@("`@("`@("`@("`@/%1$/@H@("`@("`@("`@("`@ M("`@("`@("]U"`R+C`N,S4*("`@("`@("`@("`@("`@(#PO5$0^"B`@("`@("`@("`@ M("`@("`\5$0^"B`@("`@("`@("`@("`@("`@("`@+W5S"`K(&)Y86-C("@W-2!C;VUP:6QE#Q"4CX*("`@("`@("`@("`@("`@("`@("`O=7-R+VQO8V%L+V)I;B]L8V,@ M+4$@+4$\0E(^"B`@("`@("`@("`@("`@("`@("`@+W5S&Q#/$)2/@H@ M("`@("`@("`@("`@("`@("`@("]U@H@("`@("`@("`@("`@("`@/"]4 M1#X*("`@("`@("`@("`@("`@(#Q41#X*("`@("`@("`@("`@("`@("`@("!' M3E4O3&EN=7@@,BXQ+C$S,@H@("`@("`@("`@("`@("`@/"]41#X*("`@("`@ M("`@("`@("`@(#Q41#X*("`@("`@("`@("`@("`@("`@("`O=7-R+V)I;B]C M8SQ"4CX*("`@("`@("`@("`@("`@("`@("`O=7-R+W!G:2]L:6YU>#@V+V)I M;B]P9T-#/$)2/@H@("`@("`@("`@("`@("`@("`@("]U'@@+7@@8WAX/$)2/@H@("`@("`@("`@("`@("`@("`@("]U"`R+C$N,3,R"B`@("`@("`@("`@("`@("`\+U1$/@H@("`@("`@("`@("`@ M("`@/%1$/@H@("`@("`@("`@("`@("`@("`@("]U#@V+V)I;B]P9V-C/$)2 M/@H@("`@("`@("`@("`@("`@("`@("]U