X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fset.q;h=89ce0383c665ccffb47f6c01587f2307b10c9f57;hb=067d02c2b8c591efc368cf5127c497313d7a373f;hp=3c1b38d5af50f77170c22efbae9cae1b33fb53f4;hpb=92bfefccd465052e492f669ce561aa25b0110283;p=pspp diff --git a/src/set.q b/src/set.q index 3c1b38d5af..89ce0383c6 100644 --- a/src/set.q +++ b/src/set.q @@ -64,6 +64,7 @@ #include #include #include +#include #include "alloc.h" #include "command.h" #include "lexer.h" @@ -74,7 +75,6 @@ #include "var.h" #include "format.h" #include "copyleft.h" -#include "random.h" #include "signal.h" @@ -106,8 +106,7 @@ static int set_listing=1; static char *set_pager=0; #endif /* !USE_INTERNAL_PAGER */ -static unsigned long set_seed; -static int seed_flag=0; +static gsl_rng *rng; static int long_view=0; int set_testing_mode=0; @@ -122,6 +121,9 @@ static void set_routing (int q, int *setting); static int set_ccx (const char *cc_string, struct set_cust_currency * cc, int cc_name); +static void set_rng (unsigned long); +static unsigned long random_seed (void); + /* (specification) "SET" (stc_): automenu=automenu:on/off; @@ -301,7 +303,6 @@ aux_stc_custom_results(struct cmd_set *cmd UNUSED) static int aux_stc_custom_seed(struct cmd_set *cmd UNUSED) { - msg(MM, "%ld",set_seed); return 0; } @@ -704,15 +705,14 @@ stc_custom_seed (struct cmd_set *cmd UNUSED) { lex_match ('='); if (lex_match_id ("RANDOM")) - set_seed = random_seed(); + set_rng (random_seed ()); else { if (!lex_force_num ()) return 0; - set_seed = tokval; + set_rng (tokval); lex_get (); } - seed_flag = 1; return 1; } @@ -1051,6 +1051,22 @@ set_viewport(int sig_num UNUSED) /* Public functions */ +void +done_settings(void) +{ + if ( rng ) + gsl_rng_free (rng); + free (set_pager); + free (set_journal); + + free (cmd.s_endcmd); + free (cmd.s_prompt); + free (cmd.s_cprompt); + free (cmd.s_dprompt); +} + + + void init_settings(void) { @@ -1063,8 +1079,8 @@ init_settings(void) cmd.safe = STC_OFF; cmd.dec = STC_DOT; - cmd.n_cpi = 6; - cmd.n_lpi = 10; + cmd.n_cpi[0] = 6; + cmd.n_lpi[0] = 10; cmd.echo = STC_OFF; cmd.more = STC_ON; cmd.headers = STC_YES; @@ -1080,18 +1096,18 @@ init_settings(void) set_journal = xstrdup ("pspp.jnl"); set_journaling = 1; - cmd.n_mxwarns = 100; - cmd.n_mxerrs = 100; - cmd.n_mxloops = 1; - cmd.n_workspace = 4L * 1024 * 1024; + cmd.n_mxwarns[0] = 100; + cmd.n_mxerrs[0] = 100; + cmd.n_mxloops[0] = 1; + cmd.n_workspace[0] = 4L * 1024 * 1024; #if !USE_INTERNAL_PAGER { - char *pager; + const char *pager = getenv ("STAT_PAGER"); - pager = getenv ("STAT_PAGER"); - if (!pager) set_pager = getenv ("PAGER"); + if (!pager) + set_pager = xstrdup (getenv ("PAGER") ); if (pager) set_pager = xstrdup (pager); @@ -1211,13 +1227,13 @@ get_undefined(void) int get_mxwarns(void) { - return cmd.n_mxwarns; + return cmd.n_mxwarns[0]; } int get_mxerrs(void) { - return cmd.n_mxerrs; + return cmd.n_mxerrs[0]; } int @@ -1235,7 +1251,7 @@ get_printback(void) int get_mxloops(void) { - return cmd.n_mxloops; + return cmd.n_mxloops[0]; } int @@ -1260,7 +1276,7 @@ get_endcmd(void) size_t get_max_workspace(void) { - return cmd.n_workspace; + return cmd.n_workspace[0]; } double @@ -1313,26 +1329,28 @@ get_pager(void) return set_pager; } -/* Return 1 if the seed has been set since the last time this function - was called. - Fill the value pointed to by seed with the seed . -*/ -int -seed_is_set(unsigned long *seed) +gsl_rng * +get_rng (void) { - int result = 0; - - *seed = set_seed ; - - if ( seed_flag ) - result = 1; - - seed_flag = 0; + if (rng == NULL) + set_rng (random_seed ()); + return rng; +} - return result; - +static void +set_rng (unsigned long seed) +{ + rng = gsl_rng_alloc (gsl_rng_mt19937); + if (rng == NULL) + out_of_memory (); + gsl_rng_set (rng, seed); } +static unsigned long +random_seed (void) +{ + return time (0); +} static int global_algorithm = ENHANCED; static int cmd_algorithm = ENHANCED;