awk.h

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C头文件 代码 · 共 185 行

H
185
字号
/*Copyright (c) Lucent Technologies 1997	All Rights Reserved*/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	DEBUG#ifdef	DEBUG			/* uses have to be doubly parenthesized */#	define	dprintf(x)	if (dbg) printf x#else#	define	dprintf(x)#endifextern	char	errbuf[];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 */#define	ARR	020	/* this is an array */#define	FCN	040	/* this is a function name */#define FLD	0100	/* this is a field $1, $2, ... */#define	REC	0200	/* this is $0 *//* function types */#define	FLENGTH	1#define	FSQRT	2#define	FEXP	3#define	FLOG	4#define	FINT	5#define	FSYSTEM	6#define	FRAND	7#define	FSRAND	8#define	FSIN	9#define	FCOS	10#define	FATAN	11#define	FTOUPPER 12#define	FTOLOWER 13#define	FFLUSH	14#define	FUTF	15/* Node:  parse tree is made of nodes, with Cell's at bottom */typedef struct Node {	int	ntype;	struct	Node *nnext;	int	lineno;	int	nobj;	struct	Node *narg[1];	/* variable: actual size set by calling malloc */} Node;#define	NIL	((Node *) 0)extern Node	*winner;extern Node	*nullstat;extern Node	*nullnode;/* ctypes */#define OCELL	1#define OBOOL	2#define OJUMP	3/* Cell subtypes: csub */#define	CFREE	7#define CCOPY	6#define CCON	5#define CTEMP	4#define CNAME	3 #define CVAR	2#define CFLD	1#define	CUNK	0/* bool subtypes */#define BTRUE	11#define BFALSE	12/* jump subtypes */#define JEXIT	21#define JNEXT	22#define	JBREAK	23#define	JCONT	24#define	JRET	25#define	JNEXTFILE	26/* node types */#define NVALUE	1#define NSTAT	2#define NEXPR	3extern	int	pairstack[], paircnt;#define notlegal(n)	(n <= FIRSTTOKEN || n >= LASTTOKEN || proctab[n-FIRSTTOKEN] == nullproc)#define isvalue(n)	((n)->ntype == NVALUE)#define isexpr(n)	((n)->ntype == NEXPR)#define isjump(n)	((n)->ctype == OJUMP)#define isexit(n)	((n)->csub == JEXIT)#define	isbreak(n)	((n)->csub == JBREAK)#define	iscont(n)	((n)->csub == JCONT)#define	isnext(n)	((n)->csub == JNEXT)#define	isnextfile(n)	((n)->csub == JNEXTFILE)#define	isret(n)	((n)->csub == JRET)#define isrec(n)	((n)->tval & REC)#define isfld(n)	((n)->tval & FLD)#define isstr(n)	((n)->tval & STR)#define isnum(n)	((n)->tval & NUM)#define isarr(n)	((n)->tval & ARR)#define isfcn(n)	((n)->tval & FCN)#define istrue(n)	((n)->csub == BTRUE)#define istemp(n)	((n)->csub == CTEMP)#define	isargument(n)	((n)->nobj == ARG)/* #define freeable(p)	(!((p)->tval & DONTFREE)) */#define freeable(p)	( ((p)->tval & (STR|DONTFREE)) == STR )#include "proto.h"

⌨️ 快捷键说明

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