/* PSPPIRE - a graphical user interface for PSPP.
- Copyright (C) 2007, 2009 Free Software Foundation
+ Copyright (C) 2007, 2009, 2010, 2011 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
#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"
+#include "ui/gui/executor.h"
+
+#include "data/dataset.h"
+#include "data/lazy-casereader.h"
+#include "language/command.h"
+#include "language/lexer/lexer.h"
+#include "libpspp/cast.h"
+#include "output/driver.h"
+#include "ui/gui/psppire-data-store.h"
+#include "ui/gui/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. */
}
gboolean
-execute_syntax (struct getl_interface *sss)
+execute_syntax (struct lex_reader *lex_reader)
{
struct lexer *lexer;
gboolean retval = TRUE;
struct casereader *reader;
- size_t value_cnt;
+ const struct caseproto *proto;
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
+ row, none of which read from the active dataset, the GUI becomes
progressively less responsive. The reason is that each syntax
- execution encapsulates the active file data in another
+ execution encapsulates the active dataset data in another
datasheet layer. The cumulative effect of having a number of
layers of datasheets wastes time and space.
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);
+ proto = psppire_data_store_get_proto (the_data_store);
case_cnt = psppire_data_store_get_case_count (the_data_store);
- reader = lazy_casereader_create (value_cnt, case_cnt,
+ reader = lazy_casereader_create (proto, 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);
+ dataset_set_source (the_dataset, reader);
- lexer = lex_create (the_source_stream);
+ g_return_val_if_fail (dataset_has_source (the_dataset), FALSE);
- getl_append_source (the_source_stream, sss, GETL_BATCH, ERRMODE_CONTINUE);
+ lexer = lex_create ();
+ psppire_set_lexer (lexer);
+ lex_append (lexer, lex_reader);
for (;;)
{
if ( cmd_result_is_failure (result))
{
retval = FALSE;
- if ( source_stream_current_error_mode (the_source_stream)
- == ERRMODE_STOP )
+ if ( lex_get_error_mode (lexer) == LEX_ERROR_STOP )
break;
}
break;
}
- getl_abort_noninteractive (the_source_stream);
-
lex_destroy (lexer);
+ psppire_set_lexer (NULL);
+
+ proc_execute (the_dataset);
psppire_dict_replace_dictionary (the_data_store->dict,
dataset_dict (the_dataset));
- reader = proc_extract_active_file_data (the_dataset);
+ reader = dataset_steal_source (the_dataset);
if (!lazy_casereader_destroy (reader, lazy_serial))
psppire_data_store_set_reader (the_data_store, reader);
- som_flush ();
-
- psppire_output_window_reload ();
+ output_flush ();
return retval;
}
+
+/* Executes null-terminated string SYNTAX as syntax.
+ Returns SYNTAX. */
+gchar *
+execute_syntax_string (gchar *syntax)
+{
+ execute_const_syntax_string (syntax);
+ return syntax;
+}
+
+/* Executes null-terminated string SYNTAX as syntax. */
+void
+execute_const_syntax_string (const gchar *syntax)
+{
+ execute_syntax (lex_reader_for_string (syntax));
+}