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

📄 awk.h

📁 早期freebsd实现
💻 H
📖 第 1 页 / 共 2 页
字号:
#			define	MALLOC	1	/* can be free'd */#			define	TEMP	2	/* should be free'd */#			define	PERM	4	/* can't be free'd */#			define	STRING	8	/* assigned as string */#			define	STR	16	/* string value is current */#			define	NUM	32	/* numeric value is current */#			define	NUMBER	64	/* assigned as number */#			define	MAYBE_NUM 128	/* user input:  if NUMERIC then						 * a NUMBER						 */	char *vname;	/* variable's name */} NODE;#define lnode	sub.nodep.l.lptr#define nextp	sub.nodep.l.lptr#define rnode	sub.nodep.r.rptr#define source_file	sub.nodep.x.name#define	source_line	sub.nodep.number#define	param_cnt	sub.nodep.number#define param	sub.nodep.l.param_name#define subnode	lnode#define proc	sub.nodep.r.pptr#define re_reg	sub.nodep.r.preg#define re_flags sub.nodep.reflags#define re_text lnode#define re_exp	sub.nodep.x.extra#define	re_cnt	sub.nodep.number#define forsub	lnode#define forloop	rnode->sub.nodep.r.hd#define stptr	sub.val.sp#define stlen	sub.val.slen#define stref	sub.val.sref#define	stfmt	sub.val.idx#define numbr	sub.val.fltnum#define var_value lnode#define var_array sub.nodep.r.av#define condpair lnode#define triggered sub.nodep.r.r_ent#ifdef DONTDEFint primes[] = {31, 61, 127, 257, 509, 1021, 2053, 4099, 8191, 16381};#endif/* a quick profile suggests that the following is a good value */#define	HASHSIZE	127typedef struct for_loop_header {	NODE *init;	NODE *cond;	NODE *incr;} FOR_LOOP_HEADER;/* for "for(iggy in foo) {" */struct search {	NODE **arr_ptr;	NODE **arr_end;	NODE *bucket;	NODE *retval;};/* for faster input, bypass stdio */typedef struct iobuf {	int fd;	char *buf;	char *off;	char *end;	size_t size;	/* this will be determined by an fstat() call */	int cnt;	long secsiz;	int flag;#	define		IOP_IS_TTY	1#	define		IOP_IS_INTERNAL	2#	define		IOP_NO_FREE	4} IOBUF;typedef void (*Func_ptr)();/* * structure used to dynamically maintain a linked-list of open files/pipes */struct redirect {	unsigned int flag;#		define		RED_FILE	1#		define		RED_PIPE	2#		define		RED_READ	4#		define		RED_WRITE	8#		define		RED_APPEND	16#		define		RED_NOBUF	32#		define		RED_USED	64#		define		RED_EOF		128	char *value;	FILE *fp;	IOBUF *iop;	int pid;	int status;	struct redirect *prev;	struct redirect *next;};/* structure for our source, either a command line string or a source file */struct src {	enum srctype { CMDLINE = 1, SOURCEFILE } stype;	char *val;};/* longjmp return codes, must be nonzero *//* Continue means either for loop/while continue, or next input record */#define TAG_CONTINUE 1/* Break means either for/while break, or stop reading input */#define TAG_BREAK 2/* Return means return from a function call; leave value in ret_node */#define	TAG_RETURN 3#define HUGE    INT_MAX /* -------------------------- External variables -------------------------- *//* gawk builtin variables */extern int NF;extern int NR;extern int FNR;extern int IGNORECASE;extern char *RS;extern char *OFS;extern int OFSlen;extern char *ORS;extern int ORSlen;extern char *OFMT;extern char *CONVFMT;extern int CONVFMTidx;extern int OFMTidx;extern NODE *FS_node, *NF_node, *RS_node, *NR_node;extern NODE *FILENAME_node, *OFS_node, *ORS_node, *OFMT_node;extern NODE *CONVFMT_node;extern NODE *FNR_node, *RLENGTH_node, *RSTART_node, *SUBSEP_node;extern NODE *IGNORECASE_node;extern NODE *FIELDWIDTHS_node;extern NODE **stack_ptr;extern NODE *Nnull_string;extern NODE **fields_arr;extern int sourceline;extern char *source;extern NODE *expression_value;extern NODE *_t;	/* used as temporary in tree_eval */extern const char *myname;extern NODE *nextfree;extern int field0_valid;extern int do_unix;extern int do_posix;extern int do_lint;extern int in_begin_rule;extern int in_end_rule;/* ------------------------- Pseudo-functions ------------------------- */#define is_identchar(c) (isalnum(c) || (c) == '_')#ifndef MPROF#define	getnode(n)	if (nextfree) n = nextfree, nextfree = nextfree->nextp;\			else n = more_nodes()#define	freenode(n)	((n)->nextp = nextfree, nextfree = (n))#else#define	getnode(n)	emalloc(n, NODE *, sizeof(NODE), "getnode")#define	freenode(n)	free(n)#endif#ifdef DEBUG#define	tree_eval(t)	r_tree_eval(t)#else#define	tree_eval(t)	(_t = (t),(_t) == NULL ? Nnull_string : \			((_t)->type == Node_val ? (_t) : \			((_t)->type == Node_var ? (_t)->var_value : \			((_t)->type == Node_param_list ? \			(stack_ptr[(_t)->param_cnt])->var_value : \			r_tree_eval((_t))))))#endif#define	make_number(x)	mk_number((x), (MALLOC|NUM|NUMBER))#define	tmp_number(x)	mk_number((x), (MALLOC|TEMP|NUM|NUMBER))#define	free_temp(n)	do {if ((n)->flags&TEMP) { unref(n); }} while (0)#define	make_string(s,l)	make_str_node((s), SZTC (l),0)#define		SCAN			1#define		ALREADY_MALLOCED	2#define	cant_happen()	fatal("internal error line %d, file: %s", \				__LINE__, __FILE__);#if defined(__STDC__) && !defined(NO_TOKEN_PASTING)#define	emalloc(var,ty,x,str)	(void)((var=(ty)malloc((MALLOC_ARG_T)(x))) ||\				 (fatal("%s: %s: can't allocate memory (%s)",\					(str), #var, strerror(errno)),0))#define	erealloc(var,ty,x,str)	(void)((var=(ty)realloc((char *)var,\						  (MALLOC_ARG_T)(x))) ||\				 (fatal("%s: %s: can't allocate memory (%s)",\					(str), #var, strerror(errno)),0))#else /* __STDC__ */#define	emalloc(var,ty,x,str)	(void)((var=(ty)malloc((MALLOC_ARG_T)(x))) ||\				 (fatal("%s: %s: can't allocate memory (%s)",\					(str), "var", strerror(errno)),0))#define	erealloc(var,ty,x,str)	(void)((var=(ty)realloc((char *)var,\						  (MALLOC_ARG_T)(x))) ||\				 (fatal("%s: %s: can't allocate memory (%s)",\					(str), "var", strerror(errno)),0))#endif /* __STDC__ */#ifdef DEBUG#define	force_number	r_force_number#define	force_string	r_force_string#else /* not DEBUG */#ifdef lintextern AWKNUM force_number();#endif#ifdef MSDOSextern double _msc51bug;#define	force_number(n)	(_msc51bug=(_t = (n),(_t->flags & NUM) ? _t->numbr : r_force_number(_t)))#else /* not MSDOS */#define	force_number(n)	(_t = (n),(_t->flags & NUM) ? _t->numbr : r_force_number(_t))#endif /* MSDOS */#define	force_string(s)	(_t = (s),(_t->flags & STR) ? _t : r_force_string(_t))#endif /* not DEBUG */#define	STREQ(a,b)	(*(a) == *(b) && strcmp((a), (b)) == 0)#define	STREQN(a,b,n)	((n)&& *(a)== *(b) && strncmp((a), (b), SZTC (n)) == 0)/* ------------- Function prototypes or defs (as appropriate) ------------- *//* array.c */extern NODE *concat_exp P((NODE *tree));extern void assoc_clear P((NODE *symbol));extern unsigned int hash P((char *s, int len));extern int in_array P((NODE *symbol, NODE *subs));extern NODE **assoc_lookup P((NODE *symbol, NODE *subs));extern void do_delete P((NODE *symbol, NODE *tree));extern void assoc_scan P((NODE *symbol, struct search *lookat));extern void assoc_next P((struct search *lookat));/* awk.tab.c */extern char *tokexpand P((void));extern char nextc P((void));extern NODE *node P((NODE *left, NODETYPE op, NODE *right));extern NODE *install P((char *name, NODE *value));extern NODE *lookup P((char *name));extern NODE *variable P((char *name, int can_free));extern int yyparse P((void));/* builtin.c */extern NODE *do_exp P((NODE *tree));extern NODE *do_index P((NODE *tree));extern NODE *do_int P((NODE *tree));extern NODE *do_length P((NODE *tree));extern NODE *do_log P((NODE *tree));extern NODE *do_sprintf P((NODE *tree));extern void do_printf P((NODE *tree));extern void print_simple P((NODE *tree, FILE *fp));extern NODE *do_sqrt P((NODE *tree));extern NODE *do_substr P((NODE *tree));extern NODE *do_strftime P((NODE *tree));extern NODE *do_systime P((NODE *tree));extern NODE *do_system P((NODE *tree));extern void do_print P((NODE *tree));extern NODE *do_tolower P((NODE *tree));extern NODE *do_toupper P((NODE *tree));extern NODE *do_atan2 P((NODE *tree));extern NODE *do_sin P((NODE *tree));extern NODE *do_cos P((NODE *tree));extern NODE *do_rand P((NODE *tree));extern NODE *do_srand P((NODE *tree));extern NODE *do_match P((NODE *tree));extern NODE *do_gsub P((NODE *tree));extern NODE *do_sub P((NODE *tree));/* eval.c */extern int interpret P((NODE *volatile tree));extern NODE *r_tree_eval P((NODE *tree));extern int cmp_nodes P((NODE *t1, NODE *t2));extern NODE **get_lhs P((NODE *ptr, Func_ptr *assign));extern void set_IGNORECASE P((void));void set_OFS P((void));void set_ORS P((void));void set_OFMT P((void));void set_CONVFMT P((void));/* field.c */extern void init_fields P((void));extern void set_record P((char *buf, int cnt, int freeold));extern void reset_record P((void));extern void set_NF P((void));extern NODE **get_field P((int num, Func_ptr *assign));extern NODE *do_split P((NODE *tree));extern void set_FS P((void));extern void set_RS P((void));extern void set_FIELDWIDTHS P((void));/* io.c */extern void set_FNR P((void));extern void set_NR P((void));extern void do_input P((void));extern struct redirect *redirect P((NODE *tree, int *errflg));extern NODE *do_close P((NODE *tree));extern int flush_io P((void));extern int close_io P((void));extern int devopen P((char *name, char *mode));extern int pathopen P((char *file));extern NODE *do_getline P((NODE *tree));extern void do_nextfile P((void));/* iop.c */extern int optimal_bufsize P((int fd));extern IOBUF *iop_alloc P((int fd));extern int get_a_record P((char **out, IOBUF *iop, int rs, int *errcode));/* main.c */extern int main P((int argc, char **argv));extern Regexp *mk_re_parse P((char *s, int ignorecase));extern void load_environ P((void));extern char *arg_assign P((char *arg));extern SIGTYPE catchsig P((int sig, int code));/* msg.c */#ifdef MSDOSextern void err P((char *s, char *emsg, char *va_list, ...));extern void msg P((char *va_alist, ...));extern void warning P((char *va_alist, ...));extern void fatal P((char *va_alist, ...));#elseextern void err ();extern void msg ();extern void warning ();extern void fatal ();#endif/* node.c */extern AWKNUM r_force_number P((NODE *n));extern NODE *r_force_string P((NODE *s));extern NODE *dupnode P((NODE *n));extern NODE *mk_number P((AWKNUM x, unsigned int flags));extern NODE *make_str_node P((char *s, size_t len, int scan ));extern NODE *tmp_string P((char *s, size_t len ));extern NODE *more_nodes P((void));#ifdef DEBUGextern void freenode P((NODE *it));#endifextern void unref P((NODE *tmp));extern int parse_escape P((char **string_ptr));/* re.c */extern Regexp *make_regexp P((char *s, int len, int ignorecase, int dfa));extern int research P((Regexp *rp, char *str, int start, int len, int need_start));extern void refree P((Regexp *rp));extern void reg_error P((const char *s));extern Regexp *re_update P((NODE *t));extern void resyntax P((int syntax));extern void resetup P((void));/* strcase.c */extern int strcasecmp P((const char *s1, const char *s2));extern int strncasecmp P((const char *s1, const char *s2, register size_t n));#ifdef atarist/* atari/tmpnam.c */extern char *tmpnam P((char *buf));extern char *tempnam P((const char *path, const char *base));#endif/* Figure out what '\a' really is. */#ifdef __STDC__#define BELL	'\a'		/* sure makes life easy, don't it? */#else#	if 'z' - 'a' == 25	/* ascii */#		if 'a' != 97	/* machine is dumb enough to use mark parity */#			define BELL	'\207'#		else#			define BELL	'\07'#		endif#	else#		define BELL	'\057'#	endif#endifextern char casetable[];	/* for case-independent regexp matching */

⌨️ 快捷键说明

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