xref: /csrg-svn/usr.bin/window/context.h (revision 15855)
115567Sedward /*
2*15855Sedward  *	@(#)context.h	3.3 84/01/13
315567Sedward  */
415567Sedward 
515567Sedward struct context {
615567Sedward 	struct context *x_link;		/* nested contexts */
7*15855Sedward 	char x_type;			/* tag for union */
8*15855Sedward 	union {
9*15855Sedward 		struct {	/* input is a file */
10*15855Sedward 			char *X_filename;	/* input file name */
11*15855Sedward 			FILE *X_fp;		/* input stream */
12*15855Sedward 			short X_lineno;		/* current line number */
13*15855Sedward 			char X_bol;		/* at beginning of line */
14*15855Sedward 			char X_noerr;		/* don't report errors */
15*15855Sedward 			struct ww *X_errwin;	/* error window */
1615567Sedward 		} x_f;
17*15855Sedward 		struct {	/* input is a buffer */
18*15855Sedward 			char *X_buf;		/* input buffer */
19*15855Sedward 			char *X_bufp;		/* current position in buf */
2015567Sedward 		} x_b;
2115567Sedward 	} x_un;
22*15855Sedward 		/* holding place for current token */
23*15855Sedward 	int x_token;			/* the token */
24*15855Sedward 	struct value x_val;		/* values associated with token */
25*15855Sedward 		/* parser error flags */
26*15855Sedward 	unsigned x_erred :1;		/* had an error */
27*15855Sedward 	unsigned x_synerred :1;		/* had syntax error */
28*15855Sedward 	unsigned x_abort :1;		/* fatal error */
2915567Sedward };
3015567Sedward #define x_buf		x_un.x_b.X_buf
3115567Sedward #define x_bufp		x_un.x_b.X_bufp
3215567Sedward #define x_filename	x_un.x_f.X_filename
3315567Sedward #define x_fp		x_un.x_f.X_fp
3415567Sedward #define x_lineno	x_un.x_f.X_lineno
3515567Sedward #define x_bol		x_un.x_f.X_bol
3615567Sedward #define x_errwin	x_un.x_f.X_errwin
37*15855Sedward #define x_noerr		x_un.x_f.X_noerr
3815567Sedward 
39*15855Sedward 	/* x_type values, 0 is reserved */
40*15855Sedward #define X_FILE		1		/* input is a file */
41*15855Sedward #define X_BUF		2		/* input is a buffer */
4215567Sedward 
43*15855Sedward struct context cx;			/* the current context */
44