Annotation of OpenXM_contrib2/asir2000/io/bload.c, Revision 1.1
1.1 ! noro 1: /* $OpenXM: OpenXM/src/asir99/io/bload.c,v 1.1.1.1 1999/11/10 08:12:30 noro Exp $ */
! 2: #include "ca.h"
! 3: #include "parse.h"
! 4: #if INET
! 5: #include "com.h"
! 6: #endif
! 7: #if PARI
! 8: #include "genpari.h"
! 9: int get_lg(GEN);
! 10: #endif
! 11:
! 12: void loaderror(FILE *,ERR *);
! 13: void loadui(FILE *,USINT *);
! 14: void loaddp(FILE *,DP *);
! 15: void loadstr(FILE *,char **);
! 16: void loadstring(FILE *,STRING *);
! 17: void loadmat(FILE *,MAT *);
! 18: void loadvect(FILE *,VECT *);
! 19: void loadlist(FILE *,LIST *);
! 20: void loadr(FILE *,R *);
! 21: void loadp(FILE *,P *);
! 22: void loadgf2n(FILE *,GF2N *);
! 23: void loadgfpn(FILE *,GFPN *);
! 24: void loadlm(FILE *,LM *);
! 25: void loadmi(FILE *,MQ *);
! 26: void loadcplx(FILE *,C *);
! 27: void loadbf(FILE *,BF *);
! 28: void loadreal(FILE *,Real *);
! 29: void loadq(FILE *,Q *);
! 30: void loadnum(FILE *,Num *);
! 31: void loadgfmmat(FILE *,GFMMAT *);
! 32:
! 33: V loadpfins(FILE *);
! 34:
! 35: extern VL file_vl;
! 36:
! 37: void (*loadf[])() = { 0, loadnum, loadp, loadr, loadlist, loadvect, loadmat,
! 38: loadstring, 0, loaddp, loadui, loaderror,0,0,0,loadgfmmat };
! 39: void (*nloadf[])() = { loadq, loadreal, 0, loadbf, loadcplx, loadmi, loadlm, loadgf2n, loadgfpn };
! 40:
! 41: void loadobj(s,p)
! 42: FILE *s;
! 43: Obj *p;
! 44: {
! 45: short id;
! 46:
! 47: read_short(s,&id);
! 48: if ( !id )
! 49: *p = 0;
! 50: else if ( !loadf[id] )
! 51: error("loadobj : not implemented");
! 52: else
! 53: (*loadf[id])(s,p);
! 54: }
! 55:
! 56: void loadnum(s,p)
! 57: FILE *s;
! 58: Num *p;
! 59: {
! 60: char nid;
! 61:
! 62: read_char(s,&nid);
! 63: if ( !nloadf[nid] )
! 64: error("loadnum : not implemented");
! 65: else
! 66: (*nloadf[nid])(s,p);
! 67: }
! 68:
! 69: void loadq(s,p)
! 70: FILE *s;
! 71: Q *p;
! 72: {
! 73: int size[2];
! 74: char sgn;
! 75: int len = 2;
! 76: N nm,dn;
! 77:
! 78: read_char(s,&sgn); read_intarray(s,size,len);
! 79: nm = NALLOC(size[0]); PL(nm) = size[0];
! 80: read_intarray(s,BD(nm),size[0]);
! 81: if ( size[1] ) {
! 82: dn = NALLOC(size[1]); PL(dn) = size[1];
! 83: read_intarray(s,BD(dn),size[1]);
! 84: } else
! 85: dn = 0;
! 86: NDTOQ(nm,dn,sgn,*p);
! 87: }
! 88:
! 89: void loadreal(s,p)
! 90: FILE *s;
! 91: Real *p;
! 92: {
! 93: Real q;
! 94: char dmy;
! 95:
! 96: read_char(s,&dmy);
! 97: NEWReal(q); read_double(s,&BDY(q));
! 98: *p = q;
! 99: }
! 100:
! 101: void loadbf(s,p)
! 102: FILE *s;
! 103: BF *p;
! 104: {
! 105: #if PARI
! 106: GEN z;
! 107: unsigned int uexpo,lexpo;
! 108: UL expo;
! 109: char dmy;
! 110: int sign;
! 111: unsigned int len;
! 112: BF q;
! 113:
! 114: read_char(s,&dmy);
! 115: read_int(s,&sign);
! 116: read_int(s,&uexpo);
! 117: read_int(s,&lexpo);
! 118:
! 119: #if defined(LONG_IS_32BIT)
! 120: if ( uexpo )
! 121: error("loadbf : exponent too large");
! 122: read_int(s,&len);
! 123: NEWBF(q,len+2);
! 124: z = (GEN)BDY(q);
! 125: settyp(z,t_REAL);
! 126: setlg(z,len+2);
! 127: setsigne(z,(long)sign);
! 128: setexpo(z,(long)lexpo);
! 129: read_intarray(s,(int *)(z+2),len);
! 130: #elif defined(LONG_IS_64BIT)
! 131: expo = (((UL)uexpo)<<32)|((UL)lexpo);
! 132: read_int(s,&len);
! 133: NEWBF(q,(len+5)/2); /* 2+(len+1)/2 */
! 134: z = (GEN)BDY(q);
! 135: settyp(z,t_REAL);
! 136: setlg(z,(len+5)/2);
! 137: setsigne(z,(long)sign);
! 138: setexpo(z,(long)expo);
! 139: read_longarray(s,z+2,len);
! 140: #endif
! 141: *p = q;
! 142: #else
! 143: error("loadbf : PARI is not combined");
! 144: #endif
! 145: }
! 146:
! 147: void loadcplx(s,p)
! 148: FILE *s;
! 149: C *p;
! 150: {
! 151: C q;
! 152: char dmy;
! 153:
! 154: read_char(s,&dmy);
! 155: NEWC(q); loadobj(s,(Obj *)&q->r); loadobj(s,(Obj *)&q->i);
! 156: *p = q;
! 157: }
! 158:
! 159: void loadmi(s,p)
! 160: FILE *s;
! 161: MQ *p;
! 162: {
! 163: MQ q;
! 164: char dmy;
! 165:
! 166: read_char(s,&dmy);
! 167: NEWMQ(q); read_int(s,(int *)&CONT(q));
! 168: *p = q;
! 169: }
! 170:
! 171: void loadlm(s,p)
! 172: FILE *s;
! 173: LM *p;
! 174: {
! 175: int size;
! 176: char dmy;
! 177: N body;
! 178:
! 179: read_char(s,&dmy); read_int(s,&size);
! 180: body = NALLOC(size); PL(body) = size;
! 181: read_intarray(s,BD(body),size);
! 182: MKLM(body,*p);
! 183: }
! 184:
! 185: void loadgf2n(s,p)
! 186: FILE *s;
! 187: GF2N *p;
! 188: {
! 189: char dmy;
! 190: int len;
! 191: UP2 body;
! 192:
! 193: read_char(s,&dmy); read_int(s,&len);
! 194: NEWUP2(body,len); body->w = len;
! 195: read_intarray(s,body->b,len);
! 196: MKGF2N(body,*p);
! 197: }
! 198:
! 199: void loadgfpn(s,p)
! 200: FILE *s;
! 201: GFPN *p;
! 202: {
! 203: char dmy;
! 204: int d,i;
! 205: UP body;
! 206:
! 207: read_char(s,&dmy); read_int(s,&d);
! 208: body = UPALLOC(d);
! 209: body->d = d;
! 210: for ( i = 0; i <= d; i++ )
! 211: loadobj(s,(Obj *)&body->c[i]);
! 212: MKGFPN(body,*p);
! 213: }
! 214:
! 215: void loadp(s,p)
! 216: FILE *s;
! 217: P *p;
! 218: {
! 219: V v;
! 220: int n,vindex;
! 221: DCP dc,dc0;
! 222: P t;
! 223:
! 224: read_int(s,&vindex);
! 225: if ( vindex < 0 )
! 226: /* v is a pure function */
! 227: v = loadpfins(s);
! 228: else
! 229: v = (V)load_convv(vindex);
! 230: read_int(s,&n);
! 231: for ( dc0 = 0; n; n-- ) {
! 232: NEXTDC(dc0,dc); loadobj(s,(Obj *)&DEG(dc)); loadobj(s,(Obj *)&COEF(dc));
! 233: }
! 234: NEXT(dc) = 0;
! 235: MKP(v,dc0,t);
! 236: if ( vindex < 0 || file_vl )
! 237: reorderp(CO,file_vl,t,p);
! 238: else
! 239: *p = t;
! 240: }
! 241:
! 242: /* |name(str)|argc(int)|darray(intarray)|args| */
! 243:
! 244: V loadpfins(s)
! 245: FILE *s;
! 246: {
! 247: char *name;
! 248: FUNC fp;
! 249: int argc,i;
! 250: V v;
! 251: int *darray;
! 252: Obj *args;
! 253: PF pf;
! 254: char *buf;
! 255: V *a;
! 256: P u;
! 257:
! 258: loadstr(s,&name);
! 259: read_int(s,&argc);
! 260: searchpf(name,&fp);
! 261: if ( fp ) {
! 262: pf = fp->f.puref;
! 263: if ( pf->argc != argc )
! 264: error("loadpfins : argument mismatch");
! 265: } else {
! 266: a = (V *)MALLOC(argc*sizeof(V));
! 267: buf = (char *)ALLOCA(BUFSIZ);
! 268: for ( i = 0; i < argc; i++ ) {
! 269: sprintf(buf,"_%c",'a'+i);
! 270: makevar(buf,&u); a[i] = VR(u);
! 271: }
! 272: mkpf(name,0,argc,a,0,0,0,&pf);
! 273: }
! 274: darray = (int *)ALLOCA(argc*sizeof(int));
! 275: args = (Obj *)ALLOCA(argc*sizeof(int));
! 276: read_intarray(s,darray,argc);
! 277: for ( i = 0; i < argc; i++ )
! 278: loadobj(s,&args[i]);
! 279: _mkpfins_with_darray(pf,args,darray,&v);
! 280: return v;
! 281: }
! 282:
! 283: void loadr(s,p)
! 284: FILE *s;
! 285: R *p;
! 286: {
! 287: R r;
! 288:
! 289: NEWR(r); read_short(s,&r->reduced);
! 290: loadobj(s,(Obj *)&NM(r)); loadobj(s,(Obj *)&DN(r)); *p = r;
! 291: }
! 292:
! 293: void loadlist(s,p)
! 294: FILE *s;
! 295: LIST *p;
! 296: {
! 297: int n;
! 298: NODE tn,tn0;
! 299:
! 300: read_int(s,&n);
! 301: for ( tn0 = 0; n; n-- ) {
! 302: NEXTNODE(tn0,tn); loadobj(s,(Obj *)&BDY(tn));
! 303: }
! 304: if ( tn0 )
! 305: NEXT(tn) = 0;
! 306: MKLIST(*p,tn0);
! 307: }
! 308:
! 309: void loadvect(s,p)
! 310: FILE *s;
! 311: VECT *p;
! 312: {
! 313: int i,len;
! 314: VECT vect;
! 315:
! 316: read_int(s,&len); MKVECT(vect,len);
! 317: for ( i = 0; i < len; i++ )
! 318: loadobj(s,(Obj *)&BDY(vect)[i]);
! 319: *p = vect;
! 320: }
! 321:
! 322: void loadmat(s,p)
! 323: FILE *s;
! 324: MAT *p;
! 325: {
! 326: int row,col,i,j;
! 327: MAT mat;
! 328:
! 329: read_int(s,&row); read_int(s,&col); MKMAT(mat,row,col);
! 330: for ( i = 0; i < row; i++ )
! 331: for ( j = 0; j < col; j++ )
! 332: loadobj(s,(Obj *)&BDY(mat)[i][j]);
! 333: *p = mat;
! 334: }
! 335:
! 336: void loadstring(s,p)
! 337: FILE *s;
! 338: STRING *p;
! 339: {
! 340: char *t;
! 341:
! 342: loadstr(s,&t); MKSTR(*p,t);
! 343: }
! 344:
! 345: void loadstr(s,p)
! 346: FILE *s;
! 347: char **p;
! 348: {
! 349: int len;
! 350: char *t;
! 351:
! 352: read_int(s,&len);
! 353: if ( len ) {
! 354: t = (char *)MALLOC(len+1); read_string(s,t,len); t[len] = 0;
! 355: } else
! 356: t = "";
! 357: *p = t;
! 358: }
! 359:
! 360: void loaddp(s,p)
! 361: FILE *s;
! 362: DP *p;
! 363: {
! 364: int nv,n,i,sugar;
! 365: DP dp;
! 366: MP m,m0;
! 367: DL dl;
! 368:
! 369: read_int(s,&nv); read_int(s,&sugar); read_int(s,&n);
! 370: for ( i = 0, m0 = 0; i < n; i++ ) {
! 371: NEXTMP(m0,m);
! 372: loadobj(s,(Obj *)&(m->c));
! 373: NEWDL(dl,nv); m->dl = dl;
! 374: read_int(s,&dl->td); read_intarray(s,&(dl->d[0]),nv);
! 375: }
! 376: NEXT(m) = 0; MKDP(nv,m0,dp); dp->sugar = sugar; *p = dp;
! 377: }
! 378:
! 379: void loadui(s,u)
! 380: FILE *s;
! 381: USINT *u;
! 382: {
! 383: unsigned int b;
! 384:
! 385: read_int(s,&b); MKUSINT(*u,b);
! 386: }
! 387:
! 388: void loaderror(s,e)
! 389: FILE *s;
! 390: ERR *e;
! 391: {
! 392: Obj b;
! 393:
! 394: loadobj(s,&b); MKERR(*e,b);
! 395: }
! 396:
! 397:
! 398: void loadgfmmat(s,p)
! 399: FILE *s;
! 400: GFMMAT *p;
! 401: {
! 402: int i,j,row,col;
! 403: unsigned int **a;
! 404: GFMMAT mat;
! 405:
! 406: read_int(s,&row); read_int(s,&col);
! 407: a = (unsigned int **)almat(row,col);
! 408: TOGFMMAT(row,col,a,mat);
! 409: for ( i = 0; i < row; i++ )
! 410: read_intarray(s,a[i],col);
! 411: *p = mat;
! 412: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>