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