80{
81 int now_col; /* column we are in now */
82 int adj_max_col; /* Adjusted max_col for when we decide to
83 * spill comments over the right margin */
84 char *last_bl; /* points to the last blank in the output
85 * buffer */
86 char *t_ptr; /* used for moving string */
91 last_bl = NULL; /* no blanks found so far */
92 ps.
box_com =
false;
/* at first, assume that we are not in
93 * a boxed comment or some other
94 * comment that should not be touched */
95 ++
ps.
out_coms;
/* keep track of number of comments */
96
97 /* Figure where to align and how to treat the comment */
98
100 * 1 it should not be touched */
102 break_delim = false;
104 }
105 else {
108 ps.
box_com =
true;
/* A comment with a '-' or '*' immediately
109 * after the /+* is assumed to be a boxed
110 * comment. A comment with a newline
111 * immediately after the /+* is assumed to
112 * be a block comment and is treated as a
113 * box comment unless format_block_comments
114 * is nonzero (the default). */
115 break_delim = false;
116 }
118 /* klg: check only if this line is blank */
119 /*
120 * If this (*and previous lines are*) blank, dont put comment way
121 * out at left
122 */
127 }
128 else {
129 int target_col;
130 break_delim = false;
133 else {
134 target_col = 1;
137 }
139 (strncmp(
s_lab,
"#endif", 6) == 0 ||
140 strncmp(
s_lab,
"#else", 5) == 0))
143 else
150 }
151 }
153 /*
154 * Find out how much indentation there was originally, because that
155 * much will have to be ignored by pad_output() in dump_line(). This
156 * is a box comment, so nothing changes -- not even indentation.
157 *
158 * The comment we're about to read usually comes from in_buffer,
159 * unless it has been copied into save_com.
160 */
162
166 }
167 else {
171 }
173 *
e_com++ =
'/';
/* put '/' followed by '*' into buffer */
177
178 /*
179 * Don't put a break delimiter if this is a one-liner that won't wrap.
180 */
181 if (break_delim)
182 for (t_ptr =
buf_ptr; *t_ptr !=
'0円' && *t_ptr !=
'\n'; t_ptr++) {
185 if (t_ptr[0] == '*' && t_ptr[1] == '/') {
187 break_delim = false;
188 break;
189 }
190 }
191
192 if (break_delim) {
202 }
203
204 /* Start to copy the comment */
205
206 while (1) { /* this loop will go until the comment is
207 * copied */
208 switch (*
buf_ptr) {
/* this checks for various spcl cases */
209 case 014: /* check for a form feed */
211 if (!
ps.
box_com) {
/* in a text comment, break the line here */
213 /* fix so dump_line uses a form feed */
215 last_bl = NULL;
219 ;
220 }
221 else {
225 }
226 break;
227
228 case '\n':
229 if (
had_eof) {
/* check for unexpected eof */
230 printf(
"Unterminated comment\n");
232 return;
233 }
234 last_bl = NULL;
237 * we dont ignore the newline */
244 }
248 }
249 else {
251 if (*(
e_com - 1) ==
' ' || *(
e_com - 1) ==
'\t')
253 /*
254 * if there was a space at the end of the last line, remember
255 * where it was
256 */
257 else { /* otherwise, insert one */
260 }
261 }
262 ++
line_no;
/* keep track of input line number */
264 int nstar = 1;
265 do { /* flush any blanks and/or tabs at start of
266 * next line */
269 if (*
buf_ptr ==
'*' && --nstar >= 0) {
273 goto end_of_comment;
274 }
276 }
279 break; /* end of case for newline */
280
281 case '*': /* must check for possibility of being at end
282 * of comment */
286 if (*
buf_ptr ==
'/') {
/* it is the end!!! */
287 end_of_comment:
290 if (break_delim) {
293 }
294 else
297 }
299 *
e_com++ =
' ';
/* ensure blank before end */
302 return;
303 }
304 else /* handle isolated '*' */
306 break;
307 default: /* we have a random char */
309 do {
315 last_bl =
e_com;
/* remember we saw a blank */
317 now_col++;
318 }
while (!memchr(
"*\n\r\b\t", *
buf_ptr, 6) &&
319 (now_col <= adj_max_col || !last_bl));
322 /*
323 * the comment is too long, it must be broken up
324 */
325 if (last_bl == NULL) {
329 break;
330 }
336 for (t_ptr = last_bl + 1; *t_ptr == ' ' || *t_ptr == '\t';
337 t_ptr++)
338 ;
339 last_bl = NULL;
340 /*
341 * t_ptr will be somewhere between e_com (dump_line() reset)
342 * and l_com. So it's safe to copy byte by byte from t_ptr
343 * to e_com without any CHECK_SIZE_COM().
344 */
345 while (*t_ptr != '0円') {
346 if (*t_ptr == ' ' || *t_ptr == '\t')
349 }
350 }
351 break;
352 }
353 }
354}
int compute_code_target(void)
int compute_label_target(void)
int count_spaces_until(int, char *, char *)
int count_spaces(int, char *)
int block_comment_max_col
#define CHECK_SIZE_COM(desired_size)
int prefix_blankline_requested
int blanklines_before_blockcomments
int format_block_comments
int comment_delimiter_on_blankline
if(TABLE==NULL||TABLE_index==NULL)