~vcs-imports/gawk/master

187 by Arnold D. Robbins
Move most stuff in NEWS to 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.