X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Futilities%2Fset.q;h=30f3c56e578fda7ed4c7b6ba79d5058c4bbb07ed;hb=e937634e9021aa0656a6362f169ec2183efed499;hp=3c0109cce89b4a1023640b08608a460934597dba;hpb=66946a0a0cab3a51e6fded95aef4e991baee319f;p=pspp diff --git a/src/language/utilities/set.q b/src/language/utilities/set.q index 3c0109cce8..30f3c56e57 100644 --- a/src/language/utilities/set.q +++ b/src/language/utilities/set.q @@ -923,6 +923,45 @@ cmd_show (struct lexer *lexer, struct dataset *ds) return CMD_SUCCESS; } + +#define MAX_SAVED_SETTINGS 5 + +static struct settings *saved_settings[MAX_SAVED_SETTINGS]; +static int n_saved_settings; + +int +cmd_preserve (struct lexer *lexer, struct dataset *ds UNUSED) +{ + if (n_saved_settings < MAX_SAVED_SETTINGS) + { + saved_settings[n_saved_settings++] = settings_get (); + return lex_end_of_command (lexer); + } + else + { + msg (SE, _("Too many PRESERVE commands without a RESTORE: at most " + "%d levels of saved settings are allowed."), + MAX_SAVED_SETTINGS); + return CMD_CASCADING_FAILURE; + } +} + +int +cmd_restore (struct lexer *lexer, struct dataset *ds UNUSED) +{ + if (n_saved_settings > 0) + { + struct settings *s = saved_settings[--n_saved_settings]; + settings_set (s); + settings_destroy (s); + return lex_end_of_command (lexer); + } + else + { + msg (SE, _("RESTORE without matching PRESERVE.")); + return CMD_FAILURE; + } +} /* Local Variables: