V9/cmd/sh/mode.h
/* @(#)mode.h 1.5 */
/*
* UNIX shell
*/
#ifdef pdp11
typedef char BOOL;
#else
typedef short BOOL;
#endif
#define BYTESPERWORD (sizeof (char *))
#ifdef CRAY
#define NIL 0
#else
#define NIL ((char*)0)
#endif
/* the following nonsense is required
* because casts turn an Lvalue
* into an Rvalue so two cheats
* are necessary, one for each context.
*/
union { int _cheat;};
#define Lcheat(a) ((a)._cheat)
#define Rcheat(a) ((int)(a))
/* address puns for storage allocation */
typedef union
{
struct forknod *_forkptr;
struct comnod *_comptr;
struct fndnod *_fndptr;
struct parnod *_parptr;
struct ifnod *_ifptr;
struct whnod *_whptr;
struct fornod *_forptr;
struct lstnod *_lstptr;
struct blk *_blkptr;
struct namnod *_namptr;
char *_bytptr;
} address;
/* heap storage */
struct blk
{
struct blk *word;
};
#define BUFSIZ 128
struct fileblk
{
int fdes;
unsigned flin;
BOOL feof;
unsigned char fsiz;
char *fnxt;
char *fend;
char **feval;
struct fileblk *fstak;
char fbuf[BUFSIZ];
};
struct tempblk
{
int fdes;
struct tempblk *fstak;
};
/* for files not used with file descriptors */
struct filehdr
{
int fdes;
unsigned flin;
BOOL feof;
unsigned char fsiz;
char *fnxt;
char *fend;
char **feval;
struct fileblk *fstak;
char _fbuf[1];
};
struct sysnod
{
char *sysnam;
int sysval;
};
/* this node is a proforma for those that follow */
struct trenod
{
int tretyp;
struct ionod *treio;
};
/* dummy for access only */
struct argnod
{
struct argnod *argnxt;
char argval[1];
};
struct dolnod
{
struct dolnod *dolnxt;
struct dolnod *dolfor;
int doluse;
char *dolarg[1];
};
struct forknod
{
int forktyp;
struct ionod *forkio;
struct trenod *forktre;
};
struct comnod
{
int comtyp;
struct ionod *comio;
struct argnod *comarg;
struct argnod *comset;
};
struct fndnod
{
int fndtyp;
char *fndnam;
struct trenod *fndval;
};
struct ifnod
{
int iftyp;
struct trenod *iftre;
struct trenod *thtre;
struct trenod *eltre;
};
struct whnod
{
int whtyp;
struct trenod *whtre;
struct trenod *dotre;
};
struct fornod
{
int fortyp;
struct trenod *fortre;
char *fornam;
struct comnod *forlst;
};
struct swnod
{
int swtyp;
char *swarg;
struct regnod *swlst;
};
struct regnod
{
struct argnod *regptr;
struct trenod *regcom;
struct regnod *regnxt;
};
struct parnod
{
int partyp;
struct trenod *partre;
};
struct lstnod
{
int lsttyp;
struct trenod *lstlef;
struct trenod *lstrit;
};
struct ionod
{
int iofile;
char *ioname;
char *iolink;
struct ionod *ionxt;
struct ionod *iolst;
};
struct fdsave
{
int org_fd;
int dup_fd;
};
#define fndptr(x) ((struct fndnod *)x)
#define comptr(x) ((struct comnod *)x)
#define forkptr(x) ((struct forknod *)x)
#define parptr(x) ((struct parnod *)x)
#define lstptr(x) ((struct lstnod *)x)
#define forptr(x) ((struct fornod *)x)
#define whptr(x) ((struct whnod *)x)
#define ifptr(x) ((struct ifnod *)x)
#define swptr(x) ((struct swnod *)x)