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

Annotation of OpenXM_contrib2/asir2000/io/spexpr.c, Revision 1.1

1.1     ! noro        1: /* $OpenXM: OpenXM/src/asir99/io/spexpr.c,v 1.1.1.1 1999/11/10 08:12:30 noro Exp $ */
        !             2: #include "ca.h"
        !             3: #include "parse.h"
        !             4: #include "comp.h"
        !             5: #include "base.h"
        !             6:
        !             7: #ifndef SPRINT
        !             8: #define SPRINT
        !             9: #endif
        !            10:
        !            11: #ifdef FPRINT
        !            12: FILE *asir_out;
        !            13: #define OUT asir_out
        !            14: char DFORMAT[BUFSIZ];
        !            15:
        !            16: #define TAIL
        !            17: #define PUTS(s) fputs(s,OUT)
        !            18: #define PRINTF fprintf
        !            19: #define PRINTN printn
        !            20: #define PRINTBF printbf
        !            21: #define PRINTCPLX printcplx
        !            22: #define PRINTV printv
        !            23: #define PRINTEXPR printexpr
        !            24: #define PRINTNUM printnum
        !            25: #define PRINTP printp
        !            26: #define PRINTR printr
        !            27: #define PRINTLIST printlist
        !            28: #define PRINTVECT printvect
        !            29: #define PRINTMAT printmat
        !            30: #define PRINTSTR printstr
        !            31: #define PRINTCOMP printcomp
        !            32: #define PRINTDP printdp
        !            33: #endif
        !            34:
        !            35: #ifdef SPRINT
        !            36: static char *buf;
        !            37: #define OUT buf
        !            38: extern char DFORMAT[BUFSIZ];
        !            39:
        !            40: #define TAIL while ( *OUT ) OUT++;
        !            41: #define PUTS(s) strcat(OUT,s)
        !            42: #define PRINTF sprintf
        !            43: #define PRINTN sprintn
        !            44: #define PRINTBF sprintbf
        !            45: #define PRINTCPLX sprintcplx
        !            46: #define PRINTV sprintv
        !            47: #define PRINTEXPR sprintexpr
        !            48: #define PRINTNUM sprintnum
        !            49: #define PRINTP sprintp
        !            50: #define PRINTR sprintr
        !            51: #define PRINTLIST sprintlist
        !            52: #define PRINTVECT sprintvect
        !            53: #define PRINTMAT sprintmat
        !            54: #define PRINTSTR sprintstr
        !            55: #define PRINTCOMP sprintcomp
        !            56: #define PRINTDP sprintdp
        !            57: #endif
        !            58:
        !            59: #if defined(THINK_C)
        !            60: void PRINTEXPR(VL,Obj);
        !            61: void PRINTNUM(Num);
        !            62: void PRINTN(N);
        !            63: void PRINTV(VL,V);
        !            64: void PRINTP(VL,P);
        !            65: void PRINTR(VL,R);
        !            66: void PRINTLIST(VL,LIST);
        !            67: void PRINTVECT(VL,VECT);
        !            68: void PRINTMAT(VL,MAT);
        !            69: void PRINTSTR(STRING);
        !            70: void PRINTCOMP(VL,COMP);
        !            71: void PRINTDP(VL,DP);
        !            72: void PRINTCPLX(C);
        !            73: #else
        !            74: void PRINTEXPR();
        !            75: void PRINTNUM();
        !            76: void PRINTN();
        !            77: void PRINTV();
        !            78: void PRINTP();
        !            79: void PRINTR();
        !            80: void PRINTLIST();
        !            81: void PRINTVECT();
        !            82: void PRINTMAT();
        !            83: void PRINTSTR();
        !            84: void PRINTCOMP();
        !            85: void PRINTDP();
        !            86: void PRINTCPLX();
        !            87: #endif
        !            88:
        !            89: #ifdef FPRINT
        !            90: void output_init() {
        !            91:        OUT = stdout;
        !            92:        sprintf(DFORMAT,"%%0%dd",DLENGTH);
        !            93: }
        !            94:
        !            95: int mmono(p)
        !            96: P p;
        !            97: {
        !            98:        if ( NUM(p) )
        !            99:                if ( compnum(CO,(Num)p,0) < 0 )
        !           100:                        return ( 1 );
        !           101:                else
        !           102:                        return ( 0 );
        !           103:        else if ( NEXT(DC(p)) )
        !           104:                return ( 0 );
        !           105:        else
        !           106:                return (mmono(COEF(DC(p))));
        !           107: }
        !           108:
        !           109: #if PARI
        !           110: printbf(a)
        !           111: BF a;
        !           112: {
        !           113:        sor(a->body,'g',-1,0);
        !           114: }
        !           115: #endif
        !           116: #endif
        !           117:
        !           118: #ifdef SPRINT
        !           119: void soutput_init(s)
        !           120: char *s;
        !           121: {
        !           122:        s[0] = 0; buf = s;
        !           123: }
        !           124:
        !           125: #if PARI
        !           126: void sprintbf(a)
        !           127: BF a;
        !           128: {
        !           129:        char *str;
        !           130:        char *GENtostr();
        !           131:
        !           132:        str = GENtostr(a->body);
        !           133:        TAIL PRINTF(OUT,"%s",str);
        !           134:        free(str);
        !           135: }
        !           136: #endif
        !           137: #endif
        !           138:
        !           139: void PRINTEXPR(vl,p)
        !           140: VL vl;
        !           141: Obj p;
        !           142: {
        !           143:        if ( !p ) {
        !           144:                PRINTR(vl,(R)p);
        !           145:                return;
        !           146:        }
        !           147:
        !           148:        switch ( OID(p) ) {
        !           149:                case O_N:
        !           150:                        PRINTNUM((Num)p); break;
        !           151:                case O_P:
        !           152:                        PRINTP(vl,(P)p); break;
        !           153:                case O_R:
        !           154:                        PRINTR(vl,(R)p); break;
        !           155:                case O_LIST:
        !           156:                        PRINTLIST(vl,(LIST)p); break;
        !           157:                case O_VECT:
        !           158:                        PRINTVECT(vl,(VECT)p); break;
        !           159:                case O_MAT:
        !           160:                        PRINTMAT(vl,(MAT)p); break;
        !           161:                case O_STR:
        !           162:                        PRINTSTR((STRING)p); break;
        !           163:                case O_COMP:
        !           164:                        PRINTCOMP(vl,(COMP)p); break;
        !           165:                case O_DP:
        !           166:                        PRINTDP(vl,(DP)p); break;
        !           167:                default:
        !           168:                        break;
        !           169:        }
        !           170: }
        !           171:
        !           172: void PRINTN(n)
        !           173: N n;
        !           174: {
        !           175:        register int i,*ptr;
        !           176:        N tn;
        !           177:
        !           178:        if ( !n ) {
        !           179:                PUTS("0");
        !           180:                return;
        !           181:        }
        !           182:        ntobn(DBASE,n,&tn);
        !           183:        ptr = BD(tn);
        !           184:        TAIL PRINTF(OUT,"%d",ptr[PL(tn) - 1]);
        !           185:        for ( i = PL(tn) - 2; i >= 0; i-- ) {
        !           186:                TAIL PRINTF(OUT,DFORMAT,ptr[i]);
        !           187:        }
        !           188: }
        !           189:
        !           190: void PRINTNUM(q)
        !           191: Num q;
        !           192: {
        !           193:        if ( !q ) {
        !           194:                PUTS("0");
        !           195:                return;
        !           196:        }
        !           197:        switch ( NID(q) ) {
        !           198:                case N_Q:
        !           199:                        if ( SGN((Q)q) == -1 )
        !           200:                                PUTS("-");
        !           201:                        PRINTN(NM((Q)q));
        !           202:                        if ( !INT((Q)q) ) {
        !           203:                                PUTS("/"); PRINTN(DN((Q)q));
        !           204:                        }
        !           205:                        break;
        !           206:                case N_R:
        !           207:                        TAIL PRINTF(OUT,"%g",BDY((Real)q));
        !           208:                        break;
        !           209:                case N_A:
        !           210:                        PUTS("("); PRINTR(ALG,(R)BDY((Alg)q)); PUTS(")");
        !           211:                        break;
        !           212: #if PARI
        !           213:                case N_B:
        !           214:                        PRINTBF((BF)q); break;
        !           215: #endif
        !           216:                case N_C:
        !           217:                        PRINTCPLX((C)q); break;
        !           218:                case N_M:
        !           219:                        TAIL PRINTF(OUT,"%d",CONT((MQ)q));
        !           220:                        break;
        !           221:        }
        !           222: }
        !           223:
        !           224: void PRINTCPLX(a)
        !           225: C a;
        !           226: {
        !           227:        PUTS("(");
        !           228:        if ( a->r )
        !           229:                PRINTNUM(a->r);
        !           230:        if ( a->i ) {
        !           231:                if ( a->r && (compnum(0,a->i,0) > 0) )
        !           232:                        PUTS("+");
        !           233:                PRINTNUM(a->i); PUTS("*@i");
        !           234:        }
        !           235:        PUTS(")");
        !           236: }
        !           237:
        !           238: void PRINTP(vl,p)
        !           239: VL vl;
        !           240: P p;
        !           241: {
        !           242:        V v;
        !           243:        DCP dc;
        !           244:
        !           245:        if ( !p )
        !           246:                PUTS("0");
        !           247:        else if ( NUM(p) )
        !           248:                PRINTNUM((Num)p);
        !           249:        else
        !           250:                for ( dc = DC(p), v = VR(p); dc; dc = NEXT(dc) ) {
        !           251:                        if ( !DEG(dc) )
        !           252:                                PRINTP(vl,COEF(dc));
        !           253:                        else {
        !           254:                                if ( NUM(COEF(dc)) && UNIQ((Q)COEF(dc)) ) {
        !           255:                                        ;
        !           256:                                } else if ( NUM(COEF(dc)) && MUNIQ((Q)COEF(dc)) )
        !           257:                                        PUTS("-");
        !           258:                                else if ( NUM(COEF(dc)) || !NEXT(DC(COEF(dc)))) {
        !           259:                                        PRINTP(vl,COEF(dc)); PUTS("*");
        !           260:                                } else {
        !           261:                                        PUTS("("); PRINTP(vl,COEF(dc)); PUTS(")*");
        !           262:                                }
        !           263:                                PRINTV(vl,v);
        !           264:                                if ( cmpq(DEG(dc),ONE) ) {
        !           265:                                        PUTS("^");
        !           266:                                        if ( INT(DEG(dc)) && SGN(DEG(dc))>0 )
        !           267:                                                PRINTNUM((Num)DEG(dc));
        !           268:                                        else {
        !           269:                                                PUTS("("); PRINTNUM((Num)DEG(dc)); PUTS(")");
        !           270:                                        }
        !           271:                                }
        !           272:                        }
        !           273:                        if ( NEXT(dc) ) {
        !           274:                                P t;
        !           275:
        !           276:                                t = COEF(NEXT(dc));
        !           277:                                if (!DEG(NEXT(dc))) {
        !           278:                                        if ( NUM(t) ) {
        !           279:                                                if ( !mmono(t) )
        !           280:                                                        PUTS("+");
        !           281:                                        } else {
        !           282:                                                if (!mmono(COEF(DC(t))))
        !           283:                                                        PUTS("+");
        !           284:                                        }
        !           285:                                } else {
        !           286:                                        if ( !mmono(t) )
        !           287:                                                PUTS("+");
        !           288:                                }
        !           289:                        }
        !           290:                }
        !           291: }
        !           292:
        !           293: void PRINTV(vl,v)
        !           294: VL vl;
        !           295: V v;
        !           296: {
        !           297:        PF pf;
        !           298:        PFAD ad;
        !           299:        int i;
        !           300:
        !           301:        if ( NAME(v) )
        !           302:                PUTS(NAME(v));
        !           303:        else if ( (vid)v->attr == V_PF ) {
        !           304:                pf = ((PFINS)v->priv)->pf; ad = ((PFINS)v->priv)->ad;
        !           305:                if ( !strcmp(NAME(pf),"pow") ) {
        !           306:                        PUTS("("); PRINTR(vl,(R)ad[0].arg); PUTS(")^(");
        !           307:                        PRINTR(vl,(R)ad[1].arg); PUTS(")");
        !           308:                } else if ( !pf->argc ) {
        !           309:                        TAIL PRINTF(OUT,"%s",NAME(pf));
        !           310:                } else {
        !           311:                        for ( i = 0; i < pf->argc; i++ )
        !           312:                                if ( ad[i].d )
        !           313:                                        break;
        !           314:                        if ( i < pf->argc ) {
        !           315:                                TAIL PRINTF(OUT,"%s(%d",NAME(pf),ad[0].d);
        !           316:                                for ( i = 1; i < pf->argc; i++ ) {
        !           317:                                        TAIL PRINTF(OUT,",%d",ad[i].d);
        !           318:                                }
        !           319:                                PUTS(")(");
        !           320:                        } else {
        !           321:                                TAIL PRINTF(OUT,"%s(",NAME(pf));
        !           322:                        }
        !           323:                        PRINTR(vl,(R)ad[0].arg);
        !           324:                        for ( i = 1; i < pf->argc; i++ ) {
        !           325:                                PUTS(","); PRINTR(vl,(R)ad[i].arg);
        !           326:                        }
        !           327:                        PUTS(")");
        !           328:                }
        !           329:        }
        !           330: }
        !           331:
        !           332: void PRINTR(vl,a)
        !           333: VL vl;
        !           334: R a;
        !           335: {
        !           336:        if ( !a )
        !           337:                PUTS("0");
        !           338:        else
        !           339:                switch (OID(a)) {
        !           340:                        case O_N: case O_P:
        !           341:                                PRINTP(vl,(P)a); break;
        !           342:                        default:
        !           343:                                PUTS("("); PRINTP(vl,NM((R)a)); PUTS(")/("); PRINTP(vl,DN((R)a)); PUTS(")");
        !           344:                                break;
        !           345:                }
        !           346: }
        !           347:
        !           348: void PRINTVECT(vl,vect)
        !           349: VL vl;
        !           350: VECT vect;
        !           351: {
        !           352:        int i;
        !           353:        pointer *ptr;
        !           354:
        !           355:        PUTS("[ ");
        !           356:        for ( i = 0, ptr = BDY(vect); i < vect->len; i++ ) {
        !           357:                PRINTEXPR(vl,ptr[i]); PUTS(" ");
        !           358:        }
        !           359:        PUTS("]");
        !           360: }
        !           361:
        !           362: void PRINTMAT(vl,mat)
        !           363: VL vl;
        !           364: MAT mat;
        !           365: {
        !           366:        int i,j,r,c;
        !           367:        pointer *ptr;
        !           368:
        !           369:        for ( i = 0, r = mat->row, c = mat->col; i < r; i++ ) {
        !           370:                PUTS("[ ");
        !           371:                for ( j = 0, ptr = BDY(mat)[i]; j < c; j++ ) {
        !           372:                        PRINTEXPR(vl,ptr[j]); PUTS(" ");
        !           373:                }
        !           374:                PUTS("]");
        !           375:                if ( i < r - 1 )
        !           376:                        PUTS("\n");
        !           377:        }
        !           378: }
        !           379:
        !           380: void PRINTLIST(vl,list)
        !           381: VL vl;
        !           382: LIST list;
        !           383: {
        !           384:        NODE tnode;
        !           385:
        !           386:        PUTS("[");
        !           387:        for ( tnode = (NODE)list->body; tnode; tnode = NEXT(tnode) ) {
        !           388:                PRINTEXPR(vl,tnode->body);
        !           389:                if ( NEXT(tnode) )
        !           390:                        PUTS(",");
        !           391:        }
        !           392:        PUTS("]");
        !           393: }
        !           394:
        !           395: void PRINTSTR(str)
        !           396: STRING str;
        !           397: {
        !           398:        char *p;
        !           399:
        !           400:        for ( p = BDY(str); *p; p++ )
        !           401:                if ( *p == '"' )
        !           402:                        PUTS("\"");
        !           403:                else {
        !           404:                        TAIL PRINTF(OUT,"%c",*p);
        !           405:                }
        !           406: }
        !           407:
        !           408: void PRINTCOMP(vl,c)
        !           409: VL vl;
        !           410: COMP c;
        !           411: {
        !           412:        int n,i;
        !           413:
        !           414:        n = getcompsize((int)c->type);
        !           415:        PUTS("{");
        !           416:        for ( i = 0; i < n; i++ ) {
        !           417:                PRINTEXPR(vl,(pointer)c->member[i]);
        !           418:                if ( i < n-1 )
        !           419:                        PUTS(",");
        !           420:        }
        !           421:        PUTS("}");
        !           422: }
        !           423:
        !           424: void PRINTDP(vl,d)
        !           425: VL vl;
        !           426: DP d;
        !           427: {
        !           428:        int n,i;
        !           429:        MP m;
        !           430:        DL dl;
        !           431:
        !           432:        for ( n = d->nv, m = BDY(d); m; m = NEXT(m) ) {
        !           433:                PUTS("("); PRINTEXPR(vl,(pointer)m->c); PUTS(")*<<");
        !           434:                for ( i = 0, dl = m->dl; i < n-1; i++ ) {
        !           435:                        TAIL PRINTF(OUT,"%d,",dl->d[i]);
        !           436:                }
        !           437:                TAIL PRINTF(OUT,"%d",dl->d[i]);
        !           438:                PUTS(">>");
        !           439:                if ( NEXT(m) )
        !           440:                        PUTS("+");
        !           441:        }
        !           442: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>