115567Sedward /* 2*16448Sedward * @(#)context.h 3.5 84/05/06 315567Sedward */ 415567Sedward 516124Sedward #include <stdio.h> 616124Sedward 715567Sedward struct context { 815567Sedward struct context *x_link; /* nested contexts */ 915855Sedward char x_type; /* tag for union */ 1015855Sedward union { 1115855Sedward struct { /* input is a file */ 1215855Sedward char *X_filename; /* input file name */ 1315855Sedward FILE *X_fp; /* input stream */ 1415855Sedward short X_lineno; /* current line number */ 1515855Sedward char X_bol; /* at beginning of line */ 1615855Sedward char X_noerr; /* don't report errors */ 1715855Sedward struct ww *X_errwin; /* error window */ 1815567Sedward } x_f; 1915855Sedward struct { /* input is a buffer */ 2015855Sedward char *X_buf; /* input buffer */ 2115855Sedward char *X_bufp; /* current position in buf */ 22*16448Sedward struct value *X_arg; /* argument for alias */ 23*16448Sedward int X_narg; /* number of arguments */ 2415567Sedward } x_b; 2515567Sedward } x_un; 2615855Sedward /* holding place for current token */ 2715855Sedward int x_token; /* the token */ 2815855Sedward struct value x_val; /* values associated with token */ 2915855Sedward /* parser error flags */ 3015855Sedward unsigned x_erred :1; /* had an error */ 3115855Sedward unsigned x_synerred :1; /* had syntax error */ 3215855Sedward unsigned x_abort :1; /* fatal error */ 3315567Sedward }; 3415567Sedward #define x_buf x_un.x_b.X_buf 3515567Sedward #define x_bufp x_un.x_b.X_bufp 36*16448Sedward #define x_arg x_un.x_b.X_arg 37*16448Sedward #define x_narg x_un.x_b.X_narg 3815567Sedward #define x_filename x_un.x_f.X_filename 3915567Sedward #define x_fp x_un.x_f.X_fp 4015567Sedward #define x_lineno x_un.x_f.X_lineno 4115567Sedward #define x_bol x_un.x_f.X_bol 4215567Sedward #define x_errwin x_un.x_f.X_errwin 4315855Sedward #define x_noerr x_un.x_f.X_noerr 4415567Sedward 4515855Sedward /* x_type values, 0 is reserved */ 4615855Sedward #define X_FILE 1 /* input is a file */ 4715855Sedward #define X_BUF 2 /* input is a buffer */ 4815567Sedward 4915855Sedward struct context cx; /* the current context */ 50