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