[BACK]Return to bload.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / io

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>