/* $Header: perl.h,v 1.0.1.4 88/01/30 08:54:00 root Exp $ * * $Log: perl.h,v $ * Revision 1.0.1.4 88/01/30 08:54:00 root * patch9: changed #define YYDEBUG; to #define YYDEBUG 1 * * Revision 1.0.1.3 88/01/28 10:24:17 root * patch8: added eval operator. * * Revision 1.0.1.2 88/01/24 03:53:47 root * patch 2: hid str_peek() in #ifdef DEBUGGING. * * Revision 1.0.1.1 88/01/21 21:29:23 root * No longer defines STDSTDIO--gets it from config.h now. * * Revision 1.0 87/12/18 13:05:38 root * Initial revision * */ #define DEBUGGING #define VOIDUSED 1 #include "config.h" #ifndef BCOPY # define bcopy(s1,s2,l) memcpy(s2,s1,l); # define bzero(s,l) memset(s,0,l); #endif #include #include #include #include #include #ifdef TMINSYS #include #else #include #endif #include typedef struct arg ARG; typedef struct cmd CMD; typedef struct formcmd FCMD; typedef struct scanpat SPAT; typedef struct stab STAB; typedef struct stio STIO; typedef struct string STR; typedef struct atbl ARRAY; typedef struct htbl HASH; #include "str.h" #include "form.h" #include "stab.h" #include "spat.h" #include "arg.h" #include "cmd.h" #include "array.h" #include "hash.h" #ifdef CHARSPRINTF char *sprintf(); #else int sprintf(); #endif /* 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 ))) #ifdef DEBUGGING #define str_peek(str) (Str = (str), (Str->str_pok ? Str->str_ptr : (Str->str_nok ? (sprintf(buf,"num(%g)",Str->str_nval),buf) : "" ))) #endif #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) CMD *add_label(); CMD *block_head(); CMD *append_line(); CMD *make_acmd(); CMD *make_ccmd(); CMD *invert(); CMD *addcond(); CMD *addloop(); CMD *wopt(); SPAT *stab_to_spat(); STAB *stabent(); ARG *stab_to_arg(); ARG *op_new(); ARG *make_op(); ARG *make_lval(); ARG *make_match(); ARG *make_split(); ARG *flipflip(); STR *arg_to_str(); STR *str_new(); STR *stab_str(); STR *eval(); /* this evaluates expressions */ STR *do_eval(); /* this evaluates eval operator */ FCMD *load_format(); char *scanpat(); char *scansubst(); char *scantrans(); char *scanstr(); char *scanreg(); char *reg_get(); char *str_append_till(); char *str_gets(); bool do_match(); bool do_open(); bool do_close(); bool do_print(); int do_subst(); void str_free(); void freearg(); EXT int line INIT(0); EXT int arybase INIT(0); struct outrec { int o_lines; char *o_str; int o_len; }; EXT struct outrec outrec; EXT struct outrec toprec; 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 STR *freestrroot INIT(Nullstr); EXT FILE *rsfp; EXT char buf[1024]; EXT char *bufptr INIT(buf); EXT STR *linestr INIT(Nullstr); EXT char record_separator INIT('\n'); EXT char *ofs INIT(Nullch); EXT char *ors INIT(Nullch); EXT char *ofmt INIT(Nullch); EXT char *inplace INIT(Nullch); EXT char tokenbuf[256]; EXT int expectterm INIT(TRUE); EXT int lex_newlines INIT(FALSE); EXT int in_eval INIT(FALSE); FILE *popen(); /* char *str_get(); */ STR *interp(); void free_arg(); STIO *stio_new(); EXT struct stat statbuf; EXT struct tms timesbuf; #ifdef DEBUGGING EXT int debug INIT(0); EXT int dlevel INIT(0); EXT char debname[40]; EXT char debdelim[40]; #define YYDEBUG 1 extern int yydebug; #endif EXT STR str_no; EXT STR str_yes; /* runtime control stuff */ EXT struct loop { char *loop_label; jmp_buf loop_env; } loop_stack[32]; EXT int loop_ptr INIT(-1); EXT jmp_buf top_env; EXT jmp_buf eval_env; EXT char *goto_targ INIT(Nullch); /* cmd_exec gets strange when set */ double atof(); long time(); struct tm *gmtime(), *localtime(); #ifdef EUNICE #define UNLINK(f) while (unlink(f) >= 0) #else #define UNLINK unlink #endif