Annotation of coherent/a/usr/bob/korn/tree.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * command trees for compile/execute
                      3:  */
                      4: 
                      5: /* $Header: tree.h,v 3.1 88/11/03 09:14:02 egisin Exp $ */
                      6: 
                      7: #define        NOBLOCK ((struct op *)NULL)
                      8: #define        NOWORD  ((char *)NULL)
                      9: #define        NOWORDS ((char **)NULL)
                     10: 
                     11: /*
                     12:  * Description of a command or an operation on commands.
                     13:  */
                     14: struct op {
                     15:        int     type;                   /* operation type, see below */
                     16:        char  **args;                   /* arguments to a command */
                     17:        char  **vars;                   /* variable assignments */
                     18:        struct ioword   **ioact;        /* IO actions (eg, < > >>) */
                     19:        struct op *left, *right;        /* descendents */
                     20:        char   *str;            /* identifier for case and for (use vars[0]) */
                     21: };
                     22: 
                     23: /* Tree.type values */
                     24: #define        TEOF    0
                     25: #define        TCOM    1               /* command */
                     26: #define        TPAREN  2               /* (c-list) */
                     27: #define        TPIPE   3               /* a | b */
                     28: #define        TLIST   4               /* a [&;] b */
                     29: #define        TOR     5               /* || */
                     30: #define        TAND    6               /* && */
                     31: #define        TFOR    7
                     32: #define        TCASE   9
                     33: #define        TIF     10
                     34: #define        TWHILE  11
                     35: #define        TUNTIL  12
                     36: #define        TELIF   13
                     37: #define        TPAT    14              /* pattern in case */
                     38: #define        TBRACE  15              /* {c-list} */
                     39: #define        TASYNC  16              /* c & */
                     40: #define        TFUNCT  17              /* function name { command; } */
                     41: #define        TTIME   18              /* time pipeline */
                     42: #define        TEXEC   19              /* fork/exec eval'd TCOM */
                     43: 
                     44: /*
                     45:  * prefix codes for words in command tree
                     46:  */
                     47: #define        EOS     0               /* end of string */
                     48: #define        CHAR    1               /* unquoted character */
                     49: #define        QCHAR   2               /* quoted character */
                     50: #define        COMSUB  3               /* $() substitution (0 terminated) */
                     51: #define        OQUOTE  4               /* opening " or ' */
                     52: #define        CQUOTE  5               /* closing " or ' */
                     53: #define        OSUBST  6               /* opening ${ substitution */
                     54: #define        CSUBST  7               /* closing } of above */
                     55: 
                     56: /*
                     57:  * IO redirection
                     58:  */
                     59: struct ioword {
                     60:        short   unit;   /* unit affected */
                     61:        short   flag;   /* action (below) */
                     62:        char   *name;   /* file name */
                     63: };
                     64: 
                     65: /* ioword.flag */
                     66: #define        IOREAD  BIT(0)  /* < */
                     67: #define        IOHERE  BIT(1)  /* << (here file) */
                     68: #define        IOWRITE BIT(2)  /* > */
                     69: #define        IOCAT   BIT(3)  /* >> */
                     70: #define        IOXHERE BIT(4)  /* expand in << */
                     71: #define        IODUP   BIT(5)  /* [<>]& */
                     72: 
                     73: /* values for E_LOOP longjmp */
                     74: #define        LBREAK  1
                     75: #define        LCONTIN 2
                     76: 
                     77: /* execute/exchild flags */
                     78: #define        XEXEC   BIT(0)          /* execute without forking */
                     79: #define        XFORK   BIT(5)          /* fork before executing */
                     80: #define        XBGND   BIT(1)          /* command & */
                     81: #define        XPIPEI  BIT(2)          /* input is pipe */
                     82: #define        XPIPEO  BIT(3)          /* output is pipe */
                     83: #define        XPIPE   (XPIPEI|XPIPEO) /* member of pipe */
                     84: #define        XXCOM   BIT(4)          /* dup2 xcomfd to 1 */
                     85: 
                     86: /*
                     87:  * flags to control expansion of words
                     88:  */
                     89: #define        DOBLANK BIT(1)          /* perform blank interpretation */
                     90: #define        DOGLOB  BIT(2)          /* expand [?* */
                     91: #define        DOPAT   BIT(3)          /* quote *?[ */
                     92: #define        DOTILDE BIT(5)          /* expand ~ */
                     93: 
                     94: /* job.c: job control primatives */
                     95: int    execute ARGS((struct op *, int flags)); /* execute tree */
                     96: int    exchild ARGS((struct op *, int flags)); /* execute tree as child */
                     97: int    waitfor ARGS((int job));                /* wait for job completion */
                     98: int    waitlast ARGS((void));                  /* wait for last job */
                     99: 
                    100: /* eval.c: word expansion */
                    101: char  **eval ARGS((char **wv, int flag));      /* expand words */
                    102: char   *evalstr ARGS((char *wp, int flags));   /* expand word */
                    103: char   *substitute ARGS((Const char *s, int flags)); /* compile and expand string */
                    104: 
                    105: /* tree.c: command trees */
                    106: void   ptree ARGS((struct op *t, FILE *f));    /* print tree */
                    107: char   *wdscan ARGS((char *wp, int c));                /* scan word for prefix */
                    108: char   *wdcopy ARGS((char *wp, Area *));       /* copy word */
                    109: struct op *tcopy ARGS((struct op *t, Area *)); /* copy tree */
                    110: void   tfree ARGS((struct op *t, Area *));     /* free tree */
                    111: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.