X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fhelper.c;h=e14ab06ad76a5a7d0ebc39ef5b2f70a941de1016;hb=9491a8bd354152d3a228e1bf041c7ad6228750d7;hp=4d88c81bde63bb98db897631738e1100ee2e0734;hpb=ece16c8d0b27fc6c970f6d491b9a3e8a958fde82;p=pspp-builds.git diff --git a/src/ui/gui/helper.c b/src/ui/gui/helper.c index 4d88c81b..e14ab06a 100644 --- a/src/ui/gui/helper.c +++ b/src/ui/gui/helper.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -20,6 +21,7 @@ #include #include #include +#include "psppire-data-store.h" #include @@ -141,12 +143,14 @@ reference_manual (GtkMenuItem *menu, gpointer data) extern struct dataset *the_dataset; extern struct source_stream *the_source_stream; +extern PsppireDataStore *the_data_store; -void +gboolean execute_syntax (struct getl_interface *sss) { struct lexer *lexer; - g_return_if_fail (proc_has_source (the_dataset)); + + g_return_val_if_fail (proc_has_source (the_dataset), FALSE); lexer = lex_create (the_source_stream); @@ -154,11 +158,7 @@ execute_syntax (struct getl_interface *sss) for (;;) { - const struct dictionary *dict = dataset_dict (the_dataset); - - int result = cmd_parse (lexer, the_dataset, - dict_get_var_cnt (dict) > 0 ? - CMD_STATE_DATA : CMD_STATE_INITIAL); + int result = cmd_parse (lexer, the_dataset); if (result == CMD_EOF || result == CMD_FINISH) break; @@ -167,6 +167,19 @@ execute_syntax (struct getl_interface *sss) getl_abort_noninteractive (the_source_stream); lex_destroy (lexer); + + /* The GUI must *always* have a data source, even if it's an empty one. + Therefore, we find that there is none, (for example NEW FILE was the last + item in the syntax) then we create a new one. */ + if ( ! proc_has_source (the_dataset)) + proc_set_source (the_dataset, + storage_source_create (the_data_store->case_file->flexifile) + ); + + /* GUI syntax needs this implicit EXECUTE command at the end of + every script. Otherwise commands like GET could leave the GUI without + a casefile. */ + return procedure (the_dataset, NULL, NULL); }