=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/io/bload.c,v retrieving revision 1.11 retrieving revision 1.16 diff -u -p -r1.11 -r1.16 --- OpenXM_contrib2/asir2000/io/bload.c 2002/01/08 04:14:38 1.11 +++ OpenXM_contrib2/asir2000/io/bload.c 2009/03/16 16:43:03 1.16 @@ -44,26 +44,30 @@ * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. - * $OpenXM: OpenXM_contrib2/asir2000/io/bload.c,v 1.10 2001/10/09 01:36:20 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/io/bload.c,v 1.15 2006/08/09 02:40:47 noro Exp $ */ #include "ca.h" #include "parse.h" #include "com.h" -#if PARI +#if defined(PARI) #include "genpari.h" int get_lg(GEN); #endif extern VL file_vl; +void loadnbp(FILE *s,NBP *p); + void (*loadf[])() = { 0, loadnum, loadp, loadr, loadlist, loadvect, loadmat, - loadstring, 0, loaddp, loadui, loaderror,0,0,0,loadgfmmat, loadbytearray }; + loadstring, 0, loaddp, loadui, loaderror,0,0,0,loadgfmmat, + loadbytearray, 0, 0, 0, 0, 0, 0, 0, 0, loadnbp }; + #if defined(INTERVAL) void loaditv(); void loaditvd(); -void (*nloadf[])() = { loadq, loadreal, 0, loadbf, loaditv, loaditvd, 0, loaditv, loadcplx, loadmi, loadlm, loadgf2n, loadgfpn, loadgfs, loadgfsn }; +void (*nloadf[])() = { loadq, loadreal, 0, loadbf, loaditv, loaditvd, 0, loaditv, loadcplx, loadmi, loadlm, loadgf2n, loadgfpn, loadgfs, loadgfsn, loaddalg }; #else -void (*nloadf[])() = { loadq, loadreal, 0, loadbf, loadcplx, loadmi, loadlm, loadgf2n, loadgfpn, loadgfs, loadgfsn }; +void (*nloadf[])() = { loadq, loadreal, 0, loadbf, loadcplx, loadmi, loadlm, loadgf2n, loadgfpn, loadgfs, loadgfsn, loaddalg }; #endif void loadobj(FILE *s,Obj *p) @@ -120,12 +124,13 @@ void loadreal(FILE *s,Real *p) void loadbf(FILE *s,BF *p) { -#if PARI +#if defined(PARI) GEN z; unsigned int uexpo,lexpo; char dmy; int sign; unsigned int len; + unsigned long expo; BF q; read_char(s,&dmy); @@ -133,7 +138,7 @@ void loadbf(FILE *s,BF *p) read_int(s,&uexpo); read_int(s,&lexpo); -#if defined(LONG_IS_32BIT) +#if SIZEOF_LONG == 4 if ( uexpo ) error("loadbf : exponent too large"); read_int(s,&len); @@ -144,7 +149,7 @@ void loadbf(FILE *s,BF *p) setsigne(z,(long)sign); setexpo(z,(long)lexpo); read_intarray(s,(int *)(z+2),len); -#elif defined(LONG_IS_64BIT) +#elif SIZEOF_LONG == 8 expo = (((UL)uexpo)<<32)|((UL)lexpo); read_int(s,&len); NEWBF(q,(len+5)/2); /* 2+(len+1)/2 */ @@ -265,6 +270,17 @@ void loadgfsn(FILE *s,GFSN *p) MKGFSN(body,*p); } +void loaddalg(FILE *s,DAlg *p) +{ + char dmy; + Obj nm,dn; + + read_char(s,&dmy); + loadobj(s,&nm); + loadobj(s,&dn); + MKDAlg((DP)nm,(Q)dn,*p); +} + void loadp(FILE *s,P *p) { V v; @@ -452,4 +468,22 @@ void loadgfmmat(FILE *s,GFMMAT *p) for ( i = 0; i < row; i++ ) read_intarray(s,a[i],col); *p = mat; +} + +void loadnbp(FILE *s,NBP *p) +{ + int n,i; + NBM m; + NODE r0,r; + + read_int(s,&n); + for ( i = 0, r0 = 0; i < n; i++ ) { + NEWNBM(m); + loadobj(s,(Obj *)&m->c); + read_int(s,&m->d); + NEWNBMBDY(m,m->d); read_intarray(s,m->b,(m->d+31)/32); + NEXTNODE(r0,r); BDY(r) = (pointer)m; + } + if ( r0 ) NEXT(r) = 0; + MKNBP(*p,r0); }