Adopt use of gnulib for portability.
[pspp-builds.git] / src / weight.c
index 1d7fe9eb306f35bbecb3f041d7626ce8e42b4d06..9128bc3e90038b2f44bb33e0df94528144ea5195 100644 (file)
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA. */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA. */
 
 #include <config.h>
-#include <assert.h>
+#include "error.h"
 #include <stdio.h>
 #include "command.h"
+#include "dictionary.h"
 #include "error.h"
 #include "lexer.h"
 #include "str.h"
 #include "var.h"
 
-/* Notes:
-
-   If the weighting variable is deleted somehow (for instance by
-   end-of-scope of TEMPORARY), weighting must be canceled.
-
-   Scratch vars may not be used for weighting. */
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
 
 /* WEIGHT transformation. */
 struct weight_trns
@@ -44,10 +41,8 @@ struct weight_trns
 int
 cmd_weight (void)
 {
-  lex_match_id ("WEIGHT");
-
   if (lex_match_id ("OFF"))
-    default_dict.weight_var[0] = 0;
+    dict_set_weight (default_dict, NULL);
   else
     {
       struct variable *v;
@@ -61,61 +56,14 @@ cmd_weight (void)
          msg (SE, _("The weighting variable must be numeric."));
          return CMD_FAILURE;
        }
-      if (v->name[0] == '#')
+      if (dict_class_from_id (v->name) == DC_SCRATCH)
        {
          msg (SE, _("The weighting variable may not be scratch."));
          return CMD_FAILURE;
        }
 
-      strcpy (default_dict.weight_var, v->name);
+      dict_set_weight (default_dict, v);
     }
 
   return lex_end_of_command ();
 }
-
-#if 0 /* FIXME: dead code. */
-static int
-weight_trns_proc (any_trns * pt, ccase * c)
-{
-  weight_trns *t = (weight_trns *) pt;
-
-  c->data[t->dest].f = c->data[t->src].f;
-  return -1;
-}
-#endif
-\f
-/* Global functions. */ 
-
-/* Sets the weight_index member of dictionary D to an appropriate
-   value for the value of weight_var, and returns the weighting
-   variable if any or NULL if none. */
-struct variable *
-update_weighting (struct dictionary * d)
-{
-  if (d->weight_var[0])
-    {
-      struct variable *v = find_dict_variable (d, d->weight_var);
-      if (v && v->type == NUMERIC)
-       {
-         d->weight_index = v->fv;
-         return v;
-       }
-      else
-       {
-#if GLOBAL_DEBUGGING
-         printf (_("bad weighting variable, canceling\n"));
-#endif
-         d->weight_var[0] = 0;
-       }
-    }
-
-  d->weight_index = -1;
-  return NULL;
-}
-
-/* Turns off case weighting for dictionary D. */
-void
-stop_weighting (struct dictionary * d)
-{
-  d->weight_var[0] = 0;
-}