#include <config.h>
#include "repeat.h"
-#include <assert.h>
+#include "error.h"
#include <ctype.h>
#include <math.h>
#include <stdlib.h>
#include "alloc.h"
-#include "cases.h"
#include "command.h"
#include "error.h"
#include "getline.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)
{
/* Note that if the variable already exists there is no
harm done. */
- struct variable *v = dict_create_var (default_dict,
- iter->replacement[i],
- 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);
}
}
}
/* 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;
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, (unsigned char) set_endcmd);
+ ds_putc (&output, get_endcmd() );
ds_destroy (&getl_buf);
getl_buf = output;