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