📄 perl.h
字号:
typedef struct stabptrs STBP;typedef struct stab STAB;typedef struct callsave CSV;#include "handy.h"#include "regexp.h"#include "str.h"#include "util.h"#include "form.h"#include "stab.h"#include "spat.h"#include "arg.h"#include "cmd.h"#include "array.h"#include "hash.h"#if defined(iAPX286) || defined(M_I286) || defined(I80286)# define I286#endif#ifndef STANDARD_C#ifdef CHARSPRINTF char *sprintf();#else int sprintf();#endif#endifEXT char *Yes INIT("1");EXT char *No INIT("");/* "gimme" values *//* Note: cmd.c assumes that it can use && to produce one of these values! */#define G_SCALAR 0#define G_ARRAY 1#ifdef CRIPPLED_CCint str_true();#else /* !CRIPPLED_CC */#define str_true(str) (Str = (str), \ (Str->str_pok ? \ ((*Str->str_ptr > '0' || \ Str->str_cur > 1 || \ (Str->str_cur && *Str->str_ptr != '0')) ? 1 : 0) \ : \ (Str->str_nok ? (Str->str_u.str_nval != 0.0) : 0 ) ))#endif /* CRIPPLED_CC */#ifdef DEBUGGING#define str_peek(str) (Str = (str), \ (Str->str_pok ? \ Str->str_ptr : \ (Str->str_nok ? \ (sprintf(tokenbuf,"num(%g)",Str->str_u.str_nval), \ (char*)tokenbuf) : \ "" )))#endif#ifdef CRIPPLED_CCchar *str_get();#else#ifdef TAINT#define str_get(str) (Str = (str), tainted |= Str->str_tainted, \ (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))#else#define str_get(str) (Str = (str), (Str->str_pok ? Str->str_ptr : str_2ptr(Str)))#endif /* TAINT */#endif /* CRIPPLED_CC */#ifdef CRIPPLED_CCdouble str_gnum();#else /* !CRIPPLED_CC */#ifdef TAINT#define str_gnum(str) (Str = (str), tainted |= Str->str_tainted, \ (Str->str_nok ? Str->str_u.str_nval : str_2num(Str)))#else /* !TAINT */#define str_gnum(str) (Str = (str), (Str->str_nok ? Str->str_u.str_nval : str_2num(Str)))#endif /* TAINT*/#endif /* CRIPPLED_CC */EXT STR *Str;#define GROWSTR(pp,lp,len) if (*(lp) < (len)) growstr(pp,lp,len)#ifndef DOSISH#define STR_GROW(str,len) if ((str)->str_len < (len)) str_grow(str,len)#define Str_Grow str_grow#else/* extra parentheses intentionally NOT placed around "len"! */#define STR_GROW(str,len) if ((str)->str_len < (unsigned long)len) \ str_grow(str,(unsigned long)len)#define Str_Grow(str,len) str_grow(str,(unsigned long)(len))#endif /* DOSISH */#ifndef BYTEORDER#define BYTEORDER 0x1234#endif#if defined(htonl) && !defined(HAS_HTONL)#define HAS_HTONL#endif#if defined(htons) && !defined(HAS_HTONS)#define HAS_HTONS#endif#if defined(ntohl) && !defined(HAS_NTOHL)#define HAS_NTOHL#endif#if defined(ntohs) && !defined(HAS_NTOHS)#define HAS_NTOHS#endif#ifndef HAS_HTONL#if (BYTEORDER & 0xffff) != 0x4321#define HAS_HTONS#define HAS_HTONL#define HAS_NTOHS#define HAS_NTOHL#define MYSWAP#define htons my_swap#define htonl my_htonl#define ntohs my_swap#define ntohl my_ntohl#endif#else#if (BYTEORDER & 0xffff) == 0x4321#undef HAS_HTONS#undef HAS_HTONL#undef HAS_NTOHS#undef HAS_NTOHL#endif#endif/* * Little-endian byte order functions - 'v' for 'VAX', or 'reVerse'. * -DWS */#if BYTEORDER != 0x1234# define HAS_VTOHL# define HAS_VTOHS# define HAS_HTOVL# define HAS_HTOVS# if BYTEORDER == 0x4321# define vtohl(x) ((((x)&0xFF)<<24) \ +(((x)>>24)&0xFF) \ +(((x)&0x0000FF00)<<8) \ +(((x)&0x00FF0000)>>8) )# define vtohs(x) ((((x)&0xFF)<<8) + (((x)>>8)&0xFF))# define htovl(x) vtohl(x)# define htovs(x) vtohs(x)# endif /* otherwise default to functions in util.c */#endif#ifdef CASTNEGFLOAT#define U_S(what) ((unsigned short)(what))#define U_I(what) ((unsigned int)(what))#define U_L(what) ((unsigned long)(what))#elseunsigned long castulong();#define U_S(what) ((unsigned int)castulong(what))#define U_I(what) ((unsigned int)castulong(what))#define U_L(what) (castulong(what))#endifCMD *add_label();CMD *block_head();CMD *append_line();CMD *make_acmd();CMD *make_ccmd();CMD *make_icmd();CMD *invert();CMD *addcond();CMD *addloop();CMD *wopt();CMD *over();STAB *stabent();STAB *genstab();ARG *stab2arg();ARG *op_new();ARG *make_op();ARG *make_match();ARG *make_split();ARG *rcatmaybe();ARG *listish();ARG *maybelistish();ARG *localize();ARG *fixeval();ARG *jmaybe();ARG *l();ARG *fixl();ARG *mod_match();ARG *make_list();ARG *cmd_to_arg();ARG *addflags();ARG *hide_ary();ARG *cval_to_arg();STR *str_new();STR *stab_str();int apply();int do_each();int do_subr();int do_match();int do_unpack();int eval(); /* this evaluates expressions */int do_eval(); /* this evaluates eval operator */int do_assign();SUBR *make_sub();FCMD *load_format();char *scanpat();char *scansubst();char *scantrans();char *scanstr();char *scanident();char *str_append_till();char *str_gets();char *str_grow();bool do_open();bool do_close();bool do_print();bool do_aprint();bool do_exec();bool do_aexec();int do_subst();int cando();int ingroup();int whichsig();int userinit();#ifdef CRYPTSCRIPTvoid cryptswitch();#endifvoid str_replace();void str_inc();void str_dec();void str_free();void cmd_free();void arg_free();void spat_free();void regfree();void stab_clear();void do_chop();void do_vop();void do_write();void do_join();void do_sprintf();void do_accept();void do_pipe();void do_vecset();void do_unshift();void do_execfree();void magicalize();void magicname();void savelist();void saveitem();void saveint();void savelong();void savesptr();void savehptr();void restorelist();void repeatcpy();void make_form();void dehoist();void format();void my_unexec();void fatal();void warn();#ifdef DEBUGGINGvoid dump_all();void dump_cmd();void dump_arg();void dump_flags();void dump_stab();void dump_spat();#endif#ifdef MSTATSvoid mstats();#endifHASH *savehash();ARRAY *saveary();EXT char **origargv;EXT int origargc;EXT char **origenviron;extern char **environ;EXT long subline INIT(0);EXT STR *subname INIT(Nullstr);EXT int arybase INIT(0);struct outrec { long o_lines; char *o_str; int o_len;};EXT struct outrec outrec;EXT struct outrec toprec;EXT STAB *stdinstab INIT(Nullstab);EXT STAB *last_in_stab INIT(Nullstab);EXT STAB *defstab INIT(Nullstab);EXT STAB *argvstab INIT(Nullstab);EXT STAB *envstab INIT(Nullstab);EXT STAB *sigstab INIT(Nullstab);EXT STAB *defoutstab INIT(Nullstab);EXT STAB *curoutstab INIT(Nullstab);EXT STAB *argvoutstab INIT(Nullstab);EXT STAB *incstab INIT(Nullstab);EXT STAB *leftstab INIT(Nullstab);EXT STAB *amperstab INIT(Nullstab);EXT STAB *rightstab INIT(Nullstab);EXT STAB *DBstab INIT(Nullstab);EXT STAB *DBline INIT(Nullstab);EXT STAB *DBsub INIT(Nullstab);EXT HASH *defstash; /* main symbol table */EXT HASH *curstash; /* symbol table for current package */EXT HASH *debstash; /* symbol table for perldb package */EXT STR *curstname; /* name of current package */EXT STR *freestrroot INIT(Nullstr);EXT STR *lastretstr INIT(Nullstr);EXT STR *DBsingle INIT(Nullstr);EXT STR *DBtrace INIT(Nullstr);EXT STR *DBsignal INIT(Nullstr);EXT STR *formfeed INIT(Nullstr);EXT int lastspbase;EXT int lastsize;EXT char *hexdigit INIT("0123456789abcdef0123456789ABCDEFx");EXT char *origfilename;EXT FILE * VOLATILE rsfp INIT(Nullfp);EXT char buf[1024];EXT char *bufptr;EXT char *oldbufptr;EXT char *oldoldbufptr;EXT char *bufend;EXT STR *linestr INIT(Nullstr);EXT char *rs INIT("\n");EXT int rschar INIT('\n'); /* final char of rs, or 0777 if none */EXT int rslen INIT(1);EXT bool rspara INIT(FALSE);EXT char *ofs INIT(Nullch);EXT int ofslen INIT(0);EXT char *ors INIT(Nullch);EXT int orslen INIT(0);EXT char *ofmt INIT(Nullch);EXT char *inplace INIT(Nullch);EXT char *nointrp INIT("");EXT bool preprocess INIT(FALSE);EXT bool minus_n INIT(FALSE);EXT bool minus_p INIT(FALSE);EXT bool minus_l INIT(FALSE);EXT bool minus_a INIT(FALSE);EXT bool doswitches INIT(FALSE);EXT bool dowarn INIT(FALSE);EXT bool doextract INIT(FALSE);EXT bool allstabs INIT(FALSE); /* init all customary symbols in symbol table?*/EXT bool sawampersand INIT(FALSE); /* must save all match strings */EXT bool sawstudy INIT(FALSE); /* do fbminstr on all strings */EXT bool sawi INIT(FALSE); /* study must assume case insensitive */EXT bool sawvec INIT(FALSE);EXT bool localizing INIT(FALSE); /* are we processing a local() list? */#ifndef MAXSYSFD# define MAXSYSFD 2#endifEXT int maxsysfd INIT(MAXSYSFD); /* top fd to pass to subprocesses */#ifdef CSHEXT char *cshname INIT(CSH);EXT int cshlen INIT(0);#endif /* CSH */#ifdef TAINTEXT bool tainted INIT(FALSE); /* using variables controlled by $< */EXT bool taintanyway INIT(FALSE); /* force taint checks when !set?id */#endifEXT bool nomemok INIT(FALSE); /* let malloc context handle nomem */#ifndef DOSISH#define TMPPATH "/tmp/perl-eXXXXXX"#else#define TMPPATH "plXXXXXX"#endif /* MSDOS */EXT char *e_tmpname;EXT FILE *e_fp INIT(Nullfp);EXT char tokenbuf[256];EXT int expectterm INIT(TRUE); /* how to interpret ambiguous tokens */EXT VOLATILE int in_eval INIT(FALSE); /* trap fatal errors? */EXT int multiline INIT(0); /* $*--do strings hold >1 line? */EXT int forkprocess; /* so do_open |- can return proc# */EXT int do_undump INIT(0); /* -u or dump seen? */EXT int error_count INIT(0); /* how many errors so far, max 10 */EXT int multi_start INIT(0); /* 1st line of multi-line string */EXT int multi_end INIT(0); /* last line of multi-line string */EXT int multi_open INIT(0); /* delimiter of said string */EXT int multi_close INIT(0); /* delimiter of said string */FILE *popen();/* char *str_get(); */STR *interp();void free_arg();STIO *stio_new();void hoistmust();void scanconst();EXT struct stat statbuf;EXT struct stat statcache;EXT STAB *statstab INIT(Nullstab);EXT STR *statname INIT(Nullstr);#ifndef MSDOSEXT struct tms timesbuf;#endifEXT int uid;EXT int euid;EXT int gid;EXT int egid;UIDTYPE getuid();UIDTYPE geteuid();GIDTYPE getgid();GIDTYPE getegid();EXT int unsafe;#ifdef DEBUGGINGEXT VOLATILE int debug INIT(0);EXT int dlevel INIT(0);EXT int dlmax INIT(128);EXT char *debname;EXT char *debdelim;#define YYDEBUG 1#endifEXT int perldb INIT(0);#define YYMAXDEPTH 300EXT line_t cmdline INIT(NOLINE);EXT STR str_undef;EXT STR str_no;EXT STR str_yes;/* runtime control stuff */EXT struct loop { char *loop_label; /* what the loop was called, if anything */ int loop_sp; /* stack pointer to copy stuff down to */ jmp_buf loop_env;} *loop_stack;EXT int loop_ptr INIT(-1);EXT int loop_max INIT(128);EXT jmp_buf top_env;EXT char * VOLATILE goto_targ INIT(Nullch); /* cmd_exec gets strange when set */struct ufuncs { int (*uf_val)(); int (*uf_set)(); int uf_index;};EXT ARRAY *stack; /* THE STACK */EXT ARRAY * VOLATILE savestack; /* to save non-local values on */EXT ARRAY *tosave; /* strings to save on recursive subroutine */EXT ARRAY *lineary; /* lines of script for debugger */EXT ARRAY *dbargs; /* args to call listed by caller function */EXT ARRAY *fdpid; /* keep fd-to-pid mappings for mypopen */EXT HASH *pidstatus; /* keep pid-to-status mappings for waitpid */EXT int *di; /* for tmp use in debuggers */EXT char *dc;EXT short *ds;/* Fix these up for __STDC__ */EXT time_t basetime INIT(0);char *mktemp();#ifndef STANDARD_C/* All of these are in stdlib.h or time.h for ANSI C */double atof();long time();struct tm *gmtime(), *localtime();char *index(), *rindex();char *strcpy(), *strcat();#endif /* ! STANDARD_C */#ifdef EUNICE#define UNLINK unlnkint unlnk();#else#define UNLINK unlink#endif#ifndef HAS_SETREUID#ifdef HAS_SETRESUID#define setreuid(r,e) setresuid(r,e,-1)#define HAS_SETREUID#endif#endif#ifndef HAS_SETREGID#ifdef HAS_SETRESGID#define setregid(r,e) setresgid(r,e,-1)#define HAS_SETREGID#endif#endif#define SCAN_DEF 0#define SCAN_TR 1#define SCAN_REPL 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -