Bill Allombert on Sat, 26 Nov 2005 19:29:02 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: pari_init and programs using libpari. |
On Tue, May 17, 2005 at 02:37:52PM +0200, Bill Allombert wrote: > Hello pari-dev, > > We are considering adding a new function as an optionnal replacement for > pari_init. The idea is to add a flag that would let the user some > behaviour of pari_init tpht might interfer with the program, in > particular the installation of a signa handler. So the attached patch adds a function void pari_init_opts(size_t parisize, ulong maxprime, ulong init_opts); parisize and maxprime are as usual, init_opts is a bitmask: INIT_JMPm: Set error handler setjmp INIT_SIGm: Set up signal handling Cheers, Bill.
Index: src/gp/gp.c =================================================================== RCS file: /home/cvs/pari/src/gp/gp.c,v retrieving revision 1.279 diff -u -r1.279 gp.c --- src/gp/gp.c 22 Nov 2005 09:23:06 -0000 1.279 +++ src/gp/gp.c 26 Nov 2005 18:07:14 -0000 @@ -812,7 +812,7 @@ { free_graph(); freeall(); kill_all_buffers(NULL); - if (INIT_SIG) pari_sig_init(SIG_DFL); + pari_sig_init(SIG_DFL); term_color(c_NONE); pariputs_opt("Goodbye!\n"); if (GP_DATA->flags & TEXMACS) tm_end_output(); @@ -1845,9 +1845,7 @@ pari_addfunctions(&pari_oldmodules, functions_oldgp,helpmessages_oldgp); init_graph(); - INIT_SIG_off; - pari_init(top-bot, GP_DATA->primelimit); - INIT_SIG_on; + pari_init_opts(top-bot, GP_DATA->primelimit, 0); pari_sig_init(gp_sighandler); #ifdef READLINE init_readline(); Index: src/headers/paridecl.h =================================================================== RCS file: /home/cvs/pari/src/headers/paridecl.h,v retrieving revision 1.540 diff -u -r1.540 paridecl.h --- src/headers/paridecl.h 26 Nov 2005 14:29:22 -0000 1.540 +++ src/headers/paridecl.h 26 Nov 2005 18:07:15 -0000 @@ -1243,6 +1243,7 @@ void msgtimer(char *format, ...); GEN newbloc(long n); void pari_err(long numerr, ...); +void pari_init_opts(size_t parisize, ulong maxprime, ulong init_opts); void pari_init(size_t parisize, ulong maxprime); void pari_sig_init(void (*f)(int)); GEN reorder(GEN x); Index: src/language/anal.h =================================================================== RCS file: /home/cvs/pari/src/language/anal.h,v retrieving revision 1.77 diff -u -r1.77 anal.h --- src/language/anal.h 10 Nov 2005 14:57:30 -0000 1.77 +++ src/language/anal.h 26 Nov 2005 18:07:15 -0000 @@ -136,15 +136,10 @@ enum { EpUSER = 100, EpNEW, EpALIAS, EpVAR, EpGVAR, EpMEMBER, EpINSTALL }; /* signals */ -extern ulong init_opts; #define INIT_JMPm 1 #define INIT_SIGm 2 #define INIT_JMP (init_opts & INIT_JMPm) #define INIT_SIG (init_opts & INIT_SIGm) -#define INIT_JMP_on (init_opts |= INIT_JMPm) -#define INIT_SIG_on (init_opts |= INIT_SIGm) -#define INIT_JMP_off (init_opts &= ~INIT_JMPm) -#define INIT_SIG_off (init_opts &= ~INIT_SIGm) /* defaults */ char* get_sep(const char *t); Index: src/language/init.c =================================================================== RCS file: /home/cvs/pari/src/language/init.c,v retrieving revision 1.282 diff -u -r1.282 init.c --- src/language/init.c 26 Nov 2005 13:30:58 -0000 1.282 +++ src/language/init.c 26 Nov 2005 18:07:15 -0000 @@ -47,7 +47,6 @@ long *ordvar; ulong DEBUGFILES, DEBUGLEVEL, DEBUGMEM, compatible; ulong precreal, precdl; -ulong init_opts = INIT_JMPm | INIT_SIGm; pari_sp bot = 0, top = 0, avma; size_t memused; @@ -638,7 +637,7 @@ /* initialize PARI data. You can call pari_addfunctions() first to add other * routines to the default set */ void -pari_init(size_t parisize, ulong maxprime) +pari_init_opts(size_t parisize, ulong maxprime, ulong init_opts) { ulong u; @@ -687,6 +686,12 @@ (void)manage_var(manage_var_init,NULL); /* init nvar */ var_not_changed = 1; (void)fetch_named_var("x"); try_to_recover = 1; +} + +void +pari_init(size_t parisize, ulong maxprime) +{ + pari_init_opts(parisize, maxprime, INIT_JMPm | INIT_SIGm); } static void