diff options
Diffstat (limited to 'stab.h')
-rw-r--r-- | stab.h | 88 |
1 files changed, 59 insertions, 29 deletions
@@ -1,37 +1,65 @@ -/* $Header: stab.h,v 2.0 88/06/05 00:11:05 root Exp $ +/* $Header: stab.h,v 3.0 89/10/18 15:23:30 lwall Locked $ + * + * Copyright (c) 1989, Larry Wall + * + * You may distribute under the terms of the GNU General Public License + * as specified in the README file that comes with the perl 3.0 kit. * * $Log: stab.h,v $ - * Revision 2.0 88/06/05 00:11:05 root - * Baseline version 2.0. + * Revision 3.0 89/10/18 15:23:30 lwall + * 3.0 baseline * */ -struct stab { - struct stab *stab_next; - char *stab_name; - STR *stab_val; - struct stio *stab_io; - FCMD *stab_form; - ARRAY *stab_array; - HASH *stab_hash; - SUBR *stab_sub; - char stab_flags; +struct stabptrs { + char stbp_magic[4]; + STR *stbp_val; /* scalar value */ + struct stio *stbp_io; /* filehandle value */ + FCMD *stbp_form; /* format value */ + ARRAY *stbp_array; /* array value */ + HASH *stbp_hash; /* associative array value */ + SUBR *stbp_sub; /* subroutine value */ + int stbp_lastexpr; /* used by nothing_in_common() */ + line_t stbp_line; /* line first declared at (for -w) */ + char stbp_flags; }; +#define stab_magic(stab) (((STBP*)(stab->str_ptr))->stbp_magic) +#define stab_val(stab) (((STBP*)(stab->str_ptr))->stbp_val) +#define stab_io(stab) (((STBP*)(stab->str_ptr))->stbp_io) +#define stab_form(stab) (((STBP*)(stab->str_ptr))->stbp_form) +#define stab_xarray(stab) (((STBP*)(stab->str_ptr))->stbp_array) +#define stab_array(stab) (((STBP*)(stab->str_ptr))->stbp_array ? \ + ((STBP*)(stab->str_ptr))->stbp_array : \ + ((STBP*)(aadd(stab)->str_ptr))->stbp_array) +#define stab_xhash(stab) (((STBP*)(stab->str_ptr))->stbp_hash) +#define stab_hash(stab) (((STBP*)(stab->str_ptr))->stbp_hash ? \ + ((STBP*)(stab->str_ptr))->stbp_hash : \ + ((STBP*)(hadd(stab)->str_ptr))->stbp_hash) +#define stab_sub(stab) (((STBP*)(stab->str_ptr))->stbp_sub) +#define stab_lastexpr(stab) (((STBP*)(stab->str_ptr))->stbp_lastexpr) +#define stab_line(stab) (((STBP*)(stab->str_ptr))->stbp_line) +#define stab_flags(stab) (((STBP*)(stab->str_ptr))->stbp_flags) +#define stab_name(stab) (stab->str_magic->str_ptr) + #define SF_VMAGIC 1 /* call routine to dereference STR val */ #define SF_MULTI 2 /* seen more than once */ struct stio { - FILE *fp; - long lines; - long page; - long page_len; - long lines_left; - char *top_name; - STAB *top_stab; - char *fmt_name; - STAB *fmt_stab; - short subprocess; + FILE *ifp; /* ifp and ofp are normally the same */ + FILE *ofp; /* but sockets need separate streams */ +#if defined(I_DIRENT) || defined(I_SYSDIR) + DIR *dirp; /* for opendir, readdir, etc */ +#endif + long lines; /* $. */ + long page; /* $% */ + long page_len; /* $= */ + long lines_left; /* $- */ + char *top_name; /* $^ */ + STAB *top_stab; /* $^ */ + char *fmt_name; /* $~ */ + STAB *fmt_stab; /* $~ */ + short subprocess; /* -| or |- */ char type; char flags; }; @@ -49,18 +77,20 @@ struct sub { #define Nullstab Null(STAB*) -#define STAB_STR(s) (tmpstab = (s), tmpstab->stab_flags & SF_VMAGIC ? stab_str(tmpstab) : tmpstab->stab_val) -#define STAB_GET(s) (tmpstab = (s), str_get(tmpstab->stab_flags & SF_VMAGIC ? stab_str(tmpstab) : tmpstab->stab_val)) -#define STAB_GNUM(s) (tmpstab = (s), str_gnum(tmpstab->stab_flags & SF_VMAGIC ? stab_str(tmpstab) : tmpstab->stab_val)) +#define STAB_STR(s) (tmpstab = (s), stab_flags(tmpstab) & SF_VMAGIC ? stab_str(stab_val(tmpstab)->str_magic) : stab_val(tmpstab)) +#define STAB_GET(s) (tmpstab = (s), str_get(stab_flags(tmpstab) & SF_VMAGIC ? stab_str(tmpstab->str_magic) : stab_val(tmpstab))) +#define STAB_GNUM(s) (tmpstab = (s), str_gnum(stab_flags(tmpstab) & SF_VMAGIC ? stab_str(tmpstab->str_magic) : stab_val(tmpstab))) EXT STAB *tmpstab; EXT STAB *stab_index[128]; -EXT char *envname; /* place for ENV name being assigned--gross cheat */ -EXT char *signame; /* place for SIG name being assigned--gross cheat */ - EXT unsigned short statusvalue; +EXT int delaymagic INIT(0); +#define DM_DELAY 1 +#define DM_REUID 2 +#define DM_REGID 4 + STAB *aadd(); STAB *hadd(); |