LIST: Improve wording of error messages.
[pspp] / src / language / data-io / list.c
index 90564e7a137c3d774ea3e1945674b08e05bb2bcd..e9e0e326c2234b5f823e1d0fc7fa29dac894bd42 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 2009-2011, 2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2009-2011, 2013, 2014, 2016 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -56,10 +56,10 @@ enum numbering
 
 struct lst_cmd
 {
-  int first;
-  int last;
-  int step;
-  struct variable **v_variables;
+  long first;
+  long last;
+  long step;
+  const struct variable **v_variables;
   size_t n_variables;
   enum numbering numbering;
 };
@@ -128,7 +128,7 @@ list_execute (const struct lst_cmd *lcmd, struct dataset *ds)
 
       casereader_destroy (group);
 
-      table_item_submit (table_item_create (t, "Data List"));
+      table_item_submit (table_item_create (t, "Data List", NULL));
     }
   ok = casegrouper_destroy (grouper);
   ok = proc_commit (ds) && ok;
@@ -162,7 +162,7 @@ cmd_list (struct lexer *lexer, struct dataset *ds)
       if (lex_match_id (lexer, "VARIABLES") )
         {
           lex_match (lexer, T_EQUALS);
-          if (! parse_variables (lexer, dict, &cmd.v_variables, &cmd.n_variables, 0 ))
+          if (! parse_variables_const (lexer, dict, &cmd.v_variables, &cmd.n_variables, 0 ))
             {
               msg (SE, _("No variables specified."));
               return CMD_FAILURE;
@@ -189,31 +189,26 @@ cmd_list (struct lexer *lexer, struct dataset *ds)
       else if (lex_match_id (lexer, "CASES"))
         {
           lex_match (lexer, T_EQUALS);
-          lex_force_match_id (lexer, "FROM");
-
-          if (lex_force_int (lexer))
+          if (lex_match_id (lexer, "FROM") && lex_force_int (lexer))
             {
-             cmd.first = lex_integer (lexer);
+              cmd.first = lex_integer (lexer);
               lex_get (lexer);
             }
 
-          lex_force_match (lexer, T_TO);
-
-          if (lex_force_int (lexer))
+          if ((lex_match (lexer, T_TO) && lex_force_int (lexer))
+              || lex_is_integer (lexer))
             {
               cmd.last = lex_integer (lexer);
               lex_get (lexer);
             }
 
-          lex_force_match (lexer, T_BY);
-
-          if (lex_force_int (lexer))
+          if (lex_match (lexer, T_BY) && lex_force_int (lexer))
             {
               cmd.step = lex_integer (lexer);
               lex_get (lexer);
             }
         }
-      else if (! parse_variables (lexer, dict, &cmd.v_variables, &cmd.n_variables, 0 ))
+      else if (! parse_variables_const (lexer, dict, &cmd.v_variables, &cmd.n_variables, 0 ))
         {
           return CMD_FAILURE;
         }
@@ -233,15 +228,15 @@ cmd_list (struct lexer *lexer, struct dataset *ds)
 
   if (cmd.first < 1)
     {
-      msg (SW, _("The first case (%ld) to list is less than 1.  The value is "
-                 "being reset to 1."), cmd.first);
+      msg (SW, _("The first case (%ld) to list is numbered less than 1.  "
+                 "The value is being reset to 1."), cmd.first);
       cmd.first = 1;
     }
 
   if (cmd.last < 1)
     {
-      msg (SW, _("The last case (%ld) to list is less than 1.  The value is "
-                 "being reset to 1."), cmd.last);
+      msg (SW, _("The last case (%ld) to list is numbered less than 1.  "
+                 "The value is being reset to 1."), cmd.last);
       cmd.last = 1;
     }