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