📄 a2p.h
字号:
/* $RCSfile: a2p.h,v $$Revision: 4.0.1.2 $$Date: 92/06/08 16:12:23 $ * * Copyright (c) 1991, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. * * $Log: a2p.h,v $ * Revision 4.0.1.2 92/06/08 16:12:23 lwall * patch20: hash tables now split only if the memory is available to do so * * Revision 4.0.1.1 91/06/07 12:12:27 lwall * patch4: new copyright notice * * Revision 4.0 91/03/20 01:57:07 lwall * 4.0 baseline. * */#define VOIDUSED 1#include "../config.h"#ifndef HAS_BCOPY# define bcopy(s1,s2,l) memcpy(s2,s1,l)#endif#ifndef HAS_BZERO# define bzero(s,l) memset(s,0,l)#endif#include "handy.h"#define Nullop 0#define OPROG 1#define OJUNK 2#define OHUNKS 3#define ORANGE 4#define OPAT 5#define OHUNK 6#define OPPAREN 7#define OPANDAND 8#define OPOROR 9#define OPNOT 10#define OCPAREN 11#define OCANDAND 12#define OCOROR 13#define OCNOT 14#define ORELOP 15#define ORPAREN 16#define OMATCHOP 17#define OMPAREN 18#define OCONCAT 19#define OASSIGN 20#define OADD 21#define OSUBTRACT 22#define OMULT 23#define ODIV 24#define OMOD 25#define OPOSTINCR 26#define OPOSTDECR 27#define OPREINCR 28#define OPREDECR 29#define OUMINUS 30#define OUPLUS 31#define OPAREN 32#define OGETLINE 33#define OSPRINTF 34#define OSUBSTR 35#define OSTRING 36#define OSPLIT 37#define OSNEWLINE 38#define OINDEX 39#define ONUM 40#define OSTR 41#define OVAR 42#define OFLD 43#define ONEWLINE 44#define OCOMMENT 45#define OCOMMA 46#define OSEMICOLON 47#define OSCOMMENT 48#define OSTATES 49#define OSTATE 50#define OPRINT 51#define OPRINTF 52#define OBREAK 53#define ONEXT 54#define OEXIT 55#define OCONTINUE 56#define OREDIR 57#define OIF 58#define OWHILE 59#define OFOR 60#define OFORIN 61#define OVFLD 62#define OBLOCK 63#define OREGEX 64#define OLENGTH 65#define OLOG 66#define OEXP 67#define OSQRT 68#define OINT 69#define ODO 70#define OPOW 71#define OSUB 72#define OGSUB 73#define OMATCH 74#define OUSERFUN 75#define OUSERDEF 76#define OCLOSE 77#define OATAN2 78#define OSIN 79#define OCOS 80#define ORAND 81#define OSRAND 82#define ODELETE 83#define OSYSTEM 84#define OCOND 85#define ORETURN 86#define ODEFINED 87#define OSTAR 88#ifdef DOINITchar *opname[] = { "0", "PROG", "JUNK", "HUNKS", "RANGE", "PAT", "HUNK", "PPAREN", "PANDAND", "POROR", "PNOT", "CPAREN", "CANDAND", "COROR", "CNOT", "RELOP", "RPAREN", "MATCHOP", "MPAREN", "CONCAT", "ASSIGN", "ADD", "SUBTRACT", "MULT", "DIV", "MOD", "POSTINCR", "POSTDECR", "PREINCR", "PREDECR", "UMINUS", "UPLUS", "PAREN", "GETLINE", "SPRINTF", "SUBSTR", "STRING", "SPLIT", "SNEWLINE", "INDEX", "NUM", "STR", "VAR", "FLD", "NEWLINE", "COMMENT", "COMMA", "SEMICOLON", "SCOMMENT", "STATES", "STATE", "PRINT", "PRINTF", "BREAK", "NEXT", "EXIT", "CONTINUE", "REDIR", "IF", "WHILE", "FOR", "FORIN", "VFLD", "BLOCK", "REGEX", "LENGTH", "LOG", "EXP", "SQRT", "INT", "DO", "POW", "SUB", "GSUB", "MATCH", "USERFUN", "USERDEF", "CLOSE", "ATAN2", "SIN", "COS", "RAND", "SRAND", "DELETE", "SYSTEM", "COND", "RETURN", "DEFINED", "STAR", "89"};#elseextern char *opname[];#endifEXT int mop INIT(1);union u_ops { int ival; char *cval;};#if defined(iAPX286) || defined(M_I286) || defined(I80286) /* 80286 hack */#define OPSMAX (64000/sizeof(union u_ops)) /* approx. max segment size */#else#define OPSMAX 50000#endif /* 80286 hack */union u_ops ops[OPSMAX];#include <stdio.h>#include <ctype.h>typedef struct string STR;typedef struct htbl HASH;#include "str.h"#include "hash.h"/* A string is TRUE if not "" or "0". */#define True(val) (tmps = (val), (*tmps && !(*tmps == '0' && !tmps[1])))EXT char *Yes INIT("1");EXT char *No INIT("");#define str_true(str) (Str = (str), (Str->str_pok ? True(Str->str_ptr) : (Str->str_nok ? (Str->str_nval != 0.0) : 0 )))#define str_peek(str) (Str = (str), (Str->str_pok ? Str->str_ptr : (Str->str_nok ? (sprintf(buf,"num(%g)",Str->str_nval),buf) : "" )))#define str_get(str) (Str = (str), (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))#define str_gnum(str) (Str = (str), (Str->str_nok ? Str->str_nval : str_2num(Str)))EXT STR *Str;#define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len)STR *str_new();char *scanpat();char *scannum();void str_free();EXT int line INIT(0);EXT FILE *rsfp;EXT char buf[2048];EXT char *bufptr INIT(buf);EXT STR *linestr INIT(Nullstr);EXT char tokenbuf[2048];EXT int expectterm INIT(TRUE);#ifdef DEBUGGINGEXT int debug INIT(0);EXT int dlevel INIT(0);#define YYDEBUG 1extern int yydebug;#endifEXT STR *freestrroot INIT(Nullstr);EXT STR str_no;EXT STR str_yes;EXT bool do_split INIT(FALSE);EXT bool split_to_array INIT(FALSE);EXT bool set_array_base INIT(FALSE);EXT bool saw_RS INIT(FALSE);EXT bool saw_OFS INIT(FALSE);EXT bool saw_ORS INIT(FALSE);EXT bool saw_line_op INIT(FALSE);EXT bool in_begin INIT(TRUE);EXT bool do_opens INIT(FALSE);EXT bool do_fancy_opens INIT(FALSE);EXT bool lval_field INIT(FALSE);EXT bool do_chop INIT(FALSE);EXT bool need_entire INIT(FALSE);EXT bool absmaxfld INIT(FALSE);EXT bool saw_altinput INIT(FALSE);EXT bool nomemok INIT(FALSE);EXT char const_FS INIT(0);EXT char *namelist INIT(Nullch);EXT char fswitch INIT(0);EXT int saw_FS INIT(0);EXT int maxfld INIT(0);EXT int arymax INIT(0);char *nameary[100];EXT STR *opens;EXT HASH *symtab;EXT HASH *curarghash;#define P_MIN 0#define P_LISTOP 5#define P_COMMA 10#define P_ASSIGN 15#define P_COND 20#define P_DOTDOT 25#define P_OROR 30#define P_ANDAND 35#define P_OR 40#define P_AND 45#define P_EQ 50#define P_REL 55#define P_UNI 60#define P_FILETEST 65#define P_SHIFT 70#define P_ADD 75#define P_MUL 80#define P_MATCH 85#define P_UNARY 90#define P_POW 95#define P_AUTO 100#define P_MAX 999
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -