X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fsettings.c;h=4bc36494fd0bca6ef1a2a11bcaf9f1f75663d519;hb=e85b9209febb65cb4a59635507fba948325607cd;hp=776cd51957fe4916301a8dbe30f8de4c195bf001;hpb=81e3a36c830463d97ff4f5937a670206cc26e193;p=pspp diff --git a/src/data/settings.c b/src/data/settings.c index 776cd51957..4bc36494fd 100644 --- a/src/data/settings.c +++ b/src/data/settings.c @@ -48,6 +48,9 @@ struct settings /* Format of reals in output (SET WRB). */ enum float_format output_float_format; + /* MATRIX...END MATRIX settings. */ + enum settings_mdisplay mdisplay; + int viewlength; int viewwidth; bool safer_mode; @@ -59,7 +62,13 @@ struct settings double blanks; int max_messages[MSG_N_SEVERITIES]; bool printback; - bool mprint; + + /* Macro settings. */ + bool mexpand; /* Expand macros? */ + bool mprint; /* Print macro expansions? */ + int miterate; /* Maximum iterations of !FOR. */ + int mnest; /* Maximum nested macro expansion levels. */ + int mxloops; size_t workspace; struct fmt_spec default_format; @@ -71,6 +80,7 @@ struct settings int syntax; struct fmt_settings styles; + double small; enum settings_output_devices output_routing[SETTINGS_N_OUTPUT_TYPES]; @@ -79,47 +89,57 @@ struct settings }; static struct settings the_settings = { - INTEGER_NATIVE, /* input_integer_format */ - FLOAT_NATIVE_DOUBLE, /* input_float_format */ - INTEGER_NATIVE, /* output_integer_format */ - FLOAT_NATIVE_DOUBLE, /* output_float_format */ - 24, /* viewlength */ - 79, /* viewwidth */ - false, /* safer_mode */ - true, /* include */ - true, /* route_errors_to_terminal */ - true, /* route_errors_to_listing */ - true, /* scompress */ - true, /* undefined */ - SYSMIS, /* blanks */ - - /* max_messages */ - { - 100, /* MSG_S_ERROR */ - 100, /* MSG_S_WARNING */ - 100 /* MSG_S_NOTE */ + .input_integer_format = INTEGER_NATIVE, + .input_float_format = FLOAT_NATIVE_DOUBLE, + .output_integer_format = INTEGER_NATIVE, + .output_float_format = FLOAT_NATIVE_DOUBLE, + .mdisplay = SETTINGS_MDISPLAY_TEXT, + .viewlength = 24, + .viewwidth = 79, + .safer_mode = false, + .include = true, + .route_errors_to_terminal = true, + .route_errors_to_listing = true, + .scompress = true, + .undefined = true, + .blanks = SYSMIS, + + .max_messages = { + [MSG_S_ERROR] = 100, + [MSG_S_WARNING] = 100, + [MSG_S_NOTE] = 100 }, - true, /* printback */ - true, /* mprint */ - 40, /* mxloops */ - 64L * 1024 * 1024, /* workspace */ - {FMT_F, 8, 2}, /* default_format */ - false, /* testing_mode */ - 6, /* fuzzbits */ - ENHANCED, /* cmd_algorithm */ - ENHANCED, /* global_algorithm */ - ENHANCED, /* syntax */ - FMT_SETTINGS_INIT, /* styles */ + .printback = true, + + .mexpand = true, + .mprint = false, + .miterate = 1000, + .mnest = 50, + + .mxloops = 40, + .workspace = 64L * 1024 * 1024, + .default_format = { .type = FMT_F, .w = 8, .d = 2 }, + .testing_mode = false, + .fuzzbits = 6, + .cmd_algorithm = ENHANCED, + .global_algorithm = ENHANCED, + .syntax = ENHANCED, + .styles = FMT_SETTINGS_INIT, + .small = .0001, /* output_routing */ - {SETTINGS_DEVICE_LISTING | SETTINGS_DEVICE_TERMINAL, - SETTINGS_DEVICE_LISTING | SETTINGS_DEVICE_TERMINAL, - 0, - SETTINGS_DEVICE_LISTING | SETTINGS_DEVICE_TERMINAL}, + .output_routing = { +#define LT (SETTINGS_DEVICE_LISTING | SETTINGS_DEVICE_TERMINAL) + [SETTINGS_OUTPUT_ERROR] = LT, + [SETTINGS_OUTPUT_NOTE] = LT, + [SETTINGS_OUTPUT_SYNTAX] = 0, + [SETTINGS_OUTPUT_RESULT] = LT +#undef LT + }, - SETTINGS_VALUE_SHOW_LABEL, - SETTINGS_VALUE_SHOW_LABEL + .show_values = SETTINGS_VALUE_SHOW_LABEL, + .show_variables = SETTINGS_VALUE_SHOW_LABEL, }; /* Initializes the settings module. */ @@ -140,7 +160,7 @@ static void settings_copy (struct settings *dst, const struct settings *src) { *dst = *src; - fmt_settings_copy (&dst->styles, &src->styles); + dst->styles = fmt_settings_copy (&src->styles); } /* Returns a copy of the current settings. */ @@ -289,11 +309,11 @@ settings_set_include (bool include) the_settings.include = include; } -/* What year to use as the start of the epoch. */ +/* Returns the year that starts the epoch. */ int settings_get_epoch (void) { - return fmt_settings_get_epoch (&the_settings.styles); + return the_settings.styles.epoch; } /* Sets the year that starts the epoch. */ @@ -386,6 +406,20 @@ settings_set_max_messages (enum msg_severity severity, int max) the_settings.max_messages[severity] = max; } +/* Returns whether to expand macro invocations. */ +bool +settings_get_mexpand (void) +{ + return the_settings.mexpand; +} + +/* Sets whether to expand macro invocations. */ +void +settings_set_mexpand (bool mexpand) +{ + the_settings.mexpand = mexpand; +} + /* Independent of get_printback, controls whether the commands generated by macro invocations are displayed. */ bool @@ -402,6 +436,35 @@ settings_set_mprint (bool mprint) the_settings.mprint = mprint; } +/* Returns the limit for loop iterations within a macro. */ +int +settings_get_miterate (void) +{ + return the_settings.miterate; +} + +/* Sets the limit for loop iterations within a macro. */ +void +settings_set_miterate (int miterate) +{ + the_settings.miterate = miterate; +} + +/* Returns the limit for recursion macro expansions. */ +int settings_get_mnest (void) +{ + return the_settings.mnest; +} + +/* Sets the limit for recursion macro expansions. */ +void +settings_set_mnest (int mnest) +{ + the_settings.mnest = mnest; +} + +int settings_get_mxloops (void); +void settings_set_mxloops (int); /* Implied limit of unbounded loop. */ int settings_get_mxloops (void) @@ -546,26 +609,28 @@ settings_set_cc (const char *cc_string, enum fmt_type type) return true; } -/* Returns the decimal point character for TYPE. */ -int -settings_get_decimal_char (enum fmt_type type) -{ - return fmt_settings_get_style (&the_settings.styles, type)->decimal; -} - void settings_set_decimal_char (char decimal) { the_settings.styles.decimal = decimal; } -/* Returns the number formatting style associated with the given - format TYPE. */ -const struct fmt_number_style * -settings_get_style (enum fmt_type type) +const struct fmt_settings * +settings_get_fmt_settings (void) +{ + return &the_settings.styles; +} + +double +settings_get_small (void) +{ + return the_settings.small; +} + +void +settings_set_small (double small) { - assert (is_fmt_type (type)); - return fmt_settings_get_style (&the_settings.styles, type); + the_settings.small = small; } /* Returns a string of the form "$#,###.##" according to FMT, @@ -640,3 +705,15 @@ settings_set_show_variables (enum settings_value_show s) { the_settings.show_variables = s; } + +enum settings_mdisplay +settings_get_mdisplay (void) +{ + return the_settings.mdisplay; +} + +void +settings_set_mdisplay (enum settings_mdisplay mdisplay) +{ + the_settings.mdisplay = mdisplay; +}