#include <config.h>
#include "repeat.h"
-#include <assert.h>
+#include "error.h"
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
int print;
/* The first step is parsing the DO REPEAT command itself. */
- lex_match_id ("DO");
- lex_match_id ("REPEAT");
-
count = 0;
line_buf_head = NULL;
do
command names must appear on a single line--they can't be
spread out. */
{
- char *cp = ds_value (&getl_buf);
+ char *cp = ds_c_str (&getl_buf);
/* Skip leading indentors and any whitespace. */
if (*cp == '+' || *cp == '-' || *cp == '.')
line_buf_tail->len = ds_length (&getl_buf);
line_buf_tail->line = xmalloc (ds_length (&getl_buf) + 1);
memcpy (line_buf_tail->line,
- ds_value (&getl_buf), ds_length (&getl_buf) + 1);
+ ds_c_str (&getl_buf), ds_length (&getl_buf) + 1);
}
}
REPEAT line. We should actually check for the PRINT specifier.
This can be done easier when we buffer entire commands instead of
doing it token by token; see TODO. */
- lex_entire_line ();
+ lex_discard_line ();
/* Tie up the loose end of the chain. */
if (line_buf_head == NULL)
/* Terminal dot. */
int dot = 0;
- ds_init (NULL, &output, ds_size (&getl_buf));
+ ds_init (&output, ds_capacity (&getl_buf));
/* Strip trailing whitespace, check for & remove terminal dot. */
while (ds_length (&getl_buf) > 0
ds_truncate (&getl_buf, ds_length (&getl_buf) - 1);
}
- for (cp = ds_value (&getl_buf); cp < ds_end (&getl_buf); )
+ for (cp = ds_c_str (&getl_buf); cp < ds_end (&getl_buf); )
{
if (*cp == '\'' && !in_quote)
in_apos ^= 1;
if (in_quote || in_apos || !CHAR_IS_ID1 (*cp))
{
- ds_putchar (&output, *cp++);
+ ds_putc (&output, *cp++);
continue;
}
substitution = find_DO_REPEAT_substitution (name);
if (!substitution)
{
- ds_concat_buffer (&output, start, cp - start);
+ ds_concat (&output, start, cp - start);
continue;
}
/* Force output buffer size, copy substitution. */
- ds_concat (&output, substitution);
+ ds_puts (&output, substitution);
}
}
if (dot)
- ds_putchar (&output, get_endcmd() );
+ ds_putc (&output, get_endcmd() );
ds_destroy (&getl_buf);
getl_buf = output;