Reworked settings so as to use one large struct instead of lots of static
[pspp-builds.git] / src / language / stats / frequencies.q
index ef4769b60e17339f9133f394e93ea3415d5cf20f..e7509052b05b2aa93dfadbe3eb72a6cc97383e35 100644 (file)
@@ -766,7 +766,7 @@ frq_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_freque
       vf->groups = NULL;
       vf->width = var_get_width (v);
       vf->print = *var_get_print_format (v);
-      if (vf->width > MAX_SHORT_STRING && get_algorithm () == COMPATIBLE)
+      if (vf->width > MAX_SHORT_STRING && settings_get_algorithm () == COMPATIBLE)
         {
           enum fmt_type type = var_get_print_format (v)->type;
           vf->width = MAX_SHORT_STRING;
@@ -1257,7 +1257,7 @@ calc_stats (const struct variable *v, double d[frq_n_stats])
          double tp;
          if ( percentiles[i].flag2  ) continue ;
 
-         if ( get_algorithm() != COMPATIBLE )
+         if ( settings_get_algorithm () != COMPATIBLE )
            tp =
              (ft->valid_cases - 1) *  percentiles[i].p;
          else
@@ -1308,7 +1308,7 @@ calc_stats (const struct variable *v, double d[frq_n_stats])
       double s;
 
       double dummy;
-      if ( get_algorithm() != COMPATIBLE )
+      if ( settings_get_algorithm () != COMPATIBLE )
        {
          s = modf((ft->valid_cases - 1) * percentiles[i].p , &dummy);
        }
@@ -1499,7 +1499,7 @@ freq_tab_to_slice_array(const struct freq_tab *frq_tab,
     {
       const struct freq *frq = &frq_tab->valid[i];
 
-      slices[i].label = var_get_value_name (var, frq->value);
+      var_append_value_name (var, frq->value, &slices[i].label);
       slices[i].magnetude = frq->count;
     }
 
@@ -1513,12 +1513,17 @@ static void
 do_piechart(const struct variable *var, const struct freq_tab *frq_tab)
 {
   struct slice *slices;
-  int n_slices;
+  int n_slices, i;
 
   slices = freq_tab_to_slice_array(frq_tab, var, &n_slices);
 
   piechart_plot(var_to_string(var), slices, n_slices);
 
+  for (i = 0 ; i < n_slices ; ++i )
+    {
+      ds_destroy (&slices[i].label);
+    }
+
   free(slices);
 }