|
|
1.1 root 1: #ifndef READ_H
2: #define READ_H
3:
4: /*
5: *-IMPORTS:
6: * <sys/compat.h>
7: * CONST
8: * EXTERN_C_BEGIN
9: * EXTERN_C_END
10: * PROTO ()
11: */
12:
13: #include <sys/compat.h>
14:
15:
16: /*
17: * Structure of an input source.
18: */
19:
20: #ifndef INPUT_T
21: #define INPUT_T
22: typedef struct input input_t;
23: #endif
24:
25: #ifndef BUILD_T
26: #define BUILD_T
27: typedef struct builder build_t;
28: #endif
29:
30: #ifndef LEX_T
31: #define LEX_T
32: typedef struct lexinfo lex_t;
33: #endif
34:
35: #ifndef TOKEN_T
36: #define TOKEN_T
37: typedef struct token token_t;
38: #endif
39:
40:
41: /*
42: * Structure of a token returned by read_token (), which reflects the method
43: * used to parse the token. In order to reduce data copying, we permit input
44: * sources to provide a way of getting a token into memory without using the
45: * object-builder system (since for sources such as strings, that involves
46: * a large amount of totally unnecessary work).
47: *
48: * If "tok_heap" is not NULL, then it points to a build heap where the data
49: * for the token was copied as it was read. If is it NULL, then "tok_data" and
50: * "tok_len" may point to token data, or may be NULL and 0 respectively to
51: * indicate that no token was read.
52: */
53:
54: struct token {
55: CONST unsigned char *
56: tok_data;
57: size_t tok_len;
58: build_t * tok_heap;
59: };
60:
61:
62: /*
63: * EOF value returned by the functions defined here; must be the same value as
64: * IN_EOF, since typically we just return values from the in... () functions.
65: */
66:
67: enum {
68: READ_EOF = -1
69: };
70:
71:
72: /*
73: * Flags for numeric input
74: */
75:
76: enum {
77: UNSIGNED = 0,
78: SIGNED = 1
79: };
80:
81:
82: /*
83: * For determining whether read_ints () is allowed to read a range or not.
84: */
85:
86: enum {
87: NO_RANGE = 0,
88: RANGE = 1
89: };
90:
91:
92: EXTERN_C_BEGIN
93:
94: int read_char PROTO ((input_t * _input));
95: void unread_char PROTO ((input_t * _input));
96: void read_error PROTO ((input_t * _input));
97: void read_close PROTO ((input_t * _input));
98:
99: int read_long PROTO ((input_t * _input, long * _longp,
100: int _radix));
101: int read_ulong PROTO ((input_t * _input,
102: unsigned long * _ulongp, int _radix));
103:
104: void read_flush PROTO ((input_t * _input, lex_t * _lexp));
105:
106: int read_token PROTO ((input_t * _input, lex_t * _lexp,
107: build_t * _heap, token_t * _tok));
108:
109: void token_discard PROTO ((token_t * _tok));
110: void token_end PROTO ((token_t * _tok));
111: void token_copy PROTO ((token_t * _tok, build_t * _heap));
112:
113: void check_not_eol PROTO ((int _ch));
114: int expect_eol PROTO ((input_t * _input, lex_t * _lexp,
115: int _ch));
116:
117: int read_ulongs PROTO ((input_t * _input, lex_t * _lexp,
118: unsigned long * _numbers,
119: int _rangeflag));
120: int read_longs PROTO ((input_t * _input, lex_t * _lexp,
121: long * _numbers, int _rangeflag));
122: int read_ints PROTO ((input_t * _input, lex_t * _lexp,
123: int * _numbers, int _rangeflag));
124: int read_uints PROTO ((input_t * _input, lex_t * _lexp,
125: unsigned int * _numbers,
126: int _rangeflag));
127:
128: EXTERN_C_END
129:
130:
131: #endif /* ! defined (READ_H) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.