/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2009 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 <ctype.h>
#include <errno.h>
#include <unistd.h>
+#if HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+#if HAVE_READLINE
+#include <readline/readline.h>
+#endif
#include <data/casereader.h>
#include <data/dictionary.h>
#include <libpspp/message.h>
#include <libpspp/message.h>
#include <libpspp/str.h>
-#include <output/manager.h>
-#include <output/table.h>
#include <libpspp/getl.h>
-
-#if HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-
-#if HAVE_READLINE
-#include <readline/readline.h>
-#endif
+#include <output/text-item.h>
#include "xalloc.h"
#include "xmalloca.h"
{
int result;
- som_new_series ();
-
result = do_parse_command (lexer, ds, state);
- if (cmd_result_is_failure (result))
- lex_discard_rest_of_command (lexer);
assert (!proc_is_open (ds));
unset_cmd_algorithm ();
do_parse_command (struct lexer *lexer,
struct dataset *ds, enum cmd_state state)
{
- const struct command *command;
+ const struct command *command = NULL;
enum cmd_result result;
+ bool opened = false;
/* Read the command's first token. */
prompt_set_style (PROMPT_FIRST);
result = CMD_FAILURE;
goto finish;
}
- else if (command->function == NULL)
+ text_item_submit (text_item_create (TEXT_ITEM_COMMAND_OPEN, command->name));
+ opened = true;
+
+ if (command->function == NULL)
{
- msg (SE, _("%s is unimplemented."), command->name);
+ msg (SE, _("%s is not yet implemented."), command->name);
result = CMD_NOT_IMPLEMENTED;
- goto finish;
}
else if ((command->flags & F_TESTING) && !settings_get_testing_mode ())
{
msg (SE, _("%s may be used only in testing mode."), command->name);
result = CMD_FAILURE;
- goto finish;
}
else if ((command->flags & F_ENHANCED) && settings_get_syntax () != ENHANCED)
{
msg (SE, _("%s may be used only in enhanced syntax mode."),
command->name);
result = CMD_FAILURE;
- goto finish;
}
else if (!in_correct_state (command, state))
{
report_state_mismatch (command, state);
result = CMD_FAILURE;
- goto finish;
}
-
- /* Execute command. */
- msg_set_command_name (command->name);
- tab_set_command_name (command->name);
- result = command->function (lexer, ds);
- tab_set_command_name (NULL);
- msg_set_command_name (NULL);
+ else
+ {
+ /* Execute command. */
+ result = command->function (lexer, ds);
+ }
assert (cmd_result_is_valid (result));
finish:
- if ( cmd_result_is_failure (result))
+ if (cmd_result_is_failure (result))
{
- const struct source_stream *cs = lex_get_source_stream (lexer);
-
- if ( source_stream_current_error_mode (cs) == ERRMODE_STOP )
+ lex_discard_rest_of_command (lexer);
+ if (source_stream_current_error_mode (
+ lex_get_source_stream (lexer)) == ERRMODE_STOP )
{
msg (MW, _("Error encountered while ERROR=STOP is effective."));
result = CMD_CASCADING_FAILURE;
}
}
+ if (opened)
+ text_item_submit (text_item_create (TEXT_ITEM_COMMAND_CLOSE,
+ command->name));
+
return result;
}
}
}
else if (state == CMD_STATE_INPUT_PROGRAM)
- msg (SE, _("%s is not allowed inside INPUT PROGRAM."), command->name);
+ msg (SE, _("%s is not allowed inside %s."), command->name, "INPUT PROGRAM" );
else if (state == CMD_STATE_FILE_TYPE)
- msg (SE, _("%s is not allowed inside FILE TYPE."), command->name);
+ msg (SE, _("%s is not allowed inside %s."), command->name, "FILE TYPE");
return false;
}