1c3f21660Sedward /* 2*e85b5252Sbostic * Copyright (c) 1983, 1993 3*e85b5252Sbostic * The Regents of the University of California. All rights reserved. 4bac0d407Sbostic * 58e751acfSbostic * This code is derived from software contributed to Berkeley by 68e751acfSbostic * Edward Wang at The University of California, Berkeley. 78e751acfSbostic * 8122a1d9eSbostic * %sccs.include.redist.c% 9bac0d407Sbostic * 10*e85b5252Sbostic * @(#)context.h 8.1 (Berkeley) 06/06/93 11c3f21660Sedward */ 12c3f21660Sedward 1350b4addaSedward #include <stdio.h> 1450b4addaSedward 15c3f21660Sedward struct context { 16c3f21660Sedward struct context *x_link; /* nested contexts */ 176af1fb6fSedward char x_type; /* tag for union */ 186af1fb6fSedward union { 196af1fb6fSedward struct { /* input is a file */ 206af1fb6fSedward char *X_filename; /* input file name */ 216af1fb6fSedward FILE *X_fp; /* input stream */ 226af1fb6fSedward short X_lineno; /* current line number */ 236af1fb6fSedward char X_bol; /* at beginning of line */ 246af1fb6fSedward char X_noerr; /* don't report errors */ 256af1fb6fSedward struct ww *X_errwin; /* error window */ 26c3f21660Sedward } x_f; 276af1fb6fSedward struct { /* input is a buffer */ 286af1fb6fSedward char *X_buf; /* input buffer */ 296af1fb6fSedward char *X_bufp; /* current position in buf */ 30b163fd54Sedward struct value *X_arg; /* argument for alias */ 31b163fd54Sedward int X_narg; /* number of arguments */ 32c3f21660Sedward } x_b; 33c3f21660Sedward } x_un; 346af1fb6fSedward /* holding place for current token */ 356af1fb6fSedward int x_token; /* the token */ 366af1fb6fSedward struct value x_val; /* values associated with token */ 376af1fb6fSedward /* parser error flags */ 386af1fb6fSedward unsigned x_erred :1; /* had an error */ 396af1fb6fSedward unsigned x_synerred :1; /* had syntax error */ 406af1fb6fSedward unsigned x_abort :1; /* fatal error */ 41c3f21660Sedward }; 42c3f21660Sedward #define x_buf x_un.x_b.X_buf 43c3f21660Sedward #define x_bufp x_un.x_b.X_bufp 44b163fd54Sedward #define x_arg x_un.x_b.X_arg 45b163fd54Sedward #define x_narg x_un.x_b.X_narg 46c3f21660Sedward #define x_filename x_un.x_f.X_filename 47c3f21660Sedward #define x_fp x_un.x_f.X_fp 48c3f21660Sedward #define x_lineno x_un.x_f.X_lineno 49c3f21660Sedward #define x_bol x_un.x_f.X_bol 50c3f21660Sedward #define x_errwin x_un.x_f.X_errwin 516af1fb6fSedward #define x_noerr x_un.x_f.X_noerr 52c3f21660Sedward 536af1fb6fSedward /* x_type values, 0 is reserved */ 546af1fb6fSedward #define X_FILE 1 /* input is a file */ 556af1fb6fSedward #define X_BUF 2 /* input is a buffer */ 56c3f21660Sedward 576af1fb6fSedward struct context cx; /* the current context */ 58