X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fterminal%2Fterminal-opts.c;h=b9d9e50c589c9ae0507bdadc575223dc7eac40b2;hb=a58399ea2ce9421f72cc5771cd215b121bd8f9dd;hp=4464296498de8674ecdeb208714691efcc443252;hpb=3dd0f6ae0d5eb73a2270a243e443c4ae03c2c16e;p=pspp diff --git a/src/ui/terminal/terminal-opts.c b/src/ui/terminal/terminal-opts.c index 4464296498..b9d9e50c58 100644 --- a/src/ui/terminal/terminal-opts.c +++ b/src/ui/terminal/terminal-opts.c @@ -22,7 +22,6 @@ #include #include - #include "data/settings.h" #include "language/lexer/include-path.h" #include "libpspp/argv-parser.h" @@ -38,6 +37,7 @@ #include "output/driver.h" #include "output/driver-provider.h" #include "output/msglog.h" +#include "output/pivot-table.h" #include "gl/error.h" #include "gl/localcharset.h" @@ -56,9 +56,10 @@ struct terminal_opts bool has_output_driver; bool has_terminal_driver; bool has_error_file; - enum lex_syntax_mode *syntax_mode; + enum segmenter_mode *syntax_mode; bool *process_statrc; char **syntax_encoding; + char *table_look; }; enum @@ -72,6 +73,7 @@ enum OPT_INTERACTIVE, OPT_SYNTAX_ENCODING, OPT_NO_STATRC, + OPT_TABLE_LOOK, OPT_HELP, OPT_VERSION, N_TERMINAL_OPTIONS @@ -88,6 +90,7 @@ static struct argv_option terminal_argv_options[N_TERMINAL_OPTIONS] = {"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}, }; @@ -112,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) { @@ -182,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\ @@ -235,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: @@ -245,11 +224,11 @@ terminal_option_callback (int id, void *to_) break; case OPT_BATCH: - *to->syntax_mode = LEX_SYNTAX_BATCH; + *to->syntax_mode = SEG_MODE_BATCH; break; case OPT_INTERACTIVE: - *to->syntax_mode = LEX_SYNTAX_INTERACTIVE; + *to->syntax_mode = SEG_MODE_INTERACTIVE; break; case OPT_SYNTAX_ENCODING: @@ -260,6 +239,10 @@ terminal_option_callback (int id, void *to_) *to->process_statrc = false; break; + case OPT_TABLE_LOOK: + to->table_look = optarg; + break; + case OPT_HELP: usage (); exit (EXIT_SUCCESS); @@ -277,16 +260,14 @@ terminal_option_callback (int id, void *to_) struct terminal_opts * terminal_opts_init (struct argv_parser *ap, - enum lex_syntax_mode *syntax_mode, bool *process_statrc, + enum segmenter_mode *syntax_mode, bool *process_statrc, char **syntax_encoding) { - struct terminal_opts *to; - - *syntax_mode = LEX_SYNTAX_AUTO; + *syntax_mode = SEG_MODE_AUTO; *process_statrc = true; *syntax_encoding = "Auto"; - to = xzalloc (sizeof *to); + struct terminal_opts *to = XZALLOC (struct terminal_opts); to->syntax_mode = syntax_mode; string_map_init (&to->options); to->has_output_driver = false; @@ -300,33 +281,12 @@ terminal_opts_init (struct argv_parser *ap, return to; } -/* Return true iff the terminal appears to be an xterm with - UTF-8 capabilities */ -static bool -term_is_utf8_xterm (void) -{ - char *s = NULL; - - if ( (s = getenv ("TERM")) && (0 == strcmp ("xterm", s)) ) - if ( (s = getenv ("XTERM_LOCALE")) ) - return strcasestr (s, "utf8") || strcasestr (s, "utf-8"); - - return false; -} - void terminal_opts_done (struct terminal_opts *to, int argc, char *argv[]) { register_output_driver (to); if (!to->has_output_driver) { - if ((0 == strcmp (locale_charset (), "UTF-8")) - || - (term_is_utf8_xterm ()) ) - { - string_map_insert (&to->options, "box", "unicode"); - } - string_map_insert (&to->options, "output-file", "-"); string_map_insert (&to->options, "format", "txt"); register_output_driver (to); @@ -336,5 +296,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); }