X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fterminal%2Fterminal-opts.c;h=5a6a8fbd236acc335982f816d5e7d78c8394f74e;hb=6e61fef8d4447f2d7610ed57009ae842ffe6a272;hp=d55a8a2e9607d5622dcb1f52b192a78263f7f28b;hpb=a258e53c63a08b0ec48aea8f03808eb651729424;p=pspp diff --git a/src/ui/terminal/terminal-opts.c b/src/ui/terminal/terminal-opts.c index d55a8a2e96..5a6a8fbd23 100644 --- a/src/ui/terminal/terminal-opts.c +++ b/src/ui/terminal/terminal-opts.c @@ -20,15 +20,14 @@ #include #include +#include #include "data/settings.h" -#include "data/file-name.h" -#include "language/syntax-file.h" +#include "language/lexer/include-path.h" #include "libpspp/argv-parser.h" #include "libpspp/assertion.h" #include "libpspp/cast.h" #include "libpspp/compiler.h" -#include "libpspp/getl.h" #include "libpspp/llx.h" #include "libpspp/str.h" #include "libpspp/string-array.h" @@ -38,10 +37,10 @@ #include "output/driver.h" #include "output/driver-provider.h" #include "output/msglog.h" -#include "ui/terminal/msg-ui.h" -#include "ui/terminal/read-line.h" +#include "output/pivot-table.h" #include "gl/error.h" +#include "gl/localcharset.h" #include "gl/progname.h" #include "gl/version-etc.h" #include "gl/xmemdup0.h" @@ -53,12 +52,14 @@ struct terminal_opts { - enum syntax_mode *syntax_mode; struct string_map options; /* Output driver options. */ bool has_output_driver; bool has_terminal_driver; bool has_error_file; + enum segmenter_mode *syntax_mode; bool *process_statrc; + char **syntax_encoding; + char *table_look; }; enum @@ -68,8 +69,11 @@ enum OPT_OUTPUT, OPT_OUTPUT_OPTION, OPT_NO_OUTPUT, + OPT_BATCH, OPT_INTERACTIVE, + OPT_SYNTAX_ENCODING, OPT_NO_STATRC, + OPT_TABLE_LOOK, OPT_HELP, OPT_VERSION, N_TERMINAL_OPTIONS @@ -82,8 +86,11 @@ static struct argv_option terminal_argv_options[N_TERMINAL_OPTIONS] = {"output", 'o', required_argument, OPT_OUTPUT}, {NULL, 'O', required_argument, OPT_OUTPUT_OPTION}, {"no-output", 0, no_argument, OPT_NO_OUTPUT}, + {"batch", 'b', no_argument, OPT_BATCH}, {"interactive", 'i', no_argument, OPT_INTERACTIVE}, + {"syntax-encoding", 0, required_argument, OPT_SYNTAX_ENCODING}, {"no-statrc", 'r', no_argument, OPT_NO_STATRC}, + {"table-look", 0, required_argument, OPT_TABLE_LOOK}, {"help", 'h', no_argument, OPT_HELP}, {"version", 'V', no_argument, OPT_VERSION}, }; @@ -108,31 +115,6 @@ register_output_driver (struct terminal_opts *to) } } -static void -parse_output_option (struct terminal_opts *to, const char *option) -{ - const char *equals; - char *key, *value; - - equals = strchr (option, '='); - if (equals == NULL) - { - error (0, 0, _("%s: output option missing `='"), option); - return; - } - - key = xmemdup0 (option, equals - option); - if (string_map_contains (&to->options, key)) - { - error (0, 0, _("%s: output option specified more than once"), key); - free (key); - return; - } - - value = xmemdup0 (equals + 1, strlen (equals + 1)); - string_map_insert_nocopy (&to->options, key, value); -} - static char * get_supported_formats (void) { @@ -141,7 +123,6 @@ get_supported_formats (void) struct string_set format_set; char *format_string; const char *format; - size_t i; /* Get supported formats as unordered set. */ string_set_init (&format_set); @@ -160,32 +141,14 @@ get_supported_formats (void) return format_string; } -static char * -get_default_include_path (void) -{ - struct source_stream *ss; - struct string dst; - char **path; - size_t i; - - ss = create_source_stream (); - path = getl_include_path (ss); - ds_init_empty (&dst); - for (i = 0; path[i] != NULL; i++) - ds_put_format (&dst, " %s", path[i]); - destroy_source_stream (ss); - - return ds_steal_cstr (&dst); -} - static void usage (void) { char *supported_formats = get_supported_formats (); - char *default_include_path = get_default_include_path (); + char *inc_path = string_array_join (include_path_default (), " "); printf (_("\ -PSPP, a program for statistical analysis of sample data.\n\ +PSPP, a program for statistical analysis of sampled data.\n\ Usage: %s [OPTION]... FILE...\n\ \n\ Arguments to long options also apply to equivalent short options.\n\ @@ -197,6 +160,7 @@ Output options:\n\ -O device={terminal|listing} override device type for previous -o\n\ -e, --error-file=FILE append errors, warnings, and notes to FILE\n\ --no-output disable default output driver\n\ + --table-look=FILE use output style read from FILE\n\ Supported output formats: %s\n\ \n\ Language options:\n\ @@ -208,19 +172,21 @@ Language options:\n\ calculated from broken algorithms\n\ -x, --syntax={compatible|enhanced}\n\ set to `compatible' to disable PSPP extensions\n\ + -b, --batch interpret syntax in batch mode\n\ -i, --interactive interpret syntax in interactive mode\n\ + --syntax-encoding=ENCODING specify encoding for syntax files\n\ -s, --safer don't allow some unsafe operations\n\ -Default search path:%s\n\ +Default search path: %s\n\ \n\ Informative output:\n\ -h, --help display this help and exit\n\ -V, --version output version information and exit\n\ \n\ Non-option arguments are interpreted as syntax files to execute.\n"), - program_name, supported_formats, default_include_path); + program_name, supported_formats, inc_path); free (supported_formats); - free (default_include_path); + free (inc_path); emit_bug_reporting_address (); exit (EXIT_SUCCESS); @@ -248,7 +214,7 @@ terminal_option_callback (int id, void *to_) break; case OPT_OUTPUT_OPTION: - parse_output_option (to, optarg); + output_driver_parse_option (optarg, &to->options); break; case OPT_NO_OUTPUT: @@ -257,14 +223,26 @@ terminal_option_callback (int id, void *to_) to->has_output_driver = true; break; + case OPT_BATCH: + *to->syntax_mode = SEG_MODE_BATCH; + break; + case OPT_INTERACTIVE: - *to->syntax_mode = GETL_INTERACTIVE; + *to->syntax_mode = SEG_MODE_INTERACTIVE; + break; + + case OPT_SYNTAX_ENCODING: + *to->syntax_encoding = optarg; break; case OPT_NO_STATRC: *to->process_statrc = false; break; + case OPT_TABLE_LOOK: + to->table_look = optarg; + break; + case OPT_HELP: usage (); exit (EXIT_SUCCESS); @@ -282,19 +260,23 @@ terminal_option_callback (int id, void *to_) struct terminal_opts * terminal_opts_init (struct argv_parser *ap, - enum syntax_mode *syntax_mode, bool *process_statrc) + enum segmenter_mode *syntax_mode, bool *process_statrc, + char **syntax_encoding) { struct terminal_opts *to; - *syntax_mode = GETL_BATCH; + *syntax_mode = SEG_MODE_AUTO; *process_statrc = true; + *syntax_encoding = "Auto"; to = xzalloc (sizeof *to); to->syntax_mode = syntax_mode; string_map_init (&to->options); to->has_output_driver = false; to->has_error_file = false; + to->syntax_mode = syntax_mode; to->process_statrc = process_statrc; + to->syntax_encoding = syntax_encoding; argv_parser_add_options (ap, terminal_argv_options, N_TERMINAL_OPTIONS, terminal_option_callback, to); @@ -316,5 +298,16 @@ terminal_opts_done (struct terminal_opts *to, int argc, char *argv[]) msglog_create ("-"); string_map_destroy (&to->options); + + if (to->table_look) + { + struct pivot_table_look *look; + char *s = pivot_table_look_read (to->table_look, &look); + if (s) + error (1, 0, "%s", s); + pivot_table_look_set_default (look); + pivot_table_look_unref (look); + } + free (to); }