FIXES revision 201951
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 file lists all bug fixes, changes, etc., made since the AWK book
26was sent to the printers in August, 1987.
27
28Nov 26, 2009:
29	fixed a long-standing issue with when FS takes effect.  a
30	change to FS is now noticed immediately for subsequent splits.
31
32	changed the name getline() to awkgetline() to avoid yet another
33	name conflict somewhere.
34
35Feb 11, 2009:
36	temporarily for now defined HAS_ISBLANK, since that seems to
37	be the best way through the thicket.  isblank arrived in C99,
38	but seems to be arriving at different systems at different
39	times.
40
41Oct 8, 2008:
42	fixed typo in b.c that set tmpvec wrongly.  no one had ever
43	run into the problem, apparently.  thanks to alistair crooks.
44
45Oct 23, 2007:
46	minor fix in lib.c: increase inputFS to 100, change malloc
47	for fields to n+1.  
48
49	fixed memory fault caused by out of order test in setsval.
50
51	thanks to david o'brien, freebsd, for both fixes.
52
53May 1, 2007:
54	fiddle in makefile to fix for BSD make; thanks to igor sobrado.
55
56Mar 31, 2007:
57	fixed some null pointer refs calling adjbuf.
58
59Feb 21, 2007:
60	fixed a bug in matching the null RE in sub and gsub.  thanks to al aho
61	who actually did the fix (in b.c), and to wolfgang seeberg for finding
62	it and providing a very compact test case.
63
64	fixed quotation in b.c; thanks to Hal Pratt and the Princeton Dante
65	Project.
66
67	removed some no-effect asserts in run.c.
68
69	fiddled maketab.c to not complain about bison-generated values.
70
71	removed the obsolete -V argument; fixed --version to print the
72	version and exit.
73
74	fixed wording and an outright error in the usage message; thanks to igor
75	sobrado and jason mcintyre.
76
77	fixed a bug in -d that caused core dump if no program followed.
78
79Jan 1, 2007:
80	dropped mac.code from makefile; there are few non-MacOSX
81	mac's these days.
82
83Jan 17, 2006:
84	system() not flagged as unsafe in the unadvertised -safe option.
85	found it while enhancing tests before shipping the ;login: article.
86	practice what you preach.
87
88	removed the 9-years-obsolete -mr and -mf flags.
89
90	added -version and --version options.
91
92	core dump on linux with BEGIN {nextfile}, now fixed.
93
94	removed some #ifdef's in run.c and lex.c that appear to no 
95	longer be necessary.
96
97Apr 24, 2005:
98	modified lib.c so that values of $0 et al are preserved in the END
99	block, apparently as required by posix.  thanks to havard eidnes
100	for the report and code.
101
102Jan 14, 2005:
103	fixed infinite loop in parsing, originally found by brian tsang.
104	thanks to arnold robbins for a suggestion that started me
105	rethinking it.
106
107Dec 31, 2004:
108	prevent overflow of -f array in main, head off potential error in 
109	call of SYNTAX(), test malloc return in lib.c, all with thanks to 
110	todd miller.
111
112Dec 22, 2004:
113	cranked up size of NCHARS; coverity thinks it can be overrun with
114	smaller size, and i think that's right.  added some assertions to b.c
115	to catch places where it might overrun.  the RE code is still fragile.
116
117Dec 5, 2004:
118	fixed a couple of overflow problems with ridiculous field numbers:
119	e.g., print $(2^32-1).  thanks to ruslan ermilov, giorgos keramidas
120	and david o'brien at freebsd.org for patches.  this really should
121	be re-done from scratch.
122
123Nov 21, 2004:
124	fixed another 25-year-old RE bug, in split.  it's another failure
125	to (re-)initialize.  thanks to steve fisher for spotting this and
126	providing a good test case.
127
128Nov 22, 2003:
129	fixed a bug in regular expressions that dates (so help me) from 1977;
130	it's been there from the beginning.  an anchored longest match that
131	was longer than the number of states triggered a failure to initialize
132	the machine properly.  many thanks to moinak ghosh for not only finding
133	this one but for providing a fix, in some of the most mysterious
134	code known to man.
135
136	fixed a storage leak in call() that appears to have been there since
137	1983 or so -- a function without an explicit return that assigns a 
138	string to a parameter leaked a Cell.  thanks to moinak ghosh for 
139	spotting this very subtle one.
140
141Jul 31, 2003:
142	fixed, thanks to andrey chernov and ruslan ermilov, a bug in lex.c
143	that mis-handled the character 255 in input.  (it was being compared
144	to EOF with a signed comparison.)
145
146Jul 29, 2003:
147	fixed (i think) the long-standing botch that included the beginning of
148	line state ^ for RE's in the set of valid characters; this led to a
149	variety of odd problems, including failure to properly match certain
150	regular expressions in non-US locales.  thanks to ruslan for keeping
151	at this one.
152
153Jul 28, 2003:
154	n-th try at getting internationalization right, with thanks to volker
155	kiefel, arnold robbins and ruslan ermilov for advice, though they
156	should not be blamed for the outcome.  according to posix, "."  is the
157	radix character in programs and command line arguments regardless of
158	the locale; otherwise, the locale should prevail for input and output
159	of numbers.  so it's intended to work that way.
160	
161	i have rescinded the attempt to use strcoll in expanding shorthands in
162	regular expressions (cclenter).  its properties are much too
163	surprising; for example [a-c] matches aAbBc in locale en_US but abBcC
164	in locale fr_CA.  i can see how this might arise by implementation
165	but i cannot explain it to a human user.  (this behavior can be seen
166	in gawk as well; we're leaning on the same library.)
167
168	the issue appears to be that strcoll is meant for sorting, where
169	merging upper and lower case may make sense (though note that unix
170	sort does not do this by default either).  it is not appropriate
171	for regular expressions, where the goal is to match specific
172	patterns of characters.  in any case, the notations [:lower:], etc.,
173	are available in awk, and they are more likely to work correctly in
174	most locales.
175
176	a moratorium is hereby declared on internationalization changes.
177	i apologize to friends and colleagues in other parts of the world.
178	i would truly like to get this "right", but i don't know what
179	that is, and i do not want to keep making changes until it's clear.
180
181Jul 4, 2003:
182	fixed bug that permitted non-terminated RE, as in "awk /x".
183
184Jun 1, 2003:
185	subtle change to split: if source is empty, number of elems
186	is always 0 and the array is not set.
187
188Mar 21, 2003:
189	added some parens to isblank, in another attempt to make things
190	internationally portable.
191
192Mar 14, 2003:
193	the internationalization changes, somewhat modified, are now
194	reinstated.  in theory awk will now do character comparisons
195	and case conversions in national language, but "." will always
196	be the decimal point separator on input and output regardless
197	of national language.  isblank(){} has an #ifndef.
198
199	this no longer compiles on windows: LC_MESSAGES isn't defined
200	in vc6++.
201
202	fixed subtle behavior in field and record splitting: if FS is
203	a single character and RS is not empty, \n is NOT a separator.
204	this tortuous reading is found in the awk book; behavior now
205	matches gawk and mawk.
206
207Dec 13, 2002:
208	for the moment, the internationalization changes of nov 29 are
209	rolled back -- programs like x = 1.2 don't work in some locales,
210	because the parser is expecting x = 1,2.  until i understand this
211	better, this will have to wait.
212
213Nov 29, 2002:
214	modified b.c (with tiny changes in main and run) to support
215	locales, using strcoll and iswhatever tests for posix character
216	classes.  thanks to ruslan ermilov (ru@freebsd.org) for code.
217	the function isblank doesn't seem to have propagated to any
218	header file near me, so it's there explicitly.  not properly
219	tested on non-ascii character sets by me.
220
221Jun 28, 2002:
222	modified run/format() and tran/getsval() to do a slightly better
223	job on using OFMT for output from print and CONVFMT for other
224	number->string conversions, as promised by posix and done by 
225	gawk and mawk.  there are still places where it doesn't work
226	right if CONVFMT is changed; by then the STR attribute of the
227	variable has been irrevocably set.  thanks to arnold robbins for
228	code and examples.
229
230	fixed subtle bug in format that could get core dump.  thanks to
231	Jaromir Dolecek <jdolecek@NetBSD.org> for finding and fixing.
232	minor cleanup in run.c / format() at the same time.
233
234	added some tests for null pointers to debugging printf's, which
235	were never intended for external consumption.  thanks to dave
236	kerns (dkerns@lucent.com) for pointing this out.
237
238	GNU compatibility: an empty regexp matches anything (thanks to
239	dag-erling smorgrav, des@ofug.org).  subject to reversion if
240	this does more harm than good.
241
242	pervasive small changes to make things more const-correct, as
243	reported by gcc's -Wwrite-strings.  as it says in the gcc manual,
244	this may be more nuisance than useful.  provoked by a suggestion
245	and code from arnaud desitter, arnaud@nimbus.geog.ox.ac.uk
246
247	minor documentation changes to note that this now compiles out
248	of the box on Mac OS X.
249
250Feb 10, 2002:
251	changed types in posix chars structure to quiet solaris cc.
252
253Jan 1, 2002:
254	fflush() or fflush("") flushes all files and pipes.
255
256	length(arrayname) returns number of elements; thanks to 
257	arnold robbins for suggestion.
258
259	added a makefile.win to make it easier to build on windows.
260	based on dan allen's buildwin.bat.
261
262Nov 16, 2001:
263	added support for posix character class names like [:digit:],
264	which are not exactly shorter than [0-9] and perhaps no more
265	portable.  thanks to dag-erling smorgrav for code.
266
267Feb 16, 2001:
268	removed -m option; no longer needed, and it was actually
269	broken (noted thanks to volker kiefel).
270
271Feb 10, 2001:
272	fixed an appalling bug in gettok: any sequence of digits, +,-, E, e,
273	and period was accepted as a valid number if it started with a period.
274	this would never have happened with the lex version.
275
276	other 1-character botches, now fixed, include a bare $ and a
277	bare " at the end of the input.
278
279Feb 7, 2001:
280	more (const char *) casts in b.c and tran.c to silence warnings.
281
282Nov 15, 2000:
283	fixed a bug introduced in august 1997 that caused expressions
284	like $f[1] to be syntax errors.  thanks to arnold robbins for
285	noticing this and providing a fix.
286
287Oct 30, 2000:
288	fixed some nextfile bugs: not handling all cases.  thanks to
289	arnold robbins for pointing this out.  new regressions added.
290
291	close() is now a function.  it returns whatever the library
292	fclose returns, and -1 for closing a file or pipe that wasn't
293	opened.
294
295Sep 24, 2000:
296	permit \n explicitly in character classes; won't work right
297	if comes in as "[\n]" but ok as /[\n]/, because of multiple
298	processing of \'s.  thanks to arnold robbins.
299
300July 5, 2000:
301	minor fiddles in tran.c to keep compilers happy about uschar.
302	thanks to norman wilson.
303
304May 25, 2000:
305	yet another attempt at making 8-bit input work, with another
306	band-aid in b.c (member()), and some (uschar) casts to head 
307	off potential errors in subscripts (like isdigit).  also
308	changed HAT to NCHARS-2.  thanks again to santiago vila.
309
310	changed maketab.c to ignore apparently out of range definitions
311	instead of halting; new freeBSD generates one.  thanks to
312	jon snader <jsnader@ix.netcom.com> for pointing out the problem.
313
314May 2, 2000:
315	fixed an 8-bit problem in b.c by making several char*'s into
316	unsigned char*'s.  not clear i have them all yet.  thanks to
317	Santiago Vila <sanvila@unex.es> for the bug report.
318
319Apr 21, 2000:
320	finally found and fixed a memory leak in function call; it's
321	been there since functions were added ~1983.  thanks to
322	jon bentley for the test case that found it.
323
324	added test in envinit to catch environment "variables" with
325	names beginning with '='; thanks to Berend Hasselman.
326
327Jul 28, 1999:
328	added test in defn() to catch function foo(foo), which
329	otherwise recurses until core dump.  thanks to arnold
330	robbins for noticing this.
331
332Jun 20, 1999:
333	added *bp in gettok in lex.c; appears possible to exit function
334	without terminating the string.  thanks to russ cox.
335
336Jun 2, 1999:
337	added function stdinit() to run to initialize files[] array,
338	in case stdin, etc., are not constants; some compilers care.
339
340May 10, 1999:
341	replaced the ERROR ... FATAL, etc., macros with functions
342	based on vprintf, to avoid problems caused by overrunning
343	fixed-size errbuf array.  thanks to ralph corderoy for the
344	impetus, and for pointing out a string termination bug in
345	qstring as well.
346
347Apr 21, 1999:
348	fixed bug that caused occasional core dumps with commandline
349	variable with value ending in \.  (thanks to nelson beebe for
350	the test case.)
351
352Apr 16, 1999:
353	with code kindly provided by Bruce Lilly, awk now parses 
354	/=/ and similar constructs more sensibly in more places.
355	Bruce also provided some helpful test cases.
356
357Apr 5, 1999:
358	changed true/false to True/False in run.c to make it
359	easier to compile with C++.  Added some casts on malloc
360	and realloc to be honest about casts; ditto.  changed
361	ltype int to long in struct rrow to reduce some 64-bit
362	complaints; other changes scattered throughout for the
363	same purpose.  thanks to Nelson Beebe for these portability
364	improvements.
365
366	removed some horrible pointer-int casting in b.c and elsewhere
367	by adding ptoi and itonp to localize the casts, which are
368	all benign.  fixed one incipient bug that showed up on sgi
369	in 64-bit mode.
370
371	reset lineno for new source file; include filename in error
372	message.  also fixed line number error in continuation lines.
373	(thanks to Nelson Beebe for both of these.)
374
375Mar 24, 1999:
376	Nelson Beebe notes that irix 5.3 yacc dies with a bogus
377	error; use a newer version or switch to bison, since sgi
378	is unlikely to fix it.
379
380Mar 5, 1999:
381	changed isnumber to is_number to avoid the problem caused by
382	versions of ctype.h that include the name isnumber.
383
384	distribution now includes a script for building on a Mac,
385	thanks to Dan Allen.
386
387Feb 20, 1999:
388	fixed memory leaks in run.c (call) and tran.c (setfval).
389	thanks to Stephen Nutt for finding these and providing the fixes.
390
391Jan 13, 1999:
392	replaced srand argument by (unsigned int) in run.c;
393	avoids problem on Mac and potentially on Unix & Windows.
394	thanks to Dan Allen.
395
396	added a few (int) casts to silence useless compiler warnings.
397	e.g., errorflag= in run.c jump().
398
399	added proctab.c to the bundle outout; one less thing
400	to have to compile out of the box.
401
402	added calls to _popen and _pclose to the win95 stub for
403	pipes (thanks to Steve Adams for this helpful suggestion).
404	seems to work, though properties are not well understood
405	by me, and it appears that under some circumstances the
406	pipe output is truncated.  Be careful.
407
408Oct 19, 1998:
409	fixed a couple of bugs in getrec: could fail to update $0
410	after a getline var; because inputFS wasn't initialized, 
411	could split $0 on every character, a misleading diversion.
412
413	fixed caching bug in makedfa: LRU was actually removing
414	least often used.
415
416	thanks to ross ridge for finding these, and for providing
417	great bug reports.
418
419May 12, 1998:
420	fixed potential bug in readrec: might fail to update record
421	pointer after growing.  thanks to dan levy for spotting this
422	and suggesting the fix.
423
424Mar 12, 1998:
425	added -V to print version number and die.
426
427Feb 11, 1998:
428	subtle silent bug in lex.c: if the program ended with a number
429	longer than 1 digit, part of the input would be pushed back and
430	parsed again because token buffer wasn't terminated right.
431	example:  awk 'length($0) > 10'.  blush.  at least i found it
432	myself.
433
434Aug 31, 1997:
435	s/adelete/awkdelete/: SGI uses this in malloc.h.
436	thanks to nelson beebe for pointing this one out.
437
438Aug 21, 1997:
439	fixed some bugs in sub and gsub when replacement includes \\.
440	this is a dark, horrible corner, but at least now i believe that
441	the behavior is the same as gawk and the intended posix standard.
442	thanks to arnold robbins for advice here.
443
444Aug 9, 1997:
445	somewhat regretfully, replaced the ancient lex-based lexical
446	analyzer with one written in C.  it's longer, generates less code,
447	and more portable; the old one depended too much on mysterious
448	properties of lex that were not preserved in other environments.
449	in theory these recognize the same language.
450
451	now using strtod to test whether a string is a number, instead of
452	the convoluted original function.  should be more portable and
453	reliable if strtod is implemented right.
454
455	removed now-pointless optimization in makefile that tries to avoid
456	recompilation when awkgram.y is changed but symbols are not.
457
458	removed most fixed-size arrays, though a handful remain, some
459	of which are unchecked.  you have been warned.
460
461Aug 4, 1997:
462	with some trepidation, replaced the ancient code that managed
463	fields and $0 in fixed-size arrays with arrays that grow on
464	demand.  there is still some tension between trying to make this
465	run fast and making it clean; not sure it's right yet.
466
467	the ill-conceived -mr and -mf arguments are now useful only
468	for debugging.  previous dynamic string code removed.
469
470	numerous other minor cleanups along the way.
471
472Jul 30, 1997:
473	using code provided by dan levy (to whom profuse thanks), replaced
474	fixed-size arrays and awkward kludges by a fairly uniform mechanism
475	to grow arrays as needed for printf, sub, gsub, etc.
476
477Jul 23, 1997:
478	falling off the end of a function returns "" and 0, not 0.
479	thanks to arnold robbins.
480
481Jun 17, 1997:
482	replaced several fixed-size arrays by dynamically-created ones
483	in run.c; added overflow tests to some previously unchecked cases.
484	getline, toupper, tolower.
485
486	getline code is still broken in that recursive calls may wind
487	up using the same space.  [fixed later]
488
489	increased RECSIZE to 8192 to push problems further over the horizon.
490
491	added \r to \n as input line separator for programs, not data.
492	damn CRLFs.
493
494	modified format() to permit explicit printf("%c", 0) to include
495	a null byte in output.  thanks to ken stailey for the fix.
496
497	added a "-safe" argument that disables file output (print >,
498	print >>), process creation (cmd|getline, print |, system), and
499	access to the environment (ENVIRON).  this is a first approximation
500	to a "safe" version of awk, but don't rely on it too much.  thanks
501	to joan feigenbaum and matt blaze for the inspiration long ago.
502
503Jul 8, 1996:
504	fixed long-standing bug in sub, gsub(/a/, "\\\\&"); thanks to
505	ralph corderoy.
506
507Jun 29, 1996:
508	fixed awful bug in new field splitting; didn't get all the places
509	where input was done.
510
511Jun 28, 1996:
512	changed field-splitting to conform to posix definition: fields are
513	split using the value of FS at the time of input; it used to be
514	the value when the field or NF was first referred to, a much less
515	predictable definition.  thanks to arnold robbins for encouragement
516	to do the right thing.
517
518May 28, 1996:
519	fixed appalling but apparently unimportant bug in parsing octal
520	numbers in reg exprs.
521
522	explicit hex in reg exprs now limited to 2 chars: \xa, \xaa.
523
524May 27, 1996:
525	cleaned up some declarations so gcc -Wall is now almost silent.
526
527	makefile now includes backup copies of ytab.c and lexyy.c in case
528	one makes before looking; it also avoids recreating lexyy.c unless
529	really needed.
530
531	s/aprintf/awkprint, s/asprintf/awksprintf/ to avoid some name clashes
532	with unwisely-written header files.
533
534	thanks to jeffrey friedl for several of these.
535
536May 26, 1996:
537	an attempt to rationalize the (unsigned) char issue.  almost all
538	instances of unsigned char have been removed; the handful of places
539	in b.c where chars are used as table indices have been hand-crafted.
540	added some latin-1 tests to the regression, but i'm not confident;
541	none of my compilers seem to care much.  thanks to nelson beebe for
542	pointing out some others that do care.
543
544May 2, 1996:
545	removed all register declarations.
546
547	enhanced split(), as in gawk, etc:  split(s, a, "") splits s into
548	a[1]...a[length(s)] with each character a single element.
549
550	made the same changes for field-splitting if FS is "".
551
552	added nextfile, as in gawk: causes immediate advance to next
553	input file. (thanks to arnold robbins for inspiration and code).
554
555	small fixes to regexpr code:  can now handle []], [[], and
556	variants;  [] is now a syntax error, rather than matching 
557	everything;  [z-a] is now empty, not z.  far from complete
558	or correct, however.  (thanks to jeffrey friedl for pointing out
559	some awful behaviors.)
560
561Apr 29, 1996:
562	replaced uchar by uschar everywhere; apparently some compilers
563	usurp this name and this causes conflicts.
564
565	fixed call to time in run.c (bltin); arg is time_t *.
566
567	replaced horrible pointer/long punning in b.c by a legitimate
568	union.  should be safer on 64-bit machines and cleaner everywhere.
569	(thanks to nelson beebe for pointing out some of these problems.)
570
571	replaced nested comments by #if 0...#endif in run.c, lib.c.
572
573	removed getsval, setsval, execute macros from run.c and lib.c.
574	machines are 100x faster than they were when these macros were
575	first used.
576
577	revised filenames: awk.g.y => awkgram.y, awk.lx.l => awklex.l,
578	y.tab.[ch] => ytab.[ch], lex.yy.c => lexyy.c, all in the aid of
579	portability to nameless systems.
580
581	"make bundle" now includes yacc and lex output files for recipients
582	who don't have yacc or lex.
583
584Aug 15, 1995:
585	initialized Cells in setsymtab more carefully; some fields
586	were not set.  (thanks to purify, all of whose complaints i
587	think i now understand.)
588
589	fixed at least one error in gsub that looked at -1-th element
590	of an array when substituting for a null match (e.g., $).
591
592	delete arrayname is now legal; it clears the elements but leaves
593	the array, which may not be the right behavior.
594
595	modified makefile: my current make can't cope with the test used
596	to avoid unnecessary yacc invocations.
597
598Jul 17, 1995:
599	added dynamically growing strings to awk.lx.l and b.c
600	to permit regular expressions to be much bigger.
601	the state arrays can still overflow.
602
603Aug 24, 1994:
604	detect duplicate arguments in function definitions (mdm).
605
606May 11, 1994:
607	trivial fix to printf to limit string size in sub().
608
609Apr 22, 1994:
610	fixed yet another subtle self-assignment problem:
611	$1 = $2; $1 = $1 clobbered $1.
612
613	Regression tests now use private echo, to avoid quoting problems.
614
615Feb 2, 1994:
616	changed error() to print line number as %d, not %g.
617
618Jul 23, 1993:
619	cosmetic changes: increased sizes of some arrays,
620	reworded some error messages.
621
622	added CONVFMT as in posix (just replaced OFMT in getsval)
623
624	FILENAME is now "" until the first thing that causes a file
625	to be opened.
626
627Nov 28, 1992:
628	deleted yyunput and yyoutput from proto.h;
629	different versions of lex give these different declarations.
630
631May 31, 1992:
632	added -mr N and -mf N options: more record and fields.
633	these really ought to adjust automatically.
634
635	cleaned up some error messages; "out of space" now means
636	malloc returned NULL in all cases.
637
638	changed rehash so that if it runs out, it just returns;
639	things will continue to run slow, but maybe a bit longer.
640
641Apr 24, 1992:
642	remove redundant close of stdin when using -f -.
643
644	got rid of core dump with -d; awk -d just prints date.
645
646Apr 12, 1992:
647	added explicit check for /dev/std(in,out,err) in redirection.
648	unlike gawk, no /dev/fd/n yet.
649
650	added (file/pipe) builtin.  hard to test satisfactorily.
651	not posix.
652
653Feb 20, 1992:
654	recompile after abortive changes;  should be unchanged.
655
656Dec 2, 1991:
657	die-casting time:  converted to ansi C, installed that.
658
659Nov 30, 1991:
660	fixed storage leak in freefa, failing to recover [N]CCL.
661	thanks to Bill Jones (jones@cs.usask.ca)
662
663Nov 19, 1991:
664	use RAND_MAX instead of literal in builtin().
665
666Nov 12, 1991:
667	cranked up some fixed-size arrays in b.c, and added a test for
668	overflow in penter.  thanks to mark larsen.
669
670Sep 24, 1991:
671	increased buffer in gsub.  a very crude fix to a general problem.
672	and again on Sep 26.
673
674Aug 18, 1991:
675	enforce variable name syntax for commandline variables: has to
676	start with letter or _.
677
678Jul 27, 1991:
679	allow newline after ; in for statements.
680
681Jul 21, 1991:
682	fixed so that in self-assignment like $1=$1, side effects
683	like recomputing $0 take place.  (this is getting subtle.)
684
685Jun 30, 1991:
686	better test for detecting too-long output record.
687
688Jun 2, 1991:
689	better defense against very long printf strings.
690	made break and continue illegal outside of loops.
691
692May 13, 1991:
693	removed extra arg on gettemp, tempfree.  minor error message rewording.
694
695May 6, 1991:
696	fixed silly bug in hex parsing in hexstr().
697	removed an apparently unnecessary test in isnumber().
698	warn about weird printf conversions.
699	fixed unchecked array overwrite in relex().
700
701	changed for (i in array) to access elements in sorted order.
702	then unchanged it -- it really does run slower in too many cases.
703	left the code in place, commented out.
704
705Feb 10, 1991:
706	check error status on all writes, to avoid banging on full disks.
707
708Jan 28, 1991:
709	awk -f - reads the program from stdin.
710
711Jan 11, 1991:
712	failed to set numeric state on $0 in cmd|getline context in run.c.
713
714Nov 2, 1990:
715	fixed sleazy test for integrality in getsval;  use modf.
716
717Oct 29, 1990:
718	fixed sleazy buggy code in lib.c that looked (incorrectly) for
719	too long input lines.
720
721Oct 14, 1990:
722	fixed the bug on p. 198 in which it couldn't deduce that an
723	argument was an array in some contexts.  replaced the error
724	message in intest() by code that damn well makes it an array.
725
726Oct 8, 1990:
727	fixed horrible bug:  types and values were not preserved in
728	some kinds of self-assignment. (in assign().)
729
730Aug 24, 1990:
731	changed NCHARS to 256 to handle 8-bit characters in strings
732	presented to match(), etc.
733
734Jun 26, 1990:
735	changed struct rrow (awk.h) to use long instead of int for lval,
736	since cfoll() stores a pointer in it.  now works better when int's
737	are smaller than pointers!
738
739May 6, 1990:
740	AVA fixed the grammar so that ! is uniformly of the same precedence as
741	unary + and -.  This renders illegal some constructs like !x=y, which
742	now has to be parenthesized as !(x=y), and makes others work properly:
743	!x+y is (!x)+y, and x!y is x !y, not two pattern-action statements.
744	(These problems were pointed out by Bob Lenk of Posix.)
745
746	Added \x to regular expressions (already in strings).
747	Limited octal to octal digits; \8 and \9 are not octal.
748	Centralized the code for parsing escapes in regular expressions.
749	Added a bunch of tests to T.re and T.sub to verify some of this.
750
751Feb 9, 1990:
752	fixed null pointer dereference bug in main.c:  -F[nothing].  sigh.
753
754	restored srand behavior:  it returns the current seed.
755
756Jan 18, 1990:
757	srand now returns previous seed value (0 to start).
758
759Jan 5, 1990:
760	fix potential problem in tran.c -- something was freed,
761	then used in freesymtab.
762
763Oct 18, 1989:
764	another try to get the max number of open files set with
765	relatively machine-independent code.
766
767	small fix to input() in case of multiple reads after EOF.
768
769Oct 11, 1989:
770	FILENAME is now defined in the BEGIN block -- too many old
771	programs broke.
772
773	"-" means stdin in getline as well as on the commandline.
774
775	added a bunch of casts to the code to tell the truth about
776	char * vs. unsigned char *, a right royal pain.  added a
777	setlocale call to the front of main, though probably no one
778	has it usefully implemented yet.
779
780Aug 24, 1989:
781	removed redundant relational tests against nullnode if parse
782	tree already had a relational at that point.
783
784Aug 11, 1989:
785	fixed bug:  commandline variable assignment has to look like
786	var=something.  (consider the man page for =, in file =.1)
787
788	changed number of arguments to functions to static arrays
789	to avoid repeated malloc calls.
790
791Aug 2, 1989:
792	restored -F (space) separator
793
794Jul 30, 1989:
795	added -v x=1 y=2 ... for immediate commandline variable assignment;
796	done before the BEGIN block for sure.  they have to precede the
797	program if the program is on the commandline.
798	Modified Aug 2 to require a separate -v for each assignment.
799
800Jul 10, 1989:
801	fixed ref-thru-zero bug in environment code in tran.c
802
803Jun 23, 1989:
804	add newline to usage message.
805
806Jun 14, 1989:
807	added some missing ansi printf conversion letters: %i %X %E %G.
808	no sensible meaning for h or L, so they may not do what one expects.
809
810	made %* conversions work.
811
812	changed x^y so that if n is a positive integer, it's done
813	by explicit multiplication, thus achieving maximum accuracy.
814	(this should be done by pow() but it seems not to be locally.)
815	done to x ^= y as well.
816
817Jun 4, 1989:
818	ENVIRON array contains environment: if shell variable V=thing,
819		ENVIRON["V"] is "thing"
820
821	multiple -f arguments permitted.  error reporting is naive.
822	(they were permitted before, but only the last was used.)
823
824	fixed a really stupid botch in the debugging macro dprintf
825
826	fixed order of evaluation of commandline assignments to match
827	what the book claims:  an argument of the form x=e is evaluated
828	at the time it would have been opened if it were a filename (p 63).
829	this invalidates the suggested answer to ex 4-1 (p 195).
830
831	removed some code that permitted -F (space) fieldseparator,
832	since it didn't quite work right anyway.  (restored aug 2)
833
834Apr 27, 1989:
835	Line number now accumulated correctly for comment lines.
836
837Apr 26, 1989:
838	Debugging output now includes a version date,
839	if one compiles it into the source each time.
840
841Apr 9, 1989:
842	Changed grammar to prohibit constants as 3rd arg of sub and gsub;
843	prevents class of overwriting-a-constant errors.  (Last one?)
844	This invalidates the "banana" example on page 43 of the book.
845
846	Added \a ("alert"), \v (vertical tab), \xhhh (hexadecimal),
847	as in ANSI, for strings.  Rescinded the sloppiness that permitted
848	non-octal digits in \ooo.  Warning:  not all compilers and libraries
849	will be able to deal with \x correctly.
850
851Jan 9, 1989:
852	Fixed bug that caused tempcell list to contain a duplicate.
853	The fix is kludgy.
854
855Dec 17, 1988:
856	Catches some more commandline errors in main.
857	Removed redundant decl of modf in run.c (confuses some compilers).
858	Warning:  there's no single declaration of malloc, etc., in awk.h
859	that seems to satisfy all compilers.
860
861Dec 7, 1988:
862	Added a bit of code to error printing to avoid printing nulls.
863	(Not clear that it actually would.)
864
865Nov 27, 1988:
866	With fear and trembling, modified the grammar to permit
867	multiple pattern-action statements on one line without
868	an explicit separator.  By definition, this capitulation
869	to the ghost of ancient implementations remains undefined
870	and thus subject to change without notice or apology.
871	DO NOT COUNT ON IT.
872
873Oct 30, 1988:
874	Fixed bug in call() that failed to recover storage.
875
876	A warning is now generated if there are more arguments
877	in the call than in the definition (in lieu of fixing
878	another storage leak).
879
880Oct 20, 1988:
881	Fixed %c:  if expr is numeric, use numeric value;
882	otherwise print 1st char of string value.  still
883	doesn't work if the value is 0 -- won't print \0.
884
885	Added a few more checks for running out of malloc.
886
887Oct 12, 1988:
888	Fixed bug in call() that freed local arrays twice.
889
890	Fixed to handle deletion of non-existent array right;
891	complains about attempt to delete non-array element.
892
893Sep 30, 1988:
894	Now guarantees to evaluate all arguments of built-in
895	functions, as in C;  the appearance is that arguments
896	are evaluated before the function is called.  Places
897	affected are sub (gsub was ok), substr, printf, and
898	all the built-in arithmetic functions in bltin().
899	A warning is generated if a bltin() is called with
900	the wrong number of arguments.
901
902	This requires changing makeprof on p167 of the book.
903
904Aug 23, 1988:
905	setting FILENAME in BEGIN caused core dump, apparently
906	because it was freeing space not allocated by malloc.
907
908July 24, 1988:
909	fixed egregious error in toupper/tolower functions.
910	still subject to rescinding, however.
911
912July 2, 1988:
913	flush stdout before opening file or pipe
914
915July 2, 1988:
916	performance bug in b.c/cgoto(): not freeing some sets of states.
917	partial fix only right now, and the number of states increased
918	to make it less obvious.
919
920June 1, 1988:
921	check error status on close
922
923May 28, 1988:
924	srand returns seed value it's using.
925	see 1/18/90
926
927May 22, 1988:
928	Removed limit on depth of function calls.
929
930May 10, 1988:
931	Fixed lib.c to permit _ in commandline variable names.
932
933Mar 25, 1988:
934	main.c fixed to recognize -- as terminator of command-
935	line options.  Illegal options flagged.
936	Error reporting slightly cleaned up.
937
938Dec 2, 1987:
939	Newer C compilers apply a strict scope rule to extern
940	declarations within functions.  Two extern declarations in
941	lib.c and tran.c have been moved to obviate this problem.
942
943Oct xx, 1987:
944	Reluctantly added toupper and tolower functions.
945	Subject to rescinding without notice.
946
947Sep 17, 1987:
948	Error-message printer had printf(s) instead of
949	printf("%s",s);  got core dumps when the message
950	included a %.
951
952Sep 12, 1987:
953	Very long printf strings caused core dump;
954	fixed aprintf, asprintf, format to catch them.
955	Can still get a core dump in printf itself.
956
957
958