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