File: wncstr.h

package info (click to toggle)
libwn6 6.0-17
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, sarge
  • size: 6,012 kB
  • ctags: 3,903
  • sloc: ansic: 45,078; makefile: 960; csh: 274; sh: 17
file content (255 lines) | stat: -rw-r--r-- 6,481 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
/****************************************************************************

COPYRIGHT NOTICE:

  The source code in this file is provided free of charge
  to the author's consulting clients.  It is in the
  public domain and therefore may be used by anybody for
  any purpose.

AUTHOR:

  Will Naylor

****************************************************************************/
#ifndef wncstrH
#define wncstrH



#include "wnlib.h"
#include "wnmem.h"
#include "wnio.h"
#include "wnhtab.h"
#include "wnbtr.h"


#define  WN_PARSE   1
#define  WN_WRITE   2


typedef struct wn_cstream_struct *wn_cstream;
struct wn_cstream_struct
{
  int parse_or_write;

  wn_htab block_table;
  int current_block_mark;
  char *current_block;

  int current_mark,low_mark,high_mark;
  bool end_of_stream;

  void (*pmove_block)
  (
    char block[],
    int *pactually_moved,
    int request_moved,
    ptr pf
  );

  ptr move_block_ptr; 

  int block_size,trunc_mask,mod_mask;

  int last_linefeed_mark,line_length_limit;
  void (*ppretty_linefeed_routine)(wn_cstream stream);
  int pretty_block_level,pretty_buffer_len;
  char *pretty_buffer;

  char *filename;
  int number_of_linefeeds;
  wn_btree linefeeds_by_mark;

  wn_memgp group;
};


#define wn_current_mark(_stream)  ((_stream)->current_mark)

void wn_make_cstream
(
  wn_cstream *pstream,
  void (*pmove_block)
  (
    char block[],
    int *pactually_moved,
    int request_moved,
    ptr pf
  ),
  ptr move_block_ptr,
  int block_size,
  int parse_or_write
);
void wn_free_cstream(wn_cstream stream);
void wn_set_pretty_linefeed_routine
(
  wn_cstream stream,
  void (*ppretty_linefeed_routine)(wn_cstream stream)
);
void wn_set_line_length_limit(wn_cstream stream,int len);
void wn_start_pretty_block(wn_cstream stream);
void wn_end_pretty_block(wn_cstream stream);
bool wn_set_current_mark(wn_cstream stream,int mark);
void wn_flush_to_mark(wn_cstream stream,int mark);
char *wn_cstream_filename(wn_cstream stream);
void wn_set_cstream_filename(wn_cstream stream,char *name);
int wn_column_of_current_mark(wn_cstream stream);
int wn_column_of_mark(wn_cstream stream,int mark);
int wn_linenum_of_mark(wn_cstream stream,int mark);
int wn_linenum_of_current_mark(wn_cstream stream);
void wn_linefeed_at_mark(wn_cstream stream,int mark);
bool wn_parse_char(wn_cstream stream,char *pc);
bool wn_parse_char_of_type(wn_cstream stream,char *pc,char char_type[]);
bool wn_parse_literal(wn_cstream stream,char *literal);
bool wn_parse_literal_char(wn_cstream stream,char c);
bool wn_parse_eos(wn_cstream stream);
bool wn_parse_empty(wn_cstream stream);
bool wn_scan_for_eos(wn_cstream stream);
bool wn_scan_for_char(wn_cstream stream,char c);
bool wn_scan_for_char_type(wn_cstream stream,char char_type[]);
bool wn_scan_for_not_char_type(wn_cstream stream,char char_type[]);
void wn_write_between_marks
(
  wn_cstream out_stream,
  wn_cstream stream,
  int start_mark,
  int fin_mark
);
void wn_copy_between_marks_to_string
(
  char *string,
  wn_cstream stream,
  int start_mark,
  int fin_mark
);
bool wn_between_marks_equal_string
(
  char *string,
  wn_cstream stream,
  int start_mark,
  int fin_mark
);
bool wn_cstream_debug(wn_cstream stream);
void wn_write_block(wn_cstream stream,char *block,int len);
void wn_write_char(wn_cstream stream,char c);
void wn_write_literal_char(wn_cstream stream,char c);
void wn_raw_write_literal_char(wn_cstream stream,char c);
void wn_write_eos(wn_cstream stream);
void wn_write_empty(wn_cstream stream);


void wn_make_file_parse_cstream(wn_cstream *pstream,wn_file f);
void wn_make_file_write_cstream(wn_cstream *pstream,wn_file f);
void wn_make_string_parse_cstream(wn_cstream *pstream,char string[]);


void wn_write_blanks(wn_cstream stream,int num);
void wn_write_linefeed(wn_cstream stream);
void wn_write_blanks_until_column(wn_cstream stream,int col);
void wn_write_literal(wn_cstream stream,char *literal);
void wn_write_id(wn_cstream stream,char *id);
void wn_write_int(wn_cstream stream,int i);
void wn_write_double(wn_cstream stream,double f);
void wn_write_quoted_string
(
  wn_cstream stream,
  char start_char,
  char* string,
  char fin_char
);
void wn_write_quoted_string_with_backslash
(
  wn_cstream stream,
  char start_char,
  char *string,
  char fin_char
);
void wn_write_literal_n_times(wn_cstream stream,char *literal,int n);


void wn_write_blanks_pretty(wn_cstream stream,int num);
void wn_write_blanks_pretty_until_column(wn_cstream stream,int col);
void wn_write_literal_pretty(wn_cstream stream,char *literal);
void wn_write_id_pretty(wn_cstream stream,char *id);
void wn_write_int_pretty(wn_cstream stream,int i);
void wn_write_double_pretty(wn_cstream stream,double f);
void wn_write_quoted_string_pretty
(
  wn_cstream stream,
  char start_char,
  char *string,
  char fin_char
);


void wn_make_char_type(char **pchar_type,char chars[]);
void wn_copy_char_type(char to[],char from[]);
void wn_load_char_type(char char_type[],char *chars);
void wn_set_char_type(char char_type[],char *chars);
void wn_reset_char_type(char char_type[],char *chars);
void wn_invert_char_type(char char_type[]);
  
bool wn_parse_blanks(wn_cstream stream,int num);
bool wn_parse_blanks_with_std_comments(wn_cstream stream,int num);
bool wn_parse_blanks_with_comments
(
  wn_cstream stream,
  bool (*pparse_comment)(wn_cstream stream),
  int num
);
bool wn_parse_comments
(
  wn_cstream stream,
  bool (*pparse_comment)(wn_cstream stream)
);
bool wn_parse_standard_comment(wn_cstream stream);
bool wn_parse_simple_comment
(
  wn_cstream stream,
  char start_comment[],
  char fin_comment[]
);
bool wn_parse_recursive_comment
(
  wn_cstream stream,
  char start_comment[],
  char fin_comment[]
);
bool wn_parse_literal_id(wn_cstream stream,char *id);
bool wn_parse_literal_general_id
(
  wn_cstream stream,
  char *begin_id_char_type,
  char *id_char_type,
  char *id
);
bool wn_parse_id(wn_cstream stream,char **pid);
bool wn_parse_numeric_id(wn_cstream stream,char **pid);
bool wn_parse_general_id
(
  wn_cstream stream,
  char *begin_id_char_type,
  char *id_char_type,
  char **pid
);
bool wn_parse_int(wn_cstream stream,int *pi);
bool wn_parse_double(wn_cstream stream,double *pf);
bool wn_parse_quoted_string
(
  wn_cstream stream,
  char start_char,
  char **pstring,
  char fin_char
);
bool wn_parse_quoted_string_with_backslash
(
  wn_cstream stream,
  char start_char,
  char **pstring,
  char fin_char
);
bool wn_scan_for_literal(wn_cstream stream,char literal[]);


#endif