perl 3.0 patch #14 patch #13, continued
[p5sagit/p5-mst-13.2.git] / stab.h
diff --git a/stab.h b/stab.h
index cd38d6d..db2d60c 100644 (file)
--- a/stab.h
+++ b/stab.h
@@ -1,35 +1,83 @@
-/* $Header: stab.h,v 1.0 87/12/18 13:06:18 root Exp $
+/* $Header: stab.h,v 3.0.1.2 90/03/12 17:00:43 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 1.0  87/12/18  13:06:18  root
- * Initial revision
+ * Revision 3.0.1.2  90/03/12  17:00:43  lwall
+ * patch13: did some ndir straightening up for Xenix
+ * 
+ * Revision 3.0.1.1  89/12/21  20:19:53  lwall
+ * patch7: in stab.h, added some CRIPPLED_CC support for Microport
+ * 
+ * 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;
-    CMD                *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;
 };
 
+#if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
+#define MICROPORT
+#endif
+
+#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)
+#ifdef MICROPORT       /* Microport 2.4 hack */
+ARRAY *stab_array();
+#else
+#define stab_array(stab)       (((STBP*)(stab->str_ptr))->stbp_array ? \
+                                ((STBP*)(stab->str_ptr))->stbp_array : \
+                                ((STBP*)(aadd(stab)->str_ptr))->stbp_array)
+#endif
+#define stab_xhash(stab)       (((STBP*)(stab->str_ptr))->stbp_hash)
+#ifdef MICROPORT       /* Microport 2.4 hack */
+HASH *stab_hash();
+#else
+#define stab_hash(stab)                (((STBP*)(stab->str_ptr))->stbp_hash ? \
+                                ((STBP*)(stab->str_ptr))->stbp_hash : \
+                                ((STBP*)(hadd(stab)->str_ptr))->stbp_hash)
+#endif                 /* Microport 2.4 hack */
+#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;
+    FILE       *ifp;           /* ifp and ofp are normally the same */
+    FILE       *ofp;           /* but sockets need separate streams */
+#ifdef READDIR
+    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;
 };
@@ -38,21 +86,29 @@ struct stio {
 #define IOF_START 2    /* check for null ARGV and substitute '-' */
 #define IOF_FLUSH 4    /* this fp wants a flush after write op */
 
+struct sub {
+    CMD                *cmd;
+    char       *filename;
+    long       depth;  /* >= 2 indicates recursive call */
+    ARRAY      *tosave;
+};
+
 #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 statusvalue;
-EXT int subsvalue;
+EXT int delaymagic INIT(0);
+#define DM_DELAY 1
+#define DM_REUID 2
+#define DM_REGID 4
 
 STAB *aadd();
 STAB *hadd();