=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/io/bload.c,v retrieving revision 1.2 retrieving revision 1.17 diff -u -p -r1.2 -r1.17 --- OpenXM_contrib2/asir2000/io/bload.c 2000/08/21 08:31:38 1.2 +++ OpenXM_contrib2/asir2000/io/bload.c 2015/08/04 06:20:45 1.17 @@ -23,7 +23,7 @@ * shall be made on your publication or presentation in any form of the * results obtained by use of the SOFTWARE. * (4) In the event that you modify the SOFTWARE, you shall notify FLL by - * e-mail at risa-admin@flab.fujitsu.co.jp of the detailed specification + * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification * for such modification or the source code of the modified part of the * SOFTWARE. * @@ -44,50 +44,29 @@ * 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.1.1.1 1999/12/03 07:39:11 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/io/bload.c,v 1.16 2009/03/16 16:43:03 ohara Exp $ */ #include "ca.h" #include "parse.h" -#if INET #include "com.h" -#endif -#if PARI -#include "genpari.h" -int get_lg(GEN); -#endif -void loaderror(FILE *,ERR *); -void loadui(FILE *,USINT *); -void loaddp(FILE *,DP *); -void loadstr(FILE *,char **); -void loadstring(FILE *,STRING *); -void loadmat(FILE *,MAT *); -void loadvect(FILE *,VECT *); -void loadlist(FILE *,LIST *); -void loadr(FILE *,R *); -void loadp(FILE *,P *); -void loadgf2n(FILE *,GF2N *); -void loadgfpn(FILE *,GFPN *); -void loadlm(FILE *,LM *); -void loadmi(FILE *,MQ *); -void loadcplx(FILE *,C *); -void loadbf(FILE *,BF *); -void loadreal(FILE *,Real *); -void loadq(FILE *,Q *); -void loadnum(FILE *,Num *); -void loadgfmmat(FILE *,GFMMAT *); - -V loadpfins(FILE *); - 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 }; -void (*nloadf[])() = { loadq, loadreal, 0, loadbf, loadcplx, loadmi, loadlm, loadgf2n, loadgfpn }; + loadstring, 0, loaddp, loadui, loaderror,0,0,0,loadgfmmat, + loadbytearray, 0, 0, 0, 0, 0, 0, 0, 0, loadnbp }; -void loadobj(s,p) -FILE *s; -Obj *p; +#if defined(INTERVAL) +void loaditv(); +void loaditvd(); +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, loaddalg }; +#endif + +void loadobj(FILE *s,Obj *p) { short id; @@ -100,9 +79,7 @@ Obj *p; (*loadf[id])(s,p); } -void loadnum(s,p) -FILE *s; -Num *p; +void loadnum(FILE *s,Num *p) { char nid; @@ -113,9 +90,7 @@ Num *p; (*nloadf[nid])(s,p); } -void loadq(s,p) -FILE *s; -Q *p; +void loadq(FILE *s,Q *p) { int size[2]; char sgn; @@ -133,9 +108,7 @@ Q *p; NDTOQ(nm,dn,sgn,*p); } -void loadreal(s,p) -FILE *s; -Real *p; +void loadreal(FILE *s,Real *p) { Real q; char dmy; @@ -145,56 +118,57 @@ Real *p; *p = q; } -void loadbf(s,p) -FILE *s; -BF *p; +void loadbf(FILE *s,BF *p) { -#if PARI - GEN z; - unsigned int uexpo,lexpo; - UL expo; - char dmy; - int sign; - unsigned int len; - BF q; + BF r; + char dmy; + int sgn,prec; + UL exp; + int len; read_char(s,&dmy); - read_int(s,&sign); - read_int(s,&uexpo); - read_int(s,&lexpo); - -#if defined(LONG_IS_32BIT) - if ( uexpo ) - error("loadbf : exponent too large"); + NEWBF(r); + read_int(s,&sgn); + read_int(s,&prec); + read_int64(s,&exp); read_int(s,&len); - NEWBF(q,len+2); - z = (GEN)BDY(q); - settyp(z,t_REAL); - setlg(z,len+2); - setsigne(z,(long)sign); - setexpo(z,(long)lexpo); - read_intarray(s,(int *)(z+2),len); -#elif defined(LONG_IS_64BIT) - expo = (((UL)uexpo)<<32)|((UL)lexpo); - read_int(s,&len); - NEWBF(q,(len+5)/2); /* 2+(len+1)/2 */ - z = (GEN)BDY(q); - settyp(z,t_REAL); - setlg(z,(len+5)/2); - setsigne(z,(long)sign); - setexpo(z,(long)expo); - read_longarray(s,z+2,len); + mpfr_init2(r->body,prec); + MPFR_SIGN(r->body) = sgn; + MPFR_EXP(r->body) = (int)exp; +#if SIZEOF_LONG == 4 + read_intarray(s,(int *)r->body->_mpfr_d,len); +#else /* SIZEOF_LONG == 8 */ + read_longarray(s,(long *)r->body->_mpfr_d,len); #endif + *p = r; +} + +#if defined(INTERVAL) +void loaditv(FILE *s,Itv *p) +{ + Itv q; + char dmy; + + read_char(s,&dmy); + NEWItvP(q); loadobj(s,(Obj *)&INF(q)); loadobj(s,(Obj *)&SUP(q)); *p = q; -#else - error("loadbf : PARI is not combined"); -#endif } -void loadcplx(s,p) -FILE *s; -C *p; +void loaditvd(FILE *s,IntervalDouble *p) { + IntervalDouble q; + char dmy; + + read_char(s,&dmy); + NEWIntervalDouble(q); + read_double(s,&INF(q)); + read_double(s,&SUP(q)); + *p = q; +} +#endif + +void loadcplx(FILE *s,C *p) +{ C q; char dmy; @@ -203,9 +177,7 @@ C *p; *p = q; } -void loadmi(s,p) -FILE *s; -MQ *p; +void loadmi(FILE *s,MQ *p) { MQ q; char dmy; @@ -215,9 +187,7 @@ MQ *p; *p = q; } -void loadlm(s,p) -FILE *s; -LM *p; +void loadlm(FILE *s,LM *p) { int size; char dmy; @@ -229,9 +199,7 @@ LM *p; MKLM(body,*p); } -void loadgf2n(s,p) -FILE *s; -GF2N *p; +void loadgf2n(FILE *s,GF2N *p) { char dmy; int len; @@ -243,9 +211,7 @@ GF2N *p; MKGF2N(body,*p); } -void loadgfpn(s,p) -FILE *s; -GFPN *p; +void loadgfpn(FILE *s,GFPN *p) { char dmy; int d,i; @@ -259,10 +225,41 @@ GFPN *p; MKGFPN(body,*p); } -void loadp(s,p) -FILE *s; -P *p; +void loadgfs(FILE *s,GFS *p) { + GFS q; + char dmy; + + read_char(s,&dmy); + NEWGFS(q); read_int(s,(int *)&CONT(q)); + *p = q; +} + +void loadgfsn(FILE *s,GFSN *p) +{ + char dmy; + int d; + UM body; + + read_char(s,&dmy); read_int(s,&d); + body = UMALLOC(d); DEG(body) = d; + read_intarray(s,COEF(body),d+1); + 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; int n,vindex; DCP dc,dc0; @@ -288,8 +285,7 @@ P *p; /* |name(str)|argc(int)|darray(intarray)|args| */ -V loadpfins(s) -FILE *s; +V loadpfins(FILE *s) { char *name; FUNC fp; @@ -327,9 +323,7 @@ FILE *s; return v; } -void loadr(s,p) -FILE *s; -R *p; +void loadr(FILE *s,R *p) { R r; @@ -337,9 +331,7 @@ R *p; loadobj(s,(Obj *)&NM(r)); loadobj(s,(Obj *)&DN(r)); *p = r; } -void loadlist(s,p) -FILE *s; -LIST *p; +void loadlist(FILE *s,LIST *p) { int n; NODE tn,tn0; @@ -353,9 +345,7 @@ LIST *p; MKLIST(*p,tn0); } -void loadvect(s,p) -FILE *s; -VECT *p; +void loadvect(FILE *s,VECT *p) { int i,len; VECT vect; @@ -366,9 +356,7 @@ VECT *p; *p = vect; } -void loadmat(s,p) -FILE *s; -MAT *p; +void loadmat(FILE *s,MAT *p) { int row,col,i,j; MAT mat; @@ -380,18 +368,14 @@ MAT *p; *p = mat; } -void loadstring(s,p) -FILE *s; -STRING *p; +void loadstring(FILE *s,STRING *p) { char *t; loadstr(s,&t); MKSTR(*p,t); } -void loadstr(s,p) -FILE *s; -char **p; +void loadstr(FILE *s,char **p) { int len; char *t; @@ -404,10 +388,21 @@ char **p; *p = t; } -void loaddp(s,p) -FILE *s; -DP *p; +void loadbytearray(FILE *s,BYTEARRAY *p) { + int len; + BYTEARRAY array; + + read_int(s,&len); + MKBYTEARRAY(array,len); + if ( len ) { + read_string(s,array->body,len); + } + *p = array; +} + +void loaddp(FILE *s,DP *p) +{ int nv,n,i,sugar; DP dp; MP m,m0; @@ -423,18 +418,14 @@ DP *p; NEXT(m) = 0; MKDP(nv,m0,dp); dp->sugar = sugar; *p = dp; } -void loadui(s,u) -FILE *s; -USINT *u; +void loadui(FILE *s,USINT *u) { unsigned int b; read_int(s,&b); MKUSINT(*u,b); } -void loaderror(s,e) -FILE *s; -ERR *e; +void loaderror(FILE *s,ERR *e) { Obj b; @@ -442,11 +433,9 @@ ERR *e; } -void loadgfmmat(s,p) -FILE *s; -GFMMAT *p; +void loadgfmmat(FILE *s,GFMMAT *p) { - int i,j,row,col; + int i,row,col; unsigned int **a; GFMMAT mat; @@ -456,4 +445,22 @@ 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); }