Fixed bug in val_labs_remove.
[pspp-builds.git] / src / sample.c
index 96c5f4d9070705fadd7cebb297753aaec9ebd91b..fceadbbbf37e72a9ef0b0846419407e41e227115 100644 (file)
@@ -14,8 +14,8 @@
 
    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 <gsl/gsl_rng.h>
@@ -30,6 +30,9 @@
 #include "str.h"
 #include "var.h"
 
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
 #include "debug-print.h"
 
 /* The two different types of samples. */
@@ -42,7 +45,6 @@ enum
 /* SAMPLE transformation. */
 struct sample_trns
   {
-    struct trns_header h;
     int type;                  /* One of TYPE_*. */
     int n, N;                  /* TYPE_A_FROM_B: n from N. */
     int m, t;                  /* TYPE_A_FROM_B: # picked so far; # so far. */
@@ -50,6 +52,7 @@ struct sample_trns
   };
 
 static trns_proc_func sample_trns_proc;
+static trns_free_func sample_trns_free;
 
 int
 cmd_sample (void)
@@ -62,7 +65,7 @@ cmd_sample (void)
 
   if (!lex_force_num ())
     return CMD_FAILURE;
-  if (!lex_integer_p ())
+  if (!lex_is_integer ())
     {
       unsigned long min = gsl_rng_min (get_rng ());
       unsigned long max = gsl_rng_max (get_rng ());
@@ -101,24 +104,22 @@ cmd_sample (void)
   lex_get ();
 
   trns = xmalloc (sizeof *trns);
-  trns->h.proc = sample_trns_proc;
-  trns->h.free = NULL;
   trns->type = type;
   trns->n = a;
   trns->N = b;
   trns->m = trns->t = 0;
   trns->frac = frac;
-  add_transformation ((struct trns_header *) trns);
+  add_transformation (sample_trns_proc, sample_trns_free, trns);
 
   return lex_end_of_command ();
 }
 
 /* Executes a SAMPLE transformation. */
 static int
-sample_trns_proc (struct trns_header * trns, struct ccase *c UNUSED,
+sample_trns_proc (void *t_, struct ccase *c UNUSED,
                   int case_num UNUSED)
 {
-  struct sample_trns *t = (struct sample_trns *) trns;
+  struct sample_trns *t = t_;
   double U;
 
   if (t->type == TYPE_FRACTION) 
@@ -145,3 +146,10 @@ sample_trns_proc (struct trns_header * trns, struct ccase *c UNUSED,
       return -1;
     }
 }
+
+static void
+sample_trns_free (void *t_) 
+{
+  struct sample_trns *t = t_;
+  free (t);
+}