home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / language / perl / Source / H / Stab < prev    next >
Encoding:
Text File  |  1990-11-08  |  4.5 KB  |  136 lines

  1. /* $Header: stab.h,v 3.0.1.4 90/10/16 10:33:08 lwall Locked $
  2.  *
  3.  *    Copyright (c) 1989, Larry Wall
  4.  *
  5.  *    You may distribute under the terms of the GNU General Public License
  6.  *    as specified in the README file that comes with the perl 3.0 kit.
  7.  *
  8.  * $Log:    stab.h,v $
  9.  * Revision 3.0.1.4  90/10/16  10:33:08  lwall
  10.  * patch29: *foo now prints as *package'foo
  11.  * patch29: package behavior is now more consistent
  12.  * 
  13.  * Revision 3.0.1.3  90/08/09  05:18:42  lwall
  14.  * patch19: Added support for linked-in C subroutines
  15.  * 
  16.  * Revision 3.0.1.2  90/03/12  17:00:43  lwall
  17.  * patch13: did some ndir straightening up for Xenix
  18.  * 
  19.  * Revision 3.0.1.1  89/12/21  20:19:53  lwall
  20.  * patch7: in stab.h, added some CRIPPLED_CC support for Microport
  21.  * 
  22.  * Revision 3.0  89/10/18  15:23:30  lwall
  23.  * 3.0 baseline
  24.  * 
  25.  */
  26.  
  27. struct stabptrs {
  28.     char        stbp_magic[4];
  29.     STR        *stbp_val;    /* scalar value */
  30.     struct stio *stbp_io;    /* filehandle value */
  31.     FCMD    *stbp_form;    /* format value */
  32.     ARRAY    *stbp_array;    /* array value */
  33.     HASH    *stbp_hash;    /* associative array value */
  34.     HASH    *stbp_stash;    /* symbol table for this stab */
  35.     SUBR    *stbp_sub;    /* subroutine value */
  36.     int        stbp_lastexpr;    /* used by nothing_in_common() */
  37.     line_t    stbp_line;    /* line first declared at (for -w) */
  38.     char    stbp_flags;
  39. };
  40.  
  41. #if defined(CRIPPLED_CC) && (defined(iAPX286) || defined(M_I286) || defined(I80286))
  42. #define MICROPORT
  43. #endif
  44.  
  45. #define stab_magic(stab)    (((STBP*)(stab->str_ptr))->stbp_magic)
  46. #define stab_val(stab)        (((STBP*)(stab->str_ptr))->stbp_val)
  47. #define stab_io(stab)        (((STBP*)(stab->str_ptr))->stbp_io)
  48. #define stab_form(stab)        (((STBP*)(stab->str_ptr))->stbp_form)
  49. #define stab_xarray(stab)    (((STBP*)(stab->str_ptr))->stbp_array)
  50. #ifdef    MICROPORT    /* Microport 2.4 hack */
  51. ARRAY *stab_array();
  52. #else
  53. #define stab_array(stab)    (((STBP*)(stab->str_ptr))->stbp_array ? \
  54.                  ((STBP*)(stab->str_ptr))->stbp_array : \
  55.                  ((STBP*)(aadd(stab)->str_ptr))->stbp_array)
  56. #endif
  57. #define stab_xhash(stab)    (((STBP*)(stab->str_ptr))->stbp_hash)
  58. #ifdef    MICROPORT    /* Microport 2.4 hack */
  59. HASH *stab_hash();
  60. #else
  61. #define stab_hash(stab)        (((STBP*)(stab->str_ptr))->stbp_hash ? \
  62.                  ((STBP*)(stab->str_ptr))->stbp_hash : \
  63.                  ((STBP*)(hadd(stab)->str_ptr))->stbp_hash)
  64. #endif            /* Microport 2.4 hack */
  65. #define stab_stash(stab)    (((STBP*)(stab->str_ptr))->stbp_stash)
  66. #define stab_sub(stab)        (((STBP*)(stab->str_ptr))->stbp_sub)
  67. #define stab_lastexpr(stab)    (((STBP*)(stab->str_ptr))->stbp_lastexpr)
  68. #define stab_line(stab)        (((STBP*)(stab->str_ptr))->stbp_line)
  69. #define stab_flags(stab)    (((STBP*)(stab->str_ptr))->stbp_flags)
  70. #define stab_name(stab)        (stab->str_magic->str_ptr)
  71.  
  72. #define SF_VMAGIC 1        /* call routine to dereference STR val */
  73. #define SF_MULTI 2        /* seen more than once */
  74.  
  75. struct stio {
  76.     FILE    *ifp;        /* ifp and ofp are normally the same */
  77.     FILE    *ofp;        /* but sockets need separate streams */
  78. #ifdef READDIR
  79.     DIR        *dirp;        /* for opendir, readdir, etc */
  80. #endif
  81.     long    lines;        /* $. */
  82.     long    page;        /* $% */
  83.     long    page_len;    /* $= */
  84.     long    lines_left;    /* $- */
  85.     char    *top_name;    /* $^ */
  86.     STAB    *top_stab;    /* $^ */
  87.     char    *fmt_name;    /* $~ */
  88.     STAB    *fmt_stab;    /* $~ */
  89.     short    subprocess;    /* -| or |- */
  90.     char    type;
  91.     char    flags;
  92. #ifdef ARM
  93.     int        statval;    /* Return value from stat */
  94.     struct stat    statcache;    /* File stat values */
  95.     char    *name;        /* File name */
  96. #endif
  97. };
  98.  
  99. #define IOF_ARGV 1    /* this fp iterates over ARGV */
  100. #define IOF_START 2    /* check for null ARGV and substitute '-' */
  101. #define IOF_FLUSH 4    /* this fp wants a flush after write op */
  102.  
  103. struct sub {
  104.     CMD        *cmd;
  105.     int        (*usersub)();
  106.     int        userindex;
  107.     STAB    *filestab;
  108.     long    depth;    /* >= 2 indicates recursive call */
  109.     ARRAY    *tosave;
  110. };
  111.  
  112. #define Nullstab Null(STAB*)
  113.  
  114. #define STAB_STR(s) (tmpstab = (s), stab_flags(tmpstab) & SF_VMAGIC ? stab_str(stab_val(tmpstab)->str_magic) : stab_val(tmpstab))
  115. #define STAB_GET(s) (tmpstab = (s), str_get(stab_flags(tmpstab) & SF_VMAGIC ? stab_str(tmpstab->str_magic) : stab_val(tmpstab)))
  116. #define STAB_GNUM(s) (tmpstab = (s), str_gnum(stab_flags(tmpstab) & SF_VMAGIC ? stab_str(tmpstab->str_magic) : stab_val(tmpstab)))
  117.  
  118. EXT STAB *tmpstab;
  119.  
  120. EXT STAB *stab_index[128];
  121.  
  122. EXT int statusvalue;
  123.  
  124. EXT int delaymagic INIT(0);
  125. #define DM_DELAY 1
  126. #define DM_REUID 2
  127. #define DM_REGID 4
  128.  
  129. extern STAB *aadd PROTO((STAB *));
  130. extern STAB *hadd PROTO((STAB *));
  131. extern STAB *fstab PROTO((char *));
  132. extern void stabset PROTO((STR *, STR *));
  133. extern int whichsig PROTO((char *));
  134. extern void stab_check PROTO((int, int));
  135. extern void stab_fullname PROTO((STR *, STAB *));
  136.