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