X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fsettings.c;h=c70635cec03fc06da0dd7c472a8da626e2010fd6;hb=b7f672dd5f58c5891d7845871a13f20240eb9edf;hp=bcedc4172469463954c73758bd124edf40703511;hpb=eeb5800b97c3d4e768fb3f7cbdabf54b3bd162b4;p=pspp diff --git a/src/data/settings.c b/src/data/settings.c index bcedc41724..c70635cec0 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,12 +62,19 @@ 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; bool testing_mode; int fuzzbits; + int scalemin; int cmd_algorithm; int global_algorithm; @@ -80,48 +90,58 @@ 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 */ - { .type = FMT_F, .w = 8, .d = 2 }, /* default_format */ - false, /* testing_mode */ - 6, /* fuzzbits */ - ENHANCED, /* cmd_algorithm */ - ENHANCED, /* global_algorithm */ - ENHANCED, /* syntax */ - FMT_SETTINGS_INIT, /* styles */ - .0001, /* small */ + .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, + .scalemin = 24, + .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. */ @@ -291,6 +311,13 @@ settings_set_include (bool include) the_settings.include = include; } +/* Returns the year that starts the epoch. */ +int +settings_get_epoch (void) +{ + return the_settings.styles.epoch; +} + /* Sets the year that starts the epoch. */ void settings_set_epoch (int epoch) @@ -381,6 +408,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 @@ -397,6 +438,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) @@ -480,6 +550,18 @@ settings_set_fuzzbits (int fuzzbits) the_settings.fuzzbits = fuzzbits; } +int +settings_get_scalemin (void) +{ + return the_settings.scalemin; +} + +void +settings_set_scalemin (int scalemin) +{ + the_settings.scalemin = scalemin; +} + /* Return the current algorithm setting */ enum behavior_mode settings_get_algorithm (void) @@ -547,6 +629,12 @@ settings_set_decimal_char (char decimal) the_settings.styles.decimal = decimal; } +void +settings_set_include_leading_zero (bool include_leading_zero) +{ + the_settings.styles.include_leading_zero = include_leading_zero; +} + const struct fmt_settings * settings_get_fmt_settings (void) { @@ -637,3 +725,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; +}