MATRIX GET positive test
[pspp] / src / language / stats / matrix.c
index 088870d35882e5f6238d734d2ce975b678a6b592..bcae19971750704affa257ef127ca17693ed9b53 100644 (file)
@@ -4911,8 +4911,11 @@ matrix_read (struct read_command *read, struct dfm_reader *reader,
         {
           ss_ltrim (&line, ss_cstr (" ,"));
           if (!ss_is_empty (line))
-            msg (SW, _("Trailing garbage on line \"%.*s\""),
-                 (int) line.length, line.string);
+            {
+              /* XXX */
+              msg (SW, _("Trailing garbage on line \"%.*s\""),
+                   (int) line.length, line.string);
+            }
         }
     }
 }
@@ -5467,11 +5470,11 @@ matrix_parse_get (struct matrix_state *s)
         {
          lex_match (s->lexer, T_EQUALS);
           if (lex_match_id (s->lexer, "OMIT"))
-            get->user.treatment = MGET_OMIT;
+            get->system.treatment = MGET_OMIT;
           else if (lex_is_number (s->lexer))
             {
-              get->user.treatment = MGET_RECODE;
-              get->user.substitute = lex_number (s->lexer);
+              get->system.treatment = MGET_RECODE;
+              get->system.substitute = lex_number (s->lexer);
               lex_get (s->lexer);
             }
           else
@@ -5487,6 +5490,10 @@ matrix_parse_get (struct matrix_state *s)
           goto error;
         }
     }
+
+  if (get->user.treatment != MGET_ACCEPT)
+    get->system.treatment = MGET_ERROR;
+
   return cmd;
 
 error:
@@ -5551,6 +5558,22 @@ matrix_cmd_execute_get (struct get_command *get)
         }
     }
 
+  if (get->names)
+    {
+      gsl_matrix *names = gsl_matrix_alloc (n_vars, 1);
+      for (size_t i = 0; i < n_vars; i++)
+        {
+          char s[sizeof (double)];
+          double f;
+          buf_copy_str_rpad (s, sizeof s, var_get_name (vars[i]), ' ');
+          memcpy (&f, s, sizeof f);
+          gsl_matrix_set (names, i, 0, f);
+        }
+
+      gsl_matrix_free (get->names->value);
+      get->names->value = names;
+    }
+
   size_t n_rows = 0;
   gsl_matrix *m = gsl_matrix_alloc (4, n_vars);
   long long int casenum = 1;