=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/engine/pari.c,v retrieving revision 1.3 retrieving revision 1.9 diff -u -p -r1.3 -r1.9 --- OpenXM_contrib2/asir2000/engine/pari.c 2000/08/22 05:04:06 1.3 +++ OpenXM_contrib2/asir2000/engine/pari.c 2009/03/27 14:42:29 1.9 @@ -45,35 +45,37 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/engine/pari.c,v 1.2 2000/08/21 08:31:28 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/engine/pari.c,v 1.8 2009/03/16 16:43:02 ohara Exp $ */ #include "ca.h" -#if PARI + +#if defined(PARI) #include "base.h" #include #include "genpari.h" -#if defined(THINK_C) void patori(GEN,Obj *); void patori_i(GEN,N *); void ritopa(Obj,GEN *); void ritopa_i(N,int,GEN *); -#else -void patori(); -void patori_i(); -void ritopa(); -void ritopa_i(); -#endif +// PARI_VERSION(2,2,12) == 131596 +#if PARI_VERSION_CODE >= 131596 +#define prec precreal +#endif extern long prec; extern int paristack; -void risa_pari_init() { - char buf[BUFSIZ]; - int i; +long get_pariprec() { + return prec; +} +void set_pariprec(long p) { + prec = p; +} +void risa_pari_init() { pari_init(paristack,2); - prec = 4; + set_pariprec(4); } void create_pari_variable(index) @@ -86,7 +88,11 @@ int index; if ( index > max_varn ) { for ( i = max_varn+1; i <= index; i++ ) { sprintf(name,"x%d",i); +#if (PARI_VERSION_CODE < 131594) fetch_named_var(name,0); +#else + fetch_named_var(name); +#endif } max_varn = index; } @@ -98,6 +104,16 @@ GEN a; return lg(a); } +void gpui_ri(Obj a, Obj e, Obj *c) +{ + GEN pa,pe,z; + int ltop,lbot; + + ltop = avma; ritopa(a,&pa); ritopa(e,&pe); lbot = avma; + z = gerepile(ltop,lbot,gpui(pa,pe,get_pariprec())); + patori(z,c); cgiv(z); +} + void ritopa(a,rp) Obj a; GEN *rp; @@ -256,7 +272,7 @@ Obj *rp; } } -#if defined(LONG_IS_32BIT) +#if SIZEOF_LONG == 4 void ritopa_i(a,s,rp) N a; int s; @@ -291,9 +307,8 @@ N *rp; for ( j = 0, b = (unsigned int *)BD(z); j < l; j++ ) b[l-j-1] = ((unsigned int *)g)[j+2]; } -#endif -#if defined(LONG_IS_64BIT) +#elif SIZEOF_LONG == 8 void ritopa_i(a,s,rp) N a; int s;