xref: /openbsd-src/usr.bin/awk/FIXES (revision 24bb5fcea3ed904bc467217bdaadb5dfc618d5bf)
1/*	$OpenBSD: FIXES,v 1.40 2020/12/18 21:36:24 millert Exp $	*/
2/****************************************************************
3Copyright (C) Lucent Technologies 1997
4All Rights Reserved
5
6Permission to use, copy, modify, and distribute this software and
7its documentation for any purpose and without fee is hereby
8granted, provided that the above copyright notice appear in all
9copies and that both that the copyright notice and this
10permission notice and warranty disclaimer appear in supporting
11documentation, and that the name Lucent Technologies or any of
12its entities not be used in advertising or publicity pertaining
13to distribution of the software without specific, written prior
14permission.
15
16LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
17INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
18IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
19SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
21IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
22ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
23THIS SOFTWARE.
24****************************************************************/
25
26This file lists all bug fixes, changes, etc., made since the AWK book
27was sent to the printers in August, 1987.
28
29December 18, 2020:
30	Fix problems converting inf and NaN values in lib.c:is_valid_number.
31	Enhance number to string conversion to do the right thing for
32	NaN and inf values.  Things are now pretty much the same as in
33	gawk.  (Found a gawk bug while we're at it.) Added a torture
34	test for these values.  Thanks to Arnold Robbins.  Allows closing
35	of PR #101.
36
37December 15, 2020:
38	Merge PR #99, which gets the right header for strcasecmp.
39	Thanks to GitHub user michaelforney.
40
41December 8, 2020:
42	Merge PR #98: Disallow hex data. Allow only +nan, -nan,
43	+inf, -inf (case independent) to give NaN and infinity values.
44	Improve things so that string to double conversion is only
45	done once, yielding something of a speedup.  This obviate
46	PR #95. Thanks to Arnold Robbins.
47
48December 3, 2020:
49	Fix to argument parsing to avoid printing spurious newlines.
50	Thanks to Todd Miller. Merges PR #97.
51
52October 13, 2020:
53	Add casts before all the calls to malloc/calloc/realloc in order
54	to get it to compile with g++. Thanks to Arnold Robbins.
55
56August 16, 2020:
57	Additional fixes for DJGPP. Thanks to Eli Zaretskii for
58	the testing.
59
60August 7, 2020:
61	Merge PR #93, which adds casts to (void*) for debug prints
62	using the %p format specifier. Thanks to GitHub user YongHaoWu
63	("Chris") for the fixes.
64
65August 4, 2020:
66	In run.c, use non-restartable multibyte routines to attain
67	portability to DJGPP. Should fix Issue 92. Thanks to Albert Wik
68	for the report and to Todd Miller for the suggested fix.
69
70July 30, 2020:
71	Merge PRs 88-91 which fix small bugs. Thanks to Todd Miller and
72	Tim van der Molen for the fixes.
73
74	In order to make life easier, we move exclusively to bison
75	as the parser generator.
76
77July 2, 2020:
78	Merge PRs 85 and 86 which fix regressions. Thanks to
79	Tim van der Molen for the fixes.
80
81June 25, 2020:
82	Merge PRs 82 and 84. The latter fixes issue #83. Thanks to
83	Todd Miller and awkfan77.
84
85June 12, 2020:
86	Clear errno before calling errcheck to avoid any spurious errors
87	left over from previous calls that may have set it. Thanks to
88	Todd Miller for the fix, from PR #80.
89
90	Fix Issue #78 by allowing \r to follow floating point numbers in
91	lib.c:is_number. Thanks to GitHub user ajcarr for the report
92	and to Arnold Robbins for the fix.
93
94June 5, 2020:
95	In fldbld(), make sure that inputFS is set before trying to
96	use it. Thanks to  Steffen Nurpmeso <steffen@sdaoden.eu>
97	for the report.
98
99May 5, 2020:
100	Fix checks for compilers that can handle noreturn. Thanks to
101	GitHub user enh-google for pointing it out. Closes Issue #79.
102
103April 16, 2020:
104	Handle old compilers that don't support C11 (for noreturn).
105	Thanks to Arnold Robbins.
106
107April 5, 2020:
108	Use <stdnoreturn.h> and noreturn instead of GCC attributes.
109	Thanks to GitHub user awkfan77. Closes PR #77.
110
111February 28, 2020:
112	More cleanups from Christos Zoulas: notably backslash continuation
113	inside strings removes the newline and a fix for RS = "^a".
114	Fix for address sanitizer-found problem. Thanks to GitHub user
115	enh-google.
116
117February 19, 2020:
118	More small cleanups from Christos Zoulas.
119
120February 18, 2020:
121	Additional cleanups from Christos Zoulas. It's no longer necessary
122	to use the -y flag to bison.
123
124February 6, 2020:
125	Additional small cleanups from Christos Zoulas. awk is now
126	a little more robust about reporting I/O errors upon exit.
127
128January 31, 2020:
129	Merge PR #70, which avoids use of variable length arrays. Thanks
130	to GitHub user michaelforney.  Fix issue #60 ({0} in interval
131	expressions doesn't work).  Also get all tests working again.
132	Thanks to Arnold Robbins.
133
134January 24, 2020:
135	A number of small cleanups from Christos Zoulas.  Add the close
136	on exec flag to files/pipes opened for redirection; courtesy of
137	Arnold Robbins.
138
139January 19, 2020:
140	If POSIXLY_CORRECT is set in the environment, then sub and gsub
141	use POSIX rules for multiple backslashes.  This fixes Issue #66,
142	while maintaining backwards compatibility.
143
144January 9, 2020:
145	Input/output errors on closing files are now fatal instead of
146	mere warnings. Thanks to Martijn Dekker <martijn@inlv.org>.
147
148January 5, 2020:
149	Fix a bug in the concatentation of two string constants into
150	one done in the grammar.  Fixes GitHub issue #61.  Thanks
151	to GitHub user awkfan77 for pointing out the direction for
152	the fix.  New test T.concat added to the test suite.
153	Fix a few memory leaks reported by valgrind, as well.
154
155December 27, 2019:
156	Fix a bug whereby a{0,3} could match four a's.  Thanks to
157	"Anonymous AWK fan" for the report.
158
159December 11, 2019:
160	Further printf-related fixes for 32 bit systems.
161	Thanks again to Christos Zoulas.
162
163December 8, 2019:
164	Fix the return value of sprintf("%d") on 32 bit systems.
165	Thanks to Jim Lowe for the report and to Christos Zoulas
166	for the fix.
167
168November 10, 2019:
169	Convert a number of Boolean integer variables into
170	actual bools. Convert compile_time variable into an
171	enum and simplify some of the related code.  Thanks
172	to Arnold Robbins.
173
174November 8, 2019:
175	Fix from Ori Bernstein to get UTF-8 characters instead of
176	bytes when FS = "".  This is currently the only bit of
177	the One True Awk that understands multibyte characters.
178	From Arnold Robbins, apply some cleanups in the test suite.
179
180October 25, 2019:
181	More fixes and cleanups from NetBSD, courtesy of Christos
182	Zoulas. Merges PRs 54 and 55.
183
184October 24, 2019:
185	Import second round of code cleanups from NetBSD. Much thanks
186	to Christos Zoulas (GitHub user zoulasc). Merges PR 53.
187	Add an optimization for string concatenation, also from
188	Christos.
189
190October 17, 2019:
191	Import code cleanups from NetBSD. Much thanks to Christos
192	Zoulas (GitHub user zoulasc). Merges PR 51.
193
194October 6, 2019:
195	Import code from NetBSD awk that implements RS as a regular
196	expression.
197
198September 10, 2019:
199	Fixes for various array / memory overruns found via gcc's
200	-fsanitize=unknown. Thanks to Alexander Richardson (GitHub
201	user arichardson). Merges PRs 47 and 48.
202
203July 28, 2019:
204	Import grammar optimization from NetBSD: Two string constants
205	concatenated together get turned into a single string.
206
207July 26, 2019:
208	Support POSIX-specified C-style escape sequences "\a" (alarm)
209	and "\v" (vertical tab) in command line arguments and regular
210	expressions, further to the support for them in strings added on
211	Apr 9, 1989. These now no longer match as literal "a" and "v"
212	characters (as they don't on other awk implementations).
213	Thanks to Martijn Dekker.
214
215July 17, 2019:
216	Pull in a number of code cleanups and minor fixes from
217	Warner Losh's bsd-ota branch.  The only user visible change
218	is the use of random(3) as the random number generator.
219	Thanks to Warner Losh for collecting all these fixes in
220	one easy place to get them from.
221
222July 16, 2019:
223	Fix field splitting to use FS value as of the time a record
224	was read or assigned to.  Thanks to GitHub user Cody Mello (melloc)
225	for the fix. (Merged from his branch, via PR #42.) Updated
226	testdir/T.split per said PR as well.
227
228June 24, 2019:
229	Extract awktest.tar into testdir directory. Add some very
230	simple mechanics to the makefile for running the tests and
231	for cleaning up. No changes to awk itself.
232
233June 17, 2019:
234	Disallow deleting SYMTAB and its elements, which creates
235	use-after-free bugs. Thanks to GitHub user Cody Mello (melloc)
236	for the fix. (Merged from PR #43.)
237
238June 5, 2019:
239	Allow unmatched right parenthesis in a regular expression to
240	be treated literally. Fixes Issue #40. Thanks to GitHub user
241	Warner Losh (bsdimp) for the report. Thanks to Arnold Robbins
242	for the fix.
243
244May 29,2019:
245	Fix check for command line arguments to no longer require that
246	first character after '=' not be another '='. Reverts change of
247	August 11, 1989. Thanks to GitHub user Jamie Landeg Jones for
248	pointing out the issue; from Issue #38.
249
250Apr 7, 2019:
251	Update awktest.tar(p.50) to use modern options to sort. Needed
252	for Android development. Thanks to GitHub user mohd-akram (Mohamed
253	Akram).  From Issue #33.
254
255Mar 12, 2019:
256	Added very simplistic support for cross-compiling in the
257	makefile.  We are NOT going to go in the direction of the
258	autotools, though.  Thanks to GitHub user nee-san for
259	the basic change. (Merged from PR #34.)
260
261Mar 5, 2019:
262	Added support for POSIX-standard interval expressions (a.k.a.
263	bounds, a.k.a. repetition expressions) in regular expressions,
264	backported (via NetBSD) from Apple awk-24 (20070501).
265	Thanks to Martijn Dekker <martijn@inlv.org> for the port.
266	(Merged from PR #30.)
267
268Mar 3, 2019:
269	Merge PRs as follows:
270	#12: Avoid undefined behaviour when using ctype(3) functions in
271	     relex(). Thanks to GitHub user iamleot.
272	#31: Make getline handle numeric strings, and update FIXES. Thanks
273	     to GitHub user arnoldrobbins.
274	#32: maketab: support build systems with read-only source. Thanks
275	     to GitHub user enh.
276
277Jan 25, 2019:
278	Make getline handle numeric strings properly in all cases.
279	(Thanks, Arnold.)
280
281Jan 21, 2019:
282	Merged a number of small fixes from GitHub pull requests.
283	Thanks to GitHub users Arnold Robbins (arnoldrobbins),
284	Cody Mello (melloc) and Christoph Junghans (junghans).
285	PR numbers: 13-21, 23, 24, 27.
286
287Oct 25, 2018:
288	Added test in maketab.c to prevent generating a proctab entry
289	for YYSTYPE_IS_DEFINED.  It was harmless but some gcc settings
290	generated a warning message.  Thanks to Nan Xiao for report.
291
292Aug 27, 2018:
293	Disallow '$' in printf formats; arguments evaluated in order
294	and printed in order.
295
296	Added some casts to silence warnings on debugging printfs.
297	(Thanks, Arnold.)
298
299Aug 23, 2018:
300        A long list of fixes courtesy of Arnold Robbins,
301        to whom profound thanks.
302
303        1. ofs-rebuild: OFS value used to rebuild the record was incorrect.
304        Fixed August 19, 2014. Revised fix August 2018.
305
306        2. system-status: Instead of a floating-point division by 256, use
307        the wait(2) macros to create a reasonable exit status.
308        Fixed March 12, 2016.
309
310        3. space: Use provided xisblank() function instead of ispace() for
311        matching [[:blank:]].
312
313        4. a-format: Add POSIX standard %a and %A to supported formats. Check
314        at runtime that this format is available.
315
316        5. decr-NF: Decrementing NF did not change $0. This is a decades-old
317        bug. There are interactions with the old and new value of OFS as well.
318        Most of the fix came from the NetBSD awk.
319
320        6. string-conv: String conversions of scalars were sticky.  Once a
321        conversion to string happened, even with OFMT, that value was used until
322        a new numeric value was assigned, even if OFMT differed from CONVFMT,
323        and also if CONVFMT changed.
324
325        7. unary-plus: Unary plus on a string constant returned the string.
326        Instead, it should convert the value to numeric and give that value.
327
328	Also added Arnold's tests for these to awktest.tar as T.arnold.
329
330Aug 15, 2018:
331	fixed mangled awktest.tar (thanks, Arnold), posted all
332	current (very minor) fixes to github / onetrueawk
333
334Jun 7, 2018:
335	(yes, a long layoff)
336	Updated some broken tests (beebe.tar, T.lilly)
337	[thanks to Arnold Robbins]
338
339Mar 26, 2015:
340	buffer overflow in error reporting; thanks to tobias ulmer
341	and john-mark gurney for spotting it and the fix.
342
343Feb 4, 2013:
344	cleaned up a handful of tests that didn't seem to actually
345	test for correct behavior: T.latin1, T.gawk.
346
347Jan 5, 2013:
348	added ,NULL initializer to static Cells in run.c; not really
349	needed but cleaner.  Thanks to Michael Bombardieri.
350
351Dec 20, 2012:
352	fiddled makefile to get correct yacc and bison flags.  pick yacc
353	(linux) or bison (mac) as necessary.
354
355	added  __attribute__((__noreturn__)) to a couple of lines in
356	proto.h, to silence someone's enthusiastic checker.
357
358	fixed obscure call by value bug in split(a[1],a) reported on
359	9fans.  the management of temporary values is just a mess; i
360	took a shortcut by making an extra string copy.  thanks
361	to paul patience and arnold robbins for passing it on and for
362	proposed patches.
363
364	tiny fiddle in setfval to eliminate -0 results in T.expr, which
365	has irritated me for 20+ years.
366
367Aug 10, 2011:
368	another fix to avoid core dump with delete(ARGV); again, many thanks
369	to ruslan ermilov.
370
371Aug 7, 2011:
372	split(s, a, //) now behaves the same as split(s, a, "")
373
374Jun 12, 2011:
375	/pat/, \n /pat/ {...} is now legal, though bad style to use.
376
377	added checks to new -v code that permits -vnospace; thanks to
378	ruslan ermilov for spotting this and providing the patch.
379
380	removed fixed limit on number of open files; thanks to aleksey
381	cheusov and christos zoulos.
382
383	fixed day 1 bug that resurrected deleted elements of ARGV when
384	used as filenames (in lib.c).
385
386	minor type fiddles to make gcc -Wall -pedantic happier (but not
387	totally so); turned on -fno-strict-aliasing in makefile.
388
389May 6, 2011:
390	added #ifdef for isblank.
391	now allows -ffoo as well as -f foo arguments.
392	(thanks, ruslan)
393
394May 1, 2011:
395	after advice from todd miller, kevin lo, ruslan ermilov,
396	and arnold robbins, changed srand() to return the previous
397	seed (which is 1 on the first call of srand).  the seed is
398	an Awkfloat internally though converted to unsigned int to
399	pass to the library srand().  thanks, everyone.
400
401	fixed a subtle (and i hope low-probability) overflow error
402	in fldbld, by adding space for one extra \0.  thanks to
403	robert bassett for spotting this one and providing a fix.
404
405	removed the files related to compilation on windows.  i no
406	longer have anything like a current windows environment, so
407	i can't test any of it.
408
409May 23, 2010:
410	fixed long-standing overflow bug in run.c; many thanks to
411	nelson beebe for spotting it and providing the fix.
412
413	fixed bug that didn't parse -vd=1 properly; thanks to santiago
414	vila for spotting it.
415
416Feb 8, 2010:
417	i give up.  replaced isblank with isspace in b.c; there are
418	no consistent header files.
419
420Nov 26, 2009:
421	fixed a long-standing issue with when FS takes effect.  a
422	change to FS is now noticed immediately for subsequent splits.
423
424	changed the name getline() to awkgetline() to avoid yet another
425	name conflict somewhere.
426
427Feb 11, 2009:
428	temporarily for now defined HAS_ISBLANK, since that seems to
429	be the best way through the thicket.  isblank arrived in C99,
430	but seems to be arriving at different systems at different
431	times.
432
433Oct 8, 2008:
434	fixed typo in b.c that set tmpvec wrongly.  no one had ever
435	run into the problem, apparently.  thanks to alistair crooks.
436
437Oct 23, 2007:
438	minor fix in lib.c: increase inputFS to 100, change malloc
439	for fields to n+1.
440
441	fixed memory fault caused by out of order test in setsval.
442
443	thanks to david o'brien, freebsd, for both fixes.
444
445May 1, 2007:
446	fiddle in makefile to fix for BSD make; thanks to igor sobrado.
447
448Mar 31, 2007:
449	fixed some null pointer refs calling adjbuf.
450
451Feb 21, 2007:
452	fixed a bug in matching the null RE in sub and gsub.  thanks to al aho
453	who actually did the fix (in b.c), and to wolfgang seeberg for finding
454	it and providing a very compact test case.
455
456	fixed quotation in b.c; thanks to Hal Pratt and the Princeton Dante
457	Project.
458
459	removed some no-effect asserts in run.c.
460
461	fiddled maketab.c to not complain about bison-generated values.
462
463	removed the obsolete -V argument; fixed --version to print the
464	version and exit.
465
466	fixed wording and an outright error in the usage message; thanks to igor
467	sobrado and jason mcintyre.
468
469	fixed a bug in -d that caused core dump if no program followed.
470
471Jan 1, 2007:
472	dropped mac.code from makefile; there are few non-MacOSX
473	mac's these days.
474
475Jan 17, 2006:
476	system() not flagged as unsafe in the unadvertised -safe option.
477	found it while enhancing tests before shipping the ;login: article.
478	practice what you preach.
479
480	removed the 9-years-obsolete -mr and -mf flags.
481
482	added -version and --version options.
483
484	core dump on linux with BEGIN {nextfile}, now fixed.
485
486	removed some #ifdef's in run.c and lex.c that appear to no
487	longer be necessary.
488
489Apr 24, 2005:
490	modified lib.c so that values of $0 et al are preserved in the END
491	block, apparently as required by posix.  thanks to havard eidnes
492	for the report and code.
493
494Jan 14, 2005:
495	fixed infinite loop in parsing, originally found by brian tsang.
496	thanks to arnold robbins for a suggestion that started me
497	rethinking it.
498
499Dec 31, 2004:
500	prevent overflow of -f array in main, head off potential error in
501	call of SYNTAX(), test malloc return in lib.c, all with thanks to
502	todd miller.
503
504Dec 22, 2004:
505	cranked up size of NCHARS; coverity thinks it can be overrun with
506	smaller size, and i think that's right.  added some assertions to b.c
507	to catch places where it might overrun.  the RE code is still fragile.
508
509Dec 5, 2004:
510	fixed a couple of overflow problems with ridiculous field numbers:
511	e.g., print $(2^32-1).  thanks to ruslan ermilov, giorgos keramidas
512	and david o'brien at freebsd.org for patches.  this really should
513	be re-done from scratch.
514
515Nov 21, 2004:
516	fixed another 25-year-old RE bug, in split.  it's another failure
517	to (re-)initialize.  thanks to steve fisher for spotting this and
518	providing a good test case.
519
520Nov 22, 2003:
521	fixed a bug in regular expressions that dates (so help me) from 1977;
522	it's been there from the beginning.  an anchored longest match that
523	was longer than the number of states triggered a failure to initialize
524	the machine properly.  many thanks to moinak ghosh for not only finding
525	this one but for providing a fix, in some of the most mysterious
526	code known to man.
527
528	fixed a storage leak in call() that appears to have been there since
529	1983 or so -- a function without an explicit return that assigns a
530	string to a parameter leaked a Cell.  thanks to moinak ghosh for
531	spotting this very subtle one.
532
533Jul 31, 2003:
534	fixed, thanks to andrey chernov and ruslan ermilov, a bug in lex.c
535	that mis-handled the character 255 in input.  (it was being compared
536	to EOF with a signed comparison.)
537
538Jul 29, 2003:
539	fixed (i think) the long-standing botch that included the beginning of
540	line state ^ for RE's in the set of valid characters; this led to a
541	variety of odd problems, including failure to properly match certain
542	regular expressions in non-US locales.  thanks to ruslan for keeping
543	at this one.
544
545Jul 28, 2003:
546	n-th try at getting internationalization right, with thanks to volker
547	kiefel, arnold robbins and ruslan ermilov for advice, though they
548	should not be blamed for the outcome.  according to posix, "."  is the
549	radix character in programs and command line arguments regardless of
550	the locale; otherwise, the locale should prevail for input and output
551	of numbers.  so it's intended to work that way.
552
553	i have rescinded the attempt to use strcoll in expanding shorthands in
554	regular expressions (cclenter).  its properties are much too
555	surprising; for example [a-c] matches aAbBc in locale en_US but abBcC
556	in locale fr_CA.  i can see how this might arise by implementation
557	but i cannot explain it to a human user.  (this behavior can be seen
558	in gawk as well; we're leaning on the same library.)
559
560	the issue appears to be that strcoll is meant for sorting, where
561	merging upper and lower case may make sense (though note that unix
562	sort does not do this by default either).  it is not appropriate
563	for regular expressions, where the goal is to match specific
564	patterns of characters.  in any case, the notations [:lower:], etc.,
565	are available in awk, and they are more likely to work correctly in
566	most locales.
567
568	a moratorium is hereby declared on internationalization changes.
569	i apologize to friends and colleagues in other parts of the world.
570	i would truly like to get this "right", but i don't know what
571	that is, and i do not want to keep making changes until it's clear.
572
573Jul 4, 2003:
574	fixed bug that permitted non-terminated RE, as in "awk /x".
575
576Jun 1, 2003:
577	subtle change to split: if source is empty, number of elems
578	is always 0 and the array is not set.
579
580Mar 21, 2003:
581	added some parens to isblank, in another attempt to make things
582	internationally portable.
583
584Mar 14, 2003:
585	the internationalization changes, somewhat modified, are now
586	reinstated.  in theory awk will now do character comparisons
587	and case conversions in national language, but "." will always
588	be the decimal point separator on input and output regardless
589	of national language.  isblank(){} has an #ifndef.
590
591	this no longer compiles on windows: LC_MESSAGES isn't defined
592	in vc6++.
593
594	fixed subtle behavior in field and record splitting: if FS is
595	a single character and RS is not empty, \n is NOT a separator.
596	this tortuous reading is found in the awk book; behavior now
597	matches gawk and mawk.
598
599Dec 13, 2002:
600	for the moment, the internationalization changes of nov 29 are
601	rolled back -- programs like x = 1.2 don't work in some locales,
602	because the parser is expecting x = 1,2.  until i understand this
603	better, this will have to wait.
604
605Nov 29, 2002:
606	modified b.c (with tiny changes in main and run) to support
607	locales, using strcoll and iswhatever tests for posix character
608	classes.  thanks to ruslan ermilov (ru@freebsd.org) for code.
609	the function isblank doesn't seem to have propagated to any
610	header file near me, so it's there explicitly.  not properly
611	tested on non-ascii character sets by me.
612
613Jun 28, 2002:
614	modified run/format() and tran/getsval() to do a slightly better
615	job on using OFMT for output from print and CONVFMT for other
616	number->string conversions, as promised by posix and done by
617	gawk and mawk.  there are still places where it doesn't work
618	right if CONVFMT is changed; by then the STR attribute of the
619	variable has been irrevocably set.  thanks to arnold robbins for
620	code and examples.
621
622	fixed subtle bug in format that could get core dump.  thanks to
623	Jaromir Dolecek <jdolecek@NetBSD.org> for finding and fixing.
624	minor cleanup in run.c / format() at the same time.
625
626	added some tests for null pointers to debugging printf's, which
627	were never intended for external consumption.  thanks to dave
628	kerns (dkerns@lucent.com) for pointing this out.
629
630	GNU compatibility: an empty regexp matches anything (thanks to
631	dag-erling smorgrav, des@ofug.org).  subject to reversion if
632	this does more harm than good.
633
634	pervasive small changes to make things more const-correct, as
635	reported by gcc's -Wwrite-strings.  as it says in the gcc manual,
636	this may be more nuisance than useful.  provoked by a suggestion
637	and code from arnaud desitter, arnaud@nimbus.geog.ox.ac.uk
638
639	minor documentation changes to note that this now compiles out
640	of the box on Mac OS X.
641
642Feb 10, 2002:
643	changed types in posix chars structure to quiet solaris cc.
644
645Jan 1, 2002:
646	fflush() or fflush("") flushes all files and pipes.
647
648	length(arrayname) returns number of elements; thanks to
649	arnold robbins for suggestion.
650
651	added a makefile.win to make it easier to build on windows.
652	based on dan allen's buildwin.bat.
653
654Nov 16, 2001:
655	added support for posix character class names like [:digit:],
656	which are not exactly shorter than [0-9] and perhaps no more
657	portable.  thanks to dag-erling smorgrav for code.
658
659Feb 16, 2001:
660	removed -m option; no longer needed, and it was actually
661	broken (noted thanks to volker kiefel).
662
663Feb 10, 2001:
664	fixed an appalling bug in gettok: any sequence of digits, +,-, E, e,
665	and period was accepted as a valid number if it started with a period.
666	this would never have happened with the lex version.
667
668	other 1-character botches, now fixed, include a bare $ and a
669	bare " at the end of the input.
670
671Feb 7, 2001:
672	more (const char *) casts in b.c and tran.c to silence warnings.
673
674Nov 15, 2000:
675	fixed a bug introduced in august 1997 that caused expressions
676	like $f[1] to be syntax errors.  thanks to arnold robbins for
677	noticing this and providing a fix.
678
679Oct 30, 2000:
680	fixed some nextfile bugs: not handling all cases.  thanks to
681	arnold robbins for pointing this out.  new regressions added.
682
683	close() is now a function.  it returns whatever the library
684	fclose returns, and -1 for closing a file or pipe that wasn't
685	opened.
686
687Sep 24, 2000:
688	permit \n explicitly in character classes; won't work right
689	if comes in as "[\n]" but ok as /[\n]/, because of multiple
690	processing of \'s.  thanks to arnold robbins.
691
692July 5, 2000:
693	minor fiddles in tran.c to keep compilers happy about uschar.
694	thanks to norman wilson.
695
696May 25, 2000:
697	yet another attempt at making 8-bit input work, with another
698	band-aid in b.c (member()), and some (uschar) casts to head
699	off potential errors in subscripts (like isdigit).  also
700	changed HAT to NCHARS-2.  thanks again to santiago vila.
701
702	changed maketab.c to ignore apparently out of range definitions
703	instead of halting; new freeBSD generates one.  thanks to
704	jon snader <jsnader@ix.netcom.com> for pointing out the problem.
705
706May 2, 2000:
707	fixed an 8-bit problem in b.c by making several char*'s into
708	unsigned char*'s.  not clear i have them all yet.  thanks to
709	Santiago Vila <sanvila@unex.es> for the bug report.
710
711Apr 21, 2000:
712	finally found and fixed a memory leak in function call; it's
713	been there since functions were added ~1983.  thanks to
714	jon bentley for the test case that found it.
715
716	added test in envinit to catch environment "variables" with
717	names beginning with '='; thanks to Berend Hasselman.
718
719Jul 28, 1999:
720	added test in defn() to catch function foo(foo), which
721	otherwise recurses until core dump.  thanks to arnold
722	robbins for noticing this.
723
724Jun 20, 1999:
725	added *bp in gettok in lex.c; appears possible to exit function
726	without terminating the string.  thanks to russ cox.
727
728Jun 2, 1999:
729	added function stdinit() to run to initialize files[] array,
730	in case stdin, etc., are not constants; some compilers care.
731
732May 10, 1999:
733	replaced the ERROR ... FATAL, etc., macros with functions
734	based on vprintf, to avoid problems caused by overrunning
735	fixed-size errbuf array.  thanks to ralph corderoy for the
736	impetus, and for pointing out a string termination bug in
737	qstring as well.
738
739Apr 21, 1999:
740	fixed bug that caused occasional core dumps with commandline
741	variable with value ending in \.  (thanks to nelson beebe for
742	the test case.)
743
744Apr 16, 1999:
745	with code kindly provided by Bruce Lilly, awk now parses
746	/=/ and similar constructs more sensibly in more places.
747	Bruce also provided some helpful test cases.
748
749Apr 5, 1999:
750	changed true/false to True/False in run.c to make it
751	easier to compile with C++.  Added some casts on malloc
752	and realloc to be honest about casts; ditto.  changed
753	ltype int to long in struct rrow to reduce some 64-bit
754	complaints; other changes scattered throughout for the
755	same purpose.  thanks to Nelson Beebe for these portability
756	improvements.
757
758	removed some horrible pointer-int casting in b.c and elsewhere
759	by adding ptoi and itonp to localize the casts, which are
760	all benign.  fixed one incipient bug that showed up on sgi
761	in 64-bit mode.
762
763	reset lineno for new source file; include filename in error
764	message.  also fixed line number error in continuation lines.
765	(thanks to Nelson Beebe for both of these.)
766
767Mar 24, 1999:
768	Nelson Beebe notes that irix 5.3 yacc dies with a bogus
769	error; use a newer version or switch to bison, since sgi
770	is unlikely to fix it.
771
772Mar 5, 1999:
773	changed isnumber to is_number to avoid the problem caused by
774	versions of ctype.h that include the name isnumber.
775
776	distribution now includes a script for building on a Mac,
777	thanks to Dan Allen.
778
779Feb 20, 1999:
780	fixed memory leaks in run.c (call) and tran.c (setfval).
781	thanks to Stephen Nutt for finding these and providing the fixes.
782
783Jan 13, 1999:
784	replaced srand argument by (unsigned int) in run.c;
785	avoids problem on Mac and potentially on Unix & Windows.
786	thanks to Dan Allen.
787
788	added a few (int) casts to silence useless compiler warnings.
789	e.g., errorflag= in run.c jump().
790
791	added proctab.c to the bundle outout; one less thing
792	to have to compile out of the box.
793
794	added calls to _popen and _pclose to the win95 stub for
795	pipes (thanks to Steve Adams for this helpful suggestion).
796	seems to work, though properties are not well understood
797	by me, and it appears that under some circumstances the
798	pipe output is truncated.  Be careful.
799
800Oct 19, 1998:
801	fixed a couple of bugs in getrec: could fail to update $0
802	after a getline var; because inputFS wasn't initialized,
803	could split $0 on every character, a misleading diversion.
804
805	fixed caching bug in makedfa: LRU was actually removing
806	least often used.
807
808	thanks to ross ridge for finding these, and for providing
809	great bug reports.
810
811May 12, 1998:
812	fixed potential bug in readrec: might fail to update record
813	pointer after growing.  thanks to dan levy for spotting this
814	and suggesting the fix.
815
816Mar 12, 1998:
817	added -V to print version number and die.
818
819[notify dave kerns, dkerns@dacsoup.ih.lucent.com]
820
821Feb 11, 1998:
822	subtle silent bug in lex.c: if the program ended with a number
823	longer than 1 digit, part of the input would be pushed back and
824	parsed again because token buffer wasn't terminated right.
825	example:  awk 'length($0) > 10'.  blush.  at least i found it
826	myself.
827
828Aug 31, 1997:
829	s/adelete/awkdelete/: SGI uses this in malloc.h.
830	thanks to nelson beebe for pointing this one out.
831
832Aug 21, 1997:
833	fixed some bugs in sub and gsub when replacement includes \\.
834	this is a dark, horrible corner, but at least now i believe that
835	the behavior is the same as gawk and the intended posix standard.
836	thanks to arnold robbins for advice here.
837
838Aug 9, 1997:
839	somewhat regretfully, replaced the ancient lex-based lexical
840	analyzer with one written in C.  it's longer, generates less code,
841	and more portable; the old one depended too much on mysterious
842	properties of lex that were not preserved in other environments.
843	in theory these recognize the same language.
844
845	now using strtod to test whether a string is a number, instead of
846	the convoluted original function.  should be more portable and
847	reliable if strtod is implemented right.
848
849	removed now-pointless optimization in makefile that tries to avoid
850	recompilation when awkgram.y is changed but symbols are not.
851
852	removed most fixed-size arrays, though a handful remain, some
853	of which are unchecked.  you have been warned.
854
855Aug 4, 1997:
856	with some trepidation, replaced the ancient code that managed
857	fields and $0 in fixed-size arrays with arrays that grow on
858	demand.  there is still some tension between trying to make this
859	run fast and making it clean; not sure it's right yet.
860
861	the ill-conceived -mr and -mf arguments are now useful only
862	for debugging.  previous dynamic string code removed.
863
864	numerous other minor cleanups along the way.
865
866Jul 30, 1997:
867	using code provided by dan levy (to whom profuse thanks), replaced
868	fixed-size arrays and awkward kludges by a fairly uniform mechanism
869	to grow arrays as needed for printf, sub, gsub, etc.
870
871Jul 23, 1997:
872	falling off the end of a function returns "" and 0, not 0.
873	thanks to arnold robbins.
874
875Jun 17, 1997:
876	replaced several fixed-size arrays by dynamically-created ones
877	in run.c; added overflow tests to some previously unchecked cases.
878	getline, toupper, tolower.
879
880	getline code is still broken in that recursive calls may wind
881	up using the same space.  [fixed later]
882
883	increased RECSIZE to 8192 to push problems further over the horizon.
884
885	added \r to \n as input line separator for programs, not data.
886	damn CRLFs.
887
888	modified format() to permit explicit printf("%c", 0) to include
889	a null byte in output.  thanks to ken stailey for the fix.
890
891	added a "-safe" argument that disables file output (print >,
892	print >>), process creation (cmd|getline, print |, system), and
893	access to the environment (ENVIRON).  this is a first approximation
894	to a "safe" version of awk, but don't rely on it too much.  thanks
895	to joan feigenbaum and matt blaze for the inspiration long ago.
896
897Jul 8, 1996:
898	fixed long-standing bug in sub, gsub(/a/, "\\\\&"); thanks to
899	ralph corderoy.
900
901Jun 29, 1996:
902	fixed awful bug in new field splitting; didn't get all the places
903	where input was done.
904
905Jun 28, 1996:
906	changed field-splitting to conform to posix definition: fields are
907	split using the value of FS at the time of input; it used to be
908	the value when the field or NF was first referred to, a much less
909	predictable definition.  thanks to arnold robbins for encouragement
910	to do the right thing.
911
912May 28, 1996:
913	fixed appalling but apparently unimportant bug in parsing octal
914	numbers in reg exprs.
915
916	explicit hex in reg exprs now limited to 2 chars: \xa, \xaa.
917
918May 27, 1996:
919	cleaned up some declarations so gcc -Wall is now almost silent.
920
921	makefile now includes backup copies of ytab.c and lexyy.c in case
922	one makes before looking; it also avoids recreating lexyy.c unless
923	really needed.
924
925	s/aprintf/awkprint, s/asprintf/awksprintf/ to avoid some name clashes
926	with unwisely-written header files.
927
928	thanks to jeffrey friedl for several of these.
929
930May 26, 1996:
931	an attempt to rationalize the (unsigned) char issue.  almost all
932	instances of unsigned char have been removed; the handful of places
933	in b.c where chars are used as table indices have been hand-crafted.
934	added some latin-1 tests to the regression, but i'm not confident;
935	none of my compilers seem to care much.  thanks to nelson beebe for
936	pointing out some others that do care.
937
938May 2, 1996:
939	removed all register declarations.
940
941	enhanced split(), as in gawk, etc:  split(s, a, "") splits s into
942	a[1]...a[length(s)] with each character a single element.
943
944	made the same changes for field-splitting if FS is "".
945
946	added nextfile, as in gawk: causes immediate advance to next
947	input file. (thanks to arnold robbins for inspiration and code).
948
949	small fixes to regexpr code:  can now handle []], [[], and
950	variants;  [] is now a syntax error, rather than matching
951	everything;  [z-a] is now empty, not z.  far from complete
952	or correct, however.  (thanks to jeffrey friedl for pointing out
953	some awful behaviors.)
954
955Apr 29, 1996:
956	replaced uchar by uschar everywhere; apparently some compilers
957	usurp this name and this causes conflicts.
958
959	fixed call to time in run.c (bltin); arg is time_t *.
960
961	replaced horrible pointer/long punning in b.c by a legitimate
962	union.  should be safer on 64-bit machines and cleaner everywhere.
963	(thanks to nelson beebe for pointing out some of these problems.)
964
965	replaced nested comments by #if 0...#endif in run.c, lib.c.
966
967	removed getsval, setsval, execute macros from run.c and lib.c.
968	machines are 100x faster than they were when these macros were
969	first used.
970
971	revised filenames: awk.g.y => awkgram.y, awk.lx.l => awklex.l,
972	y.tab.[ch] => ytab.[ch], lex.yy.c => lexyy.c, all in the aid of
973	portability to nameless systems.
974
975	"make bundle" now includes yacc and lex output files for recipients
976	who don't have yacc or lex.
977
978Aug 15, 1995:
979	initialized Cells in setsymtab more carefully; some fields
980	were not set.  (thanks to purify, all of whose complaints i
981	think i now understand.)
982
983	fixed at least one error in gsub that looked at -1-th element
984	of an array when substituting for a null match (e.g., $).
985
986	delete arrayname is now legal; it clears the elements but leaves
987	the array, which may not be the right behavior.
988
989	modified makefile: my current make can't cope with the test used
990	to avoid unnecessary yacc invocations.
991
992Jul 17, 1995:
993	added dynamically growing strings to awk.lx.l and b.c
994	to permit regular expressions to be much bigger.
995	the state arrays can still overflow.
996
997Aug 24, 1994:
998	detect duplicate arguments in function definitions (mdm).
999
1000May 11, 1994:
1001	trivial fix to printf to limit string size in sub().
1002
1003Apr 22, 1994:
1004	fixed yet another subtle self-assignment problem:
1005	$1 = $2; $1 = $1 clobbered $1.
1006
1007	Regression tests now use private echo, to avoid quoting problems.
1008
1009Feb 2, 1994:
1010	changed error() to print line number as %d, not %g.
1011
1012Jul 23, 1993:
1013	cosmetic changes: increased sizes of some arrays,
1014	reworded some error messages.
1015
1016	added CONVFMT as in posix (just replaced OFMT in getsval)
1017
1018	FILENAME is now "" until the first thing that causes a file
1019	to be opened.
1020
1021Nov 28, 1992:
1022	deleted yyunput and yyoutput from proto.h;
1023	different versions of lex give these different declarations.
1024
1025May 31, 1992:
1026	added -mr N and -mf N options: more record and fields.
1027	these really ought to adjust automatically.
1028
1029	cleaned up some error messages; "out of space" now means
1030	malloc returned NULL in all cases.
1031
1032	changed rehash so that if it runs out, it just returns;
1033	things will continue to run slow, but maybe a bit longer.
1034
1035Apr 24, 1992:
1036	remove redundant close of stdin when using -f -.
1037
1038	got rid of core dump with -d; awk -d just prints date.
1039
1040Apr 12, 1992:
1041	added explicit check for /dev/std(in,out,err) in redirection.
1042	unlike gawk, no /dev/fd/n yet.
1043
1044	added (file/pipe) builtin.  hard to test satisfactorily.
1045	not posix.
1046
1047Feb 20, 1992:
1048	recompile after abortive changes;  should be unchanged.
1049
1050Dec 2, 1991:
1051	die-casting time:  converted to ansi C, installed that.
1052
1053Nov 30, 1991:
1054	fixed storage leak in freefa, failing to recover [N]CCL.
1055	thanks to Bill Jones (jones@cs.usask.ca)
1056
1057Nov 19, 1991:
1058	use RAND_MAX instead of literal in builtin().
1059
1060Nov 12, 1991:
1061	cranked up some fixed-size arrays in b.c, and added a test for
1062	overflow in penter.  thanks to mark larsen.
1063
1064Sep 24, 1991:
1065	increased buffer in gsub.  a very crude fix to a general problem.
1066	and again on Sep 26.
1067
1068Aug 18, 1991:
1069	enforce variable name syntax for commandline variables: has to
1070	start with letter or _.
1071
1072Jul 27, 1991:
1073	allow newline after ; in for statements.
1074
1075Jul 21, 1991:
1076	fixed so that in self-assignment like $1=$1, side effects
1077	like recomputing $0 take place.  (this is getting subtle.)
1078
1079Jun 30, 1991:
1080	better test for detecting too-long output record.
1081
1082Jun 2, 1991:
1083	better defense against very long printf strings.
1084	made break and continue illegal outside of loops.
1085
1086May 13, 1991:
1087	removed extra arg on gettemp, tempfree.  minor error message rewording.
1088
1089May 6, 1991:
1090	fixed silly bug in hex parsing in hexstr().
1091	removed an apparently unnecessary test in isnumber().
1092	warn about weird printf conversions.
1093	fixed unchecked array overwrite in relex().
1094
1095	changed for (i in array) to access elements in sorted order.
1096	then unchanged it -- it really does run slower in too many cases.
1097	left the code in place, commented out.
1098
1099Feb 10, 1991:
1100	check error status on all writes, to avoid banging on full disks.
1101
1102Jan 28, 1991:
1103	awk -f - reads the program from stdin.
1104
1105Jan 11, 1991:
1106	failed to set numeric state on $0 in cmd|getline context in run.c.
1107
1108Nov 2, 1990:
1109	fixed sleazy test for integrality in getsval;  use modf.
1110
1111Oct 29, 1990:
1112	fixed sleazy buggy code in lib.c that looked (incorrectly) for
1113	too long input lines.
1114
1115Oct 14, 1990:
1116	fixed the bug on p. 198 in which it couldn't deduce that an
1117	argument was an array in some contexts.  replaced the error
1118	message in intest() by code that damn well makes it an array.
1119
1120Oct 8, 1990:
1121	fixed horrible bug:  types and values were not preserved in
1122	some kinds of self-assignment. (in assign().)
1123
1124Aug 24, 1990:
1125	changed NCHARS to 256 to handle 8-bit characters in strings
1126	presented to match(), etc.
1127
1128Jun 26, 1990:
1129	changed struct rrow (awk.h) to use long instead of int for lval,
1130	since cfoll() stores a pointer in it.  now works better when int's
1131	are smaller than pointers!
1132
1133May 6, 1990:
1134	AVA fixed the grammar so that ! is uniformly of the same precedence as
1135	unary + and -.  This renders illegal some constructs like !x=y, which
1136	now has to be parenthesized as !(x=y), and makes others work properly:
1137	!x+y is (!x)+y, and x!y is x !y, not two pattern-action statements.
1138	(These problems were pointed out by Bob Lenk of Posix.)
1139
1140	Added \x to regular expressions (already in strings).
1141	Limited octal to octal digits; \8 and \9 are not octal.
1142	Centralized the code for parsing escapes in regular expressions.
1143	Added a bunch of tests to T.re and T.sub to verify some of this.
1144
1145Feb 9, 1990:
1146	fixed null pointer dereference bug in main.c:  -F[nothing].  sigh.
1147
1148	restored srand behavior:  it returns the current seed.
1149
1150Jan 18, 1990:
1151	srand now returns previous seed value (0 to start).
1152
1153Jan 5, 1990:
1154	fix potential problem in tran.c -- something was freed,
1155	then used in freesymtab.
1156
1157Oct 18, 1989:
1158	another try to get the max number of open files set with
1159	relatively machine-independent code.
1160
1161	small fix to input() in case of multiple reads after EOF.
1162
1163Oct 11, 1989:
1164	FILENAME is now defined in the BEGIN block -- too many old
1165	programs broke.
1166
1167	"-" means stdin in getline as well as on the commandline.
1168
1169	added a bunch of casts to the code to tell the truth about
1170	char * vs. unsigned char *, a right royal pain.  added a
1171	setlocale call to the front of main, though probably no one
1172	has it usefully implemented yet.
1173
1174Aug 24, 1989:
1175	removed redundant relational tests against nullnode if parse
1176	tree already had a relational at that point.
1177
1178Aug 11, 1989:
1179	fixed bug:  commandline variable assignment has to look like
1180	var=something.  (consider the man page for =, in file =.1)
1181
1182	changed number of arguments to functions to static arrays
1183	to avoid repeated malloc calls.
1184
1185Aug 2, 1989:
1186	restored -F (space) separator
1187
1188Jul 30, 1989:
1189	added -v x=1 y=2 ... for immediate commandline variable assignment;
1190	done before the BEGIN block for sure.  they have to precede the
1191	program if the program is on the commandline.
1192	Modified Aug 2 to require a separate -v for each assignment.
1193
1194Jul 10, 1989:
1195	fixed ref-thru-zero bug in environment code in tran.c
1196
1197Jun 23, 1989:
1198	add newline to usage message.
1199
1200Jun 14, 1989:
1201	added some missing ansi printf conversion letters: %i %X %E %G.
1202	no sensible meaning for h or L, so they may not do what one expects.
1203
1204	made %* conversions work.
1205
1206	changed x^y so that if n is a positive integer, it's done
1207	by explicit multiplication, thus achieving maximum accuracy.
1208	(this should be done by pow() but it seems not to be locally.)
1209	done to x ^= y as well.
1210
1211Jun 4, 1989:
1212	ENVIRON array contains environment: if shell variable V=thing,
1213		ENVIRON["V"] is "thing"
1214
1215	multiple -f arguments permitted.  error reporting is naive.
1216	(they were permitted before, but only the last was used.)
1217
1218	fixed a really stupid botch in the debugging macro dprintf
1219
1220	fixed order of evaluation of commandline assignments to match
1221	what the book claims:  an argument of the form x=e is evaluated
1222	at the time it would have been opened if it were a filename (p 63).
1223	this invalidates the suggested answer to ex 4-1 (p 195).
1224
1225	removed some code that permitted -F (space) fieldseparator,
1226	since it didn't quite work right anyway.  (restored aug 2)
1227
1228Apr 27, 1989:
1229	Line number now accumulated correctly for comment lines.
1230
1231Apr 26, 1989:
1232	Debugging output now includes a version date,
1233	if one compiles it into the source each time.
1234
1235Apr 9, 1989:
1236	Changed grammar to prohibit constants as 3rd arg of sub and gsub;
1237	prevents class of overwriting-a-constant errors.  (Last one?)
1238	This invalidates the "banana" example on page 43 of the book.
1239
1240	Added \a ("alert"), \v (vertical tab), \xhhh (hexadecimal),
1241	as in ANSI, for strings.  Rescinded the sloppiness that permitted
1242	non-octal digits in \ooo.  Warning:  not all compilers and libraries
1243	will be able to deal with \x correctly.
1244
1245Jan 9, 1989:
1246	Fixed bug that caused tempcell list to contain a duplicate.
1247	The fix is kludgy.
1248
1249Dec 17, 1988:
1250	Catches some more commandline errors in main.
1251	Removed redundant decl of modf in run.c (confuses some compilers).
1252	Warning:  there's no single declaration of malloc, etc., in awk.h
1253	that seems to satisfy all compilers.
1254
1255Dec 7, 1988:
1256	Added a bit of code to error printing to avoid printing nulls.
1257	(Not clear that it actually would.)
1258
1259Nov 27, 1988:
1260	With fear and trembling, modified the grammar to permit
1261	multiple pattern-action statements on one line without
1262	an explicit separator.  By definition, this capitulation
1263	to the ghost of ancient implementations remains undefined
1264	and thus subject to change without notice or apology.
1265	DO NOT COUNT ON IT.
1266
1267Oct 30, 1988:
1268	Fixed bug in call() that failed to recover storage.
1269
1270	A warning is now generated if there are more arguments
1271	in the call than in the definition (in lieu of fixing
1272	another storage leak).
1273
1274Oct 20, 1988:
1275	Fixed %c:  if expr is numeric, use numeric value;
1276	otherwise print 1st char of string value.  still
1277	doesn't work if the value is 0 -- won't print \0.
1278
1279	Added a few more checks for running out of malloc.
1280
1281Oct 12, 1988:
1282	Fixed bug in call() that freed local arrays twice.
1283
1284	Fixed to handle deletion of non-existent array right;
1285	complains about attempt to delete non-array element.
1286
1287Sep 30, 1988:
1288	Now guarantees to evaluate all arguments of built-in
1289	functions, as in C;  the appearance is that arguments
1290	are evaluated before the function is called.  Places
1291	affected are sub (gsub was ok), substr, printf, and
1292	all the built-in arithmetic functions in bltin().
1293	A warning is generated if a bltin() is called with
1294	the wrong number of arguments.
1295
1296	This requires changing makeprof on p167 of the book.
1297
1298Aug 23, 1988:
1299	setting FILENAME in BEGIN caused core dump, apparently
1300	because it was freeing space not allocated by malloc.
1301
1302July 24, 1988:
1303	fixed egregious error in toupper/tolower functions.
1304	still subject to rescinding, however.
1305
1306July 2, 1988:
1307	flush stdout before opening file or pipe
1308
1309July 2, 1988:
1310	performance bug in b.c/cgoto(): not freeing some sets of states.
1311	partial fix only right now, and the number of states increased
1312	to make it less obvious.
1313
1314June 1, 1988:
1315	check error status on close
1316
1317May 28, 1988:
1318	srand returns seed value it's using.
1319	see 1/18/90
1320
1321May 22, 1988:
1322	Removed limit on depth of function calls.
1323
1324May 10, 1988:
1325	Fixed lib.c to permit _ in commandline variable names.
1326
1327Mar 25, 1988:
1328	main.c fixed to recognize -- as terminator of command-
1329	line options.  Illegal options flagged.
1330	Error reporting slightly cleaned up.
1331
1332Dec 2, 1987:
1333	Newer C compilers apply a strict scope rule to extern
1334	declarations within functions.  Two extern declarations in
1335	lib.c and tran.c have been moved to obviate this problem.
1336
1337Oct xx, 1987:
1338	Reluctantly added toupper and tolower functions.
1339	Subject to rescinding without notice.
1340
1341Sep 17, 1987:
1342	Error-message printer had printf(s) instead of
1343	printf("%s",s);  got core dumps when the message
1344	included a %.
1345
1346Sep 12, 1987:
1347	Very long printf strings caused core dump;
1348	fixed aprintf, asprintf, format to catch them.
1349	Can still get a core dump in printf itself.
1350
1351
1352