X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fterminal%2Fmain.c;h=edc59eddaf6a8440bde2daa940dffe1411324bc8;hb=b1b43c0d6a64d29a13953aa15d98dd74117faa95;hp=7560dcfe0d3d2b424e37d7efb37cf62f1775a108;hpb=b0bf9b1b0f727fafac4296a048e3f45db5936f81;p=pspp diff --git a/src/ui/terminal/main.c b/src/ui/terminal/main.c index 7560dcfe0d..edc59eddaf 100644 --- a/src/ui/terminal/main.c +++ b/src/ui/terminal/main.c @@ -25,12 +25,12 @@ #include "command-line.h" #include "msg-ui.h" #include "progname.h" -#include "procedure.h" #include "read-line.h" #include #include #include +#include #include #include #include @@ -42,7 +42,6 @@ #include #include #include -#include #if HAVE_FPU_CONTROL_H #include @@ -63,7 +62,6 @@ static void i18n_init (void); static void fpu_init (void); -static int execute_command (void); static void terminate (bool success) NO_RETURN; /* If a segfault happens, issue a message to that effect and halt */ @@ -77,6 +75,7 @@ void interrupt_handler(int sig); int main (int argc, char **argv) { + signal (SIGABRT, bug_handler); signal (SIGSEGV, bug_handler); signal (SIGFPE, bug_handler); signal (SIGINT, interrupt_handler); @@ -103,7 +102,8 @@ main (int argc, char **argv) for (;;) { - int result = execute_command (); + int result = cmd_parse (proc_has_source () + ? CMD_STATE_DATA : CMD_STATE_INITIAL); if (result == CMD_EOF || result == CMD_FINISH) break; if (result == CMD_CASCADING_FAILURE && !getl_is_interactive ()) @@ -119,25 +119,6 @@ main (int argc, char **argv) terminate (!any_errors ()); } - -/* Parses a command and returns the result. */ -static int -execute_command (void) -{ - /* Read the command's first token. - The first token is part of the first line of the command. */ - getl_set_prompt_style (GETL_PROMPT_FIRST); - lex_get (); - if (token == T_STOP) - return CMD_EOF; - - /* Parse the command. - Any lines read after the first token must be continuation - lines. */ - getl_set_prompt_style (GETL_PROMPT_LATER); - return cmd_parse (proc_has_source () - ? CMD_STATE_DATA : CMD_STATE_INITIAL); -} static void i18n_init (void) @@ -169,15 +150,14 @@ bug_handler(int sig) { switch (sig) { + case SIGABRT: + request_bug_report_and_abort("Assertion Failure/Abort"); case SIGFPE: request_bug_report_and_abort("Floating Point Exception"); - break; case SIGSEGV: request_bug_report_and_abort("Segmentation Violation"); - break; default: - request_bug_report_and_abort(""); - break; + request_bug_report_and_abort("Unknown"); } }