X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Frepeat.c;h=e992b29fa112def232c92c131d663d826f75deca;hb=92bfefccd465052e492f669ce561aa25b0110283;hp=aef5e9842db1679c8ecee195e0ce9ccc85b67b4c;hpb=fcb9e49b2a2d57af7c001ae5d2eda9ac443ba36b;p=pspp diff --git a/src/repeat.c b/src/repeat.c index aef5e9842d..e992b29fa1 100644 --- a/src/repeat.c +++ b/src/repeat.c @@ -18,12 +18,12 @@ 02111-1307, USA. */ #include -#include +#include "repeat.h" +#include "error.h" #include #include #include #include "alloc.h" -#include "cases.h" #include "command.h" #include "error.h" #include "getline.h" @@ -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) @@ -328,14 +325,7 @@ internal_cmd_do_repeat (void) { /* Note that if the variable already exists there is no harm done. */ - struct variable *v = create_variable (&default_dict, - iter->replacement[i], - NUMERIC, 0); - - /* If we created the variable then we need to initialize - its observations to SYSMIS. */ - if (v) - envector (v); + dict_create_var (default_dict, iter->replacement[i], 0); } } } @@ -513,7 +503,7 @@ cmd_end_repeat (void) /* Finds a DO REPEAT macro with name MACRO_NAME and returns the appropriate subsitution if found, or NULL if not. */ -char * +static char * find_DO_REPEAT_substitution (char *macro_name) { struct getl_script *s; @@ -549,19 +539,19 @@ 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 && isspace ((unsigned char) ds_end (&getl_buf)[-1])) ds_truncate (&getl_buf, ds_length (&getl_buf) - 1); - if (ds_length (&getl_buf) > 0 && ds_end (&getl_buf)[-1] == set_endcmd) + if (ds_length (&getl_buf) > 0 && ds_end (&getl_buf)[-1] == get_endcmd() ) { dot = 1; 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; @@ -570,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; } @@ -590,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, (unsigned char) set_endcmd); + ds_putc (&output, get_endcmd() ); ds_destroy (&getl_buf); getl_buf = output;