home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / sh / mode.h < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-12  |  3.1 KB  |  206 lines

  1. #
  2. /*
  3.  *    UNIX shell
  4.  */
  5.  
  6.  
  7. #define BYTESPERWORD    (sizeof(char *))
  8.  
  9. TYPE char    CHAR;
  10. TYPE char    BOOL;
  11. TYPE int    UFD;
  12. TYPE int    INT;
  13. TYPE float    REAL;
  14. TYPE char    *ADDRESS;
  15. TYPE long int    L_INT;
  16. TYPE int    VOID;
  17. TYPE unsigned    POS;
  18. TYPE char    *STRING;
  19. TYPE char    MSG[];
  20. TYPE int    PIPE[];
  21. TYPE char    *STKPTR;
  22. TYPE char    *BYTPTR;
  23.  
  24. STRUCT stat    STATBUF;    /* defined in /usr/sys/stat.h */
  25. STRUCT blk    *BLKPTR;
  26. STRUCT fileblk    FILEBLK;
  27. STRUCT filehdr    FILEHDR;
  28. STRUCT fileblk    *FILE;
  29. STRUCT trenod    *TREPTR;
  30. STRUCT forknod    *FORKPTR;
  31. STRUCT comnod    *COMPTR;
  32. STRUCT swnod    *SWPTR;
  33. STRUCT regnod    *REGPTR;
  34. STRUCT parnod    *PARPTR;
  35. STRUCT ifnod    *IFPTR;
  36. STRUCT whnod    *WHPTR;
  37. STRUCT fornod    *FORPTR;
  38. STRUCT lstnod    *LSTPTR;
  39. STRUCT argnod    *ARGPTR;
  40. STRUCT dolnod    *DOLPTR;
  41. STRUCT ionod    *IOPTR;
  42. STRUCT namnod    NAMNOD;
  43. STRUCT namnod    *NAMPTR;
  44. STRUCT sysnod    SYSNOD;
  45. STRUCT sysnod    *SYSPTR;
  46. STRUCT sysnod    SYSTAB[];
  47. #define NIL    ((char*)0)
  48.  
  49.  
  50. /* the following nonsense is required
  51.  * because casts turn an Lvalue
  52.  * into an Rvalue so two cheats
  53.  * are necessary, one for each context.
  54.  */
  55. union { int _cheat;};
  56. #define Lcheat(a)    ((a)._cheat)
  57. #define Rcheat(a)    ((int)(a))
  58.  
  59.  
  60. /* address puns for storage allocation */
  61. UNION {
  62.     FORKPTR    _forkptr;
  63.     COMPTR    _comptr;
  64.     PARPTR    _parptr;
  65.     IFPTR    _ifptr;
  66.     WHPTR    _whptr;
  67.     FORPTR    _forptr;
  68.     LSTPTR    _lstptr;
  69.     BLKPTR    _blkptr;
  70.     NAMPTR    _namptr;
  71.     BYTPTR    _bytptr;
  72.     }    address;
  73.  
  74.  
  75. /* for functions that do not return values */
  76. struct void {INT vvvvvvvv;};
  77.  
  78.  
  79. /* heap storage */
  80. struct blk {
  81.     BLKPTR    word;
  82. };
  83.  
  84. #define    BUFSIZ    64
  85. struct fileblk {
  86.     UFD    fdes;
  87.     POS    flin;
  88.     BOOL    feof;
  89.     CHAR    fsiz;
  90.     STRING    fnxt;
  91.     STRING    fend;
  92.     STRING    *feval;
  93.     FILE    fstak;
  94.     CHAR    fbuf[BUFSIZ];
  95. };
  96.  
  97. /* for files not used with file descriptors */
  98. struct filehdr {
  99.     UFD    fdes;
  100.     POS    flin;
  101.     BOOL    feof;
  102.     CHAR    fsiz;
  103.     STRING    fnxt;
  104.     STRING    fend;
  105.     STRING    *feval;
  106.     FILE    fstak;
  107.     CHAR    _fbuf[1];
  108. };
  109.  
  110. struct sysnod {
  111.     STRING    sysnam;
  112.     INT    sysval;
  113. };
  114.  
  115. /* this node is a proforma for those that follow */
  116. struct trenod {
  117.     INT    tretyp;
  118.     IOPTR    treio;
  119. };
  120.  
  121. /* dummy for access only */
  122. struct argnod {
  123.     ARGPTR    argnxt;
  124.     CHAR    argval[1];
  125. };
  126.  
  127. struct dolnod {
  128.     DOLPTR    dolnxt;
  129.     INT    doluse;
  130.     CHAR    dolarg[1];
  131. };
  132.  
  133. struct forknod {
  134.     INT    forktyp;
  135.     IOPTR    forkio;
  136.     TREPTR    forktre;
  137. };
  138.  
  139. struct comnod {
  140.     INT    comtyp;
  141.     IOPTR    comio;
  142.     ARGPTR    comarg;
  143.     ARGPTR    comset;
  144. };
  145.  
  146. struct ifnod {
  147.     INT    iftyp;
  148.     TREPTR    iftre;
  149.     TREPTR    thtre;
  150.     TREPTR    eltre;
  151. };
  152.  
  153. struct whnod {
  154.     INT    whtyp;
  155.     TREPTR    whtre;
  156.     TREPTR    dotre;
  157. };
  158.  
  159. struct fornod {
  160.     INT    fortyp;
  161.     TREPTR    fortre;
  162.     STRING    fornam;
  163.     COMPTR    forlst;
  164. };
  165.  
  166. struct swnod {
  167.     INT    swtyp;
  168.     STRING    swarg;
  169.     REGPTR    swlst;
  170. };
  171.  
  172. struct regnod {
  173.     ARGPTR    regptr;
  174.     TREPTR    regcom;
  175.     REGPTR    regnxt;
  176. };
  177.  
  178. struct parnod {
  179.     INT    partyp;
  180.     TREPTR    partre;
  181. };
  182.  
  183. struct lstnod {
  184.     INT    lsttyp;
  185.     TREPTR    lstlef;
  186.     TREPTR    lstrit;
  187. };
  188.  
  189. struct ionod {
  190.     INT    iofile;
  191.     STRING    ioname;
  192.     IOPTR    ionxt;
  193.     IOPTR    iolst;
  194. };
  195.  
  196. #define    FORKTYPE    (sizeof(struct forknod))
  197. #define    COMTYPE        (sizeof(struct comnod))
  198. #define    IFTYPE        (sizeof(struct ifnod))
  199. #define    WHTYPE        (sizeof(struct whnod))
  200. #define    FORTYPE        (sizeof(struct fornod))
  201. #define    SWTYPE        (sizeof(struct swnod))
  202. #define    REGTYPE        (sizeof(struct regnod))
  203. #define    PARTYPE        (sizeof(struct parnod))
  204. #define    LSTTYPE        (sizeof(struct lstnod))
  205. #define    IOTYPE        (sizeof(struct ionod))
  206.