1/**************************************************************** 2Copyright (C) Lucent Technologies 1997 3All Rights Reserved 4 5Permission to use, copy, modify, and distribute this software and 6its documentation for any purpose and without fee is hereby 7granted, provided that the above copyright notice appear in all 8copies and that both that the copyright notice and this 9permission notice and warranty disclaimer appear in supporting 10documentation, and that the name Lucent Technologies or any of 11its entities not be used in advertising or publicity pertaining 12to distribution of the software without specific, written prior 13permission. 14 15LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 16INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. 17IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY 18SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 19WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 20IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 21ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF 22THIS SOFTWARE. 23****************************************************************/ 24 25This is the version of awk described in "The AWK Programming Language", 26by Al Aho, Brian Kernighan, and Peter Weinberger 27(Addison-Wesley, 1988, ISBN 0-201-07981-X). 28 29Changes, mostly bug fixes and occasional enhancements, are listed 30in FIXES. If you distribute this code further, please please please 31distribute FIXES with it. If you find errors, please report them 32to bwk@cs.princeton.edu. Thanks. 33 34The program itself is created by 35 make 36which should produce a sequence of messages roughly like this: 37 38 yacc -d awkgram.y 39 40conflicts: 43 shift/reduce, 85 reduce/reduce 41 mv y.tab.c ytab.c 42 mv y.tab.h ytab.h 43 cc -c ytab.c 44 cc -c b.c 45 cc -c main.c 46 cc -c parse.c 47 cc maketab.c -o maketab 48 ./maketab >proctab.c 49 cc -c proctab.c 50 cc -c tran.c 51 cc -c lib.c 52 cc -c run.c 53 cc -c lex.c 54 cc ytab.o b.o main.o parse.o proctab.o tran.o lib.o run.o lex.o -lm 55 56This produces an executable a.out; you will eventually want to 57move this to some place like /usr/bin/awk. 58 59If your system does not have yacc or bison (the GNU 60equivalent), you must compile the pieces manually. We have 61included yacc output in ytab.c and ytab.h, and backup copies in 62case you overwrite them. We have also included a copy of 63proctab.c so you do not need to run maketab. 64 65NOTE: This version uses ANSI C, as you should also. We have 66compiled this without any changes using gcc -Wall and/or local C 67compilers on a variety of systems, but new systems or compilers 68may raise some new complaint; reports of difficulties are 69welcome. 70 71This also compiles with Visual C++ on all flavors of Windows, 72*if* you provide versions of popen and pclose. The file 73missing95.c contains versions that can be used to get started 74with, though the underlying support has mysterious properties, 75the symptom of which can be truncated pipe output. Beware. The 76file makefile.win gives hints on how to proceed; if you run 77vcvars32.bat, it will set up necessary paths and parameters so 78you can subsequently run nmake -f makefile.win. Beware also that 79when running on Windows under command.com, various quoting 80conventions are different from Unix systems: single quotes won't 81work around arguments, and various characters like % are 82interpreted within double quotes. 83 84This compiles without change on Macintosh OS X using gcc and 85the standard developer tools. 86 87This is also said to compile on Macintosh OS 9 systems, using the 88file "buildmac" provided by Dan Allen (danallen@microsoft.com), 89to whom many thanks. 90 91The version of malloc that comes with some systems is sometimes 92astonishly slow. If awk seems slow, you might try fixing that. 93More generally, turning on optimization can significantly improve 94awk's speed, perhaps by 1/3 for highest levels. 95