* sys-file-info.c: (cmd_display) Use compare_var_ptr_names to
[pspp] / src / language / dictionary / modify-variables.c
index 6ead73dc318e01c848b09a739596ab92036f8f45..f46dca7d73a6f1aba923e5ed3316de5eeeed0c43 100644 (file)
    02110-1301, USA. */
 
 #include <config.h>
    02110-1301, USA. */
 
 #include <config.h>
+
 #include <stdlib.h>
 #include <stdlib.h>
-#include "message.h"
-#include "array.h"
-#include "alloc.h"
-#include "bit-vector.h"
-#include "command.h"
-#include "compiler.h"
-#include "dictionary.h"
-#include "message.h"
-#include "hash.h"
-#include "lexer.h"
-#include "misc.h"
-#include "str.h"
-#include "variable.h"
-#include "procedure.h"
+
+#include <data/dictionary.h>
+#include <data/procedure.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/array.h>
+#include <libpspp/bit-vector.h>
+#include <libpspp/compiler.h>
+#include <libpspp/hash.h>
+#include <libpspp/message.h>
+#include <libpspp/message.h>
+#include <libpspp/misc.h>
+#include <libpspp/str.h>
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -50,7 +54,7 @@ struct ordering
 static struct ordering forward_positional_ordering = {1, 1};
 
 static int compare_variables_given_ordering (const void *, const void *,
 static struct ordering forward_positional_ordering = {1, 1};
 
 static int compare_variables_given_ordering (const void *, const void *,
-                                             void *ordering);
+                                             const void *ordering);
 
 /* Explains how to modify the variables in a dictionary. */
 struct var_modification
 
 /* Explains how to modify the variables in a dictionary. */
 struct var_modification
@@ -69,12 +73,12 @@ struct var_modification
     size_t rename_cnt;
   };
 
     size_t rename_cnt;
   };
 
-static int rearrange_dict (struct dictionary *d,
+static bool rearrange_dict (struct dictionary *d,
                            const struct var_modification *vm);
 
 /* Performs MODIFY VARS command. */
 int
                            const struct var_modification *vm);
 
 /* Performs MODIFY VARS command. */
 int
-cmd_modify_vars (void)
+cmd_modify_vars (struct dataset *ds)
 {
   /* Bits indicated whether we've already encountered a subcommand of
      this type. */
 {
   /* Bits indicated whether we've already encountered a subcommand of
      this type. */
@@ -88,12 +92,9 @@ cmd_modify_vars (void)
 
   size_t i;
 
 
   size_t i;
 
-  if (temporary != 0)
-    {
-      msg (SE, _("MODIFY VARS may not be used after TEMPORARY.  "
-                 "Temporary transformations will be made permanent."));
-      cancel_temporary (); 
-    }
+  if (proc_make_temporary_transformations_permanent (ds))
+    msg (SE, _("MODIFY VARS may not be used after TEMPORARY.  "
+               "Temporary transformations will be made permanent."));
 
   vm.reorder_vars = NULL;
   vm.reorder_cnt = 0;
 
   vm.reorder_vars = NULL;
   vm.reorder_cnt = 0;
@@ -141,7 +142,7 @@ cmd_modify_vars (void)
                           "of variables."));
                      goto done;
                    }
                           "of variables."));
                      goto done;
                    }
-                 dict_get_vars (default_dict, &v, &nv, 1u << DC_SYSTEM);
+                 dict_get_vars (dataset_dict (ds), &v, &nv, 1u << DC_SYSTEM);
                }
              else
                {
                }
              else
                {
@@ -151,7 +152,7 @@ cmd_modify_vars (void)
                      free (v);
                      goto done;
                    }
                      free (v);
                      goto done;
                    }
-                 if (!parse_variables (default_dict, &v, &nv,
+                 if (!parse_variables (dataset_dict (ds), &v, &nv,
                                        PV_APPEND | PV_NO_DUPLICATE))
                    {
                      free (v);
                                        PV_APPEND | PV_NO_DUPLICATE))
                    {
                      free (v);
@@ -193,7 +194,7 @@ cmd_modify_vars (void)
                  msg (SE, _("`(' expected on RENAME subcommand."));
                  goto done;
                }
                  msg (SE, _("`(' expected on RENAME subcommand."));
                  goto done;
                }
-             if (!parse_variables (default_dict, &vm.rename_vars, &vm.rename_cnt,
+             if (!parse_variables (dataset_dict (ds), &vm.rename_vars, &vm.rename_cnt,
                                    PV_APPEND | PV_NO_DUPLICATE))
                goto done;
              if (!lex_match ('='))
                                    PV_APPEND | PV_NO_DUPLICATE))
                goto done;
              if (!lex_match ('='))
@@ -238,7 +239,7 @@ cmd_modify_vars (void)
          already_encountered |= 4;
 
          lex_match ('=');
          already_encountered |= 4;
 
          lex_match ('=');
-         if (!parse_variables (default_dict, &keep_vars, &keep_cnt, PV_NONE))
+         if (!parse_variables (dataset_dict (ds), &keep_vars, &keep_cnt, PV_NONE))
            goto done;
 
          /* Transform the list of variables to keep into a list of
            goto done;
 
          /* Transform the list of variables to keep into a list of
@@ -247,7 +248,7 @@ cmd_modify_vars (void)
          sort (keep_vars, keep_cnt, sizeof *keep_vars,
                 compare_variables_given_ordering, &forward_positional_ordering);
 
          sort (keep_vars, keep_cnt, sizeof *keep_vars,
                 compare_variables_given_ordering, &forward_positional_ordering);
 
-          dict_get_vars (default_dict, &all_vars, &all_cnt, 0);
+          dict_get_vars (dataset_dict (ds), &all_vars, &all_cnt, 0);
           assert (all_cnt >= keep_cnt);
 
           drop_cnt = all_cnt - keep_cnt;
           assert (all_cnt >= keep_cnt);
 
           drop_cnt = all_cnt - keep_cnt;
@@ -259,7 +260,7 @@ cmd_modify_vars (void)
                               compare_variables_given_ordering,
                               &forward_positional_ordering)
               != drop_cnt)
                               compare_variables_given_ordering,
                               &forward_positional_ordering)
               != drop_cnt)
-            assert (0);
+            NOT_REACHED ();
 
           free (keep_vars);
           free (all_vars);
 
           free (keep_vars);
           free (all_vars);
@@ -282,14 +283,14 @@ cmd_modify_vars (void)
          already_encountered |= 4;
 
          lex_match ('=');
          already_encountered |= 4;
 
          lex_match ('=');
-         if (!parse_variables (default_dict, &drop_vars, &drop_cnt, PV_NONE))
+         if (!parse_variables (dataset_dict (ds), &drop_vars, &drop_cnt, PV_NONE))
            goto done;
           vm.drop_vars = drop_vars;
           vm.drop_cnt = drop_cnt;
        }
       else if (lex_match_id ("MAP"))
        {
            goto done;
           vm.drop_vars = drop_vars;
           vm.drop_cnt = drop_cnt;
        }
       else if (lex_match_id ("MAP"))
        {
-          struct dictionary *temp = dict_clone (default_dict);
+          struct dictionary *temp = dict_clone (dataset_dict (ds));
           int success = rearrange_dict (temp, &vm);
           if (success) 
             {
           int success = rearrange_dict (temp, &vm);
           if (success) 
             {
@@ -319,11 +320,11 @@ cmd_modify_vars (void)
   if (already_encountered & (1 | 4))
     {
       /* Read the data. */
   if (already_encountered & (1 | 4))
     {
       /* Read the data. */
-      if (!procedure (NULL, NULL)) 
+      if (!procedure (ds,NULL, NULL)) 
         goto done; 
     }
 
         goto done; 
     }
 
-  if (!rearrange_dict (default_dict, &vm))
+  if (!rearrange_dict (dataset_dict (ds), &vm))
     goto done; 
 
   ret_code = CMD_SUCCESS;
     goto done; 
 
   ret_code = CMD_SUCCESS;
@@ -342,7 +343,7 @@ done:
    ORDERING, returning a strcmp()-type result. */
 static int
 compare_variables_given_ordering (const void *a_, const void *b_,
    ORDERING, returning a strcmp()-type result. */
 static int
 compare_variables_given_ordering (const void *a_, const void *b_,
-                                  void *ordering_)
+                                  const void *ordering_)
 {
   struct variable *const *pa = a_;
   struct variable *const *pb = b_;
 {
   struct variable *const *pa = a_;
   struct variable *const *pb = b_;
@@ -371,7 +372,7 @@ struct var_renaming
    var_renaming structures A and B. */
 static int
 compare_var_renaming_by_new_name (const void *a_, const void *b_,
    var_renaming structures A and B. */
 static int
 compare_var_renaming_by_new_name (const void *a_, const void *b_,
-                                  void *foo UNUSED) 
+                                  const void *aux UNUSED) 
 {
   const struct var_renaming *a = a_;
   const struct var_renaming *b = b_;
 {
   const struct var_renaming *a = a_;
   const struct var_renaming *b = b_;
@@ -420,7 +421,7 @@ validate_var_modification (const struct dictionary *d,
                       keep_vars,
                       compare_variables_given_ordering,
                       &forward_positional_ordering) != keep_cnt)
                       keep_vars,
                       compare_variables_given_ordering,
                       &forward_positional_ordering) != keep_cnt)
-    assert (0);
+    NOT_REACHED ();
 
   /* Copy variables into var_renaming array. */
   var_renaming = xnmalloc (keep_cnt, sizeof *var_renaming);
 
   /* Copy variables into var_renaming array. */
   var_renaming = xnmalloc (keep_cnt, sizeof *var_renaming);
@@ -465,11 +466,11 @@ validate_var_modification (const struct dictionary *d,
 }
 
 /* Reoders, removes, and renames variables in dictionary D
 }
 
 /* Reoders, removes, and renames variables in dictionary D
-   according to VM.  Returns nonzero if successful, zero if there
+   according to VM.  Returns true if successful, false if there
    would have been duplicate variable names if the modifications
    had been carried out.  In the latter case, the dictionary is
    not modified. */
    would have been duplicate variable names if the modifications
    had been carried out.  In the latter case, the dictionary is
    not modified. */
-static int
+static bool
 rearrange_dict (struct dictionary *d, const struct var_modification *vm)
 {
   char **rename_old_names;
 rearrange_dict (struct dictionary *d, const struct var_modification *vm)
 {
   char **rename_old_names;
@@ -483,7 +484,7 @@ rearrange_dict (struct dictionary *d, const struct var_modification *vm)
   /* Check whether the modifications will cause duplicate
      names. */
   if (!validate_var_modification (d, vm))
   /* Check whether the modifications will cause duplicate
      names. */
   if (!validate_var_modification (d, vm))
-    return 0;
+    return false;
 
   /* Record the old names of variables to rename.  After
      variables are deleted, we can't depend on the variables to
 
   /* Record the old names of variables to rename.  After
      variables are deleted, we can't depend on the variables to
@@ -514,7 +515,7 @@ rearrange_dict (struct dictionary *d, const struct var_modification *vm)
   /* Do renaming. */
   if (dict_rename_vars (d, rename_vars, rename_new_names, rename_cnt,
                         NULL) == 0)
   /* Do renaming. */
   if (dict_rename_vars (d, rename_vars, rename_new_names, rename_cnt,
                         NULL) == 0)
-    assert (0);
+    NOT_REACHED ();
 
   /* Clean up. */
   for (i = 0; i < vm->rename_cnt; i++)
 
   /* Clean up. */
   for (i = 0; i < vm->rename_cnt; i++)
@@ -523,5 +524,5 @@ rearrange_dict (struct dictionary *d, const struct var_modification *vm)
   free (rename_vars);
   free (rename_new_names);
 
   free (rename_vars);
   free (rename_new_names);
 
-  return 1;
+  return true;
 }
 }