X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Frepeat.c;h=e992b29fa112def232c92c131d663d826f75deca;hb=92bfefccd465052e492f669ce561aa25b0110283;hp=9141684c82de5262ce306f34c2a25eeeb0c9008c;hpb=def7e6026513a3ee7c2b38416b30a2e890e34311;p=pspp diff --git a/src/repeat.c b/src/repeat.c index 9141684c82..e992b29fa1 100644 --- a/src/repeat.c +++ b/src/repeat.c @@ -19,7 +19,7 @@ #include #include "repeat.h" -#include +#include "error.h" #include #include #include @@ -138,9 +138,6 @@ internal_cmd_do_repeat (void) 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 @@ -248,7 +245,7 @@ internal_cmd_do_repeat (void) 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 == '.') @@ -294,7 +291,7 @@ internal_cmd_do_repeat (void) 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); } } @@ -302,7 +299,7 @@ internal_cmd_do_repeat (void) 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) @@ -542,7 +539,7 @@ perform_DO_REPEAT_substitutions (void) /* 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 @@ -554,7 +551,7 @@ perform_DO_REPEAT_substitutions (void) 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; @@ -563,7 +560,7 @@ perform_DO_REPEAT_substitutions (void) if (in_quote || in_apos || !CHAR_IS_ID1 (*cp)) { - ds_putchar (&output, *cp++); + ds_putc (&output, *cp++); continue; } @@ -583,16 +580,16 @@ perform_DO_REPEAT_substitutions (void) 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;