X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fterminal%2Fmain.c;h=1be99732d7df6d002c6cbc8cfa705600729f7dc7;hb=1cc9ec74f2a7507d3230e366e027f03846095f59;hp=fa99fe1a4ee46ddd73417b995921f7f27ec985aa;hpb=8af858910fe5d4166089d8f5d55ba8debe441617;p=pspp-builds.git diff --git a/src/ui/terminal/main.c b/src/ui/terminal/main.c index fa99fe1a..1be99732 100644 --- a/src/ui/terminal/main.c +++ b/src/ui/terminal/main.c @@ -28,6 +28,7 @@ #if HAVE_IEEEFP_H #include #endif +#include #include "data/dictionary.h" #include "data/file-handle-def.h" @@ -39,6 +40,7 @@ #include "language/command.h" #include "language/lexer/lexer.h" #include "language/prompt.h" +#include "language/syntax-file.h" #include "libpspp/argv-parser.h" #include "libpspp/compiler.h" #include "libpspp/getl.h" @@ -61,26 +63,25 @@ #include "gettext.h" #define _(msgid) gettext (msgid) - -static void fpu_init (void); -static void clean_up (void); - -/* If a segfault happens, issue a message to that effect and halt */ -void bug_handler(int sig); - -/* Handle quit/term/int signals */ -void interrupt_handler(int sig); static struct dataset * the_dataset = NULL; static struct lexer *the_lexer; static struct source_stream *the_source_stream ; +static void add_syntax_file (struct source_stream *, enum syntax_mode, + const char *file_name); +static void bug_handler(int sig); +static void fpu_init (void); +static void clean_up (void); + /* Program entry point. */ int main (int argc, char **argv) { struct terminal_opts *terminal_opts; struct argv_parser *parser; + enum syntax_mode syntax_mode; + bool process_statrc; set_program_name (argv[0]); @@ -104,7 +105,7 @@ main (int argc, char **argv) the_dataset = create_dataset (); parser = argv_parser_create (); - terminal_opts = terminal_opts_init (parser, the_source_stream); + terminal_opts = terminal_opts_init (parser, &syntax_mode, &process_statrc); source_init_register_argv_parser (parser, the_source_stream); if (!argv_parser_run (parser, argc, argv)) exit (EXIT_FAILURE); @@ -113,8 +114,28 @@ main (int argc, char **argv) msg_ui_init (the_source_stream); - the_lexer = lex_create (the_source_stream); + /* Add syntax files to source stream. */ + if (process_statrc) + { + char *rc = fn_search_path ("rc", getl_include_path (the_source_stream)); + if (rc != NULL) + { + add_syntax_file (the_source_stream, GETL_BATCH, rc); + free (rc); + } + } + if (optind < argc) + { + int i; + + for (i = optind; i < argc; i++) + add_syntax_file (the_source_stream, syntax_mode, argv[i]); + } + else + add_syntax_file (the_source_stream, syntax_mode, "-"); + /* Parse and execute syntax. */ + the_lexer = lex_create (the_source_stream); for (;;) { int result = cmd_parse (the_lexer, the_dataset); @@ -136,7 +157,6 @@ main (int argc, char **argv) clean_up (); return msg_ui_any_errors (); } - static void fpu_init (void) @@ -152,7 +172,7 @@ fpu_init (void) } /* If a segfault happens, issue a message to that effect and halt */ -void +static void bug_handler(int sig) { /* Reset SIG to its default handling so that if it happens again we won't @@ -205,3 +225,15 @@ clean_up (void) i18n_done (); } } + +static void +add_syntax_file (struct source_stream *ss, enum syntax_mode syntax_mode, + const char *file_name) +{ + struct getl_interface *source; + + source = (!strcmp (file_name, "-") && isatty (STDIN_FILENO) + ? create_readln_source () + : create_syntax_file_source (file_name)); + getl_append_source (ss, source, syntax_mode, ERRMODE_CONTINUE); +}