X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fterminal%2Fmain.c;h=f43bd5dc11556c2ed05fade994654c7c8d989860;hb=d33c417b65f897853ca34ac471e0ce9b10c0a627;hp=a92d6c040ff4a3ff8cdef27d72b027d32a766a3c;hpb=1e8aa549d8b7b19f814bbb08995aedb6a96630f6;p=pspp diff --git a/src/ui/terminal/main.c b/src/ui/terminal/main.c index a92d6c040f..f43bd5dc11 100644 --- a/src/ui/terminal/main.c +++ b/src/ui/terminal/main.c @@ -47,7 +47,7 @@ #include "libpspp/version.h" #include "math/random.h" #include "output/driver.h" -#include "output/message-item.h" +#include "output/output-item.h" #include "ui/source-init-opts.h" #include "ui/terminal/terminal-opts.h" #include "ui/terminal/terminal-reader.h" @@ -62,7 +62,7 @@ static struct session *the_session; static void add_syntax_reader (struct lexer *, const char *file_name, - const char *encoding, enum lex_syntax_mode); + const char *encoding, enum segmenter_mode); static void bug_handler(int sig); static void fpu_init (void); static void output_msg (const struct msg *, void *); @@ -73,13 +73,16 @@ main (int argc, char **argv) { struct terminal_opts *terminal_opts; struct argv_parser *parser; - enum lex_syntax_mode syntax_mode; + enum segmenter_mode syntax_mode; char *syntax_encoding; bool process_statrc; struct lexer *lexer; set_program_name (argv[0]); + prepare_fatal_error_message (); + prepare_diagnostic_information (); + signal (SIGABRT, bug_handler); signal (SIGSEGV, bug_handler); signal (SIGFPE, bug_handler); @@ -115,7 +118,7 @@ main (int argc, char **argv) char *rc = include_path_search ("rc"); if (rc != NULL) { - add_syntax_reader (lexer, rc, "Auto", LEX_SYNTAX_AUTO); + add_syntax_reader (lexer, rc, "Auto", SEG_MODE_AUTO); free (rc); } } @@ -215,25 +218,28 @@ static void output_msg (const struct msg *m_, void *lexer_) { struct lexer *lexer = lexer_; - struct msg m = *m_; - - if (m.file_name == NULL) - { - m.file_name = CONST_CAST (char *, lex_get_file_name (lexer)); - m.first_line = lex_get_first_line_number (lexer, 0); - m.last_line = lex_get_last_line_number (lexer, 0); - } - - m.command_name = output_get_command_name (); - - message_item_submit (message_item_create (&m)); + struct msg m = { + .category = m_->category, + .severity = m_->severity, + .stack = m_->stack, + .n_stack = m_->n_stack, + .location = (m_->location ? m_->location + : lexer ? lex_get_lines (lexer, 0, 0) + : NULL), + .command_name = output_get_uppercase_command_name (), + .text = m_->text, + }; + + output_item_submit (message_item_create (&m)); free (m.command_name); + if (m.location != m_->location) + msg_location_destroy (m.location); } static void add_syntax_reader (struct lexer *lexer, const char *file_name, - const char *encoding, enum lex_syntax_mode syntax_mode) + const char *encoding, enum segmenter_mode syntax_mode) { struct lex_reader *reader;