X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fsettings.c;h=4bc36494fd0bca6ef1a2a11bcaf9f1f75663d519;hb=refs%2Fheads%2Fctables7;hp=37b609dcfb0031aaeb48f9f457c7a13d4d51c3ed;hpb=4daafd79f8b250b1651c1b66a3171a654abf252d;p=pspp diff --git a/src/data/settings.c b/src/data/settings.c index 37b609dcfb..4bc36494fd 100644 --- a/src/data/settings.c +++ b/src/data/settings.c @@ -20,7 +20,6 @@ #include #include -#include #include "data/case.h" #include "data/format.h" @@ -49,11 +48,13 @@ 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; bool include; - int epoch; bool route_errors_to_terminal; bool route_errors_to_listing; bool scompress; @@ -61,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; @@ -73,6 +80,7 @@ struct settings int syntax; struct fmt_settings styles; + double small; enum settings_output_devices output_routing[SETTINGS_N_OUTPUT_TYPES]; @@ -81,55 +89,63 @@ 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 */ - -1, /* epoch */ - 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. */ void settings_init (void) { - settings_set_epoch (-1); settings_set_decimal_char (get_system_decimal ()); } @@ -144,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. */ @@ -293,28 +309,18 @@ 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) { - assert (the_settings.epoch >= 0); - - return the_settings.epoch; + return the_settings.styles.epoch; } /* Sets the year that starts the epoch. */ void settings_set_epoch (int epoch) { - if (epoch < 0) - { - time_t t = time (0); - struct tm *tm = localtime (&t); - epoch = (tm != NULL ? tm->tm_year + 1900 : 2000) - 69; - } - - the_settings.epoch = epoch; - assert (the_settings.epoch >= 0); + the_settings.styles.epoch = epoch; } /* Compress system files by default? */ @@ -400,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 @@ -416,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) @@ -560,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) { - assert (is_fmt_type (type)); - return fmt_settings_get_style (&the_settings.styles, type); + return the_settings.small; +} + +void +settings_set_small (double small) +{ + the_settings.small = small; } /* Returns a string of the form "$#,###.##" according to FMT, @@ -654,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; +}