Separate the execute_syntax function into its own file.
authorJohn Darrington <john@darrington.wattle.id.au>
Sun, 19 Apr 2009 10:05:48 +0000 (18:05 +0800)
committerJohn Darrington <john@darrington.wattle.id.au>
Sun, 19 Apr 2009 10:05:48 +0000 (18:05 +0800)
29 files changed:
src/ui/gui/automake.mk
src/ui/gui/comments-dialog.c
src/ui/gui/compute-dialog.c
src/ui/gui/crosstabs-dialog.c
src/ui/gui/descriptives-dialog.c
src/ui/gui/examine-dialog.c
src/ui/gui/executor.c [new file with mode: 0644]
src/ui/gui/executor.h [new file with mode: 0644]
src/ui/gui/frequencies-dialog.c
src/ui/gui/helper.c
src/ui/gui/helper.h
src/ui/gui/oneway-anova-dialog.c
src/ui/gui/psppire-data-editor.c
src/ui/gui/psppire-data-window.c
src/ui/gui/psppire-syntax-window.c
src/ui/gui/psppire.c
src/ui/gui/rank-dialog.c
src/ui/gui/recode-dialog.c
src/ui/gui/regression-dialog.c
src/ui/gui/reliability-dialog.c
src/ui/gui/select-cases-dialog.c
src/ui/gui/sort-cases-dialog.c
src/ui/gui/split-file-dialog.c
src/ui/gui/t-test-independent-samples-dialog.c
src/ui/gui/t-test-one-sample.c
src/ui/gui/t-test-paired-samples.c
src/ui/gui/text-data-import-dialog.c
src/ui/gui/transpose-dialog.c
src/ui/gui/weight-cases-dialog.c

index ce3d664cab4b643f66015b46a2b74120ae822f71..110ef43f04ac2d53551ba457153a75fd0208888b 100644 (file)
@@ -124,6 +124,8 @@ src_ui_gui_psppire_SOURCES = \
        src/ui/gui/dict-display.c \
        src/ui/gui/examine-dialog.c \
        src/ui/gui/examine-dialog.h \
+       src/ui/gui/executor.c \
+       src/ui/gui/executor.h \
        src/ui/gui/find-dialog.c \
        src/ui/gui/find-dialog.h \
        src/ui/gui/frequencies-dialog.c \
index 49d143cb6c51f379df11ad5172c789fada53a7f6..923953a1514bd34e0d223144ed4d4aaec27107ed 100644 (file)
@@ -21,7 +21,7 @@
 #include "psppire-data-window.h"
 #include "psppire-data-editor.h"
 #include <language/syntax-string-source.h>
-#include "helper.h"
+#include "executor.h"
 #include "psppire-var-store.h"
 #include <ui/syntax-gen.h>
 
index a42ce4febf438d338727a68a9f70728217b8c2d4..183aa31b4da8a3e04e961a2da7e2e5fa82de034d 100644 (file)
@@ -28,7 +28,7 @@
 
 #include <language/expressions/public.h>
 #include <language/syntax-string-source.h>
-#include "helper.h"
+#include "executor.h"
 
 static void function_list_populate (GtkTreeView *tv);
 
index 2c71ddef4f39bb4b4cf094fd812cffbea8def84e..f5593586778cd3b3bf17bcdb6376564f44d08085 100644 (file)
@@ -26,7 +26,7 @@
 #include <ui/gui/psppire-data-window.h>
 #include <ui/gui/dialog-common.h>
 #include <ui/gui/dict-display.h>
-#include "helper.h"
+#include "executor.h"
 #include <ui/gui/psppire-dialog.h>
 #include <ui/gui/psppire-var-store.h>
 #include <ui/gui/helper.h>
index 7b9a958409a8cc8c06c95e9e32dbe8c808325364..a867fe016d05131f0ff759e3536118c5ae60c855 100644 (file)
@@ -29,7 +29,7 @@
 #include <ui/gui/helper.h>
 #include <ui/gui/psppire-dialog.h>
 #include <ui/gui/psppire-var-store.h>
-#include <ui/gui/helper.h>
+#include "executor.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
index 1d8944754c5ec3bc268dda14858da4bfb60a5a04..13ef847a36f436b49c8cd062eda617d7f0563624 100644 (file)
@@ -28,7 +28,7 @@
 #include <ui/gui/helper.h>
 #include <ui/gui/psppire-dialog.h>
 #include <ui/gui/psppire-var-store.h>
-#include <ui/gui/helper.h>
+#include "executor.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
diff --git a/src/ui/gui/executor.c b/src/ui/gui/executor.c
new file mode 100644 (file)
index 0000000..711e956
--- /dev/null
@@ -0,0 +1,110 @@
+/* PSPPIRE - a graphical user interface for PSPP.
+   Copyright (C) 2007, 2009  Free Software Foundation
+
+   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 "executor.h"
+#include "psppire-data-store.h"
+#include <data/lazy-casereader.h>
+#include <data/procedure.h>
+#include <libpspp/getl.h>
+#include <language/lexer/lexer.h>
+#include <language/command.h>
+#include <output/manager.h>
+#include "psppire-output-window.h"
+
+extern struct dataset *the_dataset;
+extern struct source_stream *the_source_stream;
+extern PsppireDataStore *the_data_store;
+
+/* Lazy casereader callback function used by execute_syntax. */
+static struct casereader *
+create_casereader_from_data_store (void *data_store_)
+{
+  PsppireDataStore *data_store = data_store_;
+  return psppire_data_store_get_reader (data_store);
+}
+
+gboolean
+execute_syntax (struct getl_interface *sss)
+{
+  struct lexer *lexer;
+  gboolean retval = TRUE;
+
+  struct casereader *reader;
+  size_t value_cnt;
+  casenumber case_cnt;
+  unsigned long int lazy_serial;
+
+  /* When the user executes a number of snippets of syntax in a
+     row, none of which read from the active file, the GUI becomes
+     progressively less responsive.  The reason is that each syntax
+     execution encapsulates the active file data in another
+     datasheet layer.  The cumulative effect of having a number of
+     layers of datasheets wastes time and space.
+
+     To solve the problem, we use a "lazy casereader", a wrapper
+     around the casereader obtained from the data store, that
+     only actually instantiates that casereader when it is
+     needed.  If the data store casereader is never needed, then
+     it is reused the next time syntax is run, without wrapping
+     it in another layer. */
+  value_cnt = psppire_data_store_get_value_count (the_data_store);
+  case_cnt = psppire_data_store_get_case_count (the_data_store);
+  reader = lazy_casereader_create (value_cnt, case_cnt,
+                                   create_casereader_from_data_store,
+                                   the_data_store, &lazy_serial);
+  proc_set_active_file_data (the_dataset, reader);
+
+  g_return_val_if_fail (proc_has_active_file (the_dataset), FALSE);
+
+  lexer = lex_create (the_source_stream);
+
+  getl_append_source (the_source_stream, sss, GETL_BATCH, ERRMODE_CONTINUE);
+
+  for (;;)
+    {
+      enum cmd_result result = cmd_parse (lexer, the_dataset);
+
+      if ( cmd_result_is_failure (result))
+       {
+         retval = FALSE;
+         if ( source_stream_current_error_mode (the_source_stream)
+              == ERRMODE_STOP )
+           break;
+       }
+
+      if ( result == CMD_EOF || result == CMD_FINISH)
+       break;
+    }
+
+  getl_abort_noninteractive (the_source_stream);
+
+  lex_destroy (lexer);
+
+  psppire_dict_replace_dictionary (the_data_store->dict,
+                                  dataset_dict (the_dataset));
+
+  reader = proc_extract_active_file_data (the_dataset);
+  if (!lazy_casereader_destroy (reader, lazy_serial))
+    psppire_data_store_set_reader (the_data_store, reader);
+
+  som_flush ();
+
+  psppire_output_window_reload ();
+
+  return retval;
+}
diff --git a/src/ui/gui/executor.h b/src/ui/gui/executor.h
new file mode 100644 (file)
index 0000000..40925be
--- /dev/null
@@ -0,0 +1,28 @@
+/* PSPPIRE - a graphical user interface for PSPP.
+   Copyright (C) 2007, 2009  Free Software Foundation
+
+   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 EXECUTOR_H
+#define EXECUTOR_H
+
+#include <glib.h>
+
+struct getl_interface;
+
+gboolean execute_syntax (struct getl_interface *sss);
+
+
+#endif
index c78fa95f1869bd907946af25c879803c605933c2..9d9814f1a64045ba96fe967c85588e796869d803 100644 (file)
@@ -29,7 +29,7 @@
 #include <ui/gui/helper.h>
 #include <ui/gui/psppire-dialog.h>
 #include <ui/gui/psppire-var-store.h>
-#include <ui/gui/helper.h>
+#include "executor.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
index c70f8f7c215b15cb31b636c1e10b3bd53be416c6..a4c07ca46d78ae74efd5317f3a7b87216578b1ee 100644 (file)
@@ -20,8 +20,6 @@
 */
 #include <config.h>
 
-#include "psppire-syntax-window.h"
-
 #include       <glib-object.h>
 
 #include <glib.h>
@@ -33,7 +31,7 @@
 #include <data/dictionary.h>
 #include <data/casereader-provider.h>
 #include <libpspp/message.h>
-
+#include "psppire-syntax-window.h"
 #include <gtk/gtkbuilder.h>
 #include <libpspp/i18n.h>
 
 #include <stdlib.h>
 #include <data/settings.h>
 
-#include <language/command.h>
-#include <data/lazy-casereader.h>
-#include <data/procedure.h>
-#include <language/lexer/lexer.h>
 #include "psppire-data-store.h"
-#include <output/manager.h>
-#include "psppire-output-window.h"
 
 #include "xalloc.h"
 
@@ -244,91 +236,6 @@ reference_manual (GtkMenuItem *menu, gpointer data)
 }
 
 
-extern struct dataset *the_dataset;
-extern struct source_stream *the_source_stream;
-extern PsppireDataStore *the_data_store;
-
-/* Lazy casereader callback function used by execute_syntax. */
-static struct casereader *
-create_casereader_from_data_store (void *data_store_)
-{
-  PsppireDataStore *data_store = data_store_;
-  return psppire_data_store_get_reader (data_store);
-}
-
-gboolean
-execute_syntax (struct getl_interface *sss)
-{
-  struct lexer *lexer;
-  gboolean retval = TRUE;
-
-  struct casereader *reader;
-  size_t value_cnt;
-  casenumber case_cnt;
-  unsigned long int lazy_serial;
-
-  /* When the user executes a number of snippets of syntax in a
-     row, none of which read from the active file, the GUI becomes
-     progressively less responsive.  The reason is that each syntax
-     execution encapsulates the active file data in another
-     datasheet layer.  The cumulative effect of having a number of
-     layers of datasheets wastes time and space.
-
-     To solve the problem, we use a "lazy casereader", a wrapper
-     around the casereader obtained from the data store, that
-     only actually instantiates that casereader when it is
-     needed.  If the data store casereader is never needed, then
-     it is reused the next time syntax is run, without wrapping
-     it in another layer. */
-  value_cnt = psppire_data_store_get_value_count (the_data_store);
-  case_cnt = psppire_data_store_get_case_count (the_data_store);
-  reader = lazy_casereader_create (value_cnt, case_cnt,
-                                   create_casereader_from_data_store,
-                                   the_data_store, &lazy_serial);
-  proc_set_active_file_data (the_dataset, reader);
-
-  g_return_val_if_fail (proc_has_active_file (the_dataset), FALSE);
-
-  lexer = lex_create (the_source_stream);
-
-  getl_append_source (the_source_stream, sss, GETL_BATCH, ERRMODE_CONTINUE);
-
-  for (;;)
-    {
-      enum cmd_result result = cmd_parse (lexer, the_dataset);
-
-      if ( cmd_result_is_failure (result))
-       {
-         retval = FALSE;
-         if ( source_stream_current_error_mode (the_source_stream)
-              == ERRMODE_STOP )
-           break;
-       }
-
-      if ( result == CMD_EOF || result == CMD_FINISH)
-       break;
-    }
-
-  getl_abort_noninteractive (the_source_stream);
-
-  lex_destroy (lexer);
-
-  psppire_dict_replace_dictionary (the_data_store->dict,
-                                  dataset_dict (the_dataset));
-
-  reader = proc_extract_active_file_data (the_dataset);
-  if (!lazy_casereader_destroy (reader, lazy_serial))
-    psppire_data_store_set_reader (the_data_store, reader);
-
-  som_flush ();
-
-  psppire_output_window_reload ();
-
-  return retval;
-}
-
-
-
 /* Create a deep copy of SRC */
 GtkListStore *
 clone_list_store (const GtkListStore *src)
index 6bd610e7c541b2e5bd01f0a17694fa4bc8703bb4..a6287ddaf1db3260ae0baed48f2fc65bd9365d83 100644 (file)
@@ -50,10 +50,6 @@ void connect_help (GtkBuilder *);
 
 void reference_manual (GtkMenuItem *, gpointer);
 
-struct getl_interface;
-gboolean execute_syntax (struct getl_interface *sss);
-
-
 #define builder_new(NAME) builder_new_real (relocate (PKGDATADIR "/" NAME))
 
 GtkBuilder *builder_new_real (const gchar *name);
index 2fb88268731a3b1a4126a1450fca3d122c9252c6..a17a93977e612db7fa99b9eb58226fd9b91f72c8 100644 (file)
@@ -31,7 +31,7 @@
 
 
 #include <language/syntax-string-source.h>
-#include "helper.h"
+#include "executor.h"
 
 
 #include "gettext.h"
index 9d15ceb94fe53c628b90e3f48ce15e415b0e253d..d19f9783609158c0502419b60f9637ef9c0c2413 100644 (file)
@@ -25,7 +25,7 @@
 #include "psppire-data-store.h"
 #include <libpspp/i18n.h>
 #include <ui/gui/sheet/psppire-axis.h>
-#include "helper.h"
+#include "executor.h"
 
 #include <gtk-contrib/gtkxpaned.h>
 #include <gettext.h>
index 02b9cc344392859eec2ffdcb63163485eaa4ebf5..c53e2fe07d17a410989de00085f8617fb7790ed3 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <gtk/gtksignal.h>
 #include <gtk/gtkbox.h>
+#include "executor.h"
 #include "helper.h"
 
 #include "text-data-import-dialog.h"
index 3879e5b4dd277ec1f23b11f04b9edb992ab3fbe3..48a77fc03ec21a7fa3f9cfc4a3ddc6cceedb3c4f 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <gtk/gtksignal.h>
 #include <gtk/gtkbox.h>
+#include "executor.h"
 #include "helper.h"
 
 #include <libpspp/message.h>
index c774a23db668cb0930d09870af0fdabdd6c98ded..017a85f4b62868ce6eed578030d4623157c6a690 100644 (file)
@@ -49,7 +49,7 @@
 #include "psppire-dict.h"
 #include "psppire-var-store.h"
 #include "psppire-data-store.h"
-#include "helper.h"
+#include "executor.h"
 #include "message-dialog.h"
 #include <ui/syntax-gen.h>
 
index 2c4d19a0fde9b6f37ace69dcd82292a9bff7f5e0..db5cd4fbb4bf1972065e0230e9ad34cc919a43ef 100644 (file)
@@ -28,7 +28,7 @@
 #include <ui/gui/helper.h>
 #include <ui/gui/psppire-dialog.h>
 #include <ui/gui/psppire-var-store.h>
-#include <ui/gui/helper.h>
+#include "executor.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
index 50d87193d2381723b34da472841a9d8100284377..495aefb82914b8026f7f507e75aa72b13759a019 100644 (file)
@@ -24,6 +24,8 @@
 
 #include "recode-dialog.h"
 
+#include "executor.h"
+
 #include <gtk/gtk.h>
 
 #include <xalloc.h>
@@ -34,7 +36,7 @@
 #include <ui/gui/helper.h>
 #include <ui/gui/psppire-dialog.h>
 #include <ui/gui/psppire-var-store.h>
-#include <ui/gui/helper.h>
+
 #include <ui/syntax-gen.h>
 
 #include "psppire-acr.h"
index b42dffe50b06b1583a91f38766aeafcb3bc36880..a702ffb78df0c8d7681c2ec52ce8b6612efc65f8 100644 (file)
@@ -18,6 +18,7 @@
 
 #include "checkbox-treeview.h"
 #include "regression-dialog.h"
+#include "executor.h"
 
 #include <gtk/gtk.h>
 #include <stdlib.h>
@@ -29,7 +30,7 @@
 #include <ui/gui/helper.h>
 #include <ui/gui/psppire-dialog.h>
 #include <ui/gui/psppire-var-store.h>
-#include <ui/gui/helper.h>
+
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
index 4d01573b84deca0dda88b130efa34ead9ecdbfd7..4db99d978e34d8bffc9a5b7c808eeea4b94d2174 100644 (file)
@@ -25,6 +25,7 @@
 
 #include "psppire-data-window.h"
 
+#include "executor.h"
 #include "helper.h"
 
 #include <gtk/gtk.h>
index ffe86188e27c8db48034a7a9c04ff13f87436f0d..56b10d2c5482e382da1b8b2df32f5646bb8fe127 100644 (file)
@@ -18,7 +18,7 @@
 
 #include "select-cases-dialog.h"
 #include <gtk/gtk.h>
-#include "helper.h"
+#include "executor.h"
 #include "psppire-dialog.h"
 #include "psppire-data-window.h"
 #include "psppire-selector.h"
index b5d1bbaafa1d9803007a65ee5f9ae8ce25cb86ad..a11356109daad8f9c4ac3a202dd382bd9a3305af 100644 (file)
@@ -17,7 +17,7 @@
 #include <config.h>
 #include <gtk/gtk.h>
 #include "sort-cases-dialog.h"
-#include "helper.h"
+#include "executor.h"
 #include "psppire-dialog.h"
 #include "psppire-data-window.h"
 #include "psppire-var-store.h"
index 063f186263f77370da93d956f1e6f759fb7d762f..458a3c53532a1eafdddbd9552f14cc4b11286ffc 100644 (file)
@@ -19,7 +19,7 @@
 #include "split-file-dialog.h"
 #include "psppire-selector.h"
 #include "psppire-dialog.h"
-#include "helper.h"
+#include "executor.h"
 #include "psppire-data-window.h"
 #include "dict-display.h"
 #include <language/syntax-string-source.h>
index c24e3251e86ce3265a88fea1c107e98d1436c3fa..f5df9f36e3004533789b74a78ae16670f57baab5 100644 (file)
@@ -21,7 +21,7 @@
 #include "t-test-independent-samples-dialog.h"
 #include "psppire-dict.h"
 #include "psppire-var-store.h"
-#include "helper.h"
+#include "executor.h"
 #include "psppire-data-window.h"
 #include "psppire-dialog.h"
 #include "dialog-common.h"
index 2c48c5d9c6c3dffa690fb6cfa48a3764bfc82e54..18bdbb5dd3003f506a73a3b265a449a679541d77 100644 (file)
@@ -27,6 +27,7 @@
 #include "dialog-common.h"
 #include "dict-display.h"
 #include "widget-io.h"
+#include "executor.h"
 
 #include "t-test-options.h"
 #include <language/syntax-string-source.h>
index a239a47193b4eba5eb778355847ea2b1d5bc1490..dcc24fadd85c8ddc75354efdf94100190dd17c28 100644 (file)
@@ -30,6 +30,8 @@
 #include "dialog-common.h"
 #include "psppire-dialog.h"
 
+#include "executor.h"
+
 #include "helper.h"
 
 #include "psppire-var-ptr.h"
index 79f77627cf5b9d5b6f2c136e64c46ffd005dfc90..c674f17d1e1cd9279cdb472ae7e4d0ea6398d361 100644 (file)
@@ -45,7 +45,7 @@
 #include <ui/gui/psppire-dialog.h>
 #include <ui/gui/psppire-var-sheet.h>
 #include <ui/gui/psppire-var-store.h>
-#include <ui/gui/helper.h>
+#include "executor.h"
 
 #include "error.h"
 #include "xalloc.h"
index 7ff758b0d279824a67f4c4043feb8b999f648ed1..beed72d731590eb4089d442a41e684545e2be6da 100644 (file)
@@ -19,7 +19,7 @@
 #include "transpose-dialog.h"
 #include "psppire-selector.h"
 #include "psppire-dialog.h"
-#include "helper.h"
+#include "executor.h"
 #include "psppire-data-window.h"
 #include "dict-display.h"
 #include <language/syntax-string-source.h>
index 6fccdfb8e11904c420b38d52ca6a84d4306c510d..11b528ba76d1ebf2f3f06cea96cabad8d8eac7f9 100644 (file)
@@ -19,7 +19,7 @@
 #include "weight-cases-dialog.h"
 #include "psppire-selector.h"
 #include "psppire-dialog.h"
-#include "helper.h"
+#include "executor.h"
 #include "psppire-data-window.h"
 #include "dict-display.h"
 #include <language/syntax-string-source.h>