X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdictionary%2Fvector.c;h=7492015c7c868d3fd875722f8ac0d64150be4074;hb=e5675aa578a919a051f4de276d5f7e4df5ea8819;hp=050886d9effd334d203b627e37d6d2e91c6595d4;hpb=42489b63e0b4bec2e20c2f55c9791234f7b41764;p=pspp-builds.git diff --git a/src/language/dictionary/vector.c b/src/language/dictionary/vector.c index 050886d9..7492015c 100644 --- a/src/language/dictionary/vector.c +++ b/src/language/dictionary/vector.c @@ -37,7 +37,7 @@ #define _(msgid) gettext (msgid) int -cmd_vector (void) +cmd_vector (struct lexer *lexer, struct dataset *ds) { /* Just to be different, points to a set of null terminated strings containing the names of the vectors to be created. The list @@ -51,14 +51,16 @@ cmd_vector (void) /* Maximum allocated position for vecnames, plus one position. */ char *endp = NULL; + struct dictionary *dict = dataset_dict (ds); + cp = vecnames = xmalloc (256); endp = &vecnames[256]; do { /* Get the name(s) of the new vector(s). */ - if (!lex_force_id ()) + if (!lex_force_id (lexer)) return CMD_CASCADING_FAILURE; - while (token == T_ID) + while (lex_token (lexer) == T_ID) { if (cp + 16 > endp) { @@ -69,27 +71,27 @@ cmd_vector (void) } for (cp2 = cp; cp2 < cp; cp2 += strlen (cp)) - if (!strcasecmp (cp2, tokid)) + if (!strcasecmp (cp2, lex_tokid (lexer))) { - msg (SE, _("Vector name %s is given twice."), tokid); + msg (SE, _("Vector name %s is given twice."), lex_tokid (lexer)); goto fail; } - if (dict_lookup_vector (dataset_dict (current_dataset), tokid)) + if (dict_lookup_vector (dict, lex_tokid (lexer))) { - msg (SE, _("There is already a vector with name %s."), tokid); + msg (SE, _("There is already a vector with name %s."), lex_tokid (lexer)); goto fail; } - cp = stpcpy (cp, tokid) + 1; - lex_get (); - lex_match (','); + cp = stpcpy (cp, lex_tokid (lexer)) + 1; + lex_get (lexer); + lex_match (lexer, ','); } *cp++ = 0; /* Now that we have the names it's time to check for the short or long forms. */ - if (lex_match ('=')) + if (lex_match (lexer, '=')) { /* Long form. */ struct variable **v; @@ -104,14 +106,14 @@ cmd_vector (void) goto fail; } - if (!parse_variables (dataset_dict (current_dataset), &v, &nv, + if (!parse_variables (lexer, dict, &v, &nv, PV_SAME_TYPE | PV_DUPLICATE)) goto fail; - dict_create_vector (dataset_dict (current_dataset), vecnames, v, nv); + dict_create_vector (dict, vecnames, v, nv); free (v); } - else if (lex_match ('(')) + else if (lex_match (lexer, '(')) { int i; @@ -126,16 +128,16 @@ cmd_vector (void) struct variable **v; int nv; - if (!lex_force_int ()) + if (!lex_force_int (lexer)) return CMD_CASCADING_FAILURE; - nv = lex_integer (); - lex_get (); + nv = lex_integer (lexer); + lex_get (lexer); if (nv <= 0) { msg (SE, _("Vectors must have at least one element.")); goto fail; } - if (!lex_force_match (')')) + if (!lex_force_match (lexer, ')')) goto fail; /* First check that all the generated variable names @@ -158,7 +160,7 @@ cmd_vector (void) for (i = 0; i < nv; i++) { sprintf (name, "%s%d", cp, i + 1); - if (dict_lookup_var (dataset_dict (current_dataset), name)) + if (dict_lookup_var (dict, name)) { msg (SE, _("There is already a variable named %s."), name); @@ -175,9 +177,9 @@ cmd_vector (void) for (i = 0; i < nv; i++) { sprintf (name, "%s%d", cp, i + 1); - v[i] = dict_create_var_assert (dataset_dict (current_dataset), name, 0); + v[i] = dict_create_var_assert (dict, name, 0); } - if (!dict_create_vector (dataset_dict (current_dataset), cp, v, nv)) + if (!dict_create_vector (dict, cp, v, nv)) NOT_REACHED (); cp += strlen (cp) + 1; } @@ -194,11 +196,11 @@ cmd_vector (void) free (vecnames); vecnames = NULL; } - while (lex_match ('/')); + while (lex_match (lexer, '/')); - if (token != '.') + if (lex_token (lexer) != '.') { - lex_error (_("expecting end of command")); + lex_error (lexer, _("expecting end of command")); goto fail; } return CMD_SUCCESS;