Remove "Written by Ben Pfaff <blp@gnu.org>" lines everywhere.
[pspp-builds.git] / src / language / dictionary / vector.c
index 7553ba2c86f193f99d9b5961e0303c3c703b19c0..909daba71a90b131b4753771d936da8e9f43f7e8 100644 (file)
@@ -1,6 +1,5 @@
 /* PSPP - computes sample statistics.
    Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
-   Written by Ben Pfaff <blp@gnu.org>.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
    02110-1301, USA. */
 
 #include <config.h>
-#include <libpspp/message.h>
+
 #include <stdlib.h>
-#include <libpspp/alloc.h>
-#include <language/command.h>
+
+#include <data/procedure.h>
 #include <data/dictionary.h>
-#include <libpspp/message.h>
+#include <data/variable.h>
+#include <language/command.h>
 #include <language/lexer/lexer.h>
+#include <language/lexer/variable-parser.h>
+#include <libpspp/alloc.h>
+#include <libpspp/assertion.h>
+#include <libpspp/message.h>
 #include <libpspp/misc.h>
 #include <libpspp/str.h>
-#include <data/variable.h>
 
 #include "gettext.h"
 #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
@@ -47,14 +50,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)
            {
@@ -65,27 +70,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 (default_dict, 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;
@@ -100,14 +105,14 @@ cmd_vector (void)
              goto fail;
            }
 
-         if (!parse_variables (default_dict, &v, &nv,
-                                PV_SAME_TYPE | PV_DUPLICATE))
+         if (!parse_variables (lexer, dict, &v, &nv,
+                                PV_SAME_WIDTH | PV_DUPLICATE))
            goto fail;
 
-          dict_create_vector (default_dict, vecnames, v, nv);
+          dict_create_vector (dict, vecnames, v, nv);
           free (v);
        }
-      else if (lex_match ('('))
+      else if (lex_match (lexer, '('))
        {
          int i;
 
@@ -122,16 +127,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
@@ -154,7 +159,7 @@ cmd_vector (void)
              for (i = 0; i < nv; i++)
                {
                  sprintf (name, "%s%d", cp, i + 1);
-                 if (dict_lookup_var (default_dict, name))
+                 if (dict_lookup_var (dict, name))
                    {
                      msg (SE, _("There is already a variable named %s."),
                            name);
@@ -171,10 +176,10 @@ cmd_vector (void)
              for (i = 0; i < nv; i++)
                {
                  sprintf (name, "%s%d", cp, i + 1);
-                 v[i] = dict_create_var_assert (default_dict, name, 0);
+                 v[i] = dict_create_var_assert (dict, name, 0);
                }
-              if (!dict_create_vector (default_dict, cp, v, nv))
-                assert (0);
+              if (!dict_create_vector (dict, cp, v, nv))
+                NOT_REACHED ();
              cp += strlen (cp) + 1;
            }
           free (v);
@@ -190,11 +195,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;