Annotation of coherent/e/bin/ksh/sh.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Public Domain Bourne/Korn shell
                      3:  */
                      4: /* allow for non-Unix linkers. main.c has a "#define Extern " */
                      5: 
                      6: #if _I386
                      7: #include <sys/param.h>
                      8: #define NUFILE NOFILE
                      9: #else
                     10: #define NUFILE 20
                     11: #endif
                     12: 
                     13: #ifndef Extern
                     14: #define        Extern  extern
                     15: #endif
                     16: 
                     17: typedef int bool_t;
                     18: #define        FALSE   0
                     19: #define        TRUE    1
                     20: 
                     21: #ifndef SHELL
                     22: #define        SHELL   "/bin/sh"       /* shell to exec scripts */
                     23: #endif
                     24: 
                     25: #if __STDC__
                     26: #define        ARGS(args)      args    /* prototype declaration */
                     27: #define        Void    void            /* generic pointer */
                     28: #define        Const   const           /* constant data */
                     29: #define        Volatile volatile       /* you know */
                     30: #else
                     31: #define        ARGS(args)      ()      /* K&R declaration */
                     32: #define        Void    char
                     33: #define        Const   
                     34: #define        Volatile 
                     35: #endif
                     36: 
                     37: #define        sizeofN(type, n) (sizeof(type) * (n))
                     38: #define        BIT(i)  (1<<(i))        /* define bit in flag */
                     39: 
                     40: #define        FDBASE  10              /* First file usable by Shell */
                     41: 
                     42: /* you're not going to run setuid shell scripts, are you? */
                     43: 
                     44: #define        MAGIC   (char)0x80      /* prefix for ~*?[ during expand */
                     45: 
                     46: #define        LINE    256             /* input line size */
                     47: #define        PATH    256             /* pathname size */
                     48: 
                     49: Extern int     exstat;         /* exit status */
                     50: Extern int     async;          /* $!, last &'d pid */
                     51: 
                     52: /*
                     53:  * Area-based allocation built on malloc/free
                     54:  */
                     55: 
                     56: typedef struct Area {
                     57:        struct Block *free;     /* free list */
                     58: } Area;
                     59: 
                     60: extern Area    aperm;          /* permanent object space */
                     61: #define        APERM   &aperm
                     62: #define        ATEMP   &e.area
                     63: 
                     64: Area   *ainit ARGS((Area *ap));                /* initialize Area */
                     65: void   afreeall ARGS((Area *ap));      /* free Area's contents */
                     66: void   ashrink ARGS((Area *ap));       /* unimplimented */
                     67: void   aerror ARGS((Area *ap, const char *msg)); /* error handler */
                     68: 
                     69: Void   *alloc ARGS((size_t size, Area *ap)); /* alloc object from Area */
                     70: Void   *aresize ARGS((Void *ptr, size_t size, Area *ap)); /* shrink object */
                     71: void   afree ARGS((Void *ptr, Area *ap)); /* free ojbect in Area */
                     72: 
                     73: /*
                     74:  * parsing & execution environment
                     75:  */
                     76: Extern struct  env {
                     77:        int     type;                   /* enviroment type - see below */
                     78:        Area    area;                   /* temporary allocation area */
                     79:        struct  block *loc;             /* local variables and functions */
                     80:        short  *savefd;                 /* original redirected fd's */
                     81:        struct  env *oenv;              /* link to previous enviroment */
                     82:        jmp_buf jbuf;                   /* long jump back to env creator */
                     83:        int     interactive;            /* fd's 0,1,2 are tty */
                     84:        struct temp *temps;             /* temp files */
                     85: } e;
                     86: 
                     87: #define        E_NONE  0               /* dummy enviroment */
                     88: #define        E_PARSE 1               /* parsing command # */
                     89: #define        E_EXEC  2               /* executing command tree */
                     90: #define        E_LOOP  3               /* executing for/while # */
                     91: #define        E_TCOM  5               /* executing simple command */
                     92: #define        E_FUNC  6               /* executing function */
                     93: #define        E_ERRH  7               /* general error handler # */
                     94: /* # indicates env has valid jbuf */
                     95: 
                     96: /*
                     97:  * flags
                     98:  */
                     99: #define        FEXPORT FLAG('a')       /* -a: allexport */
                    100: #define        FERREXIT FLAG('e')      /* -e: errexit (quit on error) */
                    101: #define        FBGNICE 29              /* bgnice */
                    102: #define        FEMACS 30               /* emacs */
                    103: #define        FIGNEOF 27              /* ignoreeof (eof does not exit) */
                    104: #define        FHASHALL FLAG('h')      /* -h: trackall, hashall */
                    105: #define        FTALKING FLAG('i')      /* -i: interactive (talking type wireless) */
                    106: #define        FKEYWORD FLAG('k')      /* -k: keyword (name=value anywhere) */
                    107: #define        FMARKDIRS 28            /* markdirs */
                    108: #define        FMONITOR FLAG('m')      /* -m: monitor */
                    109: #define        FNOEXEC FLAG('n')       /* -n: noexec */
                    110: #define        FNOGLOB FLAG('f')       /* -f: noglob */
                    111: #define        FPRIVILEGED FLAG('p')   /* -p: privileged */
                    112: #define        FSTDIN  FLAG('s')       /* -s (invocation): parse stdin */
                    113: #define        FNOUNSET FLAG('u')      /* -u: nounset (unset vars is error) */
                    114: #define        FVERBOSE FLAG('v')      /* -v: verbose (echo input) */
                    115: #define        FXTRACE FLAG('x')       /* -x: (execute) xtrace */
                    116: 
                    117: #define        FLAG(c) (1 + c - 'a')   /* map char to flags index */
                    118: #define        FLAGS   32
                    119: Extern char flag [FLAGS];
                    120: int    option ARGS((Const char *name));
                    121: char   *getoptions ARGS((void));
                    122: void   printoptions ARGS((void));
                    123: void   mail ARGS((void));
                    124: 
                    125: extern char    null [];        /* null value for variable */
                    126: 
                    127: /*
                    128:  * other functions
                    129:  */
                    130: char   *search();
                    131: struct tbl *findcom();
                    132: char   *strsave ARGS((char *, Area *));
                    133: char   *ulton ARGS((unsigned long n, int base));
                    134: int    xstrcmp();
                    135: void   qsortp ARGS((void **base, size_t n, int (*compare)(void *, void *)));
                    136: long   evaluate ARGS((Const char *expr));
                    137: void   resetopts();
                    138: void   histsave();
                    139: void   histlist();
                    140: 
                    141: #if EDIT
                    142: void   x_init();
                    143: void   x_bind();
                    144: int    x_read();
                    145: #endif
                    146: 
                    147: void   j_init ARGS((void));
                    148: void   j_exit ARGS((void));
                    149: void   j_notify ARGS((void));
                    150: void   j_kill ARGS((int job, int sig));
                    151: #ifdef JOBS
                    152: void   j_change ARGS((void));
                    153: int    j_resume ARGS((int job, int bg));
                    154: #endif
                    155: 
                    156: /*
                    157:  * error handling
                    158:  */
                    159: void   leave();        /* abort shell (or fail in subshell) */
                    160: 
                    161: /*
                    162:  * library functions
                    163:  */
                    164: typedef        void (*handler_t)();    /* signal handler */
                    165: 
                    166: /* temp/here files. the file is removed when the struct is freed */
                    167: struct temp {
                    168:        struct  temp * next;
                    169:        char   *name;
                    170: };
                    171: struct temp *maketemp ARGS((Area *ap));
                    172: 
                    173: /*
                    174:  * stdio and our IO routines
                    175:  */
                    176: 
                    177: #ifdef BUFSIZ                  /* <stdio.h> included? */
                    178: extern FILE *  shf [NUFILE];   /* map shell fd to FILE */
                    179: #endif
                    180: void   fopenshf();
                    181: void   flushshf();
                    182: 
                    183: #undef stdin
                    184: #undef stdout
                    185: 
                    186: #define        stdin   shf[0]          /* standard input */
                    187: #define        stdout  shf[1]          /* standard output */
                    188: #define        shlout  shf[2]          /* shell output */
                    189: 
                    190: int    shellf ARGS((Const char *fmt, ...)); /* fprintf(shlout, ); */
                    191: int    errorf ARGS((Const char *fmt, ...)); /* fprintf(shlout, ); error(); */
                    192: 
                    193: /*
                    194:  * IO control
                    195:  */
                    196: extern int ttyfd;              /* tty fd (original fd 0) */
                    197: 
                    198: int    savefd ARGS((int fd));  /* save user fd */
                    199: void   restfd ARGS((int fd, int ofd));
                    200: void   openpipe ARGS((int [2]));
                    201: void   closepipe ARGS((int [2]));;
                    202: 
                    203: /*
                    204:  * trap handlers
                    205:  */
                    206: typedef struct trap {
                    207:        int     signal;         /* signal number */
                    208:        char   *name;           /* short name */
                    209:        char   *mess;           /* descriptive name */
                    210:        char   *trap;           /* trap command */
                    211:        short   Volatile set;   /* trap pending */
                    212:        char    ourtrap;        /* not ignored (?) */
                    213:        char    sig_dfl;        /* originally SIG_DFL */
                    214: } Trap;
                    215: 
                    216: #define        SIGNALS 32
                    217: 
                    218: Extern int Volatile trap;      /* traps pending? */
                    219: extern Trap    sigtraps[SIGNALS];
                    220: Trap    *gettrap ARGS((char *)); /* search for struct trap by number or name */
                    221: void   trapsig ARGS((int sig)); /* trap signal handler */
                    222: 
                    223: /*
                    224:  * fast character classes
                    225:  */
                    226: #define        C_ALPHA 0x01            /* a-z_A-Z */
                    227: #define        C_DIGIT 0x02            /* 0-9 */
                    228: #define        C_LEX1  0x04            /* \0 \t\n|&;<>() */
                    229: #define        C_VAR1  0x08            /* *@#!$-? */
                    230: #define        C_SUBOP 0x40            /* "=-+?#%" */
                    231: #define        C_IFS   0x80            /* $IFS */
                    232: 
                    233: extern char ctypes [];
                    234: void   initctypes ARGS((void));
                    235: void   setctypes ARGS((Const char*, int type));
                    236: 
                    237: #define        ctype(c, t)     !!(ctypes[(unsigned char)(c)]&(t))
                    238: #define        letter(c)       ctype(c, C_ALPHA)
                    239: #define        digit(c)        ctype(c, C_DIGIT)
                    240: #define        letnum(c)       ctype(c, C_ALPHA|C_DIGIT)
                    241: 
                    242: #ifndef _IOFBF
                    243: #define        _IOFBF  000000
                    244: #endif
                    245: 
                    246: /*
                    247:  * Compatibility constants and declarations
                    248:  */
                    249: #if COHERENT
                    250: #ifndef _I386
                    251: #define        tms             tbuffer         /* for calls to times() */
                    252: #define        tms_utime       tb_utime
                    253: #define        tms_stime       tb_stime
                    254: #define        tms_cutime      tb_cutime
                    255: #define        tms_cstime      tb_cstime
                    256: #endif
                    257: #define        setvbuf(fp,buf,type,size)       /* ignore for now */
                    258: typedef        long            clock_t;
                    259: #define        remove(fn)      unlink(fn)
                    260: #endif
                    261: 
                    262: #ifndef        MAILINTERVAL
                    263: #define        MAILINTERVAL    60              /* interval between MAIL checks */
                    264: #endif

unix.superglobalmegacorp.com

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