-static bool
-parse_WIB (struct lexer *lexer)
-{
- return parse_integer_format (lexer, settings_set_output_integer_format);
-}
-
-static bool
-parse_WRB (struct lexer *lexer)
-{
- return parse_real_format (lexer, settings_set_output_float_format);
-}
-
-static bool
-parse_WIDTH (struct lexer *lexer)
-{
- if (lex_match_id (lexer, "NARROW"))
- settings_set_viewwidth (79);
- else if (lex_match_id (lexer, "WIDE"))
- settings_set_viewwidth (131);
- else
- {
- if (!lex_force_int (lexer))
- return 0;
- if (lex_integer (lexer) < 40)
- {
- msg (SE, _("%s must be at least %d."), "WIDTH", 40);
- return 0;
- }
- settings_set_viewwidth (lex_integer (lexer));
- lex_get (lexer);
- }
-
- return 1;
-}
-
-static bool
-parse_WORKSPACE (struct lexer *lexer)
-{
- if (!lex_force_int (lexer))
- return false;
- int workspace = lex_integer (lexer);
- lex_get (lexer);
-
- if (workspace < 1024 && !settings_get_testing_mode ())
- msg (SE, _("%s must be at least 1MB"), "WORKSPACE");
- else if (workspace <= 0)
- msg (SE, _("%s must be positive"), "WORKSPACE");
- else
- settings_set_workspace (workspace * 1024L);
- return true;
-}
-\f
-static bool
-parse_setting (struct lexer *lexer)
-{
- struct setting
- {
- const char *name;
- bool (*function) (struct lexer *);
- };
- const struct setting settings[] = {
- { "BASETEXTDIRECTION", parse_BASETEXTDIRECTION },
- { "BLANKS", parse_BLANKS },
- { "BLOCK", parse_BLOCK },
- { "BOX", parse_BOX },
- { "CACHE", parse_CACHE },
- { "CCA", parse_CCA },
- { "CCB", parse_CCB },
- { "CCC", parse_CCC },
- { "CCD", parse_CCD },
- { "CCE", parse_CCE },
- { "CELLSBREAK", parse_CELLSBREAK },
- { "CMPTRANS", parse_CMPTRANS },
- { "COMPRESSION", parse_COMPRESSION },
- { "CTEMPLATE", parse_CTEMPLATE },
- { "DECIMAL", parse_DECIMAL },
- { "EPOCH", parse_EPOCH },
- { "ERRORS", parse_ERRORS },
- { "FORMAT", parse_FORMAT },
- { "FUZZBITS", parse_FUZZBITS },
- { "HEADER", parse_HEADER },
- { "INCLUDE", parse_INCLUDE },
- { "JOURNAL", parse_JOURNAL },
- { "LENGTH", parse_LENGTH },
- { "LOCALE", parse_LOCALE },
- { "MESSAGES", parse_MESSAGES },
- { "MEXPAND", parse_MEXPAND },
- { "MITERATE", parse_MITERATE },
- { "MNEST", parse_MNEST },
- { "MPRINT", parse_MPRINT },
- { "MXERRS", parse_MXERRS },
- { "MXLOOPS", parse_MXLOOPS },
- { "MXWARNS", parse_MXWARNS },
- { "PRINTBACK", parse_PRINTBACK },
- { "RESULTS", parse_RESULTS },
- { "RIB", parse_RIB },
- { "RRB", parse_RRB },
- { "SAFER", parse_SAFER },
- { "SCOMPRESSION", parse_SCOMPRESSION },
- { "SEED", parse_SEED },
- { "SMALL", parse_SMALL },
- { "TNUMBERS", parse_TNUMBERS },
- { "TVARS", parse_TVARS },
- { "TLOOK", parse_TLOOK },
- { "UNDEFINED", parse_UNDEFINED },
- { "WIB", parse_WIB },
- { "WRB", parse_WRB },
- { "WIDTH", parse_WIDTH },
- { "WORKSPACE", parse_WORKSPACE },
- };
- enum { N_SETTINGS = sizeof settings / sizeof *settings };
-
- for (size_t i = 0; i < N_SETTINGS; i++)
- if (match_subcommand (lexer, settings[i].name))
- return settings[i].function (lexer);
-
- lex_error (lexer, NULL);
- return false;
-}
-
-int
-cmd_set (struct lexer *lexer, struct dataset *ds UNUSED)
-{
- for (;;)
- {
- lex_match (lexer, T_SLASH);
- if (lex_token (lexer) == T_ENDCMD)
- break;
-
- if (!parse_setting (lexer))
- return CMD_FAILURE;
- }
-
- return CMD_SUCCESS;
-}
-\f
-static char *
-show_output_routing (enum settings_output_type type)
-{
- enum settings_output_devices devices;
- const char *s;
-
- devices = settings_get_output_routing (type);
- if (devices & SETTINGS_DEVICE_LISTING)
- s = devices & SETTINGS_DEVICE_TERMINAL ? "BOTH" : "LISTING";
- else if (devices & SETTINGS_DEVICE_TERMINAL)
- s = "TERMINAL";
- else
- s = "NONE";
-
- return xstrdup (s);
-}
-
-static char *
-show_blanks (const struct dataset *ds UNUSED)
-{
- return (settings_get_blanks () == SYSMIS
- ? xstrdup ("SYSMIS")
- : xasprintf ("%.*g", DBL_DIG + 1, settings_get_blanks ()));
-}
-
-static char *
-show_cc (enum fmt_type type)
-{
- return fmt_number_style_to_string (fmt_settings_get_style (
- settings_get_fmt_settings (), type));
-}
-
-static char *
-show_cca (const struct dataset *ds UNUSED)
-{
- return show_cc (FMT_CCA);
-}
-
-static char *
-show_ccb (const struct dataset *ds UNUSED)
-{
- return show_cc (FMT_CCB);
-}
-
-static char *
-show_ccc (const struct dataset *ds UNUSED)
-{
- return show_cc (FMT_CCC);
-}
-
-static char *
-show_ccd (const struct dataset *ds UNUSED)
-{
- return show_cc (FMT_CCD);
-}
-
-static char *
-show_cce (const struct dataset *ds UNUSED)
-{
- return show_cc (FMT_CCE);
-}
-
-static char *
-show_decimals (const struct dataset *ds UNUSED)
-{
- return xasprintf ("`%c'", settings_get_fmt_settings ()->decimal);
-}
-