Annotation of lucent/sys/src/cmd/rc/rc.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Plan9 is defined for plan 9
                      3:  * V9 is defined for 9th edition
                      4:  * Sun is defined for sun-os
                      5:  * Please don't litter the code with ifdefs.  The three below (and one in
                      6:  * getflags) should be enough.
                      7:  */
                      8: #define        Plan9
                      9: #ifdef Plan9
                     10: #include <u.h>
                     11: #include <libc.h>
                     12: #define        NSIG    32
                     13: #define        SIGINT  2
                     14: #define        SIGQUIT 3
                     15: #endif
                     16: #ifdef V9
                     17: #include <signal.h>
                     18: #include <libc.h>
                     19: #endif
                     20: #ifdef Sun
                     21: #include <signal.h>
                     22: #endif
                     23: #define        YYMAXDEPTH      500
                     24: #ifndef PAREN
                     25: #include "x.tab.h"
                     26: #endif
                     27: typedef struct tree tree;
                     28: typedef struct word word;
                     29: typedef struct io io;
                     30: typedef union code code;
                     31: typedef struct var var;
                     32: typedef struct list list;
                     33: typedef struct redir redir;
                     34: typedef struct thread thread;
                     35: typedef struct builtin builtin;
                     36: 
                     37: struct tree{
                     38:        int type;
                     39:        int rtype, fd0, fd1;            /* details of REDIR PIPE DUP tokens */
                     40:        char *str;
                     41:        int quoted;
                     42:        int iskw;
                     43:        tree *child[3];
                     44:        tree *next;
                     45: };
                     46: tree *newtree(void);
                     47: tree *token(char*, int), *klook(char*), *tree1(int, tree*);
                     48: tree *tree2(int, tree*, tree*), *tree3(int, tree*, tree*, tree*);
                     49: tree *mung1(tree*, tree*), *mung2(tree*, tree*, tree*);
                     50: tree *mung3(tree*, tree*, tree*, tree*), *epimung(tree*, tree*);
                     51: tree *simplemung(tree*), *heredoc(tree*);
                     52: void freetree(tree*);
                     53: tree *cmdtree;
                     54: /*
                     55:  * The first word of any code vector is a reference count.
                     56:  * Always create a new reference to a code vector by calling codecopy(.).
                     57:  * Always call codefree(.) when deleting a reference.
                     58:  */
                     59: union code{
                     60:        void (*f)(void);
                     61:        int i;
                     62:        char *s;
                     63: };
                     64: char *promptstr;
                     65: int doprompt;
                     66: #define        NTOK    8192
                     67: char tok[NTOK];
                     68: #define        APPEND  1
                     69: #define        WRITE   2
                     70: #define        READ    3
                     71: #define        HERE    4
                     72: #define        DUPFD   5
                     73: #define        CLOSE   6
                     74: struct var{
                     75:        char *name;             /* ascii name */
                     76:        word *val;      /* value */
                     77:        int changed;
                     78:        code *fn;               /* pointer to function's code vector */
                     79:        int fnchanged;
                     80:        int pc;                 /* pc of start of function */
                     81:        var *next;      /* next on hash or local list */
                     82: };
                     83: var *vlook(char*), *gvlook(char*), *newvar(char*, var*);
                     84: #define        NVAR    521
                     85: var *gvar[NVAR];                               /* hash for globals */
                     86: #define        new(type)       ((type *)emalloc(sizeof(type)))
                     87: char *emalloc(long);
                     88: void *Malloc(ulong);
                     89: void efree(char*);
                     90: #define        NOFILE  128             /* should come from <param.h> */
                     91: struct here{
                     92:        tree *tag;
                     93:        char *name;
                     94:        struct here *next;
                     95: };
                     96: int mypid;
                     97: /*
                     98:  * Glob character escape in strings:
                     99:  *     In a string, GLOB must be followed by *?[ or GLOB.
                    100:  *     GLOB* matches any string
                    101:  *     GLOB? matches any single character
                    102:  *     GLOB[...] matches anything in the brackets
                    103:  *     GLOBGLOB matches GLOB
                    104:  */
                    105: #define        GLOB    ((char)0x01)
                    106: /*
                    107:  * onebyte(c), twobyte(c), threebyte(c)
                    108:  * Is c the first character of a one- two- or three-byte utf sequence?
                    109:  */
                    110: #define        onebyte(c)      ((c&0x80)==0x00)
                    111: #define        twobyte(c)      ((c&0xe0)==0xc0)
                    112: #define        threebyte(c)    ((c&0xf0)==0xe0)
                    113: char **argp;
                    114: char **args;
                    115: int nerror;            /* number of errors encountered during compilation */
                    116: int doprompt;          /* is it time for a prompt? */
                    117: /*
                    118:  * Which fds are the reading/writing end of a pipe?
                    119:  * Unfortunately, this can vary from system to system.
                    120:  * 9th edition Unix doesn't care, the following defines
                    121:  * work on plan 9.
                    122:  */
                    123: #define        PRD     0
                    124: #define        PWR     1
                    125: char Rcmain[], Fdprefix[];
                    126: #define        register
                    127: /*
                    128:  * How many dot commands have we executed?
                    129:  * Used to ensure that -v flag doesn't print rcmain.
                    130:  */
                    131: int ndot;
                    132: char *getstatus(void);
                    133: int lastc;

unix.superglobalmegacorp.com

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