FIXES revision 90902
159158Sache/****************************************************************
259158SacheCopyright (C) Lucent Technologies 1997
359158SacheAll Rights Reserved
459158Sache
559158SachePermission to use, copy, modify, and distribute this software and
659158Sacheits documentation for any purpose and without fee is hereby
759158Sachegranted, provided that the above copyright notice appear in all
859158Sachecopies and that both that the copyright notice and this
959158Sachepermission notice and warranty disclaimer appear in supporting
1059158Sachedocumentation, and that the name Lucent Technologies or any of
1159158Sacheits entities not be used in advertising or publicity pertaining
1259158Sacheto distribution of the software without specific, written prior
1359158Sachepermission.
1459158Sache
1559158SacheLUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1659158SacheINCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
1759158SacheIN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY
1859158SacheSPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1959158SacheWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
2059158SacheIN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
2159158SacheARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
2259158SacheTHIS SOFTWARE.
2359158Sache****************************************************************/
2459158Sache
2559158SacheThis file lists all bug fixes, changes, etc., made since the AWK book
2659158Sachewas sent to the printers in August, 1987.
2759158Sache
2859158SacheFeb 10, 2002:
2959158Sache	changed types in posix chars structure to quiet solaris cc.
3059158Sache
3159158SacheJan 1, 2002:
3259158Sache	fflush() or fflush("") flushes all files and pipes.
3359158Sache
3459158Sache	length(arrayname) returns number of elements; thanks to 
3559158Sache	arnold robbins for suggestion.
3659158Sache
3759158Sache	added a makefile.win to make it easier to build on windows.
3859158Sache	based on dan allen's buildwin.bat.
3959158Sache
4059158SacheNov 16, 2001:
4159158Sache	added support for posix character class names like [:digit:],
4259158Sache	which are not exactly shorter than [0-9] and perhaps no more
4359158Sache	portable.  thanks to dag-erling smorgrav for code.
4459158Sache
4559158SacheFeb 16, 2001:
4659158Sache	removed -m option; no longer needed, and it was actually
4759158Sache	broken (noted thanks to volker kiefel).
4859158Sache
4959158SacheFeb 10, 2001:
5059158Sache	fixed an appalling bug in gettok: any sequence of digits, +,-, E, e,
5159158Sache	and period was accepted as a valid number if it started with a period.
5259158Sache	this would never have happened with the lex version.
5359158Sache
5459158Sache	other 1-character botches, now fixed, include a bare $ and a
5559158Sache	bare " at the end of the input.
5659158Sache
5759158SacheFeb 7, 2001:
5859158Sache	more (const char *) casts in b.c and tran.c to silence warnings.
5959158Sache
6059158SacheNov 15, 2000:
6159158Sache	fixed a bug introduced in august 1997 that caused expressions
6259158Sache	like $f[1] to be syntax errors.  thanks to arnold robbins for
6359158Sache	noticing this and providing a fix.
6459158Sache
6559158SacheOct 30, 2000:
6659158Sache	fixed some nextfile bugs: not handling all cases.  thanks to
6759158Sache	arnold robbins for pointing this out.  new regressions added.
6859158Sache
6959158Sache	close() is now a function.  it returns whatever the library
7059158Sache	fclose returns, and -1 for closing a file or pipe that wasn't
7159158Sache	opened.
7259158Sache
7359158SacheSep 24, 2000:
7459158Sache	permit \n explicitly in character classes; won't work right
7559158Sache	if comes in as "[\n]" but ok as /[\n]/, because of multiple
7659158Sache	processing of \'s.  thanks to arnold robbins.
7759158Sache
7859158SacheJuly 5, 2000:
7959158Sache	minor fiddles in tran.c to keep compilers happy about uschar.
8059158Sache	thanks to norman wilson.
8159158Sache
8259158SacheMay 25, 2000:
8359158Sache	yet another attempt at making 8-bit input work, with another
8459158Sache	band-aid in b.c (member()), and some (uschar) casts to head 
8559158Sache	off potential errors in subscripts (like isdigit).  also
8659158Sache	changed HAT to NCHARS-2.  thanks again to santiago vila.
8759158Sache
8859158Sache	changed maketab.c to ignore apparently out of range definitions
8959158Sache	instead of halting; new freeBSD generates one.  thanks to
9059158Sache	jon snader <jsnader@ix.netcom.com> for pointing out the problem.
9159158Sache
9259158SacheMay 2, 2000:
9359158Sache	fixed an 8-bit problem in b.c by making several char*'s into
9459158Sache	unsigned char*'s.  not clear i have them all yet.  thanks to
9559158Sache	Santiago Vila <sanvila@unex.es> for the bug report.
9659158Sache
9759158SacheApr 21, 2000:
9874119Sache	finally found and fixed a memory leak in function call; it's
9959158Sache	been there since functions were added ~1983.  thanks to
10059158Sache	jon bentley for the test case that found it.
10159158Sache
10259158Sache	added test in envinit to catch environment "variables" with
10359158Sache	names begining with '='; thanks to Berend Hasselman.
10459158Sache
10559158SacheJul 28, 1999:
10659158Sache	added test in defn() to catch function foo(foo), which
10759158Sache	otherwise recurses until core dump.  thanks to arnold
10874119Sache	robbins for noticing this.
109270114Sse
11059158SacheJun 20, 1999:
11159158Sache	added *bp in gettok in lex.c; appears possible to exit function
11259158Sache	without terminating the string.  thanks to russ cox.
11359158Sache
11459158SacheJun 2, 1999:
11559158Sache	added function stdinit() to run to initialize files[] array,
11659158Sache	in case stdin, etc., are not constants; some compilers care.
11759158Sache
11859158SacheMay 10, 1999:
11959158Sache	replaced the ERROR ... FATAL, etc., macros with functions
12059158Sache	based on vprintf, to avoid problems caused by overrunning
12159158Sache	fixed-size errbuf array.  thanks to ralph corderoy for the
12259158Sache	impetus, and for pointing out a string termination bug in
12359158Sache	qstring as well.
12459158Sache
12559158SacheApr 21, 1999:
12659158Sache	fixed bug that caused occasional core dumps with commandline
12759158Sache	variable with value ending in \.  (thanks to nelson beebe for
12859158Sache	the test case.)
12959158Sache
13059158SacheApr 16, 1999:
13159158Sache	with code kindly provided by Bruce Lilly, awk now parses 
13259158Sache	/=/ and similar constructs more sensibly in more places.
13359158Sache	Bruce also provided some helpful test cases.
13459158Sache
13559158SacheApr 5, 1999:
13659158Sache	changed true/false to True/False in run.c to make it
13759158Sache	easier to compile with C++.  Added some casts on malloc
13859158Sache	and realloc to be honest about casts; ditto.  changed
13959158Sache	ltype int to long in struct rrow to reduce some 64-bit
14059158Sache	complaints; other changes scattered throughout for the
14159158Sache	same purpose.  thanks to Nelson Beebe for these portability
14259158Sache	improvements.
14359158Sache
14459158Sache	removed some horrible pointer-int casting in b.c and elsewhere
14559158Sache	by adding ptoi and itonp to localize the casts, which are
14659158Sache	all benign.  fixed one incipient bug that showed up on sgi
14759158Sache	in 64-bit mode.
14859158Sache
149270114Sse	reset lineno for new source file; include filename in error
150270114Sse	message.  also fixed line number error in continuation lines.
151270114Sse	(thanks to Nelson Beebe for both of these.)
152270114Sse
153270114SseMar 24, 1999:
154270114Sse	Nelson Beebe notes that irix 5.3 yacc dies with a bogus
155270114Sse	error; use a newer version or switch to bison, since sgi
156270114Sse	is unlikely to fix it.
157270114Sse
158270114SseMar 5, 1999:
159270114Sse	changed isnumber to is_number to avoid the problem caused by
160270114Sse	versions of ctype.h that include the name isnumber.
16159158Sache
16259158Sache	distribution now includes a script for building on a Mac,
163270114Sse	thanks to Dan Allen.
164270114Sse
165270114SseFeb 20, 1999:
166270114Sse	fixed memory leaks in run.c (call) and tran.c (setfval).
167270114Sse	thanks to Stephen Nutt for finding these and providing the fixes.
168270114Sse
169270114SseJan 13, 1999:
170270114Sse	replaced srand argument by (unsigned int) in run.c;
171270114Sse	avoids problem on Mac and potentially on Unix & Windows.
17259158Sache	thanks to Dan Allen.
17359158Sache
174270114Sse	added a few (int) casts to silence useless compiler warnings.
17559158Sache	e.g., errorflag= in run.c jump().
176270114Sse
177270114Sse	added proctab.c to the bundle outout; one less thing
178270114Sse	to have to compile out of the box.
179270114Sse
180270114Sse	added calls to _popen and _pclose to the win95 stub for
181270114Sse	pipes (thanks to Steve Adams for this helpful suggestion).
182270114Sse	seems to work, though properties are not well understood
183270114Sse	by me, and it appears that under some circumstances the
18459158Sache	pipe output is truncated.  Be careful.
18559158Sache
18659158SacheOct 19, 1998:
18759158Sache	fixed a couple of bugs in getrec: could fail to update $0
18859158Sache	after a getline var; because inputFS wasn't initialized, 
18959158Sache	could split $0 on every character, a misleading diversion.
19059158Sache
19159158Sache	fixed caching bug in makedfa: LRU was actually removing
19259158Sache	least often used.
19359158Sache
19459158Sache	thanks to ross ridge for finding these, and for providing
19559158Sache	great bug reports.
19659158Sache
19759158SacheMay 12, 1998:
19859158Sache	fixed potential bug in readrec: might fail to update record
19959158Sache	pointer after growing.  thanks to dan levy for spotting this
20059158Sache	and suggesting the fix.
20159158Sache
20259158SacheMar 12, 1998:
20359158Sache	added -V to print version number and die.
20459158Sache
20559158SacheFeb 11, 1998:
20659158Sache	subtle silent bug in lex.c: if the program ended with a number
20759158Sache	longer than 1 digit, part of the input would be pushed back and
20859158Sache	parsed again because token buffer wasn't terminated right.
20959158Sache	example:  awk 'length($0) > 10'.  blush.  at least i found it
21059158Sache	myself.
21159158Sache
21259158SacheAug 31, 1997:
21359158Sache	s/adelete/awkdelete/: SGI uses this in malloc.h.
21459158Sache	thanks to nelson beebe for pointing this one out.
21559158Sache
21659158SacheAug 21, 1997:
21759158Sache	fixed some bugs in sub and gsub when replacement includes \\.
21859158Sache	this is a dark, horrible corner, but at least now i believe that
21959158Sache	the behavior is the same as gawk and the intended posix standard.
22059158Sache	thanks to arnold robbins for advice here.
22159158Sache
22259158SacheAug 9, 1997:
22359158Sache	somewhat regretfully, replaced the ancient lex-based lexical
22459158Sache	analyzer with one written in C.  it's longer, generates less code,
22574119Sache	and more portable; the old one depended too much on mysterious
22659158Sache	properties of lex that were not preserved in other environments.
22759158Sache	in theory these recognize the same language.
22859158Sache
22959158Sache	now using strtod to test whether a string is a number, instead of
23059158Sache	the convoluted original function.  should be more portable and
23159158Sache	reliable if strtod is implemented right.
23259158Sache
23359158Sache	removed now-pointless optimization in makefile that tries to avoid
23459158Sache	recompilation when awkgram.y is changed but symbols are not.
23574119Sache
236270114Sse	removed most fixed-size arrays, though a handful remain, some
23759158Sache	of which are unchecked.  you have been warned.
23859158Sache
23959158SacheAug 4, 1997:
24059158Sache	with some trepidation, replaced the ancient code that managed
24159158Sache	fields and $0 in fixed-size arrays with arrays that grow on
24259158Sache	demand.  there is still some tension between trying to make this
24359158Sache	run fast and making it clean; not sure it's right yet.
24459158Sache
24559158Sache	the ill-conceived -mr and -mf arguments are now useful only
24659158Sache	for debugging.  previous dynamic string code removed.
24759158Sache
24859158Sache	numerous other minor cleanups along the way.
24959158Sache
25059158SacheJul 30, 1997:
25159158Sache	using code provided by dan levy (to whom profuse thanks), replaced
25259158Sache	fixed-size arrays and awkward kludges by a fairly uniform mechanism
25359158Sache	to grow arrays as needed for printf, sub, gsub, etc.
25459158Sache
25559158SacheJul 23, 1997:
25659158Sache	falling off the end of a function returns "" and 0, not 0.
25759158Sache	thanks to arnold robbins.
25859158Sache
25959158SacheJun 17, 1997:
26059158Sache	replaced several fixed-size arrays by dynamically-created ones
261	in run.c; added overflow tests to some previously unchecked cases.
262	getline, toupper, tolower.
263
264	getline code is still broken in that recursive calls may wind
265	up using the same space.  [fixed later]
266
267	increased RECSIZE to 8192 to push problems further over the horizon.
268
269	added \r to \n as input line separator for programs, not data.
270	damn CRLFs.
271
272	modified format() to permit explicit printf("%c", 0) to include
273	a null byte in output.  thanks to ken stailey for the fix.
274
275	added a "-safe" argument that disables file output (print >,
276	print >>), process creation (cmd|getline, print |, system), and
277	access to the environment (ENVIRON).  this is a first approximation
278	to a "safe" version of awk, but don't rely on it too much.  thanks
279	to joan feigenbaum and matt blaze for the inspiration long ago.
280
281Jul 8, 1996:
282	fixed long-standing bug in sub, gsub(/a/, "\\\\&"); thanks to
283	ralph corderoy.
284
285Jun 29, 1996:
286	fixed awful bug in new field splitting; didn't get all the places
287	where input was done.
288
289Jun 28, 1996:
290	changed field-splitting to conform to posix definition: fields are
291	split using the value of FS at the time of input; it used to be
292	the value when the field or NF was first referred to, a much less
293	predictable definition.  thanks to arnold robbins for encouragement
294	to do the right thing.
295
296May 28, 1996:
297	fixed appalling but apparently unimportant bug in parsing octal
298	numbers in reg exprs.
299
300	explicit hex in reg exprs now limited to 2 chars: \xa, \xaa.
301
302May 27, 1996:
303	cleaned up some declarations so gcc -Wall is now almost silent.
304
305	makefile now includes backup copies of ytab.c and lexyy.c in case
306	one makes before looking; it also avoids recreating lexyy.c unless
307	really needed.
308
309	s/aprintf/awkprint, s/asprintf/awksprintf/ to avoid some name clashes
310	with unwisely-written header files.
311
312	thanks to jeffrey friedl for several of these.
313
314May 26, 1996:
315	an attempt to rationalize the (unsigned) char issue.  almost all
316	instances of unsigned char have been removed; the handful of places
317	in b.c where chars are used as table indices have been hand-crafted.
318	added some latin-1 tests to the regression, but i'm not confident;
319	none of my compilers seem to care much.  thanks to nelson beebe for
320	pointing out some others that do care.
321
322May 2, 1996:
323	removed all register declarations.
324
325	enhanced split(), as in gawk, etc:  split(s, a, "") splits s into
326	a[1]...a[length(s)] with each character a single element.
327
328	made the same changes for field-splitting if FS is "".
329
330	added nextfile, as in gawk: causes immediate advance to next
331	input file. (thanks to arnold robbins for inspiration and code).
332
333	small fixes to regexpr code:  can now handle []], [[], and
334	variants;  [] is now a syntax error, rather than matching 
335	everything;  [z-a] is now empty, not z.  far from complete
336	or correct, however.  (thanks to jeffrey friedl for pointing out
337	some awful behaviors.)
338
339Apr 29, 1996:
340	replaced uchar by uschar everwhere; apparently some compilers
341	usurp this name and this causes conflicts.
342
343	fixed call to time in run.c (bltin); arg is time_t *.
344
345	replaced horrible pointer/long punning in b.c by a legitimate
346	union.  should be safer on 64-bit machines and cleaner everywhere.
347	(thanks to nelson beebe for pointing out some of these problems.)
348
349	replaced nested comments by #if 0...#endif in run.c, lib.c.
350
351	removed getsval, setsval, execute macros from run.c and lib.c.
352	machines are 100x faster than they were when these macros were
353	first used.
354
355	revised filenames: awk.g.y => awkgram.y, awk.lx.l => awklex.l,
356	y.tab.[ch] => ytab.[ch], lex.yy.c => lexyy.c, all in the aid of
357	portability to nameless systems.
358
359	"make bundle" now includes yacc and lex output files for recipients
360	who don't have yacc or lex.
361
362Aug 15, 1995:
363	initialized Cells in setsymtab more carefully; some fields
364	were not set.  (thanks to purify, all of whose complaints i
365	think i now understand.)
366
367	fixed at least one error in gsub that looked at -1-th element
368	of an array when substituting for a null match (e.g., $).
369
370	delete arrayname is now legal; it clears the elements but leaves
371	the array, which may not be the right behavior.
372
373	modified makefile: my current make can't cope with the test used
374	to avoid unnecessary yacc invocations.
375
376Jul 17, 1995:
377	added dynamically growing strings to awk.lx.l and b.c
378	to permit regular expressions to be much bigger.
379	the state arrays can still overflow.
380
381Aug 24, 1994:
382	detect duplicate arguments in function definitions (mdm).
383
384May 11, 1994:
385	trivial fix to printf to limit string size in sub().
386
387Apr 22, 1994:
388	fixed yet another subtle self-assignment problem:
389	$1 = $2; $1 = $1 clobbered $1.
390
391	Regression tests now use private echo, to avoid quoting problems.
392
393Feb 2, 1994:
394	changed error() to print line number as %d, not %g.
395
396Jul 23, 1993:
397	cosmetic changes: increased sizes of some arrays,
398	reworded some error messages.
399
400	added CONVFMT as in posix (just replaced OFMT in getsval)
401
402	FILENAME is now "" until the first thing that causes a file
403	to be opened.
404
405Nov 28, 1992:
406	deleted yyunput and yyoutput from proto.h;
407	different versions of lex give these different declarations.
408
409May 31, 1992:
410	added -mr N and -mf N options: more record and fields.
411	these really ought to adjust automatically.
412
413	cleaned up some error messages; "out of space" now means
414	malloc returned NULL in all cases.
415
416	changed rehash so that if it runs out, it just returns;
417	things will continue to run slow, but maybe a bit longer.
418
419Apr 24, 1992:
420	remove redundant close of stdin when using -f -.
421
422	got rid of core dump with -d; awk -d just prints date.
423
424Apr 12, 1992:
425	added explicit check for /dev/std(in,out,err) in redirection.
426	unlike gawk, no /dev/fd/n yet.
427
428	added (file/pipe) builtin.  hard to test satisfactorily.
429	not posix.
430
431Feb 20, 1992:
432	recompile after abortive changes;  should be unchanged.
433
434Dec 2, 1991:
435	die-casting time:  converted to ansi C, installed that.
436
437Nov 30, 1991:
438	fixed storage leak in freefa, failing to recover [N]CCL.
439	thanks to Bill Jones (jones@cs.usask.ca)
440
441Nov 19, 1991:
442	use RAND_MAX instead of literal in builtin().
443
444Nov 12, 1991:
445	cranked up some fixed-size arrays in b.c, and added a test for
446	overflow in penter.  thanks to mark larsen.
447
448Sep 24, 1991:
449	increased buffer in gsub.  a very crude fix to a general problem.
450	and again on Sep 26.
451
452Aug 18, 1991:
453	enforce variable name syntax for commandline variables: has to
454	start with letter or _.
455
456Jul 27, 1991:
457	allow newline after ; in for statements.
458
459Jul 21, 1991:
460	fixed so that in self-assignment like $1=$1, side effects
461	like recomputing $0 take place.  (this is getting subtle.)
462
463Jun 30, 1991:
464	better test for detecting too-long output record.
465
466Jun 2, 1991:
467	better defense against very long printf strings.
468	made break and continue illegal outside of loops.
469
470May 13, 1991:
471	removed extra arg on gettemp, tempfree.  minor error message rewording.
472
473May 6, 1991:
474	fixed silly bug in hex parsing in hexstr().
475	removed an apparently unnecessary test in isnumber().
476	warn about weird printf conversions.
477	fixed unchecked array overwrite in relex().
478
479	changed for (i in array) to access elements in sorted order.
480	then unchanged it -- it really does run slower in too many cases.
481	left the code in place, commented out.
482
483Feb 10, 1991:
484	check error status on all writes, to avoid banging on full disks.
485
486Jan 28, 1991:
487	awk -f - reads the program from stdin.
488
489Jan 11, 1991:
490	failed to set numeric state on $0 in cmd|getline context in run.c.
491
492Nov 2, 1990:
493	fixed sleazy test for integrality in getsval;  use modf.
494
495Oct 29, 1990:
496	fixed sleazy buggy code in lib.c that looked (incorrectly) for
497	too long input lines.
498
499Oct 14, 1990:
500	fixed the bug on p. 198 in which it couldn't deduce that an
501	argument was an array in some contexts.  replaced the error
502	message in intest() by code that damn well makes it an array.
503
504Oct 8, 1990:
505	fixed horrible bug:  types and values were not preserved in
506	some kinds of self-assignment. (in assign().)
507
508Aug 24, 1990:
509	changed NCHARS to 256 to handle 8-bit characters in strings
510	presented to match(), etc.
511
512Jun 26, 1990:
513	changed struct rrow (awk.h) to use long instead of int for lval,
514	since cfoll() stores a pointer in it.  now works better when int's
515	are smaller than pointers!
516
517May 6, 1990:
518	AVA fixed the grammar so that ! is uniformly of the same precedence as
519	unary + and -.  This renders illegal some constructs like !x=y, which
520	now has to be parenthesized as !(x=y), and makes others work properly:
521	!x+y is (!x)+y, and x!y is x !y, not two pattern-action statements.
522	(These problems were pointed out by Bob Lenk of Posix.)
523
524	Added \x to regular expressions (already in strings).
525	Limited octal to octal digits; \8 and \9 are not octal.
526	Centralized the code for parsing escapes in regular expressions.
527	Added a bunch of tests to T.re and T.sub to verify some of this.
528
529Feb 9, 1990:
530	fixed null pointer dereference bug in main.c:  -F[nothing].  sigh.
531
532	restored srand behavior:  it returns the current seed.
533
534Jan 18, 1990:
535	srand now returns previous seed value (0 to start).
536
537Jan 5, 1990:
538	fix potential problem in tran.c -- something was freed,
539	then used in freesymtab.
540
541Oct 18, 1989:
542	another try to get the max number of open files set with
543	relatively machine-independent code.
544
545	small fix to input() in case of multiple reads after EOF.
546
547Oct 11, 1989:
548	FILENAME is now defined in the BEGIN block -- too many old
549	programs broke.
550
551	"-" means stdin in getline as well as on the commandline.
552
553	added a bunch of casts to the code to tell the truth about
554	char * vs. unsigned char *, a right royal pain.  added a
555	setlocale call to the front of main, though probably no one
556	has it usefully implemented yet.
557
558Aug 24, 1989:
559	removed redundant relational tests against nullnode if parse
560	tree already had a relational at that point.
561
562Aug 11, 1989:
563	fixed bug:  commandline variable assignment has to look like
564	var=something.  (consider the man page for =, in file =.1)
565
566	changed number of arguments to functions to static arrays
567	to avoid repeated malloc calls.
568
569Aug 2, 1989:
570	restored -F (space) separator
571
572Jul 30, 1989:
573	added -v x=1 y=2 ... for immediate commandline variable assignment;
574	done before the BEGIN block for sure.  they have to precede the
575	program if the program is on the commandline.
576	Modified Aug 2 to require a separate -v for each assignment.
577
578Jul 10, 1989:
579	fixed ref-thru-zero bug in environment code in tran.c
580
581Jun 23, 1989:
582	add newline to usage message.
583
584Jun 14, 1989:
585	added some missing ansi printf conversion letters: %i %X %E %G.
586	no sensible meaning for h or L, so they may not do what one expects.
587
588	made %* conversions work.
589
590	changed x^y so that if n is a positive integer, it's done
591	by explicit multiplication, thus achieving maximum accuracy.
592	(this should be done by pow() but it seems not to be locally.)
593	done to x ^= y as well.
594
595Jun 4, 1989:
596	ENVIRON array contains environment: if shell variable V=thing,
597		ENVIRON["V"] is "thing"
598
599	multiple -f arguments permitted.  error reporting is naive.
600	(they were permitted before, but only the last was used.)
601
602	fixed a really stupid botch in the debugging macro dprintf
603
604	fixed order of evaluation of commandline assignments to match
605	what the book claims:  an argument of the form x=e is evaluated
606	at the time it would have been opened if it were a filename (p 63).
607	this invalidates the suggested answer to ex 4-1 (p 195).
608
609	removed some code that permitted -F (space) fieldseparator,
610	since it didn't quite work right anyway.  (restored aug 2)
611
612Apr 27, 1989:
613	Line number now accumulated correctly for comment lines.
614
615Apr 26, 1989:
616	Debugging output now includes a version date,
617	if one compiles it into the source each time.
618
619Apr 9, 1989:
620	Changed grammar to prohibit constants as 3rd arg of sub and gsub;
621	prevents class of overwriting-a-constant errors.  (Last one?)
622	This invalidates the "banana" example on page 43 of the book.
623
624	Added \a ("alert"), \v (vertical tab), \xhhh (hexadecimal),
625	as in ANSI, for strings.  Rescinded the sloppiness that permitted
626	non-octal digits in \ooo.  Warning:  not all compilers and libraries
627	will be able to deal with \x correctly.
628
629Jan 9, 1989:
630	Fixed bug that caused tempcell list to contain a duplicate.
631	The fix is kludgy.
632
633Dec 17, 1988:
634	Catches some more commandline errors in main.
635	Removed redundant decl of modf in run.c (confuses some compilers).
636	Warning:  there's no single declaration of malloc, etc., in awk.h
637	that seems to satisfy all compilers.
638
639Dec 7, 1988:
640	Added a bit of code to error printing to avoid printing nulls.
641	(Not clear that it actually would.)
642
643Nov 27, 1988:
644	With fear and trembling, modified the grammar to permit
645	multiple pattern-action statements on one line without
646	an explicit separator.  By definition, this capitulation
647	to the ghost of ancient implementations remains undefined
648	and thus subject to change without notice or apology.
649	DO NOT COUNT ON IT.
650
651Oct 30, 1988:
652	Fixed bug in call() that failed to recover storage.
653
654	A warning is now generated if there are more arguments
655	in the call than in the definition (in lieu of fixing
656	another storage leak).
657
658Oct 20, 1988:
659	Fixed %c:  if expr is numeric, use numeric value;
660	otherwise print 1st char of string value.  still
661	doesn't work if the value is 0 -- won't print \0.
662
663	Added a few more checks for running out of malloc.
664
665Oct 12, 1988:
666	Fixed bug in call() that freed local arrays twice.
667
668	Fixed to handle deletion of non-existent array right;
669	complains about attempt to delete non-array element.
670
671Sep 30, 1988:
672	Now guarantees to evaluate all arguments of built-in
673	functions, as in C;  the appearance is that arguments
674	are evaluated before the function is called.  Places
675	affected are sub (gsub was ok), substr, printf, and
676	all the built-in arithmetic functions in bltin().
677	A warning is generated if a bltin() is called with
678	the wrong number of arguments.
679
680	This requires changing makeprof on p167 of the book.
681
682Aug 23, 1988:
683	setting FILENAME in BEGIN caused core dump, apparently
684	because it was freeing space not allocated by malloc.
685
686July 24, 1988:
687	fixed egregious error in toupper/tolower functions.
688	still subject to rescinding, however.
689
690July 2, 1988:
691	flush stdout before opening file or pipe
692
693July 2, 1988:
694	performance bug in b.c/cgoto(): not freeing some sets of states.
695	partial fix only right now, and the number of states increased
696	to make it less obvious.
697
698June 1, 1988:
699	check error status on close
700
701May 28, 1988:
702	srand returns seed value it's using.
703	see 1/18/90
704
705May 22, 1988:
706	Removed limit on depth of function calls.
707
708May 10, 1988:
709	Fixed lib.c to permit _ in commandline variable names.
710
711Mar 25, 1988:
712	main.c fixed to recognize -- as terminator of command-
713	line options.  Illegal options flagged.
714	Error reporting slightly cleaned up.
715
716Dec 2, 1987:
717	Newer C compilers apply a strict scope rule to extern
718	declarations within functions.  Two extern declarations in
719	lib.c and tran.c have been moved to obviate this problem.
720
721Oct xx, 1987:
722	Reluctantly added toupper and tolower functions.
723	Subject to rescinding without notice.
724
725Sep 17, 1987:
726	Error-message printer had printf(s) instead of
727	printf("%s",s);  got core dumps when the message
728	included a %.
729
730Sep 12, 1987:
731	Very long printf strings caused core dump;
732	fixed aprintf, asprintf, format to catch them.
733	Can still get a core dump in printf itself.
734
735
736