=================================================================== RCS file: /home/cvs/OpenXM_contrib/pari-2.2/src/headers/Attic/paricom.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -p -r1.1 -r1.2 --- OpenXM_contrib/pari-2.2/src/headers/Attic/paricom.h 2001/10/02 11:17:07 1.1 +++ OpenXM_contrib/pari-2.2/src/headers/Attic/paricom.h 2002/09/11 07:26:58 1.2 @@ -1,4 +1,4 @@ -/* $Id: paricom.h,v 1.1 2001/10/02 11:17:07 noro Exp $ +/* $Id: paricom.h,v 1.2 2002/09/11 07:26:58 noro Exp $ Copyright (C) 2000 The PARI group. @@ -18,7 +18,39 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, /* PARI header file (common to all versions) */ /* */ /******************************************************************/ +#ifdef STMT_START /* perl headers */ +# undef STMT_START +#endif +#ifdef STMT_END +# undef STMT_END +#endif +/* STMT_START { statements; } STMT_END; + * can be used as a single statement, as in + * if (x) STMT_START { ... } STMT_END; else ... + * [ avoid "dangling else" problem in macros ] */ +#define STMT_START do +#define STMT_END while (0) +/*=====================================================================*/ +/* CATCH(numer) { + * recovery + * } TRY { + * code + * } ENDCATCH + * will execute 'code', then 'recovery' if exception 'numer' is thrown + * [ any exception if numer < 0 ]. + * RETRY = as TRY, but execute 'recovery', then 'code' again [still catching] */ +#define CATCH(err) { \ + VOLATILE long __err = err; \ + jmp_buf __env; \ + void *__catcherr; \ + if (setjmp(__env)) +#define RETRY { __catcherr = err_catch(__err, __env, NULL); { +#define TRY else { __catcherr = err_catch(__err, __env, NULL); { + +#define ENDCATCH }} err_leave(&__catcherr); } +/*=====================================================================*/ + #define bit_accuracy(x) (((x)-2) << TWOPOTBITS_IN_LONG) #define GSTR(x) ((char*) (((GEN) (x)) + 1 )) @@ -39,17 +71,19 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, #define absi mpabs #define negi mpneg #define negr mpneg -#define mpnegz(x,y) {long av=avma;mpaff(mpneg(x),y);avma=av;} -#define mpabsz(x,y) {long av=avma;mpaff(mpabs(x),y);avma=av;} -#define absrz(x,z) mpabsz((x),(z)) -#define negrz(x,z) mpnegz((x),(z)) +#define mpnegz(x,y) \ + STMT_START {gpmem_t av=avma;mpaff(mpneg(x),y);avma=av;} STMT_END +#define mpabsz(x,y) \ + STMT_START {gpmem_t av=avma;mpaff(mpabs(x),y);avma=av;} STMT_END +#define absrz(x,z) mpabsz((x),(z)) +#define negrz(x,z) mpnegz((x),(z)) /* Common global variables: */ extern PariOUT *pariOut, *pariErr; extern FILE *pari_outfile, *logfile, *infile, *errfile; -extern long DEBUGFILES, DEBUGLEVEL, DEBUGMEM, precdl; +extern ulong DEBUGFILES, DEBUGLEVEL, DEBUGMEM, precdl; extern long *ordvar; extern GEN bernzone,gpi,geuler; extern GEN polvar,*polun,*polx,primetab; @@ -58,6 +92,8 @@ extern GEN gun,gdeux,ghalf,gi,gzero; extern const long lontyp[]; extern void* global_err_data; +extern int new_galois_format; + #define MAXITERPOL 10 /* max #of prec increase in polredabs-type operations */ /* let SL = sizeof(long) */ @@ -242,7 +278,7 @@ extern void* global_err_data; #define leading_term(x) ((GEN)(((GEN)(x))[lgef(x)-1])) #define constant_term(x) (signe(x)? ((GEN)(((GEN)(x))[2])): gzero) -#define degpol(a) (lgef(a)-3) +#define degpol(a) ((long)lgef(a)-3) #define evaldeg(d) (evallgef(d+3)) #define odd(x) ((x) & 1) @@ -250,7 +286,6 @@ extern void* global_err_data; #define ONLY_REM ((GEN*)0x1L) #define ONLY_DIVIDES ((GEN*)0x2L) -#define ONLY_DIVIDES_EXACT ((GEN*)0x3L) #define gdeuc(x,y) (poldivres((x),(y),NULL)) #define gres(x,y) (poldivres((x),(y),ONLY_REM)) #define FpX_div(x,y,p) (FpX_divres((x),(y),(p), NULL)) @@ -278,27 +313,9 @@ extern void* global_err_data; #define element_mulmodideal(nf,x,y,ideal) (\ nfreducemodideal((nf),element_mul((nf),(x),(y)),(ideal))\ ) -#define element_mulmodpr(nf,x,y,prhall) (\ - nfreducemodpr((nf),element_mul((nf),(x),(y)),(prhall))\ -) #define element_sqrmodideal(nf,x,ideal) (\ nfreducemodideal((nf),element_sqr((nf),(x)),(ideal))\ ) -#define element_sqrmodpr(nf,x,prhall) (\ - nfreducemodpr((nf),element_sqr((nf),(x)),(prhall))\ -) -#define buchgen(P,gcbach,gcbach2,prec) (\ - buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,0,(prec))\ -) -#define buchgenfu(P,gcbach,gcbach2,prec) (\ - buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,2,(prec))\ -) -#define buchinit(P,gcbach,gcbach2,prec) (\ - buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,-1,(prec))\ -) -#define buchinitfu(P,gcbach,gcbach2,prec) (\ - buchall((P),(gcbach),(gcbach2),stoi(5),gzero,4,3,-2,(prec))\ -) /* output of get_nf and get_bnf */ #define typ_NULL 0 @@ -316,3 +333,9 @@ extern void* global_err_data; #define cmp_LEX 2 #define cmp_REV 4 #define cmp_C 8 + +#define DIFFPTR_SKIP 255 /* Skip these entries */ +#define NEXT_PRIME_VIADIFF(p,d) \ + { while (*(d) == DIFFPTR_SKIP) (p) += *(d)++; (p) += *(d)++; } +#define NEXT_PRIME_VIADIFF_CHECK(p,d) \ + { if (!*(d)) err(primer1); NEXT_PRIME_VIADIFF(p,d) }