Rename procedure.[ch] to dataset.[ch].
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 20 Mar 2011 18:19:39 +0000 (11:19 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 20 Mar 2011 18:19:39 +0000 (11:19 -0700)
These functions deal with datasets, so it is good to name the file after
the data structure.

80 files changed:
src/data/automake.mk
src/data/dataset.c [new file with mode: 0644]
src/data/dataset.h [new file with mode: 0644]
src/data/procedure.c [deleted file]
src/data/procedure.h [deleted file]
src/language/command.c
src/language/control/do-if.c
src/language/control/loop.c
src/language/control/repeat.c
src/language/control/temporary.c
src/language/data-io/combine-files.c
src/language/data-io/data-list.c
src/language/data-io/data-parser.c
src/language/data-io/data-reader.c
src/language/data-io/get-data.c
src/language/data-io/get.c
src/language/data-io/inpt-pgm.c
src/language/data-io/list.q
src/language/data-io/print-space.c
src/language/data-io/print.c
src/language/data-io/save-translate.c
src/language/data-io/save.c
src/language/dictionary/apply-dictionary.c
src/language/dictionary/attributes.c
src/language/dictionary/delete-variables.c
src/language/dictionary/formats.c
src/language/dictionary/missing-values.c
src/language/dictionary/modify-variables.c
src/language/dictionary/mrsets.c
src/language/dictionary/numeric.c
src/language/dictionary/rename-variables.c
src/language/dictionary/split-file.c
src/language/dictionary/sys-file-info.c
src/language/dictionary/value-labels.c
src/language/dictionary/variable-display.c
src/language/dictionary/variable-label.c
src/language/dictionary/vector.c
src/language/dictionary/weight.c
src/language/expressions/helpers.h
src/language/lexer/variable-parser.c
src/language/stats/aggregate.c
src/language/stats/autorecode.c
src/language/stats/binomial.c
src/language/stats/chisquare.c
src/language/stats/cochran.c
src/language/stats/correlations.c
src/language/stats/crosstabs.q
src/language/stats/descriptives.c
src/language/stats/examine.q
src/language/stats/factor.c
src/language/stats/flip.c
src/language/stats/frequencies.q
src/language/stats/friedman.c
src/language/stats/glm.c
src/language/stats/kruskal-wallis.c
src/language/stats/mann-whitney.c
src/language/stats/npar.c
src/language/stats/oneway.c
src/language/stats/rank.q
src/language/stats/regression.q
src/language/stats/reliability.c
src/language/stats/roc.c
src/language/stats/runs.c
src/language/stats/sign.c
src/language/stats/sort-cases.c
src/language/stats/t-test.q
src/language/stats/wilcoxon.c
src/language/utilities/include.c
src/language/utilities/set.q
src/language/utilities/title.c
src/language/xforms/compute.c
src/language/xforms/count.c
src/language/xforms/fail.c
src/language/xforms/recode.c
src/language/xforms/sample.c
src/language/xforms/select-if.c
src/ui/gui/executor.c
src/ui/gui/psppire-data-window.c
src/ui/gui/psppire.c
src/ui/terminal/main.c

index ae0000d2bcddad239d4151d17e146f4a7ba9a138..f7ee43f66cbee25dd7d53efaaa89f98d413369af 100644 (file)
@@ -48,6 +48,8 @@ src_data_libdata_la_SOURCES = \
        src/data/data-in.h \
        src/data/data-out.c \
        src/data/data-out.h \
+       src/data/dataset.c \
+       src/data/dataset.h \
        src/data/datasheet.c \
        src/data/datasheet.h \
        src/data/dict-class.c \
@@ -76,8 +78,6 @@ src_data_libdata_la_SOURCES = \
        src/data/make-file.h \
        src/data/mrset.c \
        src/data/mrset.h \
-       src/data/procedure.c \
-       src/data/procedure.h \
        src/data/por-file-reader.c \
        src/data/por-file-reader.h \
        src/data/por-file-writer.c \
diff --git a/src/data/dataset.c b/src/data/dataset.c
new file mode 100644 (file)
index 0000000..a94fba2
--- /dev/null
@@ -0,0 +1,835 @@
+/* PSPP - a program for statistical analysis.
+   Copyright (C) 1997-9, 2000, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include "data/dataset.h"
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "data/case.h"
+#include "data/case-map.h"
+#include "data/caseinit.h"
+#include "data/casereader.h"
+#include "data/casereader-provider.h"
+#include "data/casereader-shim.h"
+#include "data/casewriter.h"
+#include "data/dictionary.h"
+#include "data/file-handle-def.h"
+#include "data/transformations.h"
+#include "data/variable.h"
+#include "libpspp/deque.h"
+#include "libpspp/misc.h"
+#include "libpspp/str.h"
+#include "libpspp/taint.h"
+#include "libpspp/i18n.h"
+
+#include "gl/minmax.h"
+#include "gl/xalloc.h"
+
+struct dataset {
+  /* Cases are read from source,
+     their transformation variables are initialized,
+     pass through permanent_trns_chain (which transforms them into
+     the format described by permanent_dict),
+     are written to sink,
+     pass through temporary_trns_chain (which transforms them into
+     the format described by dict),
+     and are finally passed to the procedure. */
+  struct casereader *source;
+  struct caseinit *caseinit;
+  struct trns_chain *permanent_trns_chain;
+  struct dictionary *permanent_dict;
+  struct casewriter *sink;
+  struct trns_chain *temporary_trns_chain;
+  struct dictionary *dict;
+
+  /* Callback which occurs whenever the transformation chain(s) have
+     been modified */
+  transformation_change_callback_func *xform_callback;
+  void *xform_callback_aux;
+
+  /* If true, cases are discarded instead of being written to
+     sink. */
+  bool discard_output;
+
+  /* The transformation chain that the next transformation will be
+     added to. */
+  struct trns_chain *cur_trns_chain;
+
+  /* The case map used to compact a case, if necessary;
+     otherwise a null pointer. */
+  struct case_map *compactor;
+
+  /* Time at which proc was last invoked. */
+  time_t last_proc_invocation;
+
+  /* Cases just before ("lagging") the current one. */
+  int n_lag;                   /* Number of cases to lag. */
+  struct deque lag;             /* Deque of lagged cases. */
+  struct ccase **lag_cases;     /* Lagged cases managed by deque. */
+
+  /* Procedure data. */
+  enum
+    {
+      PROC_COMMITTED,           /* No procedure in progress. */
+      PROC_OPEN,                /* proc_open called, casereader still open. */
+      PROC_CLOSED               /* casereader from proc_open destroyed,
+                                   but proc_commit not yet called. */
+    }
+  proc_state;
+  casenumber cases_written;     /* Cases output so far. */
+  bool ok;                      /* Error status. */
+  struct casereader_shim *shim; /* Shim on proc_open() casereader. */
+
+  void (*callback) (void *); /* Callback for when the dataset changes */
+  void *cb_data;
+
+  /* Default encoding for reading syntax files. */
+  char *syntax_encoding;
+}; /* struct dataset */
+
+
+static void add_case_limit_trns (struct dataset *ds);
+static void add_filter_trns (struct dataset *ds);
+
+static void update_last_proc_invocation (struct dataset *ds);
+
+static void
+dataset_set_unsaved (const struct dataset *ds)
+{
+  if (ds->callback) ds->callback (ds->cb_data);
+}
+
+\f
+/* Public functions. */
+
+void
+dataset_set_callback (struct dataset *ds, void (*cb) (void *), void *cb_data)
+{
+  ds->callback = cb;
+  ds->cb_data = cb_data;
+}
+
+void
+dataset_set_default_syntax_encoding (struct dataset *ds, const char *encoding)
+{
+  free (ds->syntax_encoding);
+  ds->syntax_encoding = xstrdup (encoding);
+}
+
+const char *
+dataset_get_default_syntax_encoding (const struct dataset *ds)
+{
+  return ds->syntax_encoding;
+}
+
+/* Returns the last time the data was read. */
+time_t
+time_of_last_procedure (struct dataset *ds)
+{
+  if (ds->last_proc_invocation == 0)
+    update_last_proc_invocation (ds);
+  return ds->last_proc_invocation;
+}
+\f
+/* Regular procedure. */
+
+/* Executes any pending transformations, if necessary.
+   This is not identical to the EXECUTE command in that it won't
+   always read the source data.  This can be important when the
+   source data is given inline within BEGIN DATA...END FILE. */
+bool
+proc_execute (struct dataset *ds)
+{
+  bool ok;
+
+  if ((ds->temporary_trns_chain == NULL
+       || trns_chain_is_empty (ds->temporary_trns_chain))
+      && trns_chain_is_empty (ds->permanent_trns_chain))
+    {
+      ds->n_lag = 0;
+      ds->discard_output = false;
+      dict_set_case_limit (ds->dict, 0);
+      dict_clear_vectors (ds->dict);
+      return true;
+    }
+
+  ok = casereader_destroy (proc_open (ds));
+  return proc_commit (ds) && ok;
+}
+
+static const struct casereader_class proc_casereader_class;
+
+/* Opens dataset DS for reading cases with proc_read.  If FILTER is true, then
+   cases filtered out with FILTER BY will not be included in the casereader
+   (which is usually desirable).  If FILTER is false, all cases will be
+   included regardless of FILTER BY settings.
+
+   proc_commit must be called when done. */
+struct casereader *
+proc_open_filtering (struct dataset *ds, bool filter)
+{
+  struct casereader *reader;
+
+  assert (ds->source != NULL);
+  assert (ds->proc_state == PROC_COMMITTED);
+
+  update_last_proc_invocation (ds);
+
+  caseinit_mark_for_init (ds->caseinit, ds->dict);
+
+  /* Finish up the collection of transformations. */
+  add_case_limit_trns (ds);
+  if (filter)
+    add_filter_trns (ds);
+  trns_chain_finalize (ds->cur_trns_chain);
+
+  /* Make permanent_dict refer to the dictionary right before
+     data reaches the sink. */
+  if (ds->permanent_dict == NULL)
+    ds->permanent_dict = ds->dict;
+
+  /* Prepare sink. */
+  if (!ds->discard_output)
+    {
+      struct dictionary *pd = ds->permanent_dict;
+      size_t compacted_value_cnt = dict_count_values (pd, 1u << DC_SCRATCH);
+      if (compacted_value_cnt < dict_get_next_value_idx (pd))
+        {
+          struct caseproto *compacted_proto;
+          compacted_proto = dict_get_compacted_proto (pd, 1u << DC_SCRATCH);
+          ds->compactor = case_map_to_compact_dict (pd, 1u << DC_SCRATCH);
+          ds->sink = autopaging_writer_create (compacted_proto);
+          caseproto_unref (compacted_proto);
+        }
+      else
+        {
+          ds->compactor = NULL;
+          ds->sink = autopaging_writer_create (dict_get_proto (pd));
+        }
+    }
+  else
+    {
+      ds->compactor = NULL;
+      ds->sink = NULL;
+    }
+
+  /* Allocate memory for lagged cases. */
+  ds->lag_cases = deque_init (&ds->lag, ds->n_lag, sizeof *ds->lag_cases);
+
+  ds->proc_state = PROC_OPEN;
+  ds->cases_written = 0;
+  ds->ok = true;
+
+  /* FIXME: use taint in dataset in place of `ok'? */
+  /* FIXME: for trivial cases we can just return a clone of
+     ds->source? */
+
+  /* Create casereader and insert a shim on top.  The shim allows us to
+     arbitrarily extend the casereader's lifetime, by slurping the cases into
+     the shim's buffer in proc_commit().  That is especially useful when output
+     table_items are generated directly from the procedure casereader (e.g. by
+     the LIST procedure) when we are using an output driver that keeps a
+     reference to the output items passed to it (e.g. the GUI output driver in
+     PSPPIRE). */
+  reader = casereader_create_sequential (NULL, dict_get_proto (ds->dict),
+                                         CASENUMBER_MAX,
+                                         &proc_casereader_class, ds);
+  ds->shim = casereader_shim_insert (reader);
+  return reader;
+}
+
+/* Opens dataset DS for reading cases with proc_read.
+   proc_commit must be called when done. */
+struct casereader *
+proc_open (struct dataset *ds)
+{
+  return proc_open_filtering (ds, true);
+}
+
+/* Returns true if a procedure is in progress, that is, if
+   proc_open has been called but proc_commit has not. */
+bool
+proc_is_open (const struct dataset *ds)
+{
+  return ds->proc_state != PROC_COMMITTED;
+}
+
+/* "read" function for procedure casereader. */
+static struct ccase *
+proc_casereader_read (struct casereader *reader UNUSED, void *ds_)
+{
+  struct dataset *ds = ds_;
+  enum trns_result retval = TRNS_DROP_CASE;
+  struct ccase *c;
+
+  assert (ds->proc_state == PROC_OPEN);
+  for (; ; case_unref (c))
+    {
+      casenumber case_nr;
+
+      assert (retval == TRNS_DROP_CASE || retval == TRNS_ERROR);
+      if (retval == TRNS_ERROR)
+        ds->ok = false;
+      if (!ds->ok)
+        return NULL;
+
+      /* Read a case from source. */
+      c = casereader_read (ds->source);
+      if (c == NULL)
+        return NULL;
+      c = case_unshare_and_resize (c, dict_get_proto (ds->dict));
+      caseinit_init_vars (ds->caseinit, c);
+
+      /* Execute permanent transformations.  */
+      case_nr = ds->cases_written + 1;
+      retval = trns_chain_execute (ds->permanent_trns_chain, TRNS_CONTINUE,
+                                   &c, case_nr);
+      caseinit_update_left_vars (ds->caseinit, c);
+      if (retval != TRNS_CONTINUE)
+        continue;
+
+      /* Write case to collection of lagged cases. */
+      if (ds->n_lag > 0)
+        {
+          while (deque_count (&ds->lag) >= ds->n_lag)
+            case_unref (ds->lag_cases[deque_pop_back (&ds->lag)]);
+          ds->lag_cases[deque_push_front (&ds->lag)] = case_ref (c);
+        }
+
+      /* Write case to replacement active file. */
+      ds->cases_written++;
+      if (ds->sink != NULL)
+        casewriter_write (ds->sink,
+                          case_map_execute (ds->compactor, case_ref (c)));
+
+      /* Execute temporary transformations. */
+      if (ds->temporary_trns_chain != NULL)
+        {
+          retval = trns_chain_execute (ds->temporary_trns_chain, TRNS_CONTINUE,
+                                       &c, ds->cases_written);
+          if (retval != TRNS_CONTINUE)
+            continue;
+        }
+
+      return c;
+    }
+}
+
+/* "destroy" function for procedure casereader. */
+static void
+proc_casereader_destroy (struct casereader *reader, void *ds_)
+{
+  struct dataset *ds = ds_;
+  struct ccase *c;
+
+  /* We are always the subreader for a casereader_buffer, so if we're being
+     destroyed then it's because the casereader_buffer has read all the cases
+     that it ever will. */
+  ds->shim = NULL;
+
+  /* Make sure transformations happen for every input case, in
+     case they have side effects, and ensure that the replacement
+     active file gets all the cases it should. */
+  while ((c = casereader_read (reader)) != NULL)
+    case_unref (c);
+
+  ds->proc_state = PROC_CLOSED;
+  ds->ok = casereader_destroy (ds->source) && ds->ok;
+  ds->source = NULL;
+  proc_set_active_file_data (ds, NULL);
+}
+
+/* Must return false if the source casereader, a transformation,
+   or the sink casewriter signaled an error.  (If a temporary
+   transformation signals an error, then the return value is
+   false, but the replacement active file may still be
+   untainted.) */
+bool
+proc_commit (struct dataset *ds)
+{
+  if (ds->shim != NULL)
+    casereader_shim_slurp (ds->shim);
+
+  assert (ds->proc_state == PROC_CLOSED);
+  ds->proc_state = PROC_COMMITTED;
+
+  dataset_set_unsaved (ds);
+
+  /* Free memory for lagged cases. */
+  while (!deque_is_empty (&ds->lag))
+    case_unref (ds->lag_cases[deque_pop_back (&ds->lag)]);
+  free (ds->lag_cases);
+
+  /* Dictionary from before TEMPORARY becomes permanent. */
+  proc_cancel_temporary_transformations (ds);
+
+  if (!ds->discard_output)
+    {
+      /* Finish compacting. */
+      if (ds->compactor != NULL)
+        {
+          case_map_destroy (ds->compactor);
+          ds->compactor = NULL;
+
+          dict_delete_scratch_vars (ds->dict);
+          dict_compact_values (ds->dict);
+        }
+
+      /* Old data sink becomes new data source. */
+      if (ds->sink != NULL)
+        ds->source = casewriter_make_reader (ds->sink);
+    }
+  else
+    {
+      ds->source = NULL;
+      ds->discard_output = false;
+    }
+  ds->sink = NULL;
+
+  caseinit_clear (ds->caseinit);
+  caseinit_mark_as_preinited (ds->caseinit, ds->dict);
+
+  dict_clear_vectors (ds->dict);
+  ds->permanent_dict = NULL;
+  return proc_cancel_all_transformations (ds) && ds->ok;
+}
+
+/* Casereader class for procedure execution. */
+static const struct casereader_class proc_casereader_class =
+  {
+    proc_casereader_read,
+    proc_casereader_destroy,
+    NULL,
+    NULL,
+  };
+
+/* Updates last_proc_invocation. */
+static void
+update_last_proc_invocation (struct dataset *ds)
+{
+  ds->last_proc_invocation = time (NULL);
+}
+\f
+/* Returns a pointer to the lagged case from N_BEFORE cases before the
+   current one, or NULL if there haven't been that many cases yet. */
+const struct ccase *
+lagged_case (const struct dataset *ds, int n_before)
+{
+  assert (n_before >= 1);
+  assert (n_before <= ds->n_lag);
+
+  if (n_before <= deque_count (&ds->lag))
+    return ds->lag_cases[deque_front (&ds->lag, n_before - 1)];
+  else
+    return NULL;
+}
+\f
+/* Returns the current set of permanent transformations,
+   and clears the permanent transformations.
+   For use by INPUT PROGRAM. */
+struct trns_chain *
+proc_capture_transformations (struct dataset *ds)
+{
+  struct trns_chain *chain;
+
+  assert (ds->temporary_trns_chain == NULL);
+  chain = ds->permanent_trns_chain;
+  ds->cur_trns_chain = ds->permanent_trns_chain = trns_chain_create ();
+
+  if ( ds->xform_callback)
+    ds->xform_callback (false, ds->xform_callback_aux);
+
+  return chain;
+}
+
+/* Adds a transformation that processes a case with PROC and
+   frees itself with FREE to the current set of transformations.
+   The functions are passed AUX as auxiliary data. */
+void
+add_transformation (struct dataset *ds, trns_proc_func *proc, trns_free_func *free, void *aux)
+{
+  trns_chain_append (ds->cur_trns_chain, NULL, proc, free, aux);
+  if ( ds->xform_callback)
+    ds->xform_callback (true, ds->xform_callback_aux);
+}
+
+/* Adds a transformation that processes a case with PROC and
+   frees itself with FREE to the current set of transformations.
+   When parsing of the block of transformations is complete,
+   FINALIZE will be called.
+   The functions are passed AUX as auxiliary data. */
+void
+add_transformation_with_finalizer (struct dataset *ds,
+                                  trns_finalize_func *finalize,
+                                   trns_proc_func *proc,
+                                   trns_free_func *free, void *aux)
+{
+  trns_chain_append (ds->cur_trns_chain, finalize, proc, free, aux);
+
+  if ( ds->xform_callback)
+    ds->xform_callback (true, ds->xform_callback_aux);
+}
+
+/* Returns the index of the next transformation.
+   This value can be returned by a transformation procedure
+   function to indicate a "jump" to that transformation. */
+size_t
+next_transformation (const struct dataset *ds)
+{
+  return trns_chain_next (ds->cur_trns_chain);
+}
+
+/* Returns true if the next call to add_transformation() will add
+   a temporary transformation, false if it will add a permanent
+   transformation. */
+bool
+proc_in_temporary_transformations (const struct dataset *ds)
+{
+  return ds->temporary_trns_chain != NULL;
+}
+
+/* Marks the start of temporary transformations.
+   Further calls to add_transformation() will add temporary
+   transformations. */
+void
+proc_start_temporary_transformations (struct dataset *ds)
+{
+  if (!proc_in_temporary_transformations (ds))
+    {
+      add_case_limit_trns (ds);
+
+      ds->permanent_dict = dict_clone (ds->dict);
+
+      trns_chain_finalize (ds->permanent_trns_chain);
+      ds->temporary_trns_chain = ds->cur_trns_chain = trns_chain_create ();
+
+      if ( ds->xform_callback)
+       ds->xform_callback (true, ds->xform_callback_aux);
+    }
+}
+
+/* Converts all the temporary transformations, if any, to
+   permanent transformations.  Further transformations will be
+   permanent.
+   Returns true if anything changed, false otherwise. */
+bool
+proc_make_temporary_transformations_permanent (struct dataset *ds)
+{
+  if (proc_in_temporary_transformations (ds))
+    {
+      trns_chain_finalize (ds->temporary_trns_chain);
+      trns_chain_splice (ds->permanent_trns_chain, ds->temporary_trns_chain);
+      ds->temporary_trns_chain = NULL;
+
+      dict_destroy (ds->permanent_dict);
+      ds->permanent_dict = NULL;
+
+      return true;
+    }
+  else
+    return false;
+}
+
+/* Cancels all temporary transformations, if any.  Further
+   transformations will be permanent.
+   Returns true if anything changed, false otherwise. */
+bool
+proc_cancel_temporary_transformations (struct dataset *ds)
+{
+  if (proc_in_temporary_transformations (ds))
+    {
+      dict_destroy (ds->dict);
+      ds->dict = ds->permanent_dict;
+      ds->permanent_dict = NULL;
+
+      trns_chain_destroy (ds->temporary_trns_chain);
+      ds->temporary_trns_chain = NULL;
+
+      if ( ds->xform_callback)
+       ds->xform_callback (!trns_chain_is_empty (ds->permanent_trns_chain),
+                           ds->xform_callback_aux);
+
+      return true;
+    }
+  else
+    return false;
+}
+
+/* Cancels all transformations, if any.
+   Returns true if successful, false on I/O error. */
+bool
+proc_cancel_all_transformations (struct dataset *ds)
+{
+  bool ok;
+  assert (ds->proc_state == PROC_COMMITTED);
+  ok = trns_chain_destroy (ds->permanent_trns_chain);
+  ok = trns_chain_destroy (ds->temporary_trns_chain) && ok;
+  ds->permanent_trns_chain = ds->cur_trns_chain = trns_chain_create ();
+  ds->temporary_trns_chain = NULL;
+  if ( ds->xform_callback)
+    ds->xform_callback (false, ds->xform_callback_aux);
+
+  return ok;
+}
+\f
+
+static void
+dict_callback (struct dictionary *d UNUSED, void *ds_)
+{
+  struct dataset *ds = ds_;
+  dataset_set_unsaved (ds);
+}
+
+/* Initializes procedure handling. */
+struct dataset *
+create_dataset (void)
+{
+  struct dataset *ds = xzalloc (sizeof(*ds));
+  ds->dict = dict_create ();
+
+  dict_set_change_callback (ds->dict, dict_callback, ds);
+
+  dict_set_encoding (ds->dict, get_default_encoding ());
+
+  ds->caseinit = caseinit_create ();
+  proc_cancel_all_transformations (ds);
+
+  ds->syntax_encoding = xstrdup ("Auto");
+
+  return ds;
+}
+
+
+void
+dataset_add_transform_change_callback (struct dataset *ds,
+                                      transformation_change_callback_func *cb,
+                                      void *aux)
+{
+  ds->xform_callback = cb;
+  ds->xform_callback_aux = aux;
+}
+
+/* Finishes up procedure handling. */
+void
+destroy_dataset (struct dataset *ds)
+{
+  proc_discard_active_file (ds);
+  dict_destroy (ds->dict);
+  caseinit_destroy (ds->caseinit);
+  trns_chain_destroy (ds->permanent_trns_chain);
+
+  if ( ds->xform_callback)
+    ds->xform_callback (false, ds->xform_callback_aux);
+
+  free (ds->syntax_encoding);
+  free (ds);
+}
+
+/* Causes output from the next procedure to be discarded, instead
+   of being preserved for use as input for the next procedure. */
+void
+proc_discard_output (struct dataset *ds)
+{
+  ds->discard_output = true;
+}
+
+/* Discards the active file dictionary, data, and
+   transformations. */
+void
+proc_discard_active_file (struct dataset *ds)
+{
+  assert (ds->proc_state == PROC_COMMITTED);
+
+  dict_clear (ds->dict);
+  fh_set_default_handle (NULL);
+
+  ds->n_lag = 0;
+
+  casereader_destroy (ds->source);
+  ds->source = NULL;
+
+  proc_cancel_all_transformations (ds);
+}
+
+/* Sets SOURCE as the source for procedure input for the next
+   procedure. */
+void
+proc_set_active_file (struct dataset *ds,
+                      struct casereader *source,
+                      struct dictionary *dict)
+{
+  assert (ds->proc_state == PROC_COMMITTED);
+  assert (ds->dict != dict);
+
+  proc_discard_active_file (ds);
+
+  dict_destroy (ds->dict);
+  ds->dict = dict;
+  dict_set_change_callback (ds->dict, dict_callback, ds);
+
+  proc_set_active_file_data (ds, source);
+}
+
+/* Replaces the active file's data by READER without replacing
+   the associated dictionary. */
+bool
+proc_set_active_file_data (struct dataset *ds, struct casereader *reader)
+{
+  casereader_destroy (ds->source);
+  ds->source = reader;
+
+  caseinit_clear (ds->caseinit);
+  caseinit_mark_as_preinited (ds->caseinit, ds->dict);
+
+  return reader == NULL || !casereader_error (reader);
+}
+
+/* Returns true if an active file data source is available, false
+   otherwise. */
+bool
+proc_has_active_file (const struct dataset *ds)
+{
+  return ds->source != NULL;
+}
+
+/* Returns the active file data source from DS, or a null pointer
+   if DS has no data source, and removes it from DS. */
+struct casereader *
+proc_extract_active_file_data (struct dataset *ds)
+{
+  struct casereader *reader = ds->source;
+  ds->source = NULL;
+
+  return reader;
+}
+
+/* Checks whether DS has a corrupted active file.  If so,
+   discards it and returns false.  If not, returns true without
+   doing anything. */
+bool
+dataset_end_of_command (struct dataset *ds)
+{
+  if (ds->source != NULL)
+    {
+      if (casereader_error (ds->source))
+        {
+          proc_discard_active_file (ds);
+          return false;
+        }
+      else
+        {
+          const struct taint *taint = casereader_get_taint (ds->source);
+          taint_reset_successor_taint (CONST_CAST (struct taint *, taint));
+          assert (!taint_has_tainted_successor (taint));
+        }
+    }
+  return true;
+}
+\f
+static trns_proc_func case_limit_trns_proc;
+static trns_free_func case_limit_trns_free;
+
+/* Adds a transformation that limits the number of cases that may
+   pass through, if DS->DICT has a case limit. */
+static void
+add_case_limit_trns (struct dataset *ds)
+{
+  casenumber case_limit = dict_get_case_limit (ds->dict);
+  if (case_limit != 0)
+    {
+      casenumber *cases_remaining = xmalloc (sizeof *cases_remaining);
+      *cases_remaining = case_limit;
+      add_transformation (ds, case_limit_trns_proc, case_limit_trns_free,
+                          cases_remaining);
+      dict_set_case_limit (ds->dict, 0);
+    }
+}
+
+/* Limits the maximum number of cases processed to
+   *CASES_REMAINING. */
+static int
+case_limit_trns_proc (void *cases_remaining_,
+                      struct ccase **c UNUSED, casenumber case_nr UNUSED)
+{
+  size_t *cases_remaining = cases_remaining_;
+  if (*cases_remaining > 0)
+    {
+      (*cases_remaining)--;
+      return TRNS_CONTINUE;
+    }
+  else
+    return TRNS_DROP_CASE;
+}
+
+/* Frees the data associated with a case limit transformation. */
+static bool
+case_limit_trns_free (void *cases_remaining_)
+{
+  size_t *cases_remaining = cases_remaining_;
+  free (cases_remaining);
+  return true;
+}
+\f
+static trns_proc_func filter_trns_proc;
+
+/* Adds a temporary transformation to filter data according to
+   the variable specified on FILTER, if any. */
+static void
+add_filter_trns (struct dataset *ds)
+{
+  struct variable *filter_var = dict_get_filter (ds->dict);
+  if (filter_var != NULL)
+    {
+      proc_start_temporary_transformations (ds);
+      add_transformation (ds, filter_trns_proc, NULL, filter_var);
+    }
+}
+
+/* FILTER transformation. */
+static int
+filter_trns_proc (void *filter_var_,
+                  struct ccase **c UNUSED, casenumber case_nr UNUSED)
+
+{
+  struct variable *filter_var = filter_var_;
+  double f = case_num (*c, filter_var);
+  return (f != 0.0 && !var_is_num_missing (filter_var, f, MV_ANY)
+          ? TRNS_CONTINUE : TRNS_DROP_CASE);
+}
+
+
+struct dictionary *
+dataset_dict (const struct dataset *ds)
+{
+  return ds->dict;
+}
+
+const struct casereader *
+dataset_source (const struct dataset *ds)
+{
+  return ds->source;
+}
+
+void
+dataset_need_lag (struct dataset *ds, int n_before)
+{
+  ds->n_lag = MAX (ds->n_lag, n_before);
+}
diff --git a/src/data/dataset.h b/src/data/dataset.h
new file mode 100644 (file)
index 0000000..4561f97
--- /dev/null
@@ -0,0 +1,89 @@
+/* PSPP - a program for statistical analysis.
+   Copyright (C) 1997-9, 2000, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef PROCEDURE_H
+#define PROCEDURE_H 1
+
+#include <time.h>
+#include <stdbool.h>
+
+#include "data/transformations.h"
+#include "libpspp/compiler.h"
+
+struct casereader;
+struct dataset;
+struct dictionary;
+\f
+/* Transformations. */
+
+void add_transformation (struct dataset *ds,
+                        trns_proc_func *, trns_free_func *, void *);
+void add_transformation_with_finalizer (struct dataset *ds,
+                                       trns_finalize_func *,
+                                        trns_proc_func *,
+                                        trns_free_func *, void *);
+size_t next_transformation (const struct dataset *ds);
+
+bool proc_cancel_all_transformations (struct dataset *ds);
+struct trns_chain *proc_capture_transformations (struct dataset *ds);
+
+void proc_start_temporary_transformations (struct dataset *ds);
+bool proc_in_temporary_transformations (const struct dataset *ds);
+bool proc_make_temporary_transformations_permanent (struct dataset *ds);
+bool proc_cancel_temporary_transformations (struct dataset *ds);
+\f
+/* Procedures. */
+
+typedef void transformation_change_callback_func (bool non_empty, void *aux);
+
+struct dataset * create_dataset (void);
+
+void destroy_dataset (struct dataset *);
+
+void dataset_add_transform_change_callback (struct dataset *,
+                                           transformation_change_callback_func *, void *);
+
+void proc_discard_active_file (struct dataset *);
+void proc_set_active_file (struct dataset *,
+                           struct casereader *, struct dictionary *);
+bool proc_set_active_file_data (struct dataset *, struct casereader *);
+bool proc_has_active_file (const struct dataset *ds);
+struct casereader *proc_extract_active_file_data (struct dataset *);
+
+void proc_discard_output (struct dataset *ds);
+
+bool proc_execute (struct dataset *ds);
+time_t time_of_last_procedure (struct dataset *ds);
+
+struct casereader *proc_open_filtering (struct dataset *, bool filter);
+struct casereader *proc_open (struct dataset *);
+bool proc_is_open (const struct dataset *);
+bool proc_commit (struct dataset *);
+
+bool dataset_end_of_command (struct dataset *);
+\f
+struct dictionary *dataset_dict (const struct dataset *ds);
+const struct casereader *dataset_source (const struct dataset *ds);
+
+const struct ccase *lagged_case (const struct dataset *ds, int n_before);
+void dataset_need_lag (struct dataset *ds, int n_before);
+
+void dataset_set_callback (struct dataset *ds, void (*cb) (void *), void *);
+
+void dataset_set_default_syntax_encoding (struct dataset *, const char *);
+const char *dataset_get_default_syntax_encoding (const struct dataset *);
+
+#endif /* dataset.h */
diff --git a/src/data/procedure.c b/src/data/procedure.c
deleted file mode 100644 (file)
index a45f497..0000000
+++ /dev/null
@@ -1,835 +0,0 @@
-/* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
-
-#include <config.h>
-
-#include "data/procedure.h"
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "data/case.h"
-#include "data/case-map.h"
-#include "data/caseinit.h"
-#include "data/casereader.h"
-#include "data/casereader-provider.h"
-#include "data/casereader-shim.h"
-#include "data/casewriter.h"
-#include "data/dictionary.h"
-#include "data/file-handle-def.h"
-#include "data/transformations.h"
-#include "data/variable.h"
-#include "libpspp/deque.h"
-#include "libpspp/misc.h"
-#include "libpspp/str.h"
-#include "libpspp/taint.h"
-#include "libpspp/i18n.h"
-
-#include "gl/minmax.h"
-#include "gl/xalloc.h"
-
-struct dataset {
-  /* Cases are read from source,
-     their transformation variables are initialized,
-     pass through permanent_trns_chain (which transforms them into
-     the format described by permanent_dict),
-     are written to sink,
-     pass through temporary_trns_chain (which transforms them into
-     the format described by dict),
-     and are finally passed to the procedure. */
-  struct casereader *source;
-  struct caseinit *caseinit;
-  struct trns_chain *permanent_trns_chain;
-  struct dictionary *permanent_dict;
-  struct casewriter *sink;
-  struct trns_chain *temporary_trns_chain;
-  struct dictionary *dict;
-
-  /* Callback which occurs whenever the transformation chain(s) have
-     been modified */
-  transformation_change_callback_func *xform_callback;
-  void *xform_callback_aux;
-
-  /* If true, cases are discarded instead of being written to
-     sink. */
-  bool discard_output;
-
-  /* The transformation chain that the next transformation will be
-     added to. */
-  struct trns_chain *cur_trns_chain;
-
-  /* The case map used to compact a case, if necessary;
-     otherwise a null pointer. */
-  struct case_map *compactor;
-
-  /* Time at which proc was last invoked. */
-  time_t last_proc_invocation;
-
-  /* Cases just before ("lagging") the current one. */
-  int n_lag;                   /* Number of cases to lag. */
-  struct deque lag;             /* Deque of lagged cases. */
-  struct ccase **lag_cases;     /* Lagged cases managed by deque. */
-
-  /* Procedure data. */
-  enum
-    {
-      PROC_COMMITTED,           /* No procedure in progress. */
-      PROC_OPEN,                /* proc_open called, casereader still open. */
-      PROC_CLOSED               /* casereader from proc_open destroyed,
-                                   but proc_commit not yet called. */
-    }
-  proc_state;
-  casenumber cases_written;     /* Cases output so far. */
-  bool ok;                      /* Error status. */
-  struct casereader_shim *shim; /* Shim on proc_open() casereader. */
-
-  void (*callback) (void *); /* Callback for when the dataset changes */
-  void *cb_data;
-
-  /* Default encoding for reading syntax files. */
-  char *syntax_encoding;
-}; /* struct dataset */
-
-
-static void add_case_limit_trns (struct dataset *ds);
-static void add_filter_trns (struct dataset *ds);
-
-static void update_last_proc_invocation (struct dataset *ds);
-
-static void
-dataset_set_unsaved (const struct dataset *ds)
-{
-  if (ds->callback) ds->callback (ds->cb_data);
-}
-
-\f
-/* Public functions. */
-
-void
-dataset_set_callback (struct dataset *ds, void (*cb) (void *), void *cb_data)
-{
-  ds->callback = cb;
-  ds->cb_data = cb_data;
-}
-
-void
-dataset_set_default_syntax_encoding (struct dataset *ds, const char *encoding)
-{
-  free (ds->syntax_encoding);
-  ds->syntax_encoding = xstrdup (encoding);
-}
-
-const char *
-dataset_get_default_syntax_encoding (const struct dataset *ds)
-{
-  return ds->syntax_encoding;
-}
-
-/* Returns the last time the data was read. */
-time_t
-time_of_last_procedure (struct dataset *ds)
-{
-  if (ds->last_proc_invocation == 0)
-    update_last_proc_invocation (ds);
-  return ds->last_proc_invocation;
-}
-\f
-/* Regular procedure. */
-
-/* Executes any pending transformations, if necessary.
-   This is not identical to the EXECUTE command in that it won't
-   always read the source data.  This can be important when the
-   source data is given inline within BEGIN DATA...END FILE. */
-bool
-proc_execute (struct dataset *ds)
-{
-  bool ok;
-
-  if ((ds->temporary_trns_chain == NULL
-       || trns_chain_is_empty (ds->temporary_trns_chain))
-      && trns_chain_is_empty (ds->permanent_trns_chain))
-    {
-      ds->n_lag = 0;
-      ds->discard_output = false;
-      dict_set_case_limit (ds->dict, 0);
-      dict_clear_vectors (ds->dict);
-      return true;
-    }
-
-  ok = casereader_destroy (proc_open (ds));
-  return proc_commit (ds) && ok;
-}
-
-static const struct casereader_class proc_casereader_class;
-
-/* Opens dataset DS for reading cases with proc_read.  If FILTER is true, then
-   cases filtered out with FILTER BY will not be included in the casereader
-   (which is usually desirable).  If FILTER is false, all cases will be
-   included regardless of FILTER BY settings.
-
-   proc_commit must be called when done. */
-struct casereader *
-proc_open_filtering (struct dataset *ds, bool filter)
-{
-  struct casereader *reader;
-
-  assert (ds->source != NULL);
-  assert (ds->proc_state == PROC_COMMITTED);
-
-  update_last_proc_invocation (ds);
-
-  caseinit_mark_for_init (ds->caseinit, ds->dict);
-
-  /* Finish up the collection of transformations. */
-  add_case_limit_trns (ds);
-  if (filter)
-    add_filter_trns (ds);
-  trns_chain_finalize (ds->cur_trns_chain);
-
-  /* Make permanent_dict refer to the dictionary right before
-     data reaches the sink. */
-  if (ds->permanent_dict == NULL)
-    ds->permanent_dict = ds->dict;
-
-  /* Prepare sink. */
-  if (!ds->discard_output)
-    {
-      struct dictionary *pd = ds->permanent_dict;
-      size_t compacted_value_cnt = dict_count_values (pd, 1u << DC_SCRATCH);
-      if (compacted_value_cnt < dict_get_next_value_idx (pd))
-        {
-          struct caseproto *compacted_proto;
-          compacted_proto = dict_get_compacted_proto (pd, 1u << DC_SCRATCH);
-          ds->compactor = case_map_to_compact_dict (pd, 1u << DC_SCRATCH);
-          ds->sink = autopaging_writer_create (compacted_proto);
-          caseproto_unref (compacted_proto);
-        }
-      else
-        {
-          ds->compactor = NULL;
-          ds->sink = autopaging_writer_create (dict_get_proto (pd));
-        }
-    }
-  else
-    {
-      ds->compactor = NULL;
-      ds->sink = NULL;
-    }
-
-  /* Allocate memory for lagged cases. */
-  ds->lag_cases = deque_init (&ds->lag, ds->n_lag, sizeof *ds->lag_cases);
-
-  ds->proc_state = PROC_OPEN;
-  ds->cases_written = 0;
-  ds->ok = true;
-
-  /* FIXME: use taint in dataset in place of `ok'? */
-  /* FIXME: for trivial cases we can just return a clone of
-     ds->source? */
-
-  /* Create casereader and insert a shim on top.  The shim allows us to
-     arbitrarily extend the casereader's lifetime, by slurping the cases into
-     the shim's buffer in proc_commit().  That is especially useful when output
-     table_items are generated directly from the procedure casereader (e.g. by
-     the LIST procedure) when we are using an output driver that keeps a
-     reference to the output items passed to it (e.g. the GUI output driver in
-     PSPPIRE). */
-  reader = casereader_create_sequential (NULL, dict_get_proto (ds->dict),
-                                         CASENUMBER_MAX,
-                                         &proc_casereader_class, ds);
-  ds->shim = casereader_shim_insert (reader);
-  return reader;
-}
-
-/* Opens dataset DS for reading cases with proc_read.
-   proc_commit must be called when done. */
-struct casereader *
-proc_open (struct dataset *ds)
-{
-  return proc_open_filtering (ds, true);
-}
-
-/* Returns true if a procedure is in progress, that is, if
-   proc_open has been called but proc_commit has not. */
-bool
-proc_is_open (const struct dataset *ds)
-{
-  return ds->proc_state != PROC_COMMITTED;
-}
-
-/* "read" function for procedure casereader. */
-static struct ccase *
-proc_casereader_read (struct casereader *reader UNUSED, void *ds_)
-{
-  struct dataset *ds = ds_;
-  enum trns_result retval = TRNS_DROP_CASE;
-  struct ccase *c;
-
-  assert (ds->proc_state == PROC_OPEN);
-  for (; ; case_unref (c))
-    {
-      casenumber case_nr;
-
-      assert (retval == TRNS_DROP_CASE || retval == TRNS_ERROR);
-      if (retval == TRNS_ERROR)
-        ds->ok = false;
-      if (!ds->ok)
-        return NULL;
-
-      /* Read a case from source. */
-      c = casereader_read (ds->source);
-      if (c == NULL)
-        return NULL;
-      c = case_unshare_and_resize (c, dict_get_proto (ds->dict));
-      caseinit_init_vars (ds->caseinit, c);
-
-      /* Execute permanent transformations.  */
-      case_nr = ds->cases_written + 1;
-      retval = trns_chain_execute (ds->permanent_trns_chain, TRNS_CONTINUE,
-                                   &c, case_nr);
-      caseinit_update_left_vars (ds->caseinit, c);
-      if (retval != TRNS_CONTINUE)
-        continue;
-
-      /* Write case to collection of lagged cases. */
-      if (ds->n_lag > 0)
-        {
-          while (deque_count (&ds->lag) >= ds->n_lag)
-            case_unref (ds->lag_cases[deque_pop_back (&ds->lag)]);
-          ds->lag_cases[deque_push_front (&ds->lag)] = case_ref (c);
-        }
-
-      /* Write case to replacement active file. */
-      ds->cases_written++;
-      if (ds->sink != NULL)
-        casewriter_write (ds->sink,
-                          case_map_execute (ds->compactor, case_ref (c)));
-
-      /* Execute temporary transformations. */
-      if (ds->temporary_trns_chain != NULL)
-        {
-          retval = trns_chain_execute (ds->temporary_trns_chain, TRNS_CONTINUE,
-                                       &c, ds->cases_written);
-          if (retval != TRNS_CONTINUE)
-            continue;
-        }
-
-      return c;
-    }
-}
-
-/* "destroy" function for procedure casereader. */
-static void
-proc_casereader_destroy (struct casereader *reader, void *ds_)
-{
-  struct dataset *ds = ds_;
-  struct ccase *c;
-
-  /* We are always the subreader for a casereader_buffer, so if we're being
-     destroyed then it's because the casereader_buffer has read all the cases
-     that it ever will. */
-  ds->shim = NULL;
-
-  /* Make sure transformations happen for every input case, in
-     case they have side effects, and ensure that the replacement
-     active file gets all the cases it should. */
-  while ((c = casereader_read (reader)) != NULL)
-    case_unref (c);
-
-  ds->proc_state = PROC_CLOSED;
-  ds->ok = casereader_destroy (ds->source) && ds->ok;
-  ds->source = NULL;
-  proc_set_active_file_data (ds, NULL);
-}
-
-/* Must return false if the source casereader, a transformation,
-   or the sink casewriter signaled an error.  (If a temporary
-   transformation signals an error, then the return value is
-   false, but the replacement active file may still be
-   untainted.) */
-bool
-proc_commit (struct dataset *ds)
-{
-  if (ds->shim != NULL)
-    casereader_shim_slurp (ds->shim);
-
-  assert (ds->proc_state == PROC_CLOSED);
-  ds->proc_state = PROC_COMMITTED;
-
-  dataset_set_unsaved (ds);
-
-  /* Free memory for lagged cases. */
-  while (!deque_is_empty (&ds->lag))
-    case_unref (ds->lag_cases[deque_pop_back (&ds->lag)]);
-  free (ds->lag_cases);
-
-  /* Dictionary from before TEMPORARY becomes permanent. */
-  proc_cancel_temporary_transformations (ds);
-
-  if (!ds->discard_output)
-    {
-      /* Finish compacting. */
-      if (ds->compactor != NULL)
-        {
-          case_map_destroy (ds->compactor);
-          ds->compactor = NULL;
-
-          dict_delete_scratch_vars (ds->dict);
-          dict_compact_values (ds->dict);
-        }
-
-      /* Old data sink becomes new data source. */
-      if (ds->sink != NULL)
-        ds->source = casewriter_make_reader (ds->sink);
-    }
-  else
-    {
-      ds->source = NULL;
-      ds->discard_output = false;
-    }
-  ds->sink = NULL;
-
-  caseinit_clear (ds->caseinit);
-  caseinit_mark_as_preinited (ds->caseinit, ds->dict);
-
-  dict_clear_vectors (ds->dict);
-  ds->permanent_dict = NULL;
-  return proc_cancel_all_transformations (ds) && ds->ok;
-}
-
-/* Casereader class for procedure execution. */
-static const struct casereader_class proc_casereader_class =
-  {
-    proc_casereader_read,
-    proc_casereader_destroy,
-    NULL,
-    NULL,
-  };
-
-/* Updates last_proc_invocation. */
-static void
-update_last_proc_invocation (struct dataset *ds)
-{
-  ds->last_proc_invocation = time (NULL);
-}
-\f
-/* Returns a pointer to the lagged case from N_BEFORE cases before the
-   current one, or NULL if there haven't been that many cases yet. */
-const struct ccase *
-lagged_case (const struct dataset *ds, int n_before)
-{
-  assert (n_before >= 1);
-  assert (n_before <= ds->n_lag);
-
-  if (n_before <= deque_count (&ds->lag))
-    return ds->lag_cases[deque_front (&ds->lag, n_before - 1)];
-  else
-    return NULL;
-}
-\f
-/* Returns the current set of permanent transformations,
-   and clears the permanent transformations.
-   For use by INPUT PROGRAM. */
-struct trns_chain *
-proc_capture_transformations (struct dataset *ds)
-{
-  struct trns_chain *chain;
-
-  assert (ds->temporary_trns_chain == NULL);
-  chain = ds->permanent_trns_chain;
-  ds->cur_trns_chain = ds->permanent_trns_chain = trns_chain_create ();
-
-  if ( ds->xform_callback)
-    ds->xform_callback (false, ds->xform_callback_aux);
-
-  return chain;
-}
-
-/* Adds a transformation that processes a case with PROC and
-   frees itself with FREE to the current set of transformations.
-   The functions are passed AUX as auxiliary data. */
-void
-add_transformation (struct dataset *ds, trns_proc_func *proc, trns_free_func *free, void *aux)
-{
-  trns_chain_append (ds->cur_trns_chain, NULL, proc, free, aux);
-  if ( ds->xform_callback)
-    ds->xform_callback (true, ds->xform_callback_aux);
-}
-
-/* Adds a transformation that processes a case with PROC and
-   frees itself with FREE to the current set of transformations.
-   When parsing of the block of transformations is complete,
-   FINALIZE will be called.
-   The functions are passed AUX as auxiliary data. */
-void
-add_transformation_with_finalizer (struct dataset *ds,
-                                  trns_finalize_func *finalize,
-                                   trns_proc_func *proc,
-                                   trns_free_func *free, void *aux)
-{
-  trns_chain_append (ds->cur_trns_chain, finalize, proc, free, aux);
-
-  if ( ds->xform_callback)
-    ds->xform_callback (true, ds->xform_callback_aux);
-}
-
-/* Returns the index of the next transformation.
-   This value can be returned by a transformation procedure
-   function to indicate a "jump" to that transformation. */
-size_t
-next_transformation (const struct dataset *ds)
-{
-  return trns_chain_next (ds->cur_trns_chain);
-}
-
-/* Returns true if the next call to add_transformation() will add
-   a temporary transformation, false if it will add a permanent
-   transformation. */
-bool
-proc_in_temporary_transformations (const struct dataset *ds)
-{
-  return ds->temporary_trns_chain != NULL;
-}
-
-/* Marks the start of temporary transformations.
-   Further calls to add_transformation() will add temporary
-   transformations. */
-void
-proc_start_temporary_transformations (struct dataset *ds)
-{
-  if (!proc_in_temporary_transformations (ds))
-    {
-      add_case_limit_trns (ds);
-
-      ds->permanent_dict = dict_clone (ds->dict);
-
-      trns_chain_finalize (ds->permanent_trns_chain);
-      ds->temporary_trns_chain = ds->cur_trns_chain = trns_chain_create ();
-
-      if ( ds->xform_callback)
-       ds->xform_callback (true, ds->xform_callback_aux);
-    }
-}
-
-/* Converts all the temporary transformations, if any, to
-   permanent transformations.  Further transformations will be
-   permanent.
-   Returns true if anything changed, false otherwise. */
-bool
-proc_make_temporary_transformations_permanent (struct dataset *ds)
-{
-  if (proc_in_temporary_transformations (ds))
-    {
-      trns_chain_finalize (ds->temporary_trns_chain);
-      trns_chain_splice (ds->permanent_trns_chain, ds->temporary_trns_chain);
-      ds->temporary_trns_chain = NULL;
-
-      dict_destroy (ds->permanent_dict);
-      ds->permanent_dict = NULL;
-
-      return true;
-    }
-  else
-    return false;
-}
-
-/* Cancels all temporary transformations, if any.  Further
-   transformations will be permanent.
-   Returns true if anything changed, false otherwise. */
-bool
-proc_cancel_temporary_transformations (struct dataset *ds)
-{
-  if (proc_in_temporary_transformations (ds))
-    {
-      dict_destroy (ds->dict);
-      ds->dict = ds->permanent_dict;
-      ds->permanent_dict = NULL;
-
-      trns_chain_destroy (ds->temporary_trns_chain);
-      ds->temporary_trns_chain = NULL;
-
-      if ( ds->xform_callback)
-       ds->xform_callback (!trns_chain_is_empty (ds->permanent_trns_chain),
-                           ds->xform_callback_aux);
-
-      return true;
-    }
-  else
-    return false;
-}
-
-/* Cancels all transformations, if any.
-   Returns true if successful, false on I/O error. */
-bool
-proc_cancel_all_transformations (struct dataset *ds)
-{
-  bool ok;
-  assert (ds->proc_state == PROC_COMMITTED);
-  ok = trns_chain_destroy (ds->permanent_trns_chain);
-  ok = trns_chain_destroy (ds->temporary_trns_chain) && ok;
-  ds->permanent_trns_chain = ds->cur_trns_chain = trns_chain_create ();
-  ds->temporary_trns_chain = NULL;
-  if ( ds->xform_callback)
-    ds->xform_callback (false, ds->xform_callback_aux);
-
-  return ok;
-}
-\f
-
-static void
-dict_callback (struct dictionary *d UNUSED, void *ds_)
-{
-  struct dataset *ds = ds_;
-  dataset_set_unsaved (ds);
-}
-
-/* Initializes procedure handling. */
-struct dataset *
-create_dataset (void)
-{
-  struct dataset *ds = xzalloc (sizeof(*ds));
-  ds->dict = dict_create ();
-
-  dict_set_change_callback (ds->dict, dict_callback, ds);
-
-  dict_set_encoding (ds->dict, get_default_encoding ());
-
-  ds->caseinit = caseinit_create ();
-  proc_cancel_all_transformations (ds);
-
-  ds->syntax_encoding = xstrdup ("Auto");
-
-  return ds;
-}
-
-
-void
-dataset_add_transform_change_callback (struct dataset *ds,
-                                      transformation_change_callback_func *cb,
-                                      void *aux)
-{
-  ds->xform_callback = cb;
-  ds->xform_callback_aux = aux;
-}
-
-/* Finishes up procedure handling. */
-void
-destroy_dataset (struct dataset *ds)
-{
-  proc_discard_active_file (ds);
-  dict_destroy (ds->dict);
-  caseinit_destroy (ds->caseinit);
-  trns_chain_destroy (ds->permanent_trns_chain);
-
-  if ( ds->xform_callback)
-    ds->xform_callback (false, ds->xform_callback_aux);
-
-  free (ds->syntax_encoding);
-  free (ds);
-}
-
-/* Causes output from the next procedure to be discarded, instead
-   of being preserved for use as input for the next procedure. */
-void
-proc_discard_output (struct dataset *ds)
-{
-  ds->discard_output = true;
-}
-
-/* Discards the active file dictionary, data, and
-   transformations. */
-void
-proc_discard_active_file (struct dataset *ds)
-{
-  assert (ds->proc_state == PROC_COMMITTED);
-
-  dict_clear (ds->dict);
-  fh_set_default_handle (NULL);
-
-  ds->n_lag = 0;
-
-  casereader_destroy (ds->source);
-  ds->source = NULL;
-
-  proc_cancel_all_transformations (ds);
-}
-
-/* Sets SOURCE as the source for procedure input for the next
-   procedure. */
-void
-proc_set_active_file (struct dataset *ds,
-                      struct casereader *source,
-                      struct dictionary *dict)
-{
-  assert (ds->proc_state == PROC_COMMITTED);
-  assert (ds->dict != dict);
-
-  proc_discard_active_file (ds);
-
-  dict_destroy (ds->dict);
-  ds->dict = dict;
-  dict_set_change_callback (ds->dict, dict_callback, ds);
-
-  proc_set_active_file_data (ds, source);
-}
-
-/* Replaces the active file's data by READER without replacing
-   the associated dictionary. */
-bool
-proc_set_active_file_data (struct dataset *ds, struct casereader *reader)
-{
-  casereader_destroy (ds->source);
-  ds->source = reader;
-
-  caseinit_clear (ds->caseinit);
-  caseinit_mark_as_preinited (ds->caseinit, ds->dict);
-
-  return reader == NULL || !casereader_error (reader);
-}
-
-/* Returns true if an active file data source is available, false
-   otherwise. */
-bool
-proc_has_active_file (const struct dataset *ds)
-{
-  return ds->source != NULL;
-}
-
-/* Returns the active file data source from DS, or a null pointer
-   if DS has no data source, and removes it from DS. */
-struct casereader *
-proc_extract_active_file_data (struct dataset *ds)
-{
-  struct casereader *reader = ds->source;
-  ds->source = NULL;
-
-  return reader;
-}
-
-/* Checks whether DS has a corrupted active file.  If so,
-   discards it and returns false.  If not, returns true without
-   doing anything. */
-bool
-dataset_end_of_command (struct dataset *ds)
-{
-  if (ds->source != NULL)
-    {
-      if (casereader_error (ds->source))
-        {
-          proc_discard_active_file (ds);
-          return false;
-        }
-      else
-        {
-          const struct taint *taint = casereader_get_taint (ds->source);
-          taint_reset_successor_taint (CONST_CAST (struct taint *, taint));
-          assert (!taint_has_tainted_successor (taint));
-        }
-    }
-  return true;
-}
-\f
-static trns_proc_func case_limit_trns_proc;
-static trns_free_func case_limit_trns_free;
-
-/* Adds a transformation that limits the number of cases that may
-   pass through, if DS->DICT has a case limit. */
-static void
-add_case_limit_trns (struct dataset *ds)
-{
-  casenumber case_limit = dict_get_case_limit (ds->dict);
-  if (case_limit != 0)
-    {
-      casenumber *cases_remaining = xmalloc (sizeof *cases_remaining);
-      *cases_remaining = case_limit;
-      add_transformation (ds, case_limit_trns_proc, case_limit_trns_free,
-                          cases_remaining);
-      dict_set_case_limit (ds->dict, 0);
-    }
-}
-
-/* Limits the maximum number of cases processed to
-   *CASES_REMAINING. */
-static int
-case_limit_trns_proc (void *cases_remaining_,
-                      struct ccase **c UNUSED, casenumber case_nr UNUSED)
-{
-  size_t *cases_remaining = cases_remaining_;
-  if (*cases_remaining > 0)
-    {
-      (*cases_remaining)--;
-      return TRNS_CONTINUE;
-    }
-  else
-    return TRNS_DROP_CASE;
-}
-
-/* Frees the data associated with a case limit transformation. */
-static bool
-case_limit_trns_free (void *cases_remaining_)
-{
-  size_t *cases_remaining = cases_remaining_;
-  free (cases_remaining);
-  return true;
-}
-\f
-static trns_proc_func filter_trns_proc;
-
-/* Adds a temporary transformation to filter data according to
-   the variable specified on FILTER, if any. */
-static void
-add_filter_trns (struct dataset *ds)
-{
-  struct variable *filter_var = dict_get_filter (ds->dict);
-  if (filter_var != NULL)
-    {
-      proc_start_temporary_transformations (ds);
-      add_transformation (ds, filter_trns_proc, NULL, filter_var);
-    }
-}
-
-/* FILTER transformation. */
-static int
-filter_trns_proc (void *filter_var_,
-                  struct ccase **c UNUSED, casenumber case_nr UNUSED)
-
-{
-  struct variable *filter_var = filter_var_;
-  double f = case_num (*c, filter_var);
-  return (f != 0.0 && !var_is_num_missing (filter_var, f, MV_ANY)
-          ? TRNS_CONTINUE : TRNS_DROP_CASE);
-}
-
-
-struct dictionary *
-dataset_dict (const struct dataset *ds)
-{
-  return ds->dict;
-}
-
-const struct casereader *
-dataset_source (const struct dataset *ds)
-{
-  return ds->source;
-}
-
-void
-dataset_need_lag (struct dataset *ds, int n_before)
-{
-  ds->n_lag = MAX (ds->n_lag, n_before);
-}
diff --git a/src/data/procedure.h b/src/data/procedure.h
deleted file mode 100644 (file)
index 0b5ded1..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
-
-#ifndef PROCEDURE_H
-#define PROCEDURE_H 1
-
-#include <time.h>
-#include <stdbool.h>
-
-#include "data/transformations.h"
-#include "libpspp/compiler.h"
-
-struct casereader;
-struct dataset;
-struct dictionary;
-\f
-/* Transformations. */
-
-void add_transformation (struct dataset *ds,
-                        trns_proc_func *, trns_free_func *, void *);
-void add_transformation_with_finalizer (struct dataset *ds,
-                                       trns_finalize_func *,
-                                        trns_proc_func *,
-                                        trns_free_func *, void *);
-size_t next_transformation (const struct dataset *ds);
-
-bool proc_cancel_all_transformations (struct dataset *ds);
-struct trns_chain *proc_capture_transformations (struct dataset *ds);
-
-void proc_start_temporary_transformations (struct dataset *ds);
-bool proc_in_temporary_transformations (const struct dataset *ds);
-bool proc_make_temporary_transformations_permanent (struct dataset *ds);
-bool proc_cancel_temporary_transformations (struct dataset *ds);
-\f
-/* Procedures. */
-
-typedef void transformation_change_callback_func (bool non_empty, void *aux);
-
-struct dataset * create_dataset (void);
-
-void destroy_dataset (struct dataset *);
-
-void dataset_add_transform_change_callback (struct dataset *,
-                                           transformation_change_callback_func *, void *);
-
-void proc_discard_active_file (struct dataset *);
-void proc_set_active_file (struct dataset *,
-                           struct casereader *, struct dictionary *);
-bool proc_set_active_file_data (struct dataset *, struct casereader *);
-bool proc_has_active_file (const struct dataset *ds);
-struct casereader *proc_extract_active_file_data (struct dataset *);
-
-void proc_discard_output (struct dataset *ds);
-
-bool proc_execute (struct dataset *ds);
-time_t time_of_last_procedure (struct dataset *ds);
-
-struct casereader *proc_open_filtering (struct dataset *, bool filter);
-struct casereader *proc_open (struct dataset *);
-bool proc_is_open (const struct dataset *);
-bool proc_commit (struct dataset *);
-
-bool dataset_end_of_command (struct dataset *);
-\f
-struct dictionary *dataset_dict (const struct dataset *ds);
-const struct casereader *dataset_source (const struct dataset *ds);
-
-const struct ccase *lagged_case (const struct dataset *ds, int n_before);
-void dataset_need_lag (struct dataset *ds, int n_before);
-
-void dataset_set_callback (struct dataset *ds, void (*cb) (void *), void *);
-
-void dataset_set_default_syntax_encoding (struct dataset *, const char *);
-const char *dataset_get_default_syntax_encoding (const struct dataset *);
-
-#endif /* procedure.h */
index 8ba8a08e4bb9458d3f9e9497826abdd3b16bbd4a..703ae3ebceaf9c683926f231e31e3e5aa928b1a3 100644 (file)
@@ -24,8 +24,8 @@
 #include <errno.h>
 
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/variable.h"
 #include "language/lexer/command-name.h"
index 612b08565cf2664fa24b57eee1c97d00d187facc..fe9ca73008e7ba8ed64e02621adbffbf2cd9bb60 100644 (file)
@@ -19,7 +19,7 @@
 #include <stdlib.h>
 
 #include "data/case.h"
-#include "data/procedure.h"
+#include "data/dataset.h"
 #include "data/transformations.h"
 #include "data/value.h"
 #include "language/command.h"
index 8f4ff8251648a8cf93958347de0ce69b5d6970af..e91d9438f39c131836141ee2be53d47c970d2904 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2009-2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -19,8 +19,8 @@
 #include "language/control/control-stack.h"
 
 #include "data/case.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/transformations.h"
 #include "data/variable.h"
index c0fa8fe0d8dfe165deb6f55968f17ed512d9b46f..ff1bbc0870915c7d843684b1483c4e934072b674 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2007, 2009-2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -18,8 +18,9 @@
 
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
+#include "data/settings.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
 #include "language/lexer/segment.h"
index b6a5cc9878143a267ffb0cdf764b86bf1349a6b9..7ebcc5ad9c8b92092a8850ddd05d547e58be4ffb 100644 (file)
@@ -19,8 +19,8 @@
 #include <stddef.h>
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/transformations.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
index 58693c62d21d568dd152eb91fd8b0edc86639f46..a661d7c6cde3d55afabd245f582b643b479ba303 100644 (file)
@@ -23,9 +23,9 @@
 #include "data/case.h"
 #include "data/casereader.h"
 #include "data/casewriter.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/subcase.h"
 #include "data/variable.h"
 #include "language/command.h"
index 6d21c8439e7cb9e3a7e5c3ebc31744a4dd92c437..a171986d061e8d26bb836efcd742ef8d9648f8b6 100644 (file)
@@ -25,9 +25,9 @@
 #include "data/case.h"
 #include "data/casereader.h"
 #include "data/data-in.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/transformations.h"
 #include "data/variable.h"
index 0c52e07bf9d843605a3580b5bad13b5c2f4b2601..24a671ee67a265babbf5dad51b8ff30c93ce524d 100644 (file)
 
 #include "data/casereader-provider.h"
 #include "data/data-in.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
 #include "data/file-handle-def.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "language/data-io/data-reader.h"
 #include "libpspp/message.h"
index e701a936d241f5ad749c40322fa57f5164ba16b5..0f96e589cc3bd7b1547110088efee015dce3d2de 100644 (file)
@@ -26,9 +26,9 @@
 #include <sys/stat.h>
 
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/file-handle-def.h"
 #include "data/file-name.h"
-#include "data/procedure.h"
 #include "language/command.h"
 #include "language/data-io/file-handle.h"
 #include "language/lexer/lexer.h"
index f65e8ac782547971f63f0bb3210eaae6040340d5..07000eb2041aa1a9870c38d8d7ea42826292d024 100644 (file)
 
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
 #include "data/gnumeric-reader.h"
-#include "data/procedure.h"
 #include "data/psql-reader.h"
 #include "data/settings.h"
 #include "language/command.h"
index aa2b91fe6a92d3a8259c6475c597869c007ca12b..1b63e75ad8cc3cf6bb2a8ec6c575b167ea4a4d62 100644 (file)
@@ -22,9 +22,9 @@
 #include "data/case-map.h"
 #include "data/case.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/por-file-writer.h"
-#include "data/procedure.h"
 #include "language/command.h"
 #include "language/data-io/file-handle.h"
 #include "language/data-io/trim.h"
index 72d5a2e7b88e302df07e4ca54e59c206cbdebae5..de8b810052671d9997d6cbdbea76988f00574c94 100644 (file)
@@ -22,8 +22,8 @@
 #include "data/case.h"
 #include "data/caseinit.h"
 #include "data/casereader-provider.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/transformations.h"
 #include "data/variable.h"
 #include "language/command.h"
index 33b828302fe46c3a5319a36c1afa081db807d6e2..6bb2bed2938f74c3a39895e2e40e4e5083f1341b 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 20092011 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2009-2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
 #include "data/casegrouper.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/data-out.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/subcase.h"
 #include "data/variable.h"
 #include "language/command.h"
index b7683670f5076353ac114e994aa3d0c584b54f7c..fd0d4cf780fd5db41b63ba0f893781e4c2d5b732 100644 (file)
@@ -19,7 +19,7 @@
 #include <limits.h>
 #include <stdlib.h>
 
-#include "data/procedure.h"
+#include "data/dataset.h"
 #include "data/value.h"
 #include "language/command.h"
 #include "language/data-io/data-writer.h"
index c52a59cf521fb1cdacef984392bf8be90f2e11a3..169b6a5d7e5f935a2a91c3340e0fc40f56b02b5b 100644 (file)
@@ -19,9 +19,9 @@
 #include <stdlib.h>
 
 #include "data/case.h"
+#include "data/dataset.h"
 #include "data/data-out.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/transformations.h"
 #include "data/variable.h"
 #include "language/command.h"
index d4c67b02b69bdd59a23587ee2eded16688a37f05..17293cf6af361deb10a2846deab7d66162acec7f 100644 (file)
 #include "data/casereader.h"
 #include "data/casewriter.h"
 #include "data/csv-file-writer.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/file-name.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "language/command.h"
 #include "language/data-io/file-handle.h"
index b06a850add59d8d8def01e9a085c60c70c8b997b..48645fc29d68c2b8a803053109df8b77c0885f9e 100644 (file)
@@ -23,9 +23,9 @@
 #include "data/case.h"
 #include "data/casereader.h"
 #include "data/casewriter.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/por-file-writer.h"
-#include "data/procedure.h"
 #include "data/sys-file-writer.h"
 #include "data/transformations.h"
 #include "data/variable.h"
index 36877302afc80dfa878685b211b9a0dcaa4f70f5..96b77dc0133183bdbcb3cc359c2d656e4edf9c89 100644 (file)
 
 #include "data/any-reader.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/file-handle-def.h"
 #include "data/missing-values.h"
-#include "data/procedure.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
 #include "language/command.h"
index 135207306f528b1f16b027762d355f99aba53065..c7598d1c45b37899ecba1d7a375e3dbaea3d9987 100644 (file)
@@ -19,8 +19,8 @@
 #include <stdlib.h>
 
 #include "data/attributes.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
index 526fa1cd41f5e755ca86d55322670c57facbf521..027315b65f09b81c47e6c050962fe67f06caf8ed 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2006, 2007, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2007, 2010, 2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -19,8 +19,8 @@
 #include <stdlib.h>
 
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "language/command.h"
 #include "language/lexer/variable-parser.h"
 #include "libpspp/message.h"
index b40f202cfa5febe7091d8b0329af970630ed8807..9f943be214931d14f1c6265de20be0e8349e5885 100644 (file)
@@ -20,8 +20,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "language/command.h"
 #include "language/lexer/format-parser.h"
index 3ff4c426ff691771c0051118e064a7056cd71029..a906b8a8f3cacbd889bce5b9be004357e687dc39 100644 (file)
@@ -20,9 +20,9 @@
 
 #include "data/data-in.h"
 #include "data/dictionary.h"
+#include "data/dataset.h"
 #include "data/format.h"
 #include "data/missing-values.h"
-#include "data/procedure.h"
 #include "data/value.h"
 #include "data/variable.h"
 #include "language/command.h"
index f3c319001644b77a857c73a433aca7a598087f81..d3e663c39e84e597d08bde81ff9fb555abd5f5f9 100644 (file)
@@ -18,8 +18,8 @@
 
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
index 3af5d033370e9b05703580eecc4a2a64cf20e63e..8497a059ca857f11344beaa414f987b1e9d48223 100644 (file)
@@ -17,9 +17,9 @@
 #include <config.h>
 
 #include "data/data-out.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/mrset.h"
-#include "data/procedure.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
 #include "language/command.h"
index c88d514345c9d2986364553dfcabc4aff19c9b43..7b367f9d1d65cfa5373109adadf2707670ca2374 100644 (file)
@@ -18,8 +18,8 @@
 
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "data/format.h"
 #include "language/command.h"
index c1d31996bacfa453b289cfeaa73b1488ceab2bf5..82fc1d96c8117a1c6823c4a4a8be057570a2d3a0 100644 (file)
@@ -18,8 +18,8 @@
 
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
index 56e3eeef2182bc24d3efe5ad7f7b0beb3d48f813..28e6860e07b6e9db003975cdb0e929880be651d6 100644 (file)
@@ -20,9 +20,9 @@
 
 #include "data/case.h"
 #include "data/data-out.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
 #include "language/command.h"
index 51b3cae4952933cf7baddaf5d4203a65e3db3cd6..8db1b68150fa81c6ae984e9fce9680a5672e898c 100644 (file)
 
 #include "data/attributes.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/file-handle-def.h"
 #include "data/format.h"
 #include "data/missing-values.h"
-#include "data/procedure.h"
 #include "data/sys-file-reader.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
index 18e890ddb87f87a1b206facc4f771fcc69ae361b..57124ebe9b6db6175e2015df3c80221eb4c1890c 100644 (file)
@@ -19,8 +19,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
 #include "language/command.h"
index 4b68f902b0535462c2566748ec2e116d7ca02391..1ff5f465200a549c678c4c6eb17133079a7dc9ce 100644 (file)
@@ -19,7 +19,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#include "data/procedure.h"
+#include "data/dataset.h"
 #include "data/variable.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
index c0f80fbdbeac19a9fbcfac9f915ee57a52dd39bf..41fae5ed3a27cee3378ae548a6637c2b2ae9d206 100644 (file)
@@ -19,8 +19,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
index a5e66df8c44a592fd8a0c5cb7c767c73943c0d05..b0d696154b7f212a5c790a87efe7d69b1debd31a 100644 (file)
@@ -18,8 +18,8 @@
 
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/dictionary.h"
 #include "data/variable.h"
 #include "language/command.h"
index ad06ad107af3ca1092802bfa8998c670eed20a37..185165dcbbfdb1cfe42e2bd0872e748432ff955a 100644 (file)
@@ -18,7 +18,7 @@
 
 #include <stdio.h>
 
-#include "data/procedure.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/variable.h"
 #include "language/command.h"
index 570cf132341e2aa748a8a9deecb7ec2bbe98ef40..ef4fdadd4d310c2842fbaba74e0cfec2ef335b91 100644 (file)
@@ -14,8 +14,8 @@
 #include "data/case.h"
 #include "data/data-in.h"
 #include "data/data-out.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/value.h"
 #include "data/variable.h"
index fbcc170d84b34b33f790a852a64853744f27e12c..49d6a5deb900a6e63e8363b1fd020c685116f16c 100644 (file)
@@ -23,8 +23,8 @@
 #include <stdbool.h>
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "language/lexer/lexer.h"
 #include "libpspp/assertion.h"
index 2a4eda87ad042092f81d3eccd93c4bb46c2f4025..b0df0b8e29ae702a9d0aedaf555730a4353690ce 100644 (file)
 #include "data/casegrouper.h"
 #include "data/casereader.h"
 #include "data/casewriter.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/file-handle-def.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/subcase.h"
 #include "data/sys-file-writer.h"
index fdf3dddc2ea83cec64daff9f394f34c40978b4e6..a4d34ccf608e7c784334d6a23546da546df1f095 100644 (file)
 
 #include "data/case.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/transformations.h"
 #include "data/variable.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
 #include "language/lexer/variable-parser.h"
 #include "libpspp/array.h"
-#include "libpspp/i18n.h"
 #include "libpspp/compiler.h"
 #include "libpspp/hash-functions.h"
 #include "libpspp/hmap.h"
+#include "libpspp/i18n.h"
 #include "libpspp/message.h"
 #include "libpspp/pool.h"
 #include "libpspp/str.h"
index c83e4570a0dab3a1a19cd58285553c2a152acaf3..94d0d9721e0b7f4c543d44a975ec8b8b9b7cbed0 100644 (file)
@@ -23,9 +23,9 @@
 
 #include "data/case.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/value-labels.h"
 #include "data/value.h"
 #include "data/variable.h"
index ed91013e54d29076db3c4a4866a6c1f60afdf737..10d81132715552b7ccaad1d96ad2587cf20988ac 100644 (file)
 #include <math.h>
 #include <stdlib.h>
 
-#include "data/format.h"
 #include "data/case.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
+#include "data/format.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
 #include "language/stats/freq.h"
index 8576f985e215e8030512fc61998593b5bed91167..3ea8fd342b81fa45b71d78dbe03cf7200c0bbc3a 100644 (file)
@@ -22,9 +22,9 @@
 #include <stdbool.h>
 
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/val-type.h"
 #include "data/variable.h"
 #include "language/stats/npar.h"
index aa7841e7a8be618d0131fab60557e2e20b7529c0..bc6508bd2f1863be967eec13fb3aed6a1c81a308 100644 (file)
@@ -22,9 +22,9 @@
 
 #include "data/casegrouper.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "language/command.h"
 #include "language/dictionary/split-file.h"
index b12bf6cfe60915dd91afa4f249b6a3f4b6fc3300..91015f57c75ba877e5c5f2d6b1e9ec4cfc58a39e 100644 (file)
@@ -37,9 +37,9 @@
 #include "data/casegrouper.h"
 #include "data/casereader.h"
 #include "data/data-out.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
 #include "language/command.h"
index adedd5e67f600aeb651eafa68316d615d5d73ef0..935ca9b37349f2f2ee85c4d2841bde86df0468cc 100644 (file)
@@ -22,8 +22,8 @@
 
 #include "data/casegrouper.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/transformations.h"
 #include "data/variable.h"
 #include "language/command.h"
index 50d9525b255d16f1eae307f95d4915a9235425e6..e225f3343d4e5850afc43628d43f7add913aee89 100644 (file)
@@ -25,8 +25,8 @@
 #include "data/casegrouper.h"
 #include "data/casereader.h"
 #include "data/casewriter.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/subcase.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
index a19cf69e16e9e3f133fc74495fae07f599903e38..1145a48e66989064c18d48b4dfeb0812a538882a 100644 (file)
@@ -26,9 +26,9 @@
 #include "data/casegrouper.h"
 #include "data/casereader.h"
 #include "data/casewriter.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/subcase.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
index 23544c8b1ae2e7b822c193fe01fe928e1838219c..e7896452ba2950dda5c661ad669fac3a23293f05 100644 (file)
@@ -25,8 +25,8 @@
 #include "data/case.h"
 #include "data/casereader.h"
 #include "data/casereader-provider.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/short-names.h"
 #include "data/value.h"
index ef4b7f9589d3a770fc9650a1a93b5581e9a2e33e..c00e645f82e9ccd27a05e4a540b2f96e813405e2 100644 (file)
@@ -23,9 +23,9 @@
 #include "data/case.h"
 #include "data/casegrouper.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
index d853bd3907f299aa13829825364ab1384c1bcc6b..5ef3083f62f183920c4aaf2409e60ec4471c5dcc 100644 (file)
@@ -23,9 +23,9 @@
 #include <math.h>
 
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "libpspp/message.h"
 #include "libpspp/misc.h"
index ba75a8e4f4ff4c844a56afbbb0511b2ad1025bec..e09382a5c5ceb9c297efd92c65bc28e817e45dbb 100644 (file)
@@ -23,9 +23,9 @@
 #include "data/case.h"
 #include "data/casegrouper.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/value.h"
 #include "language/command.h"
 #include "language/dictionary/split-file.h"
index ae388068cf9877c055219bc7d51505781c2b2955..ecab0348d1ae16986f85e905ed19e0bd43fe4d50 100644 (file)
@@ -24,9 +24,9 @@
 
 #include "data/casereader.h"
 #include "data/casewriter.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/subcase.h"
 #include "data/variable.h"
 #include "libpspp/assertion.h"
index 4db82f8e904be5d7bf2a18460b319bc1b37717a1..60f251ba983f93dd5bda3666ea5581431dc3c7a8 100644 (file)
@@ -22,9 +22,9 @@
 
 #include "data/case.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "libpspp/cast.h"
 #include "libpspp/misc.h"
index a572e09f56cbbcccc2b0bba90dc150db5f239cf7..3d977a7dc106ae6da6defeca2a16695486bcdfca 100644 (file)
@@ -24,8 +24,8 @@
 #include "data/case.h"
 #include "data/casegrouper.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/variable.h"
 #include "language/command.h"
index e2d39910558291d3cb505aab9b3dd4bf78b01e08..a63d1a29e532876ebadb1fbf4d2f8100e0f83021 100644 (file)
@@ -23,9 +23,9 @@
 #include "data/case.h"
 #include "data/casegrouper.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/value.h"
 #include "language/command.h"
 #include "language/dictionary/split-file.h"
index 97c98c32f0613573c04cf23af8b30be329f4398b..2a0b5c99c9370a93aea3389425ccd304aaf913a8 100644 (file)
 #include "data/casegrouper.h"
 #include "data/casereader.h"
 #include "data/casewriter.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
 #include "data/missing-values.h"
-#include "data/procedure.h"
 #include "data/short-names.h"
 #include "data/subcase.h"
 #include "data/variable.h"
index 5ca581d8e14c7301ed4ff79b5df5c15bf3105ab5..c41f9e7895e7e05595331b767994a725cf417914 100644 (file)
@@ -25,9 +25,9 @@
 #include "data/case.h"
 #include "data/casegrouper.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/missing-values.h"
-#include "data/procedure.h"
 #include "data/transformations.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
index 92f4ac1c22b8a8730a41e3f891a59603b2250527..1c1212e3303d3ee3db98bec3c4142cb2a9a4d636 100644 (file)
 
 #include "data/casegrouper.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
 #include "data/missing-values.h"
-#include "data/procedure.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
 #include "language/lexer/variable-parser.h"
index b07a58d118f6fdd876ddeec8b300300a3ff0b595..b6596ec7543c2481209a10094662a9efa7509ccc 100644 (file)
@@ -23,9 +23,9 @@
 #include "data/casegrouper.h"
 #include "data/casereader.h"
 #include "data/casewriter.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/subcase.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
index 73fbb735df2f26eb5180cf626fbc6d17c9458b59..9fc571cf9293bd9d47aa2e4025baf4b6f11723f0 100644 (file)
 #include <gsl/gsl_cdf.h>
 #include <math.h>
 
-#include "data/format.h"
-#include "libpspp/misc.h"
-#include "libpspp/message.h"
-#include "data/procedure.h"
+#include "data/casegrouper.h"
 #include "data/casereader.h"
 #include "data/casewriter.h"
-#include "data/casegrouper.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
+#include "data/format.h"
 #include "data/subcase.h"
 #include "data/variable.h"
+#include "libpspp/message.h"
+#include "libpspp/misc.h"
 #include "math/percentiles.h"
 #include "math/sort.h"
 #include "output/tab.h"
index 45973262d986cdf3eb28a0c2651dc532c864f317..0048eb3e5a810ee867cc485008ab5b9151fb3111 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2009, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2010, 2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 #include <gsl/gsl_randist.h>
 
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
 #include "data/missing-values.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "language/stats/npar.h"
 #include "libpspp/str.h"
index ff0f305e9fa911003fede236e5d4d712c5dbca7d..cecdce27eb19a1cd8c8614d92500c473ac38c4b3 100644 (file)
@@ -21,7 +21,7 @@
 #include <stdlib.h>
 #include <sys/types.h>
 
-#include "data/procedure.h"
+#include "data/dataset.h"
 #include "data/settings.h"
 #include "data/subcase.h"
 #include "data/variable.h"
index 3cd921ebff69b9a66d651df4c8b061d0413775a6..4b082fe7c710fb670c565cc3421ee998ff01284e 100644 (file)
@@ -25,9 +25,9 @@
 #include "data/case.h"
 #include "data/casegrouper.h"
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/value-labels.h"
 #include "data/variable.h"
 #include "language/command.h"
index 19c3a403b74dd4c5f9b252aaaf96deff6f63dc4a..ed6225df6cee329ab33be3f737829e5ab9bf3f1d 100644 (file)
@@ -25,9 +25,9 @@
 
 #include "data/casereader.h"
 #include "data/casewriter.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/subcase.h"
 #include "data/variable.h"
 #include "libpspp/assertion.h"
index e802abecc49ed4b3129c38ede93024eaaa76430c..81a064d19bc087d19214b1a9a7881faa2e324a7a 100644 (file)
@@ -22,8 +22,8 @@
 #include <string.h>
 #include <unistd.h>
 
+#include "data/dataset.h"
 #include "data/file-name.h"
-#include "data/procedure.h"
 #include "language/command.h"
 #include "language/lexer/include-path.h"
 #include "language/lexer/lexer.h"
index 3da12a6153bcbcc12f3ccf201324972268a5ef78..ce358ae8a4a7e1a21ee4f1246addd1012dbeb7c8 100644 (file)
@@ -23,9 +23,9 @@
 
 #include "data/data-in.h"
 #include "data/data-out.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/value.h"
 #include "data/variable.h"
index 398288b812c9d966c6e6de13a76edeffbb784f06..cc5314c4e3dab6b69c36328e9f574d9d37332597 100644 (file)
@@ -19,8 +19,8 @@
 #include <ctype.h>
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/variable.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
index 82a1121fbf4b9452190dca43d7f3b4e65e3dd12e..0ab4e3a4bb5ac44cdc6aeaf5a0251b4df2914833 100644 (file)
@@ -20,8 +20,8 @@
 #include <stdlib.h>
 
 #include "data/case.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/transformations.h"
 #include "data/variable.h"
 #include "data/vector.h"
index d0045fee5235f7dacd9c713dc1b0629ab32b2607..c42bdc34cf01bedba7d5aa86756cdefca797ee4b 100644 (file)
@@ -19,8 +19,8 @@
 #include <stdlib.h>
 
 #include "data/case.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/transformations.h"
 #include "data/variable.h"
 #include "language/command.h"
index feedb7808348746d6842398ebc31966b39d1470f..f23fcec3f1fc79c6b8511e34f54b9e60a56ecaf1 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -19,7 +19,7 @@
 #include <stdlib.h>
 
 #include "data/case.h"
-#include "data/procedure.h"
+#include "data/dataset.h"
 #include "data/transformations.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
index 77543ca7a8caa5c55055456266220d0173708061..44e5b8513326e32a844ba9bee618d94ce74ba777 100644 (file)
@@ -22,9 +22,9 @@
 
 #include "data/case.h"
 #include "data/data-in.h"
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/format.h"
-#include "data/procedure.h"
 #include "data/transformations.h"
 #include "data/variable.h"
 #include "language/command.h"
index f2a30a2a58fdbfc5e94958eec4bd65fbdc710464..260841a6029b541ddd97dc3ca811391dfee68471 100644 (file)
@@ -21,7 +21,7 @@
 #include <stdio.h>
 #include <math.h>
 
-#include "data/procedure.h"
+#include "data/dataset.h"
 #include "data/variable.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
index 9df4eba5e3a2c603b10ba59b17d58431f4991e69..4110f9089b2f3d19bc94b73343ec16c5f709ea3b 100644 (file)
@@ -18,8 +18,8 @@
 
 #include <stdlib.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
-#include "data/procedure.h"
 #include "data/transformations.h"
 #include "data/variable.h"
 #include "language/command.h"
index 754d09ae5681b44b357f7882db701fa8eb6d631a..3afa1ecd022359d2b0e72468c962451fe0477fb4 100644 (file)
@@ -18,8 +18,8 @@
 
 #include "ui/gui/executor.h"
 
+#include "data/dataset.h"
 #include "data/lazy-casereader.h"
-#include "data/procedure.h"
 #include "language/command.h"
 #include "language/lexer/lexer.h"
 #include "libpspp/cast.h"
index 6dcb8c69c10f4ddc1cfe0586c5177ded574eaba3..24798cecfd197b7d997902a3309cdeabfcf46e2a 100644 (file)
 #include <stdlib.h>
 
 #include "data/any-reader.h"
-#include "data/procedure.h"
+#include "data/dataset.h"
 #include "language/lexer/lexer.h"
 #include "libpspp/message.h"
-#include "ui/gui/help-menu.h"
+#include "ui/gui/aggregate-dialog.h"
 #include "ui/gui/binomial-dialog.h"
+#include "ui/gui/chi-square-dialog.h"
 #include "ui/gui/comments-dialog.h"
 #include "ui/gui/compute-dialog.h"
 #include "ui/gui/correlation-dialog.h"
-#include "ui/gui/chi-square-dialog.h"
 #include "ui/gui/crosstabs-dialog.h"
 #include "ui/gui/descriptives-dialog.h"
 #include "ui/gui/examine-dialog.h"
 #include "ui/gui/factor-dialog.h"
 #include "ui/gui/find-dialog.h"
 #include "ui/gui/frequencies-dialog.h"
-#include "ui/gui/k-related-dialog.h"
 #include "ui/gui/goto-case-dialog.h"
+#include "ui/gui/help-menu.h"
 #include "ui/gui/helper.h"
+#include "ui/gui/k-related-dialog.h"
 #include "ui/gui/oneway-anova-dialog.h"
 #include "ui/gui/psppire-data-window.h"
 #include "ui/gui/psppire-syntax-window.h"
@@ -58,7 +59,6 @@
 #include "ui/gui/t-test-paired-samples.h"
 #include "ui/gui/text-data-import-dialog.h"
 #include "ui/gui/transpose-dialog.h"
-#include "ui/gui/aggregate-dialog.h"
 #include "ui/gui/variable-info-dialog.h"
 #include "ui/gui/weight-cases-dialog.h"
 #include "ui/syntax-gen.h"
index 0d41932adc0e6cd51036420908ba439418e33250..b294f229240ff8189813799007a6628d312f5fba 100644 (file)
 #include <unistd.h>
 
 #include "data/casereader.h"
+#include "data/dataset.h"
 #include "data/datasheet.h"
 #include "data/file-handle-def.h"
 #include "data/file-name.h"
 #include "data/por-file-reader.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/sys-file-reader.h"
 
index a9db6febe4a9db25e72244b206e51bf88e3db724..a709d99351ca1b22486e77550cd51c2ce0dcb40f 100644 (file)
 #endif
 #include <unistd.h>
 
+#include "data/dataset.h"
 #include "data/dictionary.h"
 #include "data/file-handle-def.h"
 #include "data/file-name.h"
-#include "data/procedure.h"
 #include "data/settings.h"
 #include "data/variable.h"
 #include "gsl/gsl_errno.h"