|
|
1.1 root 1: /*
2: * Copyright (c) 1983 Regents of the University of California.
3: * All rights reserved.
4: *
5: * This code is derived from software contributed to Berkeley by
6: * Edward Wang at The University of California, Berkeley.
7: *
8: * Redistribution and use in source and binary forms are permitted provided
9: * that: (1) source distributions retain this entire copyright notice and
10: * comment, and (2) distributions including binaries display the following
11: * acknowledgement: ``This product includes software developed by the
12: * University of California, Berkeley and its contributors'' in the
13: * documentation or other materials provided with the distribution and in
14: * all advertising materials mentioning features or use of this software.
15: * Neither the name of the University nor the names of its contributors may
16: * be used to endorse or promote products derived from this software without
17: * specific prior written permission.
18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21: *
22: * @(#)context.h 3.11 (Berkeley) 6/6/90
23: */
24:
25: #include <stdio.h>
26:
27: struct context {
28: struct context *x_link; /* nested contexts */
29: char x_type; /* tag for union */
30: union {
31: struct { /* input is a file */
32: char *X_filename; /* input file name */
33: FILE *X_fp; /* input stream */
34: short X_lineno; /* current line number */
35: char X_bol; /* at beginning of line */
36: char X_noerr; /* don't report errors */
37: struct ww *X_errwin; /* error window */
38: } x_f;
39: struct { /* input is a buffer */
40: char *X_buf; /* input buffer */
41: char *X_bufp; /* current position in buf */
42: struct value *X_arg; /* argument for alias */
43: int X_narg; /* number of arguments */
44: } x_b;
45: } x_un;
46: /* holding place for current token */
47: int x_token; /* the token */
48: struct value x_val; /* values associated with token */
49: /* parser error flags */
50: unsigned x_erred :1; /* had an error */
51: unsigned x_synerred :1; /* had syntax error */
52: unsigned x_abort :1; /* fatal error */
53: };
54: #define x_buf x_un.x_b.X_buf
55: #define x_bufp x_un.x_b.X_bufp
56: #define x_arg x_un.x_b.X_arg
57: #define x_narg x_un.x_b.X_narg
58: #define x_filename x_un.x_f.X_filename
59: #define x_fp x_un.x_f.X_fp
60: #define x_lineno x_un.x_f.X_lineno
61: #define x_bol x_un.x_f.X_bol
62: #define x_errwin x_un.x_f.X_errwin
63: #define x_noerr x_un.x_f.X_noerr
64:
65: /* x_type values, 0 is reserved */
66: #define X_FILE 1 /* input is a file */
67: #define X_BUF 2 /* input is a buffer */
68:
69: struct context cx; /* the current context */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.