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