⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 awk.shar

📁 c programming pearls answer
💻 SHAR
📖 第 1 页 / 共 5 页
字号:
-	then unchanged it -- it really does run slower in too many cases.-	left the code in place, commented out.--Feb 10, 1991:-	check error status on all writes, to avoid banging on full disks.--Jan 28, 1991:-	awk -f - reads the program from stdin.--Jan 11, 1991:-	failed to set numeric state on $0 in cmd|getline context in run.c.--Nov 2, 1990:-	fixed sleazy test for integrality in getsval;  use modf.--Oct 29, 1990:-	fixed sleazy buggy code in lib.c that looked (incorrectly) for-	too long input lines.--Oct 14, 1990:-	fixed the bug on p. 198 in which it couldn't deduce that an-	argument was an array in some contexts.  replaced the error-	message in intest() by code that damn well makes it an array.--Oct 8, 1990:-	fixed horrible bug:  types and values were not preserved in-	some kinds of self-assignment. (in assign().)--Aug 24, 1990:-	changed NCHARS to 256 to handle 8-bit characters in strings-	presented to match(), etc.--Jun 26, 1990:-	changed struct rrow (awk.h) to use long instead of int for lval,-	since cfoll() stores a pointer in it.  now works better when int's-	are smaller than pointers!--May 6, 1990:-	AVA fixed the grammar so that ! is uniformly of the same precedence as-	unary + and -.  This renders illegal some constructs like !x=y, which-	now has to be parenthesized as !(x=y), and makes others work properly:-	!x+y is (!x)+y, and x!y is x !y, not two pattern-action statements.-	(These problems were pointed out by Bob Lenk of Posix.)--	Added \x to regular expressions (already in strings).-	Limited octal to octal digits; \8 and \9 are not octal.-	Centralized the code for parsing escapes in regular expressions.-	Added a bunch of tests to T.re and T.sub to verify some of this.--Feb 9, 1990:-	fixed null pointer dereference bug in main.c:  -F[nothing].  sigh.--	restored srand behavior:  it returns the current seed.--Jan 18, 1990:-	srand now returns previous seed value (0 to start).--Jan 5, 1990:-	fix potential problem in tran.c -- something was freed,-	then used in freesymtab.--Oct 18, 1989:-	another try to get the max number of open files set with-	relatively machine-independent code.--	small fix to input() in case of multiple reads after EOF.--Oct 11, 1989:-	FILENAME is now defined in the BEGIN block -- too many old-	programs broke.--	"-" means stdin in getline as well as on the commandline.--	added a bunch of casts to the code to tell the truth about-	char * vs. unsigned char *, a right royal pain.  added a-	setlocale call to the front of main, though probably no one-	has it usefully implemented yet.--Aug 24, 1989:-	removed redundant relational tests against nullnode if parse-	tree already had a relational at that point.--Aug 11, 1989:-	fixed bug:  commandline variable assignment has to look like-	var=something.  (consider the man page for =, in file =.1)--	changed number of arguments to functions to static arrays-	to avoid repeated malloc calls.--Aug 2, 1989:-	restored -F (space) separator--Jul 30, 1989:-	added -v x=1 y=2 ... for immediate commandline variable assignment;-	done before the BEGIN block for sure.  they have to precede the-	program if the program is on the commandline.-	Modified Aug 2 to require a separate -v for each assignment.--Jul 10, 1989:-	fixed ref-thru-zero bug in environment code in tran.c--Jun 23, 1989:-	add newline to usage message.--Jun 14, 1989:-	added some missing ansi printf conversion letters: %i %X %E %G.-	no sensible meaning for h or L, so they may not do what one expects.--	made %* conversions work.--	changed x^y so that if n is a positive integer, it's done-	by explicit multiplication, thus achieving maximum accuracy.-	(this should be done by pow() but it seems not to be locally.)-	done to x ^= y as well.--Jun 4, 1989:-	ENVIRON array contains environment: if shell variable V=thing,-		ENVIRON["V"] is "thing"--	multiple -f arguments permitted.  error reporting is naive.-	(they were permitted before, but only the last was used.)--	fixed a really stupid botch in the debugging macro dprintf--	fixed order of evaluation of commandline assignments to match-	what the book claims:  an argument of the form x=e is evaluated-	at the time it would have been opened if it were a filename (p 63).-	this invalidates the suggested answer to ex 4-1 (p 195).--	removed some code that permitted -F (space) fieldseparator,-	since it didn't quite work right anyway.  (restored aug 2)--Apr 27, 1989:-	Line number now accumulated correctly for comment lines.--Apr 26, 1989:-	Debugging output now includes a version date,-	if one compiles it into the source each time.--Apr 9, 1989:-	Changed grammar to prohibit constants as 3rd arg of sub and gsub;-	prevents class of overwriting-a-constant errors.  (Last one?)-	This invalidates the "banana" example on page 43 of the book.--	Added \a ("alert"), \v (vertical tab), \xhhh (hexadecimal),-	as in ANSI, for strings.  Rescinded the sloppiness that permitted-	non-octal digits in \ooo.  Warning:  not all compilers and libraries-	will be able to deal with \x correctly.--Jan 9, 1989:-	Fixed bug that caused tempcell list to contain a duplicate.-	The fix is kludgy.--Dec 17, 1988:-	Catches some more commandline errors in main.-	Removed redundant decl of modf in run.c (confuses some compilers).-	Warning:  there's no single declaration of malloc, etc., in awk.h-	that seems to satisfy all compilers.--Dec 7, 1988:-	Added a bit of code to error printing to avoid printing nulls.-	(Not clear that it actually would.)--Nov 27, 1988:-	With fear and trembling, modified the grammar to permit-	multiple pattern-action statements on one line without-	an explicit separator.  By definition, this capitulation-	to the ghost of ancient implementations remains undefined-	and thus subject to change without notice or apology.-	DO NOT COUNT ON IT.--Oct 30, 1988:-	Fixed bug in call() that failed to recover storage.--	A warning is now generated if there are more arguments-	in the call than in the definition (in lieu of fixing-	another storage leak).--Oct 20, 1988:-	Fixed %c:  if expr is numeric, use numeric value;-	otherwise print 1st char of string value.  still-	doesn't work if the value is 0 -- won't print \0.--	Added a few more checks for running out of malloc.--Oct 12, 1988:-	Fixed bug in call() that freed local arrays twice.--	Fixed to handle deletion of non-existent array right;-	complains about attempt to delete non-array element.--Sep 30, 1988:-	Now guarantees to evaluate all arguments of built-in-	functions, as in C;  the appearance is that arguments-	are evaluated before the function is called.  Places-	affected are sub (gsub was ok), substr, printf, and-	all the built-in arithmetic functions in bltin().-	A warning is generated if a bltin() is called with-	the wrong number of arguments.--	This requires changing makeprof on p167 of the book.--Aug 23, 1988:-	setting FILENAME in BEGIN caused core dump, apparently-	because it was freeing space not allocated by malloc.--July 24, 1988:-	fixed egregious error in toupper/tolower functions.-	still subject to rescinding, however.--July 2, 1988:-	flush stdout before opening file or pipe--July 2, 1988:-	performance bug in b.c/cgoto(): not freeing some sets of states.-	partial fix only right now, and the number of states increased-	to make it less obvious.--June 1, 1988:-	check error status on close--May 28, 1988:-	srand returns seed value it's using.-	see 1/18/90--May 22, 1988:-	Removed limit on depth of function calls.--May 10, 1988:-	Fixed lib.c to permit _ in commandline variable names.--Mar 25, 1988:-	main.c fixed to recognize -- as terminator of command--	line options.  Illegal options flagged.-	Error reporting slightly cleaned up.--Dec 2, 1987:-	Newer C compilers apply a strict scope rule to extern-	declarations within functions.  Two extern declarations in-	lib.c and tran.c have been moved to obviate this problem.--Oct xx, 1987:-	Reluctantly added toupper and tolower functions.-	Subject to rescinding without notice.--Sep 17, 1987:-	Error-message printer had printf(s) instead of-	printf("%s",s);  got core dumps when the message-	included a %.--Sep 12, 1987:-	Very long printf strings caused core dump;-	fixed aprintf, asprintf, format to catch them.-	Can still get a core dump in printf itself.--//GO.SYSIN DD FIXESecho awk.h 1>&2sed 's/.//' >awk.h <<'//GO.SYSIN DD awk.h'-/****************************************************************-Copyright (C) Lucent Technologies 1997-All Rights Reserved--Permission to use, copy, modify, and distribute this software and-its documentation for any purpose and without fee is hereby-granted, provided that the above copyright notice appear in all-copies and that both that the copyright notice and this-permission notice and warranty disclaimer appear in supporting-documentation, and that the name Lucent Technologies or any of-its entities not be used in advertising or publicity pertaining-to distribution of the software without specific, written prior-permission.--LUCENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.-IN NO EVENT SHALL LUCENT OR ANY OF ITS ENTITIES BE LIABLE FOR ANY-SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER-IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF-THIS SOFTWARE.-****************************************************************/--#include <assert.h>--typedef double	Awkfloat;--/* unsigned char is more trouble than it's worth */--typedef	unsigned char uschar;--#define	xfree(a)	{ if ((a) != NULL) { free((char *) a); a = NULL; } }--#define	NN(p)	((p) ? (p) : "(null)")	/* guaranteed non-null for dprintf -*/-#define	DEBUG-#ifdef	DEBUG-			/* uses have to be doubly parenthesized */-#	define	dprintf(x)	if (dbg) printf x-#else-#	define	dprintf(x)-#endif--extern int	compile_time;	/* 1 if compiling, 0 if running */-extern int	safe;		/* 0 => unsafe, 1 => safe */--#define	RECSIZE	(8 * 1024)	/* sets limit on records, fields, etc., etc. */-extern int	recsize;	/* size of current record, orig RECSIZE */--extern char	**FS;-extern char	**RS;-extern char	**ORS;-extern char	**OFS;-extern char	**OFMT;-extern Awkfloat *NR;-extern Awkfloat *FNR;-extern Awkfloat *NF;-extern char	**FILENAME;-extern char	**SUBSEP;-extern Awkfloat *RSTART;-extern Awkfloat *RLENGTH;--extern char	*record;	/* points to $0 */-extern int	lineno;		/* line number in awk program */-extern int	errorflag;	/* 1 if error has occurred */-extern int	donefld;	/* 1 if record broken into fields */-extern int	donerec;	/* 1 if record is valid (no fld has changed */-extern char	inputFS[];	/* FS at time of input, for field splitting */--extern int	dbg;--extern	char	*patbeg;	/* beginning of pattern matched */-extern	int	patlen;		/* length of pattern matched.  set in b.c */--/* Cell:  all information about a variable or constant */--typedef struct Cell {-	uschar	ctype;		/* OCELL, OBOOL, OJUMP, etc. */-	uschar	csub;		/* CCON, CTEMP, CFLD, etc. */-	char	*nval;		/* name, for variables only */-	char	*sval;		/* string value */-	Awkfloat fval;		/* value as number */-	int	 tval;		/* type info: STR|NUM|ARR|FCN|FLD|CON|DONTFREE */-	struct Cell *cnext;	/* ptr to next if chained */-} Cell;--typedef struct Array {		/* symbol table array */-	int	nelem;		/* elements in table right now */-	int	size;		/* size of tab */-	Cell	**tab;		/* hash table pointers */-} Array;--#define	NSYMTAB	50	/* initial size of a symbol table */-extern Array	*symtab;--extern Cell	*nrloc;		/* NR */-extern Cell	*fnrloc;	/* FNR */-extern Cell	*nfloc;		/* NF */-extern Cell	*rstartloc;	/* RSTART */-extern Cell	*rlengthloc;	/* RLENGTH */--/* Cell.tval values: */-#define	NUM	01	/* number value is valid */-#define	STR	02	/* string value is valid */-#define DONTFREE 04	/* string space is not freeable */-#define	CON	010	/* this is a constant */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -