FREQUENCIES BARCHART: Honour then PERCENT option
[pspp] / src / language / stats / frequencies.c
index 8fb96b0d57e2316d59ecda71099d317d189e10db..dc18ed83c79589cf3c028cc872e84fb934dabfe8 100644 (file)
@@ -580,7 +580,7 @@ cmd_frequencies (struct lexer *lexer, struct dataset *ds)
 {
   int i;
   struct frq_proc frq;
-  const struct variable **vars;
+  const struct variable **vars = NULL;
 
   bool sbc_barchart = false;
   bool sbc_piechart = false;
@@ -1225,19 +1225,37 @@ cmd_frequencies (struct lexer *lexer, struct dataset *ds)
       {
        struct ccase *c;
        precalc (&frq, group, ds);
+
        for (; (c = casereader_read (group)) != NULL; case_unref (c))
          calc (&frq, c, ds);
        postcalc (&frq, ds);
+       casereader_destroy (group);
       }
     ok = casegrouper_destroy (grouper);
     ok = proc_commit (ds) && ok;
   }
 
 
+  free (vars);
+  free (frq.vars);
+  free (frq.bar);
+  free (frq.pie);
+  free (frq.hist);
+  free (frq.percentiles);
+  pool_destroy (frq.pool);
+
   return CMD_SUCCESS;
 
  error:
 
+  free (vars);
+  free (frq.vars);
+  free (frq.bar);
+  free (frq.pie);
+  free (frq.hist);
+  free (frq.percentiles);
+  pool_destroy (frq.pool);
+
   return CMD_FAILURE;
 }
 
@@ -1459,7 +1477,8 @@ do_barchart(const struct frq_chart *bar, const struct variable **var,
   struct freq **slices = pick_cat_counts_ptr (bar, frq_tab, &n_slices);
 
   chart_item_submit (barchart_create (var, 1,
-                                     (bar->y_scale == FRQ_FREQ) ? _("Count") : _("Percent"),
+                                     (bar->y_scale == FRQ_FREQ) ? _("Count") : _("Percent"), 
+                                     (bar->y_scale == FRQ_PERCENT),
                                      slices, n_slices));
   free (slices);
 }