Update spec to require automake >= 1.13
[platform/upstream/gawk.git] / NEWS.0
1    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
2    2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
3    
4    Copying and distribution of this file, with or without modification,
5    are permitted in any medium without royalty provided the copyright
6    notice and this notice are preserved.
7  
8 Changes from 3.1.7 to 3.1.8
9 ---------------------------
10 1. The zero flag no longer applies to %c and %s; apparently the standards
11    changed at some point.
12
13 2. Updated to latest infrastructure: Autoconf 2.65, Automake 1.11.1,
14    libtool 2.2.6b, Bison 2.4.2.
15
16 3. Failure to open a socket is no longer a fatal error.
17
18 4. dfa.h and dfa.c are now more-or-less in sync with GNU grep, for the first
19    time in many years.
20
21 5. Gawk no longer includes its own copy of libsigsegv but it will use it if
22    installed on the build system. The --disable-libsigsegv configure option
23    is now gone.
24
25 6. The ' flag (%'d) is now just ignored on systems that can't support it.
26
27 7. Lots of bug fixes, see the ChangeLog.
28
29 Changes from 3.1.6 to 3.1.7
30 ---------------------------
31 1. Gawk now has support for z/OS (IBM S/390 architecture).
32
33 2. Gawk now handles multibyte strings better in [s]printf with field
34    widths and such.
35
36 3. Gawk now uses libsigsegv to print a message before core dumping. This
37    handles infinite recursion of an awk function a little better.
38    Use of the library can be disabled at configure time with the
39    --disable-libsigsegv option for unusual systems.
40
41 4. The handling of BINMODE is now somewhat more sane.
42
43 5. A getline from a directory is no longer fatal; instead it returns -1.
44
45 6. Per POSIX, special variable names (like FS) cannot be used as function
46    parameter names.
47
48 7. The new -O / --optimize option enables simple constant folding on
49    the parse tree during parsing.  We hope that with time the number
50    of optimizations will increase.
51
52 8. Updated to the latest autotools: Autoconf 2.63, Automake 1.11,
53    Libtool 2.2.6a, and Gettext 0.17. Also latest Bison: 2.4.1.
54
55 9. Some improvement in testing for isinf / isnan in builtin.c.
56
57 10. Improved the handling of `a = a b c' to be more general.
58
59 11. Locale handling for %'d should now work on certain non-Unix /
60     non-Linux systems.
61
62 12. Lots of bugs fixed, see the ChangeLog for the details.
63  
64 Changes from 3.1.5 to 3.1.6
65 ---------------------------
66
67 1. `gawk 'program' /non/existant/file' no longer core dumps.
68
69 2. Too many people the world over have complained about gawk's use of the
70    locale's decimal point for parsing input data instead of the traditional
71    period.  So, even though gawk was being nicely standards-compliant, in
72    a Triumph For The Users, gawk now only uses the locale's decimal point
73    if --posix is supplied or if POSIXLY_CORRECT is set.  It is the sincere
74    hope that this change will eliminate this FAQ from being asked.
75
76 3. `gawk -v BINMODE=1 ...' works again.
77
78 4. Internal file names like `/dev/user' now work again. (Note that these
79    file names are obsolete and will go away eventually.)
80
81 5. Problems with wide strings in non "C" locales have been straightened
82    out everywhere.  (At least, we think so.)
83
84 6. Use of `ansi2knr' is no longer supported. Please use an ANSI C compiler.
85
86 7. Updated to Autoconf 2.61, Automake 1.10, and Gettext 0.16.1.
87
88 8. The getopt* and regex* files were synchronized with current GLIBC CVS.
89    See the ChangeLog for the versions and minor edits made.
90
91 9. There are additional --lint-old warnings.
92
93 10. Gawk now uses getaddrinfo(3) to look up names and IP addresses. This
94     allows the use of an IPv6 format address and paves the way for
95     eventual addition of `/inet6/...' and `/inet4/...' hostnames.
96
97 11. We believe gawk to now be valgrind clean. At least when run against
98     the test suite.
99
100 12. A number of issues dealing with the formatting and printing of very
101     large numbers in integer formats have been dealt with and fixed.
102
103 13. Gawk now converts "+inf", "-inf", "+nan" and "-nan" into the corresponding
104     magic IEEE floating point values. Only those strings (case independent)
105     work.  With --posix, gawk calls the system strtod directly. You asked
106     for it, you got it, you deal with it.
107
108 14. Defining YYDEBUG enables the -D command line option.
109
110 15. Gawk should now work out of the box on Tandem NSK/OSS systems.
111
112 16. Lint messages rationalized: many more of the messages are now printed
113     only once, instead of every time they are encountered.
114
115 17. The strftime() function now accepts an optional third argument, which
116     if non-zero or non-null, indicates that the time should be formatted
117     as UTC instead of as local time.
118
119 18. The precedence of concatenation and `| getline' (in something like
120     "echo " "date" | getline stuff) has been reverted to the earlier
121     behavior and now once again matches Unix awk.
122
123 19. New configure time flag --disable-directories-fatal which causes
124     gawk to silently skip directories on the command line.  This behavior
125     is also enabled for --traditional, since it's what Unix awk does.
126
127 20. A new option, --use-lc-numeric, forces use of the locale's decimal
128     point without the rest of the draconian restrictions imposed by
129     --posix. This softens somewhat the stance taken in item #2.
130
131 21. Everything relevant has been updated to the GPL 3.
132
133 22. Array growth should be faster now, at no cost in space.
134
135 23. Lots more tests.
136
137 24. One new translation.
138
139 25. Various bugs fixed, see the ChangeLog for details.
140
141 Changes from 3.1.4 to 3.1.5
142 ---------------------------
143
144 1. The random() suite has been updated to a current FreeBSD version, which
145    works on systems with > 32-bit ints.
146
147 2. A new option, `--exec' has been added. It's like -f but ends option
148    processing.  It also disables `x=y' variable assignments, but not -v.
149    It's needed mainly for CGI scripts, so that source code can't be
150    passed in as part of the URL.
151
152 3. dfa.[ch] have been synced with GNU grep development.  This also fixes
153    multiple regex matching problems in multibyte locales.
154
155 4. Updated to Automake 1.9.5.
156
157 5. Updated to Bison 2.0.
158
159 6. The getopt* and regex* files were synchronized with current GLIBC CVS.
160    See the ChangeLog for the versions and minor edits made.
161
162 7. `configure --disable-nls' now disables just gawk's own translations.
163    Gawk continues to work with the locale's numeric formatting.  This
164    includes a bug fix in handling the printf ' flag (e.g., %'d).
165
166 8. Gawk is now multibyte aware.  This means that index(), length(),
167    substr() and match() all work in terms of characters, not bytes.
168
169 9. Gawk is now smarter about parsing numeric constants in corner cases.
170
171 11. Not closing open redirections no longer causes gawk to exit non-zero.
172
173 10. The VMS port has been updated.
174
175 11. Changes from Andrew Schorr at the xmlgawk project to provide for
176     open hooks from extensions are now included.  This will let the
177     xmlgawk extension work in the standard gawk.
178
179 12. Updated to gettext 0.14.4. Gawk no longer includes its own copy
180     of the gettext `intl' library, following current GNU practice to
181     rely on there being an external version thereof.
182
183 13. A regexp of the form `//' will now generate a warning that it
184     is not a C++ comment from --lint (awk.y).
185
186 14. The ^ and ^= operators with an integer exponent now use Exponentiation
187     by Squaring. This simultaneously fixes a problem with ^= and a negative
188     integer exponent.
189
190 15. length(array) now returns the number of elements in the array.  This is
191     is a non-standard extension that will fail in POSIX mode.
192
193 16. Carriage return characters are now ignored in program source code.
194
195 17. Four new translations added.
196
197 18. Various minor bugs fixed. See the ChangeLog for the details.
198
199 Changes from 3.1.3 to 3.1.4
200 ---------------------------
201
202 1. Gawk now supports the POSIX %F format, falling back to %f if the local
203    system printf doesn't handle it.
204
205 2. Gawk now supports the ' flag in printf. E.g., %'d in a locale with thousands
206    separators includes the thousands separator in the value, e.g. 12,345.
207
208    This has one problem; the ' flag is next to impossible to use on the
209    command line, without major quoting games.  Oh well, TANSTAAFL.
210
211 3. The dfa code has been reinstated; the performance degradation was
212    just too awful.  Sigh.  (For fun, use `export GAWK_NO_DFA=1' to
213    see the difference.)
214
215 4. The special case `x = x y' is now recognized in the grammar, and gawk
216    now uses `realloc' to append the new value to the end of the existing
217    one.  This can speed up the common case of appending onto a string.
218
219 5. The dfa code was upgraded with most of the fixes from grep 2.5.1, and
220    the regex code was upgraded with GLIBC as mid-January 2004.  The regex
221    code is faster than it was, but still not as fast as the dfa code, so
222    the dfa code stays in.  The getopt code was also synced to current GLIBC.
223
224 6. Support code upgraded to Automake 1.8.5, Autoconf 2.59, and gettext 0.14.1.
225
226 7. When --posix is in effect, sub/gsub now follow the 2001 POSIX behavior.
227    Yippee.  This is even documented in the manual.
228
229 8. Gawk will now recover children that have died (input pipelines, two-way
230    pipes), upon detecting EOF from them, thus avoiding filling
231    up the process table.  Open file descriptors are not recovered
232    (unfortunately), since that could break awk semantics.  See the
233    ChangeLog and the source code for the details.
234
235 9. Handling of numbers like `0,1' in non-American locales ought to
236    work correctly now.
237
238 10. IGNORECASE is now locale-aware for characters with values above 128.
239     The dfa matcher is now used for IGNORECASE matches too.
240
241 11. Dynamic function loading is better. The documentation has been improved
242     and some new APIs for use by dynamic functions have been added.
243
244 12. Gawk now has a fighting chance of working on older systems,
245     a la SunOS 4.1.x.
246
247 13. Issues with multibyte support on HP-UX are now resolved. `configure' now
248     disables such support there, since it's not up to what gawk needs.
249
250 14. There are now even more tests in the test suite.
251
252 15. Various bugs fixed; see ChangeLog for the details.
253
254 Changes from 3.1.2 to 3.1.3
255 ---------------------------
256
257 1. Gawk now follows POSIX in handling of local numeric formats for
258    input, output and number/string conversions.
259
260 2. Multibyte detection improved.  See README_d/README.multibyte for more
261    info about multibyte locales.
262
263 3. Handling of `close' made more POSIX-compliant for POSIXLY_CORRECT,
264    see the documentation.
265
266 4. The record reading code was redone, again.  This time it's much
267    better. Really!
268
269 5. For RS = "\n" and RS = "", gawk now only sets RT when it has changed.
270    This provides considerable performance improvement.
271
272 6. `match' now sets all the subscripts in the third argument array
273    correctly, even if not all subexpressions matched.
274
275 7. Updated to Automake 1.7.5.  configure.in renamed configure.ac.
276
277 8. C-style switch statements are available, but must be enabled at
278    compile time via `configure --enable-switch'.  For 3.2 they'll be
279    enabled by default. Thanks to Michael Benzinger for the initial
280    code.
281
282 9. %c now always prints no more than one character, whatever
283    precision is provided.
284
285 10. strtonum(<number>) now works again.
286
287 11. Gawk is now much better about scalar/array typing of global
288     uninitiailzed variables passed as parameters. Once the parameter
289     is then used one way or the other, the global var's type is
290     adjusted accordingly.  Thanks to Stepan Kasal for the original
291     (considerable) changes.
292
293 12. Dynamic function loading under Windows32 should now be possible. See
294     README_d/README.pcdynamic. Thanks to Patrick T.J. McPhee for the changes.
295
296 13. Updated to gettext 0.12.1.
297
298 14. Gawk now follows historical practice and POSIX for the return
299     value of `rand': It's now  0 <= N < 1.
300
301 Changes from 3.1.1 to 3.1.2
302 ---------------------------
303
304 1. Loops of the form:
305
306         for (iggy in foo)
307                 next
308
309    no longer leak memory.
310
311 2. gawk -v FIELDWIDTHS="..." now sets PROCINFO["FS"] correctly.
312
313 3. All builtin operations and functions should now fully evaluate their
314    arguments so that side effects take place correctly.
315
316 4. Fixed a logic bug in gsub/gensub for matches to null strings that occurred
317    later in the string after a nonnull match.
318
319 5. getgroups code now works on Ultrix again.
320
321 6. Completely new version of the full GNU regex engine now in place.
322
323 7. Argument parsing and variable assignment has been cleaned up.
324
325 8. An I/O bug on HP-UX has been documented and worked around. See
326    README_d/README.hpux.
327
328 9. awklib/grcat should now compile correctly.
329
330 10. Updated to automake 1.7.3, autoconf 2.57 and gettext 0.11.5 ; thanks to
331     Paul Eggert for the initial automake and autoconf work.
332
333 11. As a result of #6, removed the use of the dfa code from GNU grep.
334
335 12. It is now possible to use ptys for |& two-way pipes instead of
336     pipes.  The basic plumbing for this was provided by Paolo Bonzini.
337     To make this happen:
338
339         command = "unix command etc"
340         PROCINFO[command, "pty"] = 1
341
342         print ... |& command
343         command |& getline stuff
344
345     In other words, set the element in PROCINFO *before* opening the
346     two-way pipe, and then gawk will use ptys instead of pipes.
347
348     On systems without ptys or where all the ptys are in use, gawk
349     will fall back to using plain pipes.
350
351 13. Fixed a regex matching across buffer boundaries bug, with a
352     heuristic.  See io.c:rsre_get_a_record.
353
354 14. Profiling no longer dumps core if there are extension functions in place.
355
356 15. Grammar and scanner cleaned up, courtesy of Stepen Kasal, to hopefully
357     once and for all fix the `/=' operator vs. `/=.../' regex ambiguity.
358     Lots of other grammar simplifications applied, as well.
359
360 16. BINMODE should work now on more Windows ports.
361
362 17. Updated to bison 1.875.  Includes fix to bisonfix.sed script.
363
364 18. The NODE structure is now 20% (8 bytes) smaller (on x86, anyway), which
365     should help conserve memory.
366
367 19. Builds not in the source directory should work again.
368
369 20. Arrays now use 2 NODE's per element instead of three. Combined with
370     #18, (on the x86) this reduces the overhead from 120 bytes per element
371     to just 64 bytes: almost a 50% improvement.
372
373 21. Programs that make heavy use of changing IGNORECASE should now be
374     much faster, particularly if using a regular expression for FS or RS.
375     IGNORECASE now correctly affects RS regex record splitting, as well.
376
377 22. IGNORECASE no longer affects single-character field splitting (FS = "c"),
378     or single-character record splitting (RS = "c").
379
380     This cleans up some weird behavior, and makes gawk better match the
381     documentation, which says it only affects regex-based field splitting
382     and record splitting.
383
384     The documentation on this was improved, too.
385
386 23. The framework in test/ has been simplified, making it much easier to
387     add new tests while keeping the size of Makefile.am reasonable. Thanks
388     for this to Stepan Kasal.
389
390 24. --lint=invalid causes lint warnings only about stuff that's actually
391     invalid.  This needs additional work.
392
393 25. More translations.
394
395 26. The `get_a_record' routine has been revamped (currently by splitting it
396     into three variants).  This should improve long-term maintainability.
397
398 27. `match' now adds more entries to 3rd array arg:
399         match("the big dog", /([a-z]+) ([a-z]+) ([a-z]+)/, data)
400     fills in variables:
401         data[1, "start"], data[1, "length"], and so on.
402
403 28. New `asorti' function with same interface as `asort', but sorts indices
404     instead of values.  
405
406 29. Documentation updated to FDL 1.2.
407
408 30. New `configure' option --disable-lint at compile time disables lint
409     checking.  With GCC dead-code-elimination, cuts almost 200K off the
410     executable size on GNU/Linux x86.  Presumably speeds up runtime.
411
412     Using this will cause some of the tests in the test suite to fail.
413     This option may be removed at a later date.
414
415 31. Various minor cleanups, see the ChangeLog for details.
416
417 Changes from 3.1.0 to 3.1.1
418 ---------------------------
419
420 1. Six new translations.
421
422 2. Having more than 4 different values for OFMT and/or CONVFMT now works.
423
424 3. The handling of dynamic regexes is now more more sane, esp. w.r.t.
425    the profiling code.  The profiling code has been fixed in several
426    places.
427
428 4. The return value of index("", "") is now 1.
429
430 5. Gawk should no longer close fd 0 in child processes.
431
432 6. Fixed test for strtod semantics and regenerated configure.
433
434 7. Gawk can now be built with byacc; an accidental bison dependency was
435    removed.
436
437 8. `yyerror' will no longer dump core on long source lines.
438
439 9. Gawk now correctly queries getgroups(2) to figure out how many groups
440    the process has.
441
442 10. New configure option to force use of included strftime, e.g. on
443     Solaris systems. See `./configure --help' for the details. Replaced
444     the included strftime.c with the one from textutils.
445
446 11. OS/2 port has been updated.
447
448 12. Multi-byte character support has been added, courtesy of IBM Japan.
449
450 13. The `for (iggy in foo) delete foo[iggy]' -> `delete foo' optimisation
451     now works.
452
453 14. Upgraded to gettext 0.11.2 and automake 1.5.
454
455 15. Full gettext compatibility (new dcngettext function).
456
457 16. The O'Reilly copyedits and indexing changes for the documentation have
458     been folded into the texinfo version of the manuals.
459
460 17. A humongously long value for the AWKPATH environment variable will no
461     longer dump core.
462
463 18. Configuration / Installation issues have been straightened out in
464     Makefile.am.
465
466 Changes from 3.0.6 to 3.1.0
467 ---------------------------
468
469 1. A new PROCINFO array provides info about the process. The non-I/O /dev/xxx
470    files are now obsolete, and their use always generates a warning.
471
472 2. A new `mktime' builtin function was added for creating time stamps. The
473    `mktime' function written in awk was removed from the user's guide.
474
475 3. New `--gen-po' option creates GNU gettext .po files for strings marked
476    with a leading underscore.
477
478 4. Gawk now completely interprets special file names internally, ignoring the
479    existence of real /dev/stdin, /dev/stdout files, etc.
480
481 5. The mmap code was removed. It was a worthwhile experiment that just
482    didn't work out.
483
484 6. The BINMODE variable is new; on non-UNIX systems it affects how gawk
485    opens files for text vs. binary.
486
487 7. The atari port is now unsupported.
488
489 8. Gawk no longer supports `next file' as two words.
490
491 9. On systems that support it, gawk now sets the `close on exec' flag on all
492    files and pipes it opens. This makes sure that child processes run via
493    `system' or pipes have plenty of file descriptors available.
494
495 10. New ports: Tandem and BeOS.  The Tandem port is unsupported.
496
497 11. If `--posix' is in effect, newlines are not allowed after ?:.
498
499 12. Weird OFMT/CONVFMT formats no longer cause fatal errors.
500
501 13. Diagnostics about array parameters now include the parameter's name,
502     not just its number.
503
504 14. configure should now automatically add -D_SYSV3 for ISC Unix.
505     (This seems to have made it into the gawk 3.0.x line long ago.)
506
507 15. It is now possible to open a two-way pipe via the `|&' operator.
508     See the discussion in the manual about putting `sort' into such a pipeline,
509     though.  (NOTE!  This is borrowed from ksh: it is not the same as
510     the same operator in csh!)
511
512 16. The `close' function now takes an optional second string argument
513     that allows closing one or the other end of the two-way pipe to
514     a co-process.  This is needed to use `sort' in a co-process, see
515     the doc.
516
517 17. If TCP/IP is available, special file names beginning with `/inet'
518     can be used with `|&' for IPC. Thanks to Juergen Kahrs for the initial
519     code.
520
521 18. With `--enable-portals' on the configure command line, gawk will also
522     treat file names that start with `/p/' as a 4.4 BSD type portal file,
523     i.e., a two-way pipe for `|&'.
524
525 19. Unrecognized escapes, such as "\q" now always generate a warning.
526
527 20. The LINT variable is new; it provides dynamic control over the --lint
528     option.
529
530 21. Lint warnings can be made fatal by using --lint=fatal or `LINT = "fatal"'.
531     Use this if you're really serious about portable code.
532
533 22. Due to an enhanced sed script, there is no longer any need to worry
534     about finding or using alloca.  alloca.c is thus now gone.
535
536 23. A number of lint warnings have been added.  Most notably, gawk will
537     detect if a variable is used before assigned to.  Warnings for
538     when a string that isn't a number gets converted to a number are
539     in the code but disabled; they seem to be too picky in practice.
540
541     Also, gawk will now warn about function parameter names that shadow
542     global variable names.
543
544 24. It is now possible to dynamically add builtin functions on systems
545     that support dlopen. This facility is not (yet) as portable or well
546     integrated as it might be.  *** WARNING *** THIS FEATURE WILL EVOLVE!
547
548 25. There are *many* new tests in the test suite.
549
550 26. Profiling has been added!  A separate version of gawk, named pgawk, is
551     built and generates a run-time execution profile.  The --profile option
552     can be used to change the default output file.   In regular gawk, this
553     option pretty-prints the parse tree.
554
555 27. Gawk has been internationalized, using GNU gettext.  Translations for
556     future distributions are most welcome.  Simultaneously, gawk was switched
557     over to using automake.  You need Automake 1.4a (from the CVS archive)
558     if you want to muck with the Makefile.am files.
559
560 28. New `asort' function for sorting arrays.  See the doc for details.
561
562 29. The match function takes an optional array third argument to hold
563     the text matched by parenthesized sub-expressions.
564
565 30. The bit op functions and octal and hex source code constants are on by
566     default, no longer a configure-time option.  Recognition of non-decimal
567     data is now enabled at runtime with --non-decimal-data command line option.
568
569 31. Internationalization features available at the awk level: new TEXTDOMAIN
570     variable and `bindtextdomain' and `dcgettext' functions. printf formats
571     may contain the "%2$3.5d" kind of notation for use in translations.  See
572     the texinfo manual for details.
573
574 32. The return value from `close' has been rationalized.  Most notably,
575     closing something that wasn't open returns -1 but remains non-fatal.
576
577 33. The array effeciency change from 3.0.5 was reverted; the semantics were
578     not right.  Additionally, index values of previously stored elements
579     can no longer change dynamically.
580
581 34. The new option --dump-variables dumps a list of all global variables and
582     their final types and values to a file you give, or to `awkvars.out'.
583
584 35. Gawk now uses a recent version of random.c courtesy of the FreeBSD
585     project.
586
587 36. The gawk source code now uses ANSI C function definitions (new style),
588     with ansi2knr to translate code for old compilers.
589
590 37. `for (iggy in foo)' loops should be more robust now in the face of
591     adding/deleting elements in the middle; they loop over just the elements
592     that are present in the array when the loop starts.
593
594 Changes from 3.0.5 to 3.0.6
595 ---------------------------
596
597 This is a bug fix release only, pending further development on 3.1.0.
598
599 Bugs fixed and changes made:
600
601 1. Subscripting an array with a variable that is just a number no
602    longer magically converts the variable into a string.
603
604 2. Similarly, running a `for (iggy in foo)' loop where `foo' is a
605    function parameter now works correctly.
606
607 3. Similarly, `i = ""; v[i] = a; if (i in v) ...' now works again.
608
609 4. Gawk now special cases `for (iggy in foo) delete foo[iggy]' and
610    treats it as the moral equivalent of `delete foo'.  This should be
611    a major efficiency win when portably deleting large arrays.
612
613 5. VMS port brought up to date.
614
615 Changes from 3.0.4 to 3.0.5
616 ---------------------------
617
618 This is a bug fix release only, pending further development on 3.1.0.
619
620 Bugs Fixed:
621
622  1. `function foo(foo)' is now a fatal error.
623
624  2. Array indexing is now much more efficient: where possible, only one
625     copy of an index string is kept, even if used in multiple arrays.
626
627  3. Support was added for MacOS X and an `install-strip' target.
628
629  4. [s]printf formatting for `0' flag and floating point formats now
630     works correctly.
631
632  5. HP-UX large file support with GCC 2.95.1 now works.
633
634  6. Arguments that contain `=' but that aren't syntactically valid are
635     now treated as filenames, instead of as fatal errors.
636
637  7. `-v NF=foo' now works.
638
639  8. Non-ascii alphanumeric characters are now treated as such in the
640     right locales by regex.c.  Similarly, a Latin-1 y-umlaut (decimal
641     value 255) in the program text no longer acts like EOF.
642
643  9. Array indexes are always compared as strings; fixes an obscure bug
644     when user input gets used for the `x in array' test.
645
646 10. The usage message now points users to the documentation for how
647     to report bugs.
648
649 11. `/=' now works after an array.
650
651 12. `b += b += 1' now works correctly.
652
653 13. IGNORECASE changing with calls `match' now works better. (Fix for
654     semi-obscure bug.)
655
656 14. Multicharacter values for RS now generate a lint warning.
657
658 15. The gawk open file caching is now much more efficient.
659
660 16. Global arrays passed to functions are now managed better.  In particular,
661     test/arynocls.awk won't crash referencing freed memory.
662
663 17. In obscure cases, `getline var' can no longer clobber $0.
664
665 Changes from 3.0.3 to 3.0.4
666 ---------------------------
667
668 This is a bug fix release only, pending further development on 3.1.0.
669
670 Bugs Fixed:
671
672  1. A memory leak when turning a function parameter into an array was
673     fixed.
674
675  2. The non-decimal data option now works correctly.
676
677  3. Using an empty pair of brackets as an array subscript no longer causes
678     a core dump during parsing.  In general, syntax errors should not
679     cause core dumps any more.
680  
681  4. Standard input is no longer closed if it provides program source,
682     avoiding strange I/O problems.
683
684  5. Memory corruption during printing with `print' has been fixed.
685
686  6. The gsub function now correctly counts the number of matches.
687
688  7. A typo in doc/Makefile.in has been fixed, making installation work.
689
690  8. Calling `next' or `nextfile' from a BEGIN or END rule is now fatal.
691
692  9. Subtle problems in rebuilding $0 when fields were changed have been
693     fixed.
694
695 10. `FS = FS' now correctly turns off the use of FIELDWIDTHS.
696
697 11. Gawk now parses fields correctly when FS is a single character.
698
699 12. It is now possible for RS to be the NUL character ("\0").
700
701 13. Weird problems with number conversions on MIPS and other systems
702     have been fixed.
703
704 14. When parsing using FIELDWIDTHS is in effect, `split' with no third
705     argument will still use the value of FS.
706
707 15. Large File Support for Solaris, HP-UX, AIX, and IRIX is now enabled at
708     compile time, thanks to Paul Eggert.
709
710 16. Attempting to use the name of a function as a variable or array
711     from within the function is now caught as a fatal error, instead
712     of as a core dump.
713
714 17. A bug in parsing hex escapes was fixed.
715
716 18. A weird bug with concatenation where one expression has side effects
717     that changes another was fixed.
718
719 19. printf/sprintf now behave much better for uses of the '0' and '#' flags
720     and with precisions and field widths.
721
722 20. Further strangenesses with concatenation and multiple accesses of some
723     of the special variables was fixed.
724
725 21. The Atari port is marked as no longer supported.
726
727 22. Build problems on HP-UX have been fixed.
728
729 23. Minor fixes and additional explanations added to the documentation.
730
731 24. For RS = "", even a single leading newline is now correctly stripped.
732
733 25. Obscure parsing problems for regex constants like /=.../ fixed, so
734     that a regex constant is recognized, and not the /= operator.
735
736 26. Fixed a bug when closing a redirection that matched the current
737     or last FILENAME.
738
739 27. Build problems on AIX fixed.
740
741 Changes from 3.0.2 to 3.0.3
742 ---------------------------
743
744 The horrendous per-record memory leak introduced in 3.0.1 is gone, finally.
745
746 The `amiga' directory is now gone; Amiga support is now entirely handled
747 by the POSIX support.
748
749 Windows32 support has been added in the `pc' directory. See `README_d/README.pc'
750 for more info.
751
752 The mmap changes are disabled in io.c, and will be removed entirely
753 in the next big release.  They were an interesting experiment that just
754 really didn't work in practice.
755
756 A minor memory leak that occurred when using `next' from within a
757 function has also been fixed.
758
759 Problems with I/O from sub-processes via a pipe are now gone.
760
761 Using "/dev/pid" and the other special /dev files no longer causes a core dump.
762
763 The files regex.h, regex.c, getopt.h, getopt.c, and getopt1.c have been
764 merged with the versions in GNU libc. Thanks to Ulrich Drepper for his help.
765
766 Some new undocumented features have been added. Use the source, Luke!
767 It is not clear yet whether these will ever be fully supported.
768
769 Array performance should be much better for very very large arrays. "Virtual
770 memory required, real memory helpful."
771
772 builtin.c:do_substr rationalized, again.
773
774 The --re-interval option now works as advertised.
775
776 The license text on some of the missing/* files is now generic.
777
778 Lots more new test cases.
779
780 Lots of other small bugs fixed, see the ChangeLog files for details.
781
782 Changes from 3.0.1 to 3.0.2
783 ---------------------------
784
785 Gawk now uses autoconf 2.12.
786
787 strftime now behaves correctly if passed an empty format string or if
788 the string formats to an empty result string.
789
790 Several minor compilation and installation problems have been fixed.
791
792 Minor page break issues in the user's guide have been fixed.
793
794 Lexical errors no longer repeat ad infinitum.
795
796 Changes from 3.0.0 to 3.0.1
797 ---------------------------
798
799 Troff source for a handy-dandy five color reference card is now provided.
800 Thanks to SSC for their macros.
801
802 Gawk now behaves like Unix awk and mawk, in that newline acts as white
803 space for separating fields and for `split', by default.  In posix mode,
804 only space and tab separate fields. The documentation has been updated to
805 reflect this.
806
807 Tons and tons of small bugs fixed and new tests added, see the ChangeLogs.
808
809 Lots fewer compile time warnings from gcc -Wall. Remaining ones aren't
810 worth fixing.
811
812 Gawk now pays some attention to the locale settings.
813
814 Fixes to gsub to catch several corner cases.
815
816 The `print' statement now evaluates all expressions first, and then
817 prints them. This leads to less suprising behaviour if any expression has
818 output side effects.
819
820 Miscellanious improvements in regex.h and regex.c.
821
822 Gawk will now install itself as gawk-M.N.P in $(bindir), and link
823 `gawk' to it. This makes it easy to have multiple versions of gawk
824 simultaneously. It will also now install itself as `awk' in $(bindir)
825 if there is no `awk' there. This is in addition to installing itself as
826 `gawk'. This change benefits the Hurd, and possibly other systems.  One
827 day, gawk will drop the `g', but not yet.
828
829 `--posix' turns on interval expressions. Gawk now matches its documentation.
830
831 `close(FILENAME)' now does something meaningful.
832
833 Field management code in field.c majorly overhauled, several times.
834
835 The gensub code has been fixed, several bugs are now gone.
836
837 Gawk will use mmap for data file input if it is available.
838
839 The printf/sprintf code has been improved.
840
841 Minor issues in Makefile setup worked on and improved.
842
843 builtin.c:do_substr rationalized.
844
845 Regex matching fixed so that /+[0-9]/ now matches the leading +.
846
847 For building on vms, the default compiler is now DEC C rather than VAX C.
848
849 Changes from 2.15.6 to 3.0.0
850 ----------------------------
851
852 Fixed spelling of `Programming' in the copyright notice in all the files.
853
854 New --re-interval option to turn on interval expressions. They're off
855 by default, except for --posix, to avoid breaking old programs.
856
857 Passing regexp constants as parameters to user defined functions now
858 generates a lint warning.
859
860 Several obscure regexp bugs fixed; alas, a small number remain.
861
862 The manual has been thoroughly revised. It's now almost 50% bigger than
863 it used to be.
864
865 The `+' modifier in printf is now reset correctly for each item.
866
867 The do_unix variable is now named do_traditional.
868
869 Handling of \ in sub and gsub rationalized (somewhat, see the manual for
870 the gory [and I do mean gory] details).
871
872 IGNORECASE now uses ISO 8859-1 Latin-1 instead of straight ASCII. See the
873 source for how to revert to pure ASCII.
874
875 --lint will now warn if an assignment occurs in a conditional context.
876 This may become obnoxious enough to need turning off in the future, but
877 "it seemed like a good idea at the time."
878
879 %hf and %Lf are now diagnosed as invalid in printf, just like %lf.
880
881 Gawk no longer incorrectly closes stdin in child processes used in
882 input pipelines.
883
884 For integer formats, gawk now correctly treats the precision as the
885 number of digits to print, not the number of characters.
886
887 gawk is now much better at catching the use of scalar values when
888 arrays are needed, both in function calls and the `x in y' constructs.
889
890 New gensub function added. See the manual.
891
892 If do_tradtional is true, octal and hex escapes in regexp constants are
893 treated literally.  This matches historical behavior.
894
895 yylex/nextc fixed so that even null characters can be included
896 in the source code.
897
898 do_format now handles cases where a format specifier doesn't end in
899 a control letter. --lint reports an error.
900
901 strftime() now uses a default time format equivalent to that of the
902 Unix date command, thus it can be called with no arguments.
903
904 Gawk now catches functions that are used but not defined at parse time
905 instead of at run time. (This is a lint error, making it fatal could break
906 old code.)
907
908 Arrays that max out are now handled correctly.
909
910 Integer formats outside the range of an unsigned long are now detected
911 correctly using the SunOS 4.x cc compiler.
912
913 --traditional option added as new preferred name for --compat, in keeping
914 with GCC.
915
916 --lint-old option added, so that warnings about things not in old awk
917 are only given if explicitly asked for.
918
919 `next file' has changed to one word, `nextfile'. `next file' is still
920 accepted but generates a lint warning. `next file' will go away eventually.
921
922 Gawk with --lint will now notice empty source files and empty data files.
923
924 Amiga support using the Unix emulation added. Thanks to fnf@ninemoons.com.
925
926 test/Makefile is now "parallel-make safe".
927
928 Gawk now uses POSIX regexps + GNU regex ops by default. --posix goes to
929 pure posix regexps, and --compat goes to traditional Unix regexps. However,
930 interval expressions, even though specified by POSIX, are turned off by
931 default, to avoid breaking old code.
932
933 IGNORECASE now applies to string comparison as well as regexp operations.
934
935 The AT&T Bell Labs Research awk fflush builtin function is now supported.
936 fflush is extended to flush stdout if no arg and everything if given
937 the null string as an argument.
938
939 If RS is more than one character, it is treated as a regular expression
940 and records are delimited accordingly.  The variable RT is set to the record
941 terminator string. This is disabled in compatibility mode.
942
943 If FS is set to the null string (or the third arg. of split() is the null
944 string), splitting is done at every single character. This is disabled in
945 compatibility mode.
946
947 Gawk now uses the Autoconf generated configure script, doing away with all
948 the config/* files and the machinery that went with them.  The Makefile.in
949 has also changed accordingly, complete with all the standard GNU Makefile
950 targets.  (Non-unix systems may still have their own config.h and Makefile;
951 see the appropriate README_d/README.* and/or subdirectory.)
952
953 The source code has been cleaned up somewhat and the formatting improved.
954
955 Changes from 2.15.5 to 2.15.6
956 -----------------------------
957
958 Copyrights updated on all changed files.
959
960 test directory enhanced with four new tests.
961
962 Gawk now generates a warning for \x without following hexadecimal digits.
963 In this case, it returns 'x', not \0.
964
965 Several fixes in main.c related to variable initialization:
966         CONVFMT has a default value
967         resetup is called before initializing variables
968         the varinit table fixed up a bit (see the comments)
969
970 gawk.1 updated with new BUG REPORTS section.
971
972 A plain `print' inside a BEGIN or END now generates a lint warning (awk.y).
973
974 Small fix in iop.c:get_a_record to avoid reading uninitialized memory.
975
976 awk.y:yylex now does a better job of handling things if the source file
977 does not end in a newline. Probably there is more work to be done.
978
979 Memory leaks fixed in awk.y, particularly in cases of duplicate function
980 parameters. Also, calling a function doesn't leak memory during parsing.
981
982 Empty function bodies are now allowed (awk.y).
983
984 Gawk now detects duplicate parameter names in functions (awk.y).
985
986 New function `error' in msg.c added for use from awk.y.
987
988 eval.c:r_get_lhs now checks if its argument is a parameter on the stack,
989 and pulls down the real variable. This catches more 'using an array as
990 a scalar' kinds of errors.
991
992 main.c recovers C alloca space after parsing, this is important for
993 bison-based parsers. re.c recovers C alloca space after doing an research.
994 [Changes from Pat Rankin]
995
996 builtin.c now declares the random() related functions based on
997 RANDOM_MISSING from config.h. [Suggested by Pat Rankin]
998
999 awk.h now handles alloca correctly for HP-UX. [Kaveh Ghazi]
1000
1001 regex.h and config/cray60 updated for Unicos 8.0. [Hal Peterson]
1002
1003 Fixed re.c and dfa.c so that gawk no longer leaks memory when using
1004 lots of dynamic regexps.
1005
1006 Removed dependency on signed chars from `idx' variable in awk.h. Gawk
1007 now passes its test suite if compiled with `gcc -fno-signed-char'.
1008
1009 Fixed warning on close in io.c to go under lint control. Too many people
1010 have complained about the spurious message, particularly when closing a
1011 child pipeline early.
1012
1013 Gawk now correctly handles RS = "" when input is from a terminal
1014 (iop.c:get_a_record).
1015
1016 Config file added for GNU.
1017
1018 gawk 'BEGIN { exit 1 } ; END { exit }' now exits 1, as it should
1019 (eval.c:interpret).
1020
1021 sub and gsub now follow posix, \ escapes both & and \. Each \ must
1022 be doubled initially in the program to get it into the string.
1023 Thanks to Mike Brennan for pointing this out (builtin.c:sub_common).
1024
1025 If FS is "", gawk behaves like mawk and nawk, making the whole record be $1.
1026 Yet Another Dark Corner. Sigh (field.c:def_parse_field).
1027
1028 Gawk now correctly recomputes string values for numbers if CONVFMT has
1029 changed (awk.h:force_string, node.c:r_force_string).
1030
1031 A regexp of the form `/* this looks like a comment but is not */' will
1032 now generate a warning from --lint (awk.y).
1033
1034 Gawk will no longer core dump if given an empty input file (awk.y:get_src_buf,
1035 iop.c:optimal_bufsize).
1036
1037 A printf format of the form %lf is handled correctly. The `l' generates
1038 a lint warning (builtin.c:format_tree) [Thanks to Mark Moraes].
1039
1040 Lynxos config file added.
1041
1042 `continue' outside a loop treated as `next' only in compatibility mode,
1043 instead of by default; recent att nawk chokes on this now.  `break'
1044 outside a loop now treated as `next' in compatibility mode (eval.c).
1045
1046 Bug fix in string concatenation, an arbitrary number of expressions
1047 are allowed (eval.c).
1048
1049 $1 += $2 now works correctly (eval.c).
1050
1051 Changing IGNORECASE no longer resets field-splitting to FS if it was
1052 using FIELDWIDTHS (eval.c, field.c).
1053
1054 Major enhancement: $0 and NF for last record read are now preserved
1055 into the END rule (io.c).
1056
1057 Regexp fixes:
1058         /./ now matches a newline (regex.h)
1059         ^ and $ match beginning and end of string only, not any embedded
1060                 newlines (re.c)
1061         regex.c should compile and work ok on 64-bit mips/sgi machines
1062
1063 Changes from 2.15.4 to 2.15.5
1064 -----------------------------
1065
1066 FUTURES file updated and re-arranged some with more rational schedule.
1067
1068 Many prototypes handled better for ANSI C in protos.h.
1069
1070 getopt.c updated somewhat.
1071
1072 test/Makefile now removes junk directory, `bardargtest' renamed `badargs.'
1073
1074 Bug fix in iop.c for RS = "". Eat trailing newlines off of record separator.
1075
1076 Bug fix in Makefile.bsd44, use leading tab in actions.
1077
1078 Fix in field.c:set_FS for FS == "\\" and IGNORECASE != 0.
1079
1080 Config files updated or added:
1081         cray60, DEC OSF/1 2.0, Utek, sgi405, next21, next30, atari/config.h,
1082         sco.
1083
1084 Fix in io.c for ENFILE as well as EMFILE, update decl of groupset to
1085 include OSF/1.
1086
1087 Rationalized printing as integers if numbers are outside the range of a long.
1088 Changes to node.c:force_string and builtin.c.
1089
1090 Made internal NF, NR, and FNR variables longs instead of ints.
1091
1092 Add LIMITS_H_MISSING stuff to config.in and awk.h, and default defs for
1093 INT_MAX and LONG_MAX, if no limits.h file. Add a standard decl of
1094 the time() function for __STDC__. From ghazi@noc.rutgers.edu.
1095
1096 Fix tree_eval in awk.h and r_tree_eval in eval.c to deal better with
1097 function parameters, particularly ones that are arrays.
1098
1099 Fix eval.c to print out array names of arrays used in scalar contexts.
1100
1101 Fix eval.c in interpret to zero out source and sourceline initially. This
1102 does a better job of providing source file and line number information.
1103
1104 Fix to re_parse_field in field.c to not use isspace when RS = "", but rather
1105 to explicitly look for blank and tab.
1106
1107 Fix to sc_parse_field in field.c to catch the case of the FS character at the
1108 end of a record.
1109
1110 Lots of miscellanious bug fixes for memory leaks, courtesy Mark Moraes,
1111 also fixes for arrays.
1112
1113 io.c fixed to warn about lack of explicit closes if --lint.
1114
1115 Updated missing/strftime.c to match posted strftime 6.2.
1116
1117 Bug fix in builtin.c, in case of non-match in sub_common.
1118
1119 Updated constant used for division in builtin.c:do_rand for DEC Alpha
1120 and CRAY Y-MP.
1121
1122 POSIXLY_CORRECT in the environment turns on --posix (fixed in main.c).
1123
1124 Updated srandom prototype and calls in builtin.c.
1125
1126 Fix awk.y to enforce posix semantics of unary +: result is numeric.
1127
1128 Fix array.c to not rearrange the hash chain upon finding an index in
1129 the array.  This messed things up in cases like:
1130         for (index1 in array) {
1131                 blah
1132                 if (index2 in array)    # blew away the for
1133                         stuff
1134         }
1135
1136 Fixed spelling errors in the man page.
1137
1138 Fixes in awk.y so that
1139         gawk '' /path/to/file
1140 will work without core dumping or finding parse errors.
1141
1142 Fix main.c so that --lint will fuss about an empty program.
1143 Yet another fix for argument parsing in the case of unrecognized options.
1144
1145 Bug fix in dfa.c to not attempt to free null pointers.
1146
1147 Bug fix in builtin.c to only use DEFAULT_G_PRECISION for %g or %G.
1148
1149 Bug fix in field.c to achieve call by value semantics for split.
1150
1151 Changes from 2.15.3 to 2.15.4
1152 -----------------------------
1153
1154 Lots of lint fixes, and do_sprintf made mostly ANSI C compatible.
1155
1156 Man page updated and edited.
1157
1158 Copyrights updated.
1159
1160 Arrays now grow dynamically, initially scaling up by an order of magnitude
1161   and then doubling, up to ~ 64K.  This should keep gawk's performance
1162   graceful under heavy load.
1163
1164 New `delete array' feature added.  Only documented in the man page.
1165
1166 Switched to dfa and regex suites from grep-2.0. These offer the ability to
1167   move to POSIX regexps in the next release.
1168
1169 Disabled GNU regex ops.
1170
1171 Research awk -m option now recognized. It does nothing in gawk, since gawk
1172   has no static limits.  Only documented in the man page.
1173
1174 New bionic (faster, better, stronger than before) hashing function.
1175
1176 Bug fix in argument handling. `gawk -X' now notices there was no program.
1177   Additional bug fixes to make --compat and --lint work again.
1178
1179 Many changes for systems where sizeof(int) != sizeof(void *).
1180
1181 Add explicit alloca(0) in io.c to recover space from C alloca.
1182
1183 Fixed file descriptor leak in io.c.
1184
1185 The --version option now follows the GNU coding standards and exits.
1186
1187 Fixed several prototypes in protos.h.
1188
1189 Several tests updated. On Solaris, warn that the out? tests will fail.
1190
1191 Configuration files for SunOS with cc and Solaris 2.x added.
1192
1193 Improved error messages in awk.y on gawk extensions if do_unix or do_compat.
1194
1195 INSTALL file added.
1196
1197 Fixed Atari Makefile and several VMS specific changes.
1198
1199 Better conversion of numbers to strings on systems with broken sprintfs.
1200
1201 Changes from 2.15.2 to 2.15.3
1202 -----------------------------
1203
1204 Increased HASHSIZE to a decent number, 127 was way too small.
1205
1206 FILENAME is now the null string in a BEGIN rule.
1207
1208 Argument processing fixed for invalid options and missing arguments.
1209
1210 This version will build on VMS.  This included a fix to close all files
1211    and pipes opened with redirections before closing stdout and stderr.
1212
1213 More getpgrp() defines.
1214
1215 Changes for BSD44:  <sys/param.h> in io.c and Makefile.bsd44.
1216
1217 All directories in the distribution are now writable.
1218
1219 Separated LDFLAGS and CFLAGS in Makefile.  CFLAGS can now be overridden by
1220   user.
1221
1222 Make dist now builds compressed archives ending in .gz and runs doschk.
1223
1224 Amiga port.
1225
1226 New getopt.c fixes Alpha OSF/1 problem.
1227
1228 Make clean now removes possible test output.
1229
1230 Improved algorithm for multiple adjacent string concatenations leads to
1231   performance improvements.
1232
1233 Fix nasty bug whereby command-line assignments, both with -v and at run time,
1234    could create variables with syntactically illegal names.
1235
1236 Fix obscure bug in printf with %0 flag and filling.
1237
1238 Add a lint check for substr if provided length exceeds remaining characters
1239    in string.
1240
1241 Update atari support.
1242
1243 PC support enhanced to include support for both DOS and OS/2. (Lots more
1244    #ifdefs. Sigh.)
1245
1246 Config files for Hitachi Unix and OSF/1, courtesy of Yoko Morishita
1247    (morisita@sra.co.jp)
1248
1249 Changes from 2.15.1 to 2.15.2
1250 -----------------------------
1251
1252 Additions to the FUTURES file.
1253
1254 Document undefined order of output when using both standard output
1255   and /dev/stdout or any of the /dev output files that gawk emulates in
1256   the absence of OS support.
1257
1258 Clean up the distribution generation in Makefile.in:  the info files are
1259   now included, the distributed files are marked read-only and patched
1260   distributions are now unpacked in a directory named with the patch level.
1261
1262 Changes from 2.15 to 2.15.1
1263 ---------------------------
1264
1265 Close stdout and stderr before all redirections on program exit.  This allows
1266   detection of write errors and also fixes the messages test on Solaris 2.x.
1267
1268 Removed YYMAXDEPTH define in awk.y which was limiting the parser stack depth.
1269
1270 Changes to config/bsd44, Makefile.bsd44 and configure to bring it into line
1271   with the BSD4.4 release.
1272
1273 Changed Makefile to use prefix, exec_prefix, bindir etc.
1274
1275 make install now installs info files.
1276
1277 make install now sets permissions on installed files.
1278
1279 Make targets added:  uninstall, distclean, mostlyclean and realclean.
1280
1281 Added config.h to cleaner and clobber make targets.
1282
1283 Changes to config/{hpux8x,sysv3,sysv4,ultrix41} to deal with alloca().
1284
1285 Change to getopt.h for portability.
1286
1287 Added more special cases to the getpgrp() call.
1288
1289 Added README.ibmrt-aos and config/ibmrt-aos.
1290
1291 Changes from 2.14 to 2.15
1292 ---------------------------
1293
1294 Command-line source can now be mixed with library functions.
1295
1296 ARGIND variable tracks index in ARGV of FILENAME.
1297
1298 GNU style long options in addition to short options.
1299
1300 Plan 9 style special files interpreted by gawk:
1301         /dev/pid
1302         /dev/ppid
1303         /dev/pgrpid
1304         /dev/user
1305                 $1 = getuid
1306                 $2 = geteuid
1307                 $3 = getgid
1308                 $4 = getegid
1309                 $5 ... $NF = getgroups if supported
1310
1311 ERRNO variable contains error string if getline or close fails.
1312
1313 Very old options -a and -e have gone away.
1314
1315 Inftest has been removed from the default target in test/Makefile -- the
1316   results were too machine specific and resulted in too many false alarms.
1317
1318 A README.amiga has been added.
1319
1320 The "too many arguments supplied for format string" warning message is only
1321   in effect under the lint option.
1322
1323 Code improvements in dfa.c.
1324
1325 Fixed all reported bugs:
1326
1327         Writes are checked for failure (such as full filesystem).
1328
1329         Stopped (at least some) runaway error messages.
1330
1331         gsub(/^/, "x") does the right thing for $0 of 0, 1, or more length.
1332
1333         close() on a command being piped to a getline now works properly.
1334
1335         The input record will no longer be freed upon an explicit close()
1336         of the input file.
1337
1338         A NUL character in FS now works.
1339
1340         In a substitute, \\& now means a literal backslash followed by what
1341         was matched.
1342
1343         Integer overflow of substring length in substr() is caught.
1344
1345         An input record without a newline termination is handled properly.
1346
1347         In io.c, check is against only EMFILE so that system file table
1348           is not filled.
1349
1350         Renamed all files with names longer than 14 characters.
1351
1352         Escaped characters in regular expressions were being lost when 
1353           IGNORECASE was used.
1354
1355         Long source lines were not being handled properly.
1356
1357         Sourcefiles that ended in a tab but no newline were bombing.
1358
1359         Patterns that could match zero characters in split() were not working
1360           properly.
1361
1362         The parsedebug option was not working.
1363
1364         The grammar was being a bit too lenient, allowing some very dubious
1365           programs to pass.
1366
1367         Compilation with DEBUG defined now works.
1368
1369         A variable read in with getline was not being treated as a potential
1370           number.
1371
1372         Array subscripts were not always of string type.
1373
1374
1375 Changes from 2.13.2 to 2.14
1376 ---------------------------
1377
1378 Updated manual!
1379
1380 Added "next file" to skip efficiently to the next input file.
1381
1382 Fixed potential of overflowing buffer in do_sprintf().
1383
1384 Plugged small memory leak in sub_common().
1385
1386 EOF on a redirect is now "sticky" -- it can only be cleared by close()ing
1387   the pipe or file.
1388
1389 Now works if used via a #! /bin/gawk line at the top of an executable file
1390   when that line ends with whitespace.
1391
1392 Added some checks to the grammar to catch redefinition of builtin functions.
1393   This could eventually be the basis for an extension to allow redefining
1394   functions, but in the mean time it's a good error catching facility.
1395
1396 Negative integer exponents now work.
1397
1398 Modified do_system() to make sure it had a non-null string to be passed
1399   to system(3). Thus, system("") will flush any pending output but not go
1400   through the overhead of forking an un-needed shell.
1401
1402 A fix to floating point comparisons so that NaNs compare right on IEEE systems.
1403
1404 Added code to make sure we're not opening directories for reading and such.
1405
1406 Added code to do better diagnoses of weird or null file names.
1407
1408 Allow continue outside of a loop, unless in strict posix mode.  Lint option
1409   will issue warning.
1410
1411 New missing/strftime.c.  There has been one change that affects gawk.  Posix
1412   now defines a %V conversion so the vms conversion has been changed to %v.
1413   If this version is used with gawk -Wlint and they use %V in a call to
1414   strftime, they'll get a warning.
1415
1416 Error messages now conform to GNU standard (I hope).
1417
1418 Changed comparisons to conform to the  description found in the file POSIX.
1419   This is inconsistent with the current POSIX draft, but that is broken.
1420   Hopefully the final POSIX standard will conform to this version.
1421   (Alas, this will have to wait for 1003.2b, which will be a revision to
1422   the 1003.2 standard.  That standard has been frozen with the broken
1423   comparison rules.)
1424
1425 The length of a string was a short and now is a size_t.
1426
1427 Updated VMS help.
1428
1429 Added quite a few new tests to the test suite and deleted many due to lack of
1430   written releases.  Test output is only removed if it is identical to the
1431   "good" output.
1432
1433 Fixed a couple of bugs for reference to $0 when $0 is "" -- particularly in
1434   a BEGIN block.
1435
1436 Fixed premature freeing in construct "$0 = $0".
1437
1438 Removed the call to wait_any() in gawk_popen(), since on at least some systems,
1439   if gawk's input was from a pipe, the predecessor process in the pipe was a
1440   child of gawk and this caused a deadlock.
1441
1442 Regexp can (once again) match a newline, if given explicitly.
1443
1444 nextopen() makes sure file name is null terminated.
1445
1446 Fixed VMS pipe simulation.  Improved VMS I/O performance.
1447
1448 Catch . used in variable names.
1449
1450 Fixed bug in getline without redirect from a file -- it was quitting after the
1451   first EOF, rather than trying the next file.
1452
1453 Fixed bug in treatment of backslash at the end of a string -- it was bombing
1454   rather than doing something sensible.  It is not clear what this should mean,
1455   but for now I issue a warning and take it as a literal backslash.
1456
1457 Moved setting of regexp syntax to before the option parsing in main(), to
1458   handle things like -v FS='[.,;]'
1459
1460 Fixed bug when NF is set by user -- fields_arr must be expanded if necessary
1461   and "new" fields must be initialized.
1462
1463 Fixed several bugs in [g]sub() for no match found or the match is 0-length.
1464
1465 Fixed bug where in gsub() a pattern anchored at the beginning would still
1466   substitute throughout the string.
1467
1468 make test does not assume that . is in PATH.
1469
1470 Fixed bug when a field beyond the end of the record was requested after
1471   $0 was altered (directly or indirectly).
1472
1473 Fixed bug for assignment to field beyond end of record -- the assigned value
1474   was not found on subsequent reference to that field.
1475
1476 Fixed bug for FS a regexp and it matches at the end of a record.
1477
1478 Fixed memory leak for an array local to a function.
1479
1480 Fixed hanging of pipe redirection to getline
1481
1482 Fixed coredump on access to $0 inside BEGIN block.
1483
1484 Fixed treatment of RS = "".  It now parses the fields correctly and strips
1485   leading whitespace from a record if FS is a space.
1486
1487 Fixed faking of /dev/stdin.
1488
1489 Fixed problem with x += x
1490
1491 Use of scalar as array and vice versa is now detected.
1492
1493 IGNORECASE now obeyed for FS (even if FS is a single alphabetic character).
1494
1495 Switch to GPL version 2.
1496
1497 Renamed awk.tab.c to awktab.c for MSDOS and VMS tar programs.
1498
1499 Renamed this file (CHANGES) to NEWS.
1500
1501 Use fmod() instead of modf() and provide FMOD_MISSING #define to undo
1502   this change.
1503
1504 Correct the volatile declarations in eval.c.
1505
1506 Avoid errant closing of the file descriptors for stdin, stdout and stderr.
1507
1508 Be more flexible about where semi-colons can occur in programs.
1509
1510 Check for write errors on all output, not just on close().
1511
1512 Eliminate the need for missing/{strtol.c,vprintf.c}.
1513
1514 Use GNU getopt and eliminate missing/getopt.c.
1515
1516 More "lint" checking.
1517
1518
1519 Changes from 2.13.1 to 2.13.2
1520 -----------------------------
1521
1522 Toward conformity with GNU standards, configure is a link to mkconf, the latter
1523   to disappear in the next major release.
1524
1525 Update to config/bsd43.
1526
1527 Added config/apollo, config/msc60, config/cray2-50, config/interactive2.2
1528
1529 sgi33.cc added for compilation using cc rather than gcc.
1530
1531 Ultrix41 now propagates to config.h properly -- as part of a general
1532   mechanism in configure for kludges -- #define anything from a config file
1533   just gets tacked onto the end of config.h -- to be used sparingly.
1534
1535 Got rid of an unnecessary and troublesome declaration of vprintf().
1536
1537 Small improvement in locality of error messages.
1538
1539 Try to diagnose use of array as scalar and vice versa -- to be improved in
1540   the future.
1541
1542 Fix for last bug fix for Cray division code--sigh.
1543
1544 More changes to test suite to explicitly use sh.  Also get rid of 
1545   a few generated files.
1546
1547 Fixed off-by-one bug in string concatenation code.
1548
1549 Fix for use of array that is passed in from a previous function parameter.
1550   Addition to test suite for above.
1551
1552 A number of changes associated with changing NF and access to fields
1553   beyond the end of the current record.
1554
1555 Change to missing/memcmp.c to avoid seg. fault on zero length input.
1556
1557 Updates to test suite (including some inadvertently left out of the last patch)
1558   to invoke sh explicitly (rather than rely on #!/bin/sh) and remove some
1559   junk files.  test/chem/good updated to correspond to bug fixes.
1560
1561 Changes from 2.13.0 to 2.13.1
1562 -----------------------------
1563
1564 More configs and PORTS.
1565
1566 Fixed bug wherein a simple division produced an erroneous FPE, caused by
1567   the Cray division workaround -- that code is now #ifdef'd only for
1568   Cray *and* fixed.
1569
1570 Fixed bug in modulus implementation -- it was very close to the above
1571   code, so I noticed it.
1572
1573 Fixed portability problem with limits.h in missing.c
1574
1575 Fixed portability problem with tzname and daylight -- define TZNAME_MISSING
1576   if strftime() is missing and tzname is also.
1577
1578 Better support for Latin-1 character set.
1579
1580 Fixed portability problem in test Makefile.
1581
1582 Updated PROBLEMS file.
1583
1584 =============================== gawk-2.13 released =========================
1585 Changes from 2.12.42 to 2.12.43
1586 -------------------------------
1587
1588 Typo in awk.y
1589
1590 Fixed up strftime.3 and added doc. for %V.
1591
1592 Changes from 2.12.41 to 2.12.42
1593 -------------------------------
1594
1595 Fixed bug in devopen() -- if you had write permission in /dev,
1596   it would just create /dev/stdout etc.!!
1597
1598 Final (?) VMS update.
1599
1600 Make NeXT use GFMT_WORKAROUND
1601
1602 Fixed bug in sub_common() for substitute on zero-length match.  Improved the
1603   code a bit while I was at it.
1604
1605 Fixed grammar so that $i++ parses as ($i)++
1606
1607 Put support/* back in the distribution (didn't I already do this?!)
1608
1609 Changes from 2.12.40 to 2.12.41
1610 -------------------------------
1611
1612 VMS workaround for broken %g format.
1613
1614 Changes from 2.12.39 to 2.12.40
1615 -------------------------------
1616
1617 Minor man page update.
1618
1619 Fixed latent bug in redirect().
1620
1621 Changes from 2.12.38 to 2.12.39
1622 -------------------------------
1623
1624 Updates to test suite -- remove dependence on changing gawk.1 man page.
1625
1626 Changes from 2.12.37 to 2.12.38
1627 -------------------------------
1628
1629 Fixed bug in use of *= without whitespace following.
1630
1631 VMS update.
1632
1633 Updates to man page.
1634
1635 Option handling updates in main.c
1636
1637 test/manyfiles redone and added to bigtest.
1638
1639 Fixed latent (on Sun) bug in handling of save_fs.
1640
1641 Changes from 2.12.36 to 2.12.37
1642 -------------------------------
1643
1644 Update REL in Makefile-dist.  Incorporate test suite into main distribution.
1645
1646 Minor fix in regtest.
1647
1648 Changes from 2.12.35 to 2.12.36
1649 -------------------------------
1650
1651 Release takes on dual personality -- 2.12.36 and 2.13.0 -- any further
1652   patches before public release won't count for 2.13, although they will for
1653   2.12 -- be careful to avoid confusion!  patchlevel.h will be the last thing
1654   to change.
1655
1656 Cray updates to deal with arithmetic problems.
1657
1658 Minor test suite updates.
1659
1660 Fixed latent bug in parser (freeing memory).
1661
1662 Changes from 2.12.34 to 2.12.35
1663 -------------------------------
1664
1665 VMS updates.
1666
1667 Flush stdout at top of err() and stderr at bottom.
1668
1669 Fixed bug in eval_condition() -- it wasn't testing for MAYBE_NUM and
1670   doing the force_number().
1671
1672 Included the missing manyfiles.awk and a new test to catch the above bug which
1673   I am amazed wasn't already caught by the test suite -- it's pretty basic.
1674
1675 Changes from 2.12.33 to 2.12.34
1676 -------------------------------
1677
1678 Atari updates -- including bug fix.
1679
1680 More VMS updates -- also nuke vms/version.com.
1681
1682 Fixed bug in handling of large numbers of redirections -- it was probably never
1683   tested before (blush!).
1684
1685 Minor rearrangement of code in r_force_number().
1686
1687 Made chem and regtest tests a bit more portable (Ultrix again).
1688
1689 Added another test -- manyfiles -- not invoked under any other test -- very Unix
1690   specific.
1691
1692 Rough beginning of LIMITATIONS file -- need my AWK book to complete it.
1693
1694 Changes from 2.12.32 to 2.12.33
1695 -------------------------------
1696
1697 Expunge debug.? from various files.
1698
1699 Remove vestiges of Floor and Ceil kludge.
1700
1701 Special case integer division -- mainly for Cray, but maybe someone else
1702   will benefit.
1703
1704 Workaround for iop_close closing an output pipe descriptor on Cray --
1705   not conditional since I think it may fix a bug on SGI as well and I don't
1706   think it can hurt elsewhere.
1707
1708 Fixed memory leak in assoc_lookup().
1709
1710 Small cleanup in test suite.
1711
1712 Changes from 2.12.31 to 2.12.32
1713 -------------------------------
1714
1715 Nuked debug.c and debugging flag -- there are better ways.
1716
1717 Nuked version.sh and version.c in subdirectories.
1718
1719 Fixed bug in handling of IGNORECASE.
1720
1721 Fixed bug when FIELDWIDTHS was set via -v option.
1722
1723 Fixed (obscure) bug when $0 is assigned a numerical value.
1724
1725 Fixed so that escape sequences in command-line assignments work (as it already
1726   said in the comment).
1727
1728 Added a few cases to test suite.
1729
1730 Moved support/* back into distribution.
1731
1732 VMS updates.
1733
1734 Changes from 2.12.30 to 2.12.31
1735 -------------------------------
1736
1737 Cosmetic manual page changes.
1738
1739 Updated sunos3 config.
1740
1741 Small changes in test suite including renaming files over 14 chars. in length.
1742
1743 Changes from 2.12.29 to 2.12.30
1744 -------------------------------
1745
1746 Bug fix for many string concatenations in a row.
1747
1748 Changes from 2.12.28 to 2.12.29
1749 -------------------------------
1750
1751 Minor cleanup in awk.y
1752
1753 Minor VMS update.
1754  
1755 Minor atari update.
1756
1757 Changes from 2.12.27 to 2.12.28
1758 -------------------------------
1759
1760 Got rid of the debugging goop in eval.c -- there are better ways.
1761
1762 Sequent port.
1763
1764 VMS changes left out of the last patch -- sigh!  config/vms.h renamed
1765   to config/vms-conf.h.
1766
1767 Fixed missing/tzset.c
1768
1769 Removed use of gcvt() and GCVT_MISSING -- turns out it was no faster than
1770   sprintf("%g") and caused all sorts of portability headaches.
1771
1772 Tuned get_field() -- it was unnecessarily parsing the whole record on reference
1773   to $0.
1774
1775 Tuned interpret() a bit in the rule_node loop.
1776
1777 In r_force_number(), worked around bug in Uglix strtod() and got rid of 
1778   ugly do{}while(0) at Michal's urging.
1779
1780 Replaced do_deref() and deref with unref(node) -- much cleaner and a bit faster.
1781
1782 Got rid of assign_number() -- contrary to comment, it was no faster than
1783   just making a new node and freeing the old one.
1784
1785 Replaced make_number() and tmp_number() with macros that call mk_number().
1786
1787 Changed freenode() and newnode() into macros -- the latter is getnode()
1788   which calls more_nodes() as necessary.
1789
1790 Changes from 2.12.26 to 2.12.27
1791 -------------------------------
1792
1793 Completion of Cray 2 port (includes a kludge for floor() and ceil()
1794   that may go or be changed -- I think that it may just be working around
1795   a bug in chem that is being tweaked on the Cray).
1796
1797 More VMS updates.
1798
1799 Moved kludge over yacc's insertion of malloc and realloc declarations
1800   from protos.h to the Makefile.
1801
1802 Added a lisp interpreter in awk to the test suite.  (Invoked under
1803   bigtest.)
1804
1805 Cleanup in r_force_number() -- I had never gotten around to a thorough
1806   profile of the cache code and it turns out to be not worth it.
1807
1808 Performance boost -- do lazy force_number()'ing for fields etc. i.e.
1809   flag them (MAYBE_NUM) and call force_number only as necessary.
1810
1811 Changes from 2.12.25 to 2.12.26
1812 -------------------------------
1813
1814 Rework of regexp stuff so that dynamic regexps have reasonable
1815   performance -- string used for compiled regexp is stored and
1816   compared to new string -- if same, no recompilation is necessary.
1817   Also, very dynamic regexps cause dfa-based searching to be turned
1818   off.
1819
1820 Code in dev_open() is back to returning fileno(std*) rather than
1821   dup()ing it.  This will be documented.  Sorry for the run-around
1822   on this.
1823
1824 Minor atari updates.
1825
1826 Minor vms update.
1827
1828 Missing file from MSDOS port.
1829
1830 Added warning (under lint) if third arg. of [g]sub is a constant and
1831   handle it properly in the code (i.e. return how many matches).
1832
1833 Changes from 2.12.24 to 2.12.25
1834 -------------------------------
1835
1836 MSDOS port.
1837
1838 Non-consequential changes to regexp variables in preparation for
1839   a more serious change to fix a serious performance problem.
1840
1841 Changes from 2.12.23 to 2.12.24
1842 -------------------------------
1843
1844 Fixed bug in output flushing introduced a few patches back.  This caused
1845   serious performance losses.
1846
1847 Changes from 2.12.22 to 2.12.23
1848 -------------------------------
1849
1850 Accidentally left config/cray2-60 out of last patch.
1851
1852 Added some missing dependencies to Makefile.
1853
1854 Cleaned up mkconf a bit; made yacc the default parser (no alloca needed,
1855   right?); added rs6000 hook for signed characters.
1856
1857 Made regex.c with NO_ALLOCA undefined work.
1858
1859 Fixed bug in dfa.c for systems where free(NULL) bombs.
1860
1861 Deleted a few cant_happen()'s that *really* can't hapen.
1862
1863 Changes from 2.12.21 to 2.12.22
1864 -------------------------------
1865
1866 Added to config stuff the ability to choose YACC rather than bison.
1867
1868 Fixed CHAR_UNSIGNED in config.h-dist.
1869
1870 Second arg. of strtod() is char ** rather than const char **. 
1871
1872 stackb is now initially malloc()'ed since it may be realloc()'ed.
1873
1874 VMS updates.
1875
1876 Added SIZE_T_MISSING to config stuff and a default typedef to awk.h.
1877   (Maybe it is not needed on any current systems??)
1878
1879 re_compile_pattern()'s size is now size_t unconditionally.
1880
1881 Changes from 2.12.20 to 2.12.21
1882 -------------------------------
1883
1884 Corrected missing/gcvt.c.
1885
1886 Got rid of use of dup2() and thus DUP_MISSING.
1887
1888 Updated config/sgi33.
1889
1890 Turned on (and fixed) in cmp_nodes() the behaviour that I *hope* will be in
1891   POSIX 1003.2 for relational comparisons.
1892
1893 Small updates to test suite.
1894
1895 Changes from 2.12.19 to 2.12.20
1896 -------------------------------
1897
1898 Sloppy, sloppy, sloppy!!  I didn't even try to compile the last two
1899   patches.  This one fixes goofs in regex.c.
1900
1901 Changes from 2.12.18 to 2.12.19
1902 -------------------------------
1903
1904 Cleanup of last patch.
1905
1906 Changes from 2.12.17 to 2.12.18
1907 -------------------------------
1908
1909 Makefile renamed to Makefile-dist.
1910
1911 Added alloca() configuration to mkconf.  (A bit kludgey.)  Just
1912   add a single line containing ALLOCA_PW, ALLOCA_S or ALLOCA_C
1913   to the appropriate config file to have Makefile-dist edited
1914   accordingly.
1915
1916 Reorganized output flushing to correspond with new semantics of
1917   devopen() on "/dev/std*" etc.
1918
1919 Fixed rest of last goof!!
1920
1921 Save and restore errno in do_pathopen().
1922
1923 Miscellaneous atari updates.
1924
1925 Get rid of the trailing comma in the NODETYPE definition (Cray
1926   compiler won't take it).
1927
1928 Try  to make the use of `const' consistent since Cray compiler is
1929   fussy about that.  See the changes to `basename' and `myname'.
1930
1931 It turns out that, according to section 3.8.3 (Macro Replacement)
1932   of the ANSI Standard:  ``If there are sequences of preprocessing
1933   tokens within the list of arguments that would otherwise act as
1934   preprocessing directives, the behavior is undefined.''  That means
1935   that you cannot count on the behavior of the declaration of
1936   re_compile_pattern in awk.h, and indeed the Cray compiler chokes on it.
1937
1938 Replaced alloca with malloc/realloc/free in regex.c.  It was much simpler
1939   than expected.  (Inside NO_ALLOCA for now -- by default no alloca.)
1940
1941 Added a configuration file, config/cray60, for Unicos-6.0.
1942
1943 Changes from 2.12.16 to 2.12.17
1944 -------------------------------
1945
1946 Ooops.  Goofed signal use in last patch.
1947
1948 Changes from 2.12.15 to 2.12.16
1949 -------------------------------
1950
1951 RENAMED *_dir to just * (e.g. missing_dir).
1952
1953 Numerous VMS changes.
1954
1955 Proper inclusion of atari and vms files.
1956
1957 Added experimental (ifdef'd out) RELAXED_CONTINUATION and DEFAULT_FILETYPE
1958  -- please comment on these!
1959
1960 Moved pathopen() to io.c (sigh).
1961
1962 Put local directory ahead in default AWKPATH.
1963
1964 Added facility in mkconf to echo comments on stdout:  lines beginning
1965   with "#echo " will have the remainder of the line echoed when mkconf is run.
1966   Any lines starting with "#" will otherwise be treated as comments.  The
1967   intent is to be able to say:
1968   "#echo Make sure you uncomment alloca.c in the Makefile"
1969   or the like.
1970
1971 Prototype fix for V.4
1972
1973 Fixed version_string to not print leading @(#).
1974
1975 Fixed FIELDWIDTHS to work with strict (turned out to be easy).
1976
1977 Fixed conf for V.2.
1978
1979 Changed semantics of /dev/fd/n to be like on real /dev/fd.
1980
1981 Several configuration and updates in the makefile.
1982
1983 Updated manpage.
1984
1985 Include tzset.c and system.c from missing_dir that were accidently left out of
1986   the last patch.
1987
1988 Fixed bug in cmdline variable assignment -- arg was getting freed(!) in
1989   call to variable.
1990
1991 Backed out of parse-time constant folding for now, until I can figure out
1992   how to do it right.
1993
1994 Fixed devopen() so that getline <"-" works.
1995
1996 Changes from 2.12.14 to 2.12.15
1997 -------------------------------
1998
1999 Changed config/* to a condensed form that can be used with mkconf to generate
2000   a config.h from config.h-dist -- much easier to maintain.  Please check
2001   carefully against what you had before for a particular system and report
2002   any problems.  vms.h remains separate since the stuff at the bottom
2003   didn't quite fit the mkconf model -- hopefully cleared up later.
2004
2005 Fixed bug in grammar -- didn't allow function definition to be separated from 
2006   other rules by a semi-colon.
2007
2008 VMS fix to #includes in missing.c -- should we just be including awk.h?
2009
2010 Updated README for texinfo.tex version.
2011
2012 Updating of copyright in all .[chy] files.
2013
2014 Added but commented out Michal's fix to strftime.
2015
2016 Added tzset() emulation based on Rick Adams' code.  Added TZSET_MISSING to
2017         config.h-dist.
2018
2019 Added strftime.3 man page for missing_dir
2020
2021 More posix:     func, **, **= don't work in -W posix
2022
2023 More lint:      ^, ^= not in old awk
2024
2025 gawk.1:         removed ref to -DNO_DEV_FD, other minor updating.
2026
2027 Style change:  pushbak becomes pushback() in yylex().
2028
2029 Changes from 2.12.13 to 2.12.14
2030 -------------------------------
2031
2032 Better (?) organization of awk.h -- attempt to keep all system dependencies
2033   near the top and move some of the non-general things out of the config.h
2034   files.
2035
2036 Change to handling of SYSTEM_MISSING.
2037
2038 Small change to ultrix config.
2039
2040 Do "/dev/fd/*" etc. checking at runtime.
2041
2042 First pass at VMS port.
2043
2044 Improvements to error handling (when lexeme spans buffers).
2045
2046 Fixed backslash handling -- why didn't I notice this sooner?
2047
2048 Added programs from book to test suite and new target "bigtest" to Makefile.
2049
2050 Changes from 2.12.12 to 2.12.13
2051 -------------------------------
2052
2053 Recognize OFS and ORS specially so that OFS = 9 works without efficiency hit.
2054   Took advantage of opportunity to tune do_print*() for about 10% win on a
2055   print with 5 args (i.e. small but significant).
2056
2057 Somewhat pervasive changes to reconcile CONVFMT vs. OFMT.
2058
2059 Better initialization of builtin vars.
2060
2061 Make config/* consistent wrt STRTOL_MISSING.
2062
2063 Small portability improvement to alloca.s
2064
2065 Improvements to lint code in awk.y
2066
2067 Replaced strtol() with a better one by Chris Torek.
2068
2069 Changes from 2.12.11 to 2.12.12
2070 -------------------------------
2071
2072 Added PORTS file to record successful ports.
2073
2074 Added #define const to nothing if not STDC and added const to strtod() header.
2075
2076 Added * to printf capabilities and partially implemented ' ' and '+' (has an
2077   effect for %d only, silently ignored for other formats).  I'm afraid that's
2078   as far as I want to go before I look at a complete replacement for
2079   do_sprintf().
2080
2081 Added warning for /regexp/ on LHS of MATCHOP.
2082
2083 Changes from 2.12.10 to 2.12.11
2084 -------------------------------
2085
2086 Small Makefile improvements.
2087
2088 Some remaining nits from the NeXT port.
2089
2090 Got rid of bcopy() define in awk.h -- not needed anymore (??)
2091
2092 Changed private in builtin.c -- it is special on Sequent.
2093
2094 Added subset implementation of strtol() and STRTOL_MISSING.
2095
2096 A little bit of cleanup in debug.c, dfa.c.
2097
2098 Changes from 2.12.9 to 2.12.10
2099 ------------------------------
2100
2101 Redid compatability checking and checking for # of args.
2102
2103 Removed all references to variables[] from outside awk.y, in preparation
2104   for a more abstract interface to the symbol table.
2105
2106 Got rid of a remaining use of bcopy() in regex.c.
2107
2108 Changes from 2.12.8 to 2.12.9
2109 -----------------------------
2110
2111 Portability improvements for atari, next and decstation.
2112
2113 Bug fix in substr() -- wasn't handling 3rd arg. of -1 properly.
2114
2115 Manpage updates.
2116
2117 Moved support from src release to doc release.
2118
2119 Updated FUTURES file.
2120
2121 Added some "lint" warnings.
2122
2123 Changes from 2.12.7 to 2.12.8
2124 -----------------------------
2125
2126 Changed time() to systime().
2127
2128 Changed warning() in snode() to fatal().
2129
2130 strftime() now defaults second arg. to current time.
2131
2132 Changes from 2.12.6 to 2.12.7
2133 -----------------------------
2134
2135 Fixed bug in sub_common() involving inadequate allocation of a buffer.
2136
2137 Added some missing files to the Makefile.
2138
2139 Changes from 2.12.5 to 2.12.6
2140 -----------------------------
2141
2142 Fixed bug wherein non-redirected getline could call iop_close() just
2143   prior to a call from do_input().
2144
2145 Fixed bug in handling of /dev/stdout and /dev/stderr.
2146
2147 Changes from 2.12.4 to 2.12.5
2148 -----------------------------
2149
2150 Updated README and support directory.
2151
2152 Changes from 2.12.3 to 2.12.4
2153 -----------------------------
2154
2155 Updated CHANGES and TODO (should have been done in previous 2 patches).
2156
2157 Changes from 2.12.2 to 2.12.3
2158 -----------------------------
2159
2160 Brought regex.c and alloca.s into line with current FSF versions.
2161
2162 Changes from 2.12.1 to 2.12.2
2163 -----------------------------
2164
2165 Portability improvements; mostly moving system prototypes out of awk.h
2166
2167 Introduction of strftime.
2168
2169 Use of CONVFMT.
2170
2171 Changes from 2.12 to 2.12.1
2172 -----------------------------
2173
2174 Consolidated treatment of command-line assignments (thus correcting the
2175 -v treatment).
2176
2177 Rationalized builtin-variable handling into a table-driven process, thus
2178 simplifying variable() and eliminating spc_var().
2179
2180 Fixed bug in handling of command-line source that ended in a newline.
2181
2182 Simplified install() and lookup().
2183
2184 Did away with double-mallocing of identifiers and now free second and later
2185 instances of a name, after the first gets installed into the symbol table.
2186
2187 Treat IGNORECASE specially, simplifying a lot of code, and allowing
2188 checking against strict conformance only on setting it, rather than on each
2189 pattern match.
2190
2191 Fixed regexp matching when IGNORECASE is non-zero (broken when dfa.c was 
2192 added).
2193
2194 Fixed bug where $0 was not being marked as valid, even after it was rebuilt.
2195 This caused mangling of $0.
2196
2197
2198 Changes from 2.11.1 to 2.12
2199 -----------------------------
2200
2201 Makefile:
2202
2203 Portability improvements in Makefile.
2204 Move configuration stuff into config.h
2205
2206 FSF files:
2207
2208 Synchronized alloca.[cs] and regex.[ch] with FSF.
2209
2210 array.c:
2211
2212 Rationalized hash routines into one with a different algorithm.
2213 delete() now works if the array is a local variable.
2214 Changed interface of assoc_next() and avoided dereferencing past the end of the
2215   array.
2216
2217 awk.h:
2218
2219 Merged non-prototype and prototype declarations in awk.h.
2220 Expanded tree_eval #define to short-circuit more calls of r_tree_eval().
2221
2222 awk.y:
2223
2224 Delinted some of the code in the grammar.
2225 Fixed and improved some of the error message printing.
2226 Changed to accomodate unlimited length source lines.
2227 Line continuation now works as advertised.
2228 Source lines can be arbitrarily long.
2229 Refined grammar hacks so that /= assignment works.  Regular expressions
2230   starting with /= are recognized at the beginning of a line, after && or ||
2231   and after ~ or !~.  More contexts can be added if necessary.
2232 Fixed IGNORECASE (multiple scans for backslash).
2233 Condensed expression_lists in array references.
2234 Detect and warn for correct # args in builtin functions -- call most of them
2235   with a fixed number (i.e. fill in defaults at parse-time rather than at
2236   run-time).
2237 Load ENVIRON only if it is referenced (detected at parse-time).
2238 Treat NF, FS, RS, NR, FNR specially at parse time, to improve run time.
2239 Fold constant expressions at parse time.
2240 Do make_regexp() on third arg. of split() at parse tiem if it is a constant.
2241
2242 builtin.c:
2243
2244 srand() returns 0 the first time called.
2245 Replaced alloca() with malloc() in do_sprintf().
2246 Fixed setting of RSTART and RLENGTH in do_match().
2247 Got rid of get_{one,two,three} and allowance for variable # of args. at
2248   run-time -- this is now done at parse-time.
2249 Fixed latent bug in [g]sub whereby changes to $0 would never get made.
2250 Rewrote much of sub_common() for simplicity and performance.
2251 Added ctime() and time() builtin functions (unless -DSTRICT).  ctime() returns
2252   a time string like the C function, given the number of seconds since the epoch
2253   and time() returns the current time in seconds.
2254 do_sprintf() now checks for mismatch between format string and number of
2255   arguments supplied.
2256
2257 dfa.c
2258
2259 This is borrowed (almost unmodified) from GNU grep to provide faster searches.
2260
2261 eval.c
2262
2263 Node_var, Node_var_array and Node_param_list handled from macro rather
2264   than in r_tree_eval().
2265 Changed cmp_nodes() to not do a force_number() -- this, combined with a 
2266     force_number() on ARGV[] and ENVIRON[] brings it into line with other awks
2267 Greatly simplified cmp_nodes().
2268 Separated out Node_NF, Node_FS, Node_RS, Node_NR and Node_FNR in get_lhs().
2269 All adjacent string concatenations now done at once.
2270
2271 field.c
2272
2273 Added support for FIELDWIDTHS.
2274 Fixed bug in get_field() whereby changes to a field were not always
2275   properly reflected in $0.
2276 Reordered tests in parse_field() so that reference off the end of the buffer
2277   doesn't happen.
2278 set_FS() now sets *parse_field i.e. routine to call depending on type of FS.
2279 It also does make_regexp() for FS if needed.  get_field() passes FS_regexp
2280   to re_parse_field(), as does do_split().
2281 Changes to set_field() and set_record() to avoid malloc'ing and free'ing the
2282   field nodes repeatedly.  The fields now just point into $0 unless they are
2283   assigned to another variable or changed.  force_number() on the field is
2284   *only* done when the field is needed.
2285
2286 gawk.1
2287
2288 Fixed troff formatting problem on .TP lines.
2289
2290 io.c
2291
2292 Moved some code out into iop.c.
2293 Output from pipes and system() calls is properly synchronized.
2294 Status from pipe close properly returned.
2295 Bug in getline with no redirect fixed.
2296
2297 iop.c
2298
2299 This file contains a totally revamped get_a_record and associated code.
2300
2301 main.c
2302
2303 Command line programs no longer use a temporary file.
2304 Therefore, tmpnam() no longer required.
2305 Deprecated -a and -e options -- they will go away in the next release,
2306   but for now they cause a warning.
2307 Moved -C, -V, -c options to -W ala posix.
2308 Added -W posix option: throw out \x
2309 Added -W lint option.
2310
2311
2312 node.c
2313
2314 force_number() now allows pure numerics to have leading whitespace.
2315 Added make_string facility to optimize case of adding an already malloc'd
2316   string.
2317 Cleaned up and simplified do_deref().
2318 Fixed bug in handling of stref==255 in do_deref().
2319
2320 re.c
2321
2322 contains the interface to regexp code
2323
2324 Changes from 2.11.1 to FSF version of same
2325 ------------------------------------------
2326 Thu Jan  4 14:19:30 1990  Jim Kingdon  (kingdon at albert)
2327
2328         * Makefile (YACC): Add -y to bison part.
2329
2330         * missing.c: Add #include <stdio.h>.
2331
2332 Sun Dec 24 16:16:05 1989  David J. MacKenzie  (djm at hobbes.ai.mit.edu)
2333
2334         * Makefile: Add (commented out) default defines for Sony News.
2335
2336         * awk.h: Move declaration of vprintf so it will compile when
2337         -DVPRINTF_MISSING is defined.
2338
2339 Mon Nov 13 18:54:08 1989  Robert J. Chassell  (bob at apple-gunkies.ai.mit.edu)
2340
2341         * gawk.texinfo: changed @-commands that are not part of the
2342           standard, currently released texinfmt.el to those that are.
2343           Otherwise, only people with the as-yet unreleased makeinfo.c can
2344           format this file.
2345
2346 Changes from 2.11beta to 2.11.1 (production)
2347 --------------------------------------------
2348
2349 Went from "beta" to production status!!!
2350
2351 Now flushes stdout before closing pipes or redirected files to
2352 synchronize output.
2353
2354 MS-DOS changes added in.
2355
2356 Signal handler return type parameterized in Makefile and awk.h and
2357 some lint removed.  debug.c cleaned up.
2358
2359 Fixed FS splitting to never match null strings, per book.
2360
2361 Correction to the manual's description of FS.
2362
2363 Some compilers break on char *foo = "string" + 4 so fixed version.sh and
2364 main.c.
2365
2366 Changes from 2.10beta to 2.11beta
2367 ---------------------------------
2368
2369 This release fixes all reported bugs that we could reproduce.  Probably
2370 some of the changes are not documented here.
2371
2372 The next release will probably not be a beta release!
2373
2374 The most important change is the addition of the -nostalgia option. :-)
2375
2376 The documentation has been improved and brought up-to-date.
2377
2378 There has been a lot of general cleaning up of the code that is not otherwise
2379 documented here.  There has been a movement toward using standard-conforming
2380 library routines and providing them (in missing.d) for systems lacking them.
2381 Improved (hopefully) configuration through Makfile modifications and missing.c.
2382 In particular, straightened out confusion over vprintf #defines, declarations
2383 etc.
2384
2385 Deleted RCS log comments from source, to reduce source size by about one third.
2386 Most of them were horribly out-of-date, anyway.
2387
2388 Renamed source files to reflect (for the most part) their contents.
2389
2390 More and improved error messages.  Cleanup and fixes to yyerror().
2391 String constants are not altered in input buffer, so error messages come out 
2392 better.  Fixed usage message.  Make use of ANSI C strerror() function
2393 (provided).
2394
2395 Plugged many more memory leaks.  The memory consumption is now quite
2396 reasonable over a wide range of programs.
2397
2398 Uses volatile declaration if STDC > 0 to avoid problems due to longjmp.
2399
2400 New -a and -e options to use awk or egrep style regexps, respectively,
2401 since POSIX says awk should use egrep regexps.  Default is -a.
2402
2403 Added -v option for setting variables before the first file is encountered.
2404 Version information now uses -V and copyleft uses -C.
2405
2406 Added a patchlevel.h file and its use for -V and -C.
2407
2408 Append_right() optimized for major improvement to programs with a *lot*
2409 of statements.
2410
2411 Operator precedence has been corrected to match draft Posix.
2412
2413 Tightened up grammar for builtin functions so that only length
2414 may be called without arguments or parentheses.
2415
2416 /regex/ is now a normal expression that can appear in any expression
2417 context.
2418
2419 Allow /= to begin a regexp.  Allow ..[../..].. in a regexp.
2420
2421 Allow empty compound statements ({}).
2422
2423 Made return and next illegal outside a function and in BEGIN/END respectively.
2424
2425 Division by zero is now illegal and causes a fatal error.
2426
2427 Fixed exponentiation so that x ^ 0 and x ^= 0 both return 1.
2428
2429 Fixed do_sqrt, do_log, and do_exp to do argument/return checking and
2430 print an error message, per the manual.
2431
2432 Fixed main to catch SIGSEGV to get source and data file line numbers.
2433
2434 Fixed yyerror to print the ^ at the beginning of the bad token, not the end.
2435
2436 Fix to substr() builtin:  it was failing if the arguments
2437 weren't already strings.
2438
2439 Added new node value flag NUMERIC to indicate that a variable is
2440 purely a number as opposed to type NUM which indicates that
2441 the node's numeric value is valid.  This is set in make_number(),
2442 tmp_number and r_force_number() when appropriate and used in
2443 cmp_nodes().  This fixed a bug in comparison of variables that had
2444 numeric prefixes.  The new code uses strtod() and eliminates is_a_number().
2445 A simple strtod() is provided for systems lacking one.  It does no
2446 overflow checking, so could be improved.
2447
2448 Simplification and efficiency improvement in force_string.
2449
2450 Added performance tweak in r_force_number().
2451
2452 Fixed a bug with nested loops and break/continue in functions.
2453
2454 Fixed inconsistency in handling of empty fields when $0 has to be rebuilt.
2455 Happens to simplify rebuild_record().
2456
2457 Cleaned up the code associated with opening a pipe for reading.  Gawk
2458 now has its own popen routine (gawk_popen) that allocates an IOBUF
2459 and keeps track of the pid of the child process.  gawk_pclose
2460 marks the appropriate child as defunct in the right struct redirect.
2461
2462 Cleaned up and fixed close_redir().
2463
2464 Fixed an obscure bug to do with redirection.  Intermingled ">" and ">>"
2465 redirects did not output in a predictable order.
2466
2467 Improved handling of output buffering:  now all print[f]s redirected to a tty
2468 or pipe are flushed immediately and non-redirected output to a tty is flushed
2469 before the next input record is read.
2470
2471 Fixed a bug in get_a_record() where bcopy() could have copied over
2472 a random pointer.
2473
2474 Fixed a bug when RS="" and records separated by multiple blank lines.
2475
2476 Got rid of SLOWIO code which was out-of-date anyway.
2477
2478 Fix in get_field() for case where $0 is changed and then $(n) are
2479 changed and then $0 is used.
2480
2481 Fixed infinite loop on failure to open file for reading from getline.
2482 Now handles redirect file open failures properly.
2483
2484 Filenames such as /dev/stdin now allowed on the command line as well as
2485 in redirects.
2486
2487 Fixed so that gawk '$1' where $1 is a zero tests false.
2488
2489 Fixed parsing so that `RLENGTH -1' parses the same as `RLENGTH - 1',
2490 for example.
2491
2492 The return from a user-defined function now defaults to the Null node.
2493 This fixes a core-dump-causing bug when the return value  of a function
2494 is used and that function returns no value.
2495
2496 Now catches floating point exceptions to avoid core dumps.
2497
2498 Bug fix for deleting elements of an array -- under some conditions, it was
2499 deleting more than one element at a time.
2500
2501 Fix in AWKPATH code for running off the end of the string.
2502
2503 Fixed handling of precision in *printf calls.  %0.2d now works properly,
2504 as does %c.  [s]printf now recognizes %i and %X.
2505
2506 Fixed a bug in printing of very large (>240) strings.
2507
2508 Cleaned up erroneous behaviour for RS == "".
2509
2510 Added IGNORECASE support to index().
2511
2512 Simplified and fixed newnode/freenode.
2513
2514 Fixed reference to $(anything) in a BEGIN block.
2515
2516 Eliminated use of USG rand48().
2517
2518 Bug fix in force_string for machines with 16-bit ints.
2519
2520 Replaced use of mktemp() with tmpnam() and provided a partial implementation of
2521 the latter for systems that don't have it.
2522
2523 Added a portability check for includes in io.c.
2524
2525 Minor portability fix in alloc.c plus addition of xmalloc().
2526
2527 Portability fix:  on UMAX4.2, st_blksize is zero for a pipe, thus breaking
2528 iop_alloc() -- fixed.
2529
2530 Workaround for compiler bug on Sun386i in do_sprintf.
2531
2532 More and improved prototypes in awk.h.
2533
2534 Consolidated C escape parsing code into one place.
2535
2536 strict flag is now turned on only when invoked with compatability option.
2537 It now applies to fewer things.
2538
2539 Changed cast of f._ptr in vprintf.c from (unsigned char *) to (char *).
2540 Hopefully this is right for the systems that use this code (I don't).
2541
2542 Support for pipes under MSDOS added.