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

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

1.1     ! noro        1: /* $OpenXM$ */
        !             2:
        !             3: #define PRINTHAT (fortran_output?PUTS("**"):PUTS("^"))
        !             4:
        !             5: void PRINTEXPR();
        !             6: void PRINTNUM();
        !             7: void PRINTN();
        !             8: void PRINTV();
        !             9: void PRINTP();
        !            10: void PRINTR();
        !            11: void PRINTLIST();
        !            12: void PRINTVECT();
        !            13: void PRINTMAT();
        !            14: void PRINTSTR();
        !            15: void PRINTCOMP();
        !            16: void PRINTDP();
        !            17: void PRINTUI();
        !            18: void PRINTGF2MAT();
        !            19: void PRINTGFMMAT();
        !            20: void PRINTBYTEARRAY();
        !            21: void PRINTQUOTE();
        !            22: void PRINTERR();
        !            23: void PRINTCPLX();
        !            24: void PRINTLM();
        !            25: void PRINTLF();
        !            26: void PRINTUP2();
        !            27: void PRINTUP();
        !            28: void PRINTUM();
        !            29: void PRINTFOP();
        !            30: void PRINTEOP();
        !            31: void PRINTLOP();
        !            32: void PRINTQOP();
        !            33: void PRINTSF();
        !            34: void PRINTSYMBOL();
        !            35: void PRINTRANGE();
        !            36: void PRINTTB();
        !            37: void PRINTFNODE();
        !            38: void PRINTBF();
        !            39:
        !            40: void PRINTEXPR(vl,p)
        !            41: VL vl;
        !            42: Obj p;
        !            43: {
        !            44: #if defined(FPRINT)
        !            45:        if ( asir_texmacs && !user_print_function ) printf("\2verbatim:");
        !            46: #endif
        !            47:        if ( !p ) {
        !            48:                PRINTR(vl,(R)p);
        !            49:        } else
        !            50:                switch ( OID(p) ) {
        !            51:                        case O_N:
        !            52:                                PRINTNUM((Num)p); break;
        !            53:                        case O_P:
        !            54:                                PRINTP(vl,(P)p); break;
        !            55:                        case O_R:
        !            56:                                PRINTR(vl,(R)p); break;
        !            57:                        case O_LIST:
        !            58:                                PRINTLIST(vl,(LIST)p); break;
        !            59:                        case O_VECT:
        !            60:                                PRINTVECT(vl,(VECT)p); break;
        !            61:                        case O_MAT:
        !            62:                                PRINTMAT(vl,(MAT)p); break;
        !            63:                        case O_STR:
        !            64:                                PRINTSTR((STRING)p); break;
        !            65:                        case O_COMP:
        !            66:                                PRINTCOMP(vl,(COMP)p); break;
        !            67:                        case O_DP:
        !            68:                                PRINTDP(vl,(DP)p); break;
        !            69:                        case O_USINT:
        !            70:                                PRINTUI(vl,(USINT)p); break;
        !            71:                        case O_GF2MAT:
        !            72:                                PRINTGF2MAT(vl,(GF2MAT)p); break;
        !            73:                        case O_ERR:
        !            74:                        PRINTERR(vl,(ERR)p); break;
        !            75:                        case O_MATHCAP:
        !            76:                                PRINTLIST(vl,((MATHCAP)p)->body); break;
        !            77:                        case O_F:
        !            78:                                PRINTLF(vl,(F)p); break;
        !            79:                        case O_GFMMAT:
        !            80:                                PRINTGFMMAT(vl,(GFMMAT)p); break;
        !            81:                        case O_BYTEARRAY:
        !            82:                                PRINTBYTEARRAY(vl,(BYTEARRAY)p); break;
        !            83:                        case O_QUOTE:
        !            84:                                PRINTQUOTE(vl,(QUOTE)p); break;
        !            85:                        case O_SYMBOL:
        !            86:                                PRINTSYMBOL((SYMBOL)p); break;
        !            87:                        case O_RANGE:
        !            88:                                PRINTRANGE(vl,(RANGE)p); break;
        !            89:                        case O_TB:
        !            90:                                PRINTTB(vl,(TB)p); break;
        !            91:                        default:
        !            92:                                break;
        !            93:                }
        !            94: #if defined(FPRINT)
        !            95:        if ( asir_texmacs && !user_print_function )
        !            96:                { putchar('\5'); fflush(stdout); }
        !            97: #endif
        !            98: }
        !            99:
        !           100: #if defined(FPRINT)
        !           101: #if defined(ITVDEBUG)
        !           102: void printbin(double z)
        !           103: {
        !           104:        int     i, j, mask;
        !           105:        union {
        !           106:                double  x;
        !           107:                char    c[8];
        !           108:        } a;
        !           109:
        !           110:        a.x = z;
        !           111:        for(i=7;i>=0;i--) {
        !           112:                mask = 0x80;
        !           113:                for(j=0;j<8;j++) {
        !           114:                        if (a.c[i] & mask) fprintf(stderr,"1");
        !           115:                        else fprintf(stderr,"0");
        !           116:                        mask >>= 1;
        !           117:                }
        !           118:        }
        !           119:        fprintf(stderr,"\n");
        !           120: }
        !           121: #endif
        !           122: #endif
        !           123:
        !           124: void PRINTCPLX(a)
        !           125: C a;
        !           126: {
        !           127:        PUTS("(");
        !           128:        if ( a->r )
        !           129:                PRINTNUM(a->r);
        !           130:        if ( a->i ) {
        !           131: #if defined(INTERVAL)
        !           132:                if ( a->r && ((compnum(0,a->i,0) > 0)
        !           133:                        || NID(a->i) == N_IP || NID(a->i) == N_IntervalDouble
        !           134:                        || NID(a->i) == N_IntervalQuad || NID(a->i) == N_IntervalBigFloat) )
        !           135: #else
        !           136:                if ( a->r && (compnum(0,a->i,0) > 0) )
        !           137: #endif
        !           138:                        PUTS("+");
        !           139:                PRINTNUM(a->i); PUTS("*@i");
        !           140:        }
        !           141:        PUTS(")");
        !           142: }
        !           143:
        !           144: void PRINTP(vl,p)
        !           145: VL vl;
        !           146: P p;
        !           147: {
        !           148:        V v;
        !           149:        DCP dc;
        !           150:
        !           151:        if ( !p )
        !           152:                PUTS("0");
        !           153:        else if ( NUM(p) )
        !           154:                PRINTNUM((Num)p);
        !           155:        else
        !           156:                for ( dc = DC(p), v = VR(p); dc; dc = NEXT(dc) ) {
        !           157:                        if ( !DEG(dc) )
        !           158:                                PRINTP(vl,COEF(dc));
        !           159:                        else {
        !           160:                                if ( NUM(COEF(dc)) && UNIQ((Q)COEF(dc)) ) {
        !           161:                                        ;
        !           162:                                } else if ( NUM(COEF(dc)) && MUNIQ((Q)COEF(dc)) )
        !           163:                                        PUTS("-");
        !           164:                                else if ( NUM(COEF(dc)) || !NEXT(DC(COEF(dc)))) {
        !           165:                                        PRINTP(vl,COEF(dc)); PUTS("*");
        !           166:                                } else {
        !           167:                                        PUTS("("); PRINTP(vl,COEF(dc)); PUTS(")*");
        !           168:                                }
        !           169:                                PRINTV(vl,v);
        !           170:                                if ( cmpq(DEG(dc),ONE) ) {
        !           171:                                        PRINTHAT;
        !           172:                                        if ( INT(DEG(dc)) && SGN(DEG(dc))>0 )
        !           173:                                                PRINTNUM((Num)DEG(dc));
        !           174:                                        else {
        !           175:                                                PUTS("("); PRINTNUM((Num)DEG(dc)); PUTS(")");
        !           176:                                        }
        !           177:                                }
        !           178:                        }
        !           179:                        if ( NEXT(dc) ) {
        !           180:                                P t;
        !           181:
        !           182:                                t = COEF(NEXT(dc));
        !           183:                                if (!DEG(NEXT(dc))) {
        !           184:                                        if ( NUM(t) ) {
        !           185:                                                if ( !mmono(t) )
        !           186:                                                        PUTS("+");
        !           187:                                        } else {
        !           188:                                                if (!mmono(COEF(DC(t))))
        !           189:                                                        PUTS("+");
        !           190:                                        }
        !           191:                                } else {
        !           192:                                        if ( !mmono(t) )
        !           193:                                                PUTS("+");
        !           194:                                }
        !           195:                        }
        !           196:                }
        !           197: }
        !           198:
        !           199: void PRINTR(vl,a)
        !           200: VL vl;
        !           201: R a;
        !           202: {
        !           203:        if ( !a )
        !           204:                PUTS("0");
        !           205:        else
        !           206:                switch (OID(a)) {
        !           207:                        case O_N: case O_P:
        !           208:                                PRINTP(vl,(P)a); break;
        !           209:                        default:
        !           210:                                PUTS("("); PRINTP(vl,NM((R)a)); PUTS(")/("); PRINTP(vl,DN((R)a)); PUTS(")");
        !           211:                                break;
        !           212:                }
        !           213: }
        !           214:
        !           215: void PRINTVECT(vl,vect)
        !           216: VL vl;
        !           217: VECT vect;
        !           218: {
        !           219:        int i;
        !           220:        pointer *ptr;
        !           221:
        !           222:        switch ( outputstyle ) {
        !           223:                case 1:
        !           224:                        PUTS("vect(");
        !           225:                        for ( i = 0, ptr = BDY(vect); i < vect->len; i++ ) {
        !           226:                                if ( i != 0 ) PUTS(",");
        !           227:                                PRINTEXPR(vl,ptr[i]);
        !           228:                        }
        !           229:                        PUTS(")");
        !           230:                        break;
        !           231:                case 0:
        !           232:                default:
        !           233:                        PUTS("[ ");
        !           234:                        for ( i = 0, ptr = BDY(vect); i < vect->len; i++ ) {
        !           235:                                PRINTEXPR(vl,ptr[i]); PUTS(" ");
        !           236:                        }
        !           237:                        PUTS("]");
        !           238:                        break;
        !           239:        }
        !           240: }
        !           241:
        !           242: void PRINTMAT(vl,mat)
        !           243: VL vl;
        !           244: MAT mat;
        !           245: {
        !           246:        int i,j,r,c;
        !           247:        pointer *ptr;
        !           248:
        !           249:        switch ( outputstyle ) {
        !           250:                case 1:
        !           251:                        PUTS("mat(\n");
        !           252:                        for ( i = 0, r = mat->row, c = mat->col; i < r; i++ ) {
        !           253:                                if ( i != 0 ) PUTS(",\n");
        !           254:                                PUTS("[ ");
        !           255:                                for ( j = 0, ptr = BDY(mat)[i]; j < c; j++ ) {
        !           256:                                        if ( j != 0 ) PUTS(",");
        !           257:                                        PRINTEXPR(vl,ptr[j]);
        !           258:                                }
        !           259:                                PUTS(" ]");
        !           260:                        }
        !           261:                        PUTS(")");
        !           262:                        break;
        !           263:                case 0:
        !           264:                default:
        !           265:                        for ( i = 0, r = mat->row, c = mat->col; i < r; i++ ) {
        !           266:                                PUTS("[ ");
        !           267:                                for ( j = 0, ptr = BDY(mat)[i]; j < c; j++ ) {
        !           268:                                        PRINTEXPR(vl,ptr[j]); PUTS(" ");
        !           269:                                }
        !           270:                                PUTS("]");
        !           271:                                if ( i < r - 1 )
        !           272:                                        PUTS("\n");
        !           273:                        }
        !           274:                        break;
        !           275:        }
        !           276: }
        !           277:
        !           278: void PRINTLIST(vl,list)
        !           279: VL vl;
        !           280: LIST list;
        !           281: {
        !           282:        NODE tnode;
        !           283:
        !           284:        PUTS("[");
        !           285:        for ( tnode = (NODE)list->body; tnode; tnode = NEXT(tnode) ) {
        !           286:                PRINTEXPR(vl,tnode->body);
        !           287:                if ( NEXT(tnode) )
        !           288:                        PUTS(",");
        !           289:        }
        !           290:        PUTS("]");
        !           291: }
        !           292:
        !           293: void PRINTCOMP(vl,c)
        !           294: VL vl;
        !           295: COMP c;
        !           296: {
        !           297:        int n,i;
        !           298:
        !           299:        n = getcompsize((int)c->type);
        !           300:        PUTS("{");
        !           301:        for ( i = 0; i < n; i++ ) {
        !           302:                PRINTEXPR(vl,(pointer)c->member[i]);
        !           303:                if ( i < n-1 )
        !           304:                        PUTS(",");
        !           305:        }
        !           306:        PUTS("}");
        !           307: }
        !           308:
        !           309: void PRINTGF2MAT(vl,mat)
        !           310: VL vl;
        !           311: GF2MAT mat;
        !           312: {
        !           313:        int row,col,w,i,j,k,m;
        !           314:        unsigned int t;
        !           315:        unsigned int **b;
        !           316:
        !           317:        row = mat->row;
        !           318:        col = mat->col;
        !           319:        w = (col+BSH-1)/BSH;
        !           320:        b = mat->body;
        !           321:        for ( i = 0; i < row; i++ ) {
        !           322:                for ( j = 0, m = 0; j < w; j++ ) {
        !           323:                        t = b[i][j];
        !           324:                        for ( k = 0; m < col && k < BSH; k++, m++ )
        !           325:                                if ( t & (1<<k) )
        !           326:                                        PUTS("1");
        !           327:                                else
        !           328:                                        PUTS("0");
        !           329:                }
        !           330:                PUTS("\n");
        !           331:        }
        !           332: }
        !           333: void PRINTERR(vl,e)
        !           334: VL vl;
        !           335: ERR e;
        !           336: {
        !           337:        PUTS("error("); PRINTEXPR(vl,e->body); PUTS(")");
        !           338: }
        !           339:
        !           340: void PRINTLF(vl,f)
        !           341: VL vl;
        !           342: F f;
        !           343: {
        !           344:        switch ( FOP(f) ) {
        !           345:                case AL_TRUE:
        !           346:                        PUTS("@true");
        !           347:                        break;
        !           348:                case AL_FALSE:
        !           349:                        PUTS("@false");
        !           350:                        break;
        !           351:
        !           352:                case AL_OR: case AL_AND:
        !           353:                        PRINTFOP(vl,f); break;
        !           354:                case AL_NOT: case AL_IMPL: case AL_REPL: case AL_EQUIV:
        !           355:                        PRINTEOP(vl,f); break;
        !           356:
        !           357:                case AL_EQUAL: case AL_NEQ: case AL_LESSP:
        !           358:                case AL_GREATERP: case AL_LEQ: case AL_GEQ:
        !           359:                        PRINTLOP(vl,f); break;
        !           360:
        !           361:                case AL_EX: case AL_ALL:
        !           362:                        PRINTQOP(vl,f); break;
        !           363:                default:
        !           364:                        break;
        !           365:        }
        !           366: }
        !           367:
        !           368: void PRINTFOP(vl,f)
        !           369: VL vl;
        !           370: F f;
        !           371: {
        !           372:        char *op;
        !           373:        NODE n;
        !           374:
        !           375:        op = FOP(f)==AL_OR?" @|| ":" @&& ";
        !           376:        n = FJARG(f);
        !           377:        PUTS("("); PRINTEXPR(vl,BDY(n)); PUTS(")");
        !           378:        for ( n = NEXT(n); n; n = NEXT(n) ) {
        !           379:                PUTS(op); PUTS("("); PRINTEXPR(vl,BDY(n)); PUTS(")");
        !           380:        }
        !           381: }
        !           382:
        !           383: void PRINTEOP(vl,f)
        !           384: VL vl;
        !           385: F f;
        !           386: {
        !           387:        oFOP op;
        !           388:        char *sop;
        !           389:
        !           390:        if ( (op = FOP(f)) == AL_NOT ) {
        !           391:                PUTS("(@! "); PRINTEXPR(vl,(Obj)FARG(f)); PUTS(")"); return;
        !           392:        }
        !           393:        switch ( op ) {
        !           394:                case AL_IMPL:
        !           395:                        sop = " @impl "; break;
        !           396:                case AL_REPL:
        !           397:                        sop = " @repl "; break;
        !           398:                case AL_EQUIV:
        !           399:                        sop = " @equiv "; break;
        !           400:                default:
        !           401:                        break;
        !           402:        }
        !           403:        PUTS("(");
        !           404:        PRINTEXPR(vl,(Obj)FLHS(f));
        !           405:        PUTS(sop);
        !           406:        PRINTEXPR(vl,(Obj)FRHS(f));
        !           407:        PUTS(")");
        !           408: }
        !           409:
        !           410: void PRINTLOP(vl,f)
        !           411: VL vl;
        !           412: F f;
        !           413: {
        !           414:        char *op;
        !           415:
        !           416:        switch ( FOP(f) ) {
        !           417:                case AL_EQUAL:
        !           418:                        op = " @== "; break;
        !           419:                case AL_NEQ:
        !           420:                        op = " @!= "; break;
        !           421:                case AL_LESSP:
        !           422:                        op = " @< "; break;
        !           423:                case AL_GREATERP:
        !           424:                        op = " @> "; break;
        !           425:                case AL_LEQ:
        !           426:                        op = " @<= "; break;
        !           427:                case AL_GEQ:
        !           428:                        op = " @>= "; break;
        !           429:                default:
        !           430:                        error("PRINTLOP : invalid operator");
        !           431:                        break;
        !           432:        }
        !           433:        PRINTEXPR(vl,(Obj)FPL(f)); PUTS(op); PUTS("0");
        !           434: }
        !           435:
        !           436: void PRINTRANGE(VL vl,RANGE p)
        !           437: {
        !           438:        PUTS("range(");
        !           439:        PRINTEXPR(vl,p->start);
        !           440:        PUTS(",");
        !           441:        PRINTEXPR(vl,p->end);
        !           442:        PUTS(")");
        !           443: }
        !           444:
        !           445: void PRINTFNODENODE(NODE n)
        !           446: {
        !           447:        for ( ; n; n = NEXT(n) ) {
        !           448:                PRINTFNODE((FNODE)BDY(n),0);
        !           449:                if ( NEXT(n) ) PUTS(",");
        !           450:        }
        !           451: }
        !           452:
        !           453: void PRINTFARGS(FNODE f)
        !           454: {
        !           455:        NODE n;
        !           456:
        !           457:        if ( f->id == I_LIST ) {
        !           458:                n = (NODE)FA0(f);
        !           459:                PRINTFNODENODE(n);
        !           460:        } else
        !           461:                PRINTFNODE(f,0);
        !           462: }
        !           463:
        !           464: void PRINTFNODE(FNODE f,int paren)
        !           465: {
        !           466:        NODE n,t,t0;
        !           467:        char vname[BUFSIZ],prefix[BUFSIZ];
        !           468:        char *opname,*vname_conv,*prefix_conv;
        !           469:        Obj obj;
        !           470:        int i,len,allzero,elen,elen2;
        !           471:        C cplx;
        !           472:        char *r;
        !           473:        FNODE fi,f2;
        !           474:
        !           475:        if ( !f ) {
        !           476:                PUTS("(0)");
        !           477:                return;
        !           478:        }
        !           479:        if ( paren ) PUTS("(");
        !           480:        switch ( f->id ) {
        !           481:                /* unary operators */
        !           482:                case I_NOT: PUTS("!"); PRINTFNODE((FNODE)FA0(f),1); break;
        !           483:                case I_PAREN: PRINTFNODE((FNODE)FA0(f),0); break;
        !           484:                case I_MINUS: PUTS("-"); PRINTFNODE((FNODE)FA0(f),1); break;
        !           485:                /* binary operators */
        !           486:                /* arg list */
        !           487:                /* I_AND, I_OR => FA0(f), FA1(f) */
        !           488:                /* otherwise   => FA1(f), FA2(f) */
        !           489:                case I_BOP:
        !           490:                        PRINTFNODE((FNODE)FA1(f),1);
        !           491:                        PUTS(((ARF)FA0(f))->name);
        !           492:                        PRINTFNODE((FNODE)FA2(f),1);
        !           493:                        break;
        !           494:                case I_COP:
        !           495:                        switch( (cid)FA0(f) ) {
        !           496:                                case C_EQ: opname = ("=="); break;
        !           497:                                case C_NE: opname = ("!="); break;
        !           498:                                case C_GT: opname = (">"); break;
        !           499:                                case C_LT: opname = ("<"); break;
        !           500:                                case C_GE: opname = (">="); break;
        !           501:                                case C_LE: opname = ("<="); break;
        !           502:                        }
        !           503:                        PRINTFNODE((FNODE)FA1(f),1);
        !           504:                        PUTS(opname);
        !           505:                        PRINTFNODE((FNODE)FA2(f),1);
        !           506:                        break;
        !           507:                case I_LOP:
        !           508:                        switch( (lid)FA0(f) ) {
        !           509:                                case L_EQ: opname = ("@=="); break;
        !           510:                                case L_NE: opname = ("@!="); break;
        !           511:                                case L_GT: opname = ("@>"); break;
        !           512:                                case L_LT: opname = ("@<"); break;
        !           513:                                case L_GE: opname = ("@>="); break;
        !           514:                                case L_LE: opname = ("@<="); break;
        !           515:                                case L_AND: opname = ("@&&"); break;
        !           516:                                case L_OR: opname = ("@||"); break;
        !           517:                                case L_NOT: opname = ("@!"); break;
        !           518:                        }
        !           519:                        if ( (lid)FA0(f)==L_NOT ) {
        !           520:                                PUTS(opname); PRINTFNODE((FNODE)FA1(f),1);
        !           521:                        } else {
        !           522:                                PRINTFNODE((FNODE)FA1(f),1);
        !           523:                                PUTS(opname);
        !           524:                                PRINTFNODE((FNODE)FA2(f),1);
        !           525:                        }
        !           526:                        break;
        !           527:                case I_AND:
        !           528:                        PRINTFNODE((FNODE)FA0(f),1);
        !           529:                        PUTS("&&");
        !           530:                        PRINTFNODE((FNODE)FA1(f),1);
        !           531:                        break;
        !           532:                case I_OR:
        !           533:                        PRINTFNODE((FNODE)FA0(f),1);
        !           534:                        PUTS("!!");
        !           535:                        PRINTFNODE((FNODE)FA1(f),1);
        !           536:                        break;
        !           537:                /* ternary operators */
        !           538:                case I_CE:
        !           539:                        PRINTFNODE((FNODE)FA0(f),1); PUTS("?"); PRINTFNODE((FNODE)FA1(f),1);
        !           540:                        PUTS(":"); PRINTFNODE((FNODE)FA2(f),1);
        !           541:                        break;
        !           542:                /* lists */
        !           543:                case I_LIST: PUTS("["); PRINTFNODENODE((NODE)FA0(f)); PUTS("]"); break;
        !           544:                /* function */
        !           545:                case I_FUNC:
        !           546:                        if ( !strcmp(((FUNC)FA0(f))->name,"@pi") ) PUTS("@pi");
        !           547:                        else if ( !strcmp(((FUNC)FA0(f))->name,"@e") ) PUTS("@e");
        !           548:                        else {
        !           549:                                PUTS(((FUNC)FA0(f))->name);
        !           550:                                PUTS("("); PRINTFARGS(FA1(f)); PUTS(")");
        !           551:                        }
        !           552:                        break;
        !           553:                /* XXX */
        !           554:                case I_CAR: PUTS("car("); PRINTFNODE(FA0(f),0); PUTS(")"); break;
        !           555:                case I_CDR: PUTS("cdr("); PRINTFNODE(FA0(f),0); PUTS(")"); break;
        !           556:                /* exponent vector */
        !           557:                case I_EV: PUTS("<<"); PRINTFNODENODE((NODE)FA0(f)); PUTS(">>"); break;
        !           558:                /* string */
        !           559:                case I_STR: PUTS((char *)FA0(f)); break;
        !           560:                /* internal object */
        !           561:                case I_FORMULA: obj = (Obj)FA0(f); PRINTEXPR(CO,obj); break;
        !           562:                /* program variable */
        !           563:                case I_PVAR:
        !           564:                        if ( FA1(f) )
        !           565:                                error("printfnode : not implemented yet");
        !           566:                        GETPVNAME(FA0(f),opname);
        !           567:                        PUTS(opname);
        !           568:                        break;
        !           569:                default: error("printfnode : not implemented yet");
        !           570:        }
        !           571:        if ( paren ) PUTS(")");
        !           572: }
        !           573:
        !           574: /* functions not used in cpexpr.c */
        !           575:
        !           576: #if !defined(CPRINT)
        !           577:
        !           578: void PRINTNUM(q)
        !           579: Num q;
        !           580: {
        !           581:        char real_format[20];
        !           582:
        !           583:        if ( !q ) {
        !           584:                PUTS("0");
        !           585:                return;
        !           586:        }
        !           587:        switch ( NID(q) ) {
        !           588:                case N_Q:
        !           589:                        if ( SGN((Q)q) == -1 )
        !           590:                                PUTS("-");
        !           591:                        PRINTN(NM((Q)q));
        !           592:                        if ( !INT((Q)q) ) {
        !           593:                                PUTS("/"); PRINTN(DN((Q)q));
        !           594:                        }
        !           595:                        break;
        !           596:                case N_R:
        !           597:                        switch (printmode) {
        !           598:                                case PRINTF_E:
        !           599: #if defined(INTERVAL)
        !           600:                                case MID_PRINTF_E:
        !           601: #endif
        !           602:                                        TAIL PRINTF(OUT,"%.16e",BDY((Real)q));
        !           603:                                        break;
        !           604:                                case PRINTF_G:
        !           605: #if defined(INTERVAL)
        !           606:                                case MID_PRINTF_G:
        !           607: #endif
        !           608:                                default:
        !           609:                                        if ( real_binary ) {
        !           610:                                                unsigned int *m;
        !           611:                                                unsigned int u,l,mask;
        !           612:                                                int i,expo;
        !           613:
        !           614:                                                m = (unsigned int *)&BDY((Real)q);
        !           615: #if defined(__i386__) || defined(MIPSEL) || defined(VISUAL) || defined(__alpha) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__x86_64)
        !           616:                                                u = m[1]; l = m[0];
        !           617: #else
        !           618:                                                u = m[0]; l = m[1];
        !           619: #endif
        !           620:                                                if (u&0x80000000) {
        !           621:                                                        TAIL PRINTF(OUT,"-");
        !           622:                                                }
        !           623:                                                u &= 0x7fffffff;
        !           624:                                                expo = ((int)(u>>20));
        !           625:                                                u &= 0xfffff;
        !           626:                                                if ( expo == 2047 ) {
        !           627:                                                        if ( u || l ) {
        !           628:                                                                TAIL PRINTF(OUT,"NaN");
        !           629:                                                        } else {
        !           630:                                                                TAIL PRINTF(OUT,"Inf");
        !           631:                                                        }
        !           632:                                                } else if ( expo == 0 ) {
        !           633:                                                        if ( u || l ) {
        !           634:                                                                TAIL PRINTF(OUT,"0b0.");
        !           635:                                                                for ( i = 0, mask = 0x80000; i < 20;
        !           636:                                                                        i++, mask >>= 1) {
        !           637:                                                                        TAIL
        !           638:                                                                        if ( u&mask )
        !           639:                                                                                PRINTF(OUT,"1");
        !           640:                                                                        else
        !           641:                                                                                PRINTF(OUT,"0");
        !           642:                                                                }
        !           643:                                                                for ( i = 0, mask = 0x80000000; i < 32;
        !           644:                                                                        i++, mask >>= 1) {
        !           645:                                                                        TAIL
        !           646:                                                                        if ( l&mask )
        !           647:                                                                                PRINTF(OUT,"1");
        !           648:                                                                        else
        !           649:                                                                                PRINTF(OUT,"0");
        !           650:                                                                }
        !           651:                                                                TAIL PRINTF(OUT,"*2^%d",-1022);
        !           652:                                                        } else {
        !           653:                                                                TAIL PRINTF(OUT,"0");
        !           654:                                                        }
        !           655:                                                } else {
        !           656:                                                        expo -= 1023;
        !           657:                                                        TAIL PRINTF(OUT,"0b1.");
        !           658:                                                        for ( i = 0, mask = 0x80000; i < 20;
        !           659:                                                                i++, mask >>= 1) {
        !           660:                                                                TAIL
        !           661:                                                                if ( u&mask )
        !           662:                                                                        PRINTF(OUT,"1");
        !           663:                                                                else
        !           664:                                                                        PRINTF(OUT,"0");
        !           665:                                                        }
        !           666:                                                        for ( i = 0, mask = 0x80000000; i < 32;
        !           667:                                                                i++, mask >>= 1) {
        !           668:                                                                TAIL
        !           669:                                                                if ( l&mask )
        !           670:                                                                        PRINTF(OUT,"1");
        !           671:                                                                else
        !           672:                                                                        PRINTF(OUT,"0");
        !           673:                                                        }
        !           674:                                                        if ( expo ) {
        !           675:                                                                TAIL PRINTF(OUT,"*2^%d",expo);
        !           676:                                                        }
        !           677:                                                }
        !           678:                                        } else if ( real_digit ) {
        !           679:                                                sprintf(real_format,
        !           680:                                                        double_output?"%%.%df":"%%.%dg",real_digit);
        !           681:                                                TAIL PRINTF(OUT,real_format,BDY((Real)q));
        !           682:                                        } else {
        !           683:                                                TAIL PRINTF(OUT,double_output?"%f":"%g",BDY((Real)q));
        !           684:                                        }
        !           685:                                        break;
        !           686:                        }
        !           687:                        break;
        !           688:                case N_A:
        !           689:                        PUTS("("); PRINTR(ALG,(R)BDY((Alg)q)); PUTS(")");
        !           690:                        break;
        !           691: #if defined(PARI)
        !           692:                case N_B:
        !           693:                        PRINTBF((BF)q); break;
        !           694: #endif
        !           695: #if defined(INTERVAL)
        !           696:                case N_IP:
        !           697:                case N_IntervalBigFloat:
        !           698:                        switch ( outputstyle ) {
        !           699:                                case 1:
        !           700:                                        PUTS("intval(");
        !           701:                                        PRINTNUM(INF((Itv)q));
        !           702:                                        PUTS(",");
        !           703:                                        PRINTNUM(SUP((Itv)q));
        !           704:                                        PUTS(")");
        !           705:                                        break;
        !           706:                                case 0:
        !           707:                                default:
        !           708:                                        PUTS("[");
        !           709:                                        PRINTNUM(INF((Itv)q));
        !           710:                                        PUTS(",");
        !           711:                                        PRINTNUM(SUP((Itv)q));
        !           712:                                        PUTS("]");
        !           713:                                        break;
        !           714:                        }
        !           715:                        break;
        !           716:                case N_IntervalDouble:
        !           717:                        switch (printmode) {
        !           718:                                case PRINTF_E:
        !           719:                                        switch ( outputstyle ) {
        !           720:                                                case 1:
        !           721:                                                        TAIL PRINTF(OUT, "intval(%.16e,%.16e)",
        !           722:                                                                INF((IntervalDouble)q),SUP((IntervalDouble)q));
        !           723:                                                        break;
        !           724:                                                case 0:
        !           725:                                                default:
        !           726:                                                        TAIL PRINTF(OUT, "[%.16e,%.16e]",
        !           727:                                                                INF((IntervalDouble)q),SUP((IntervalDouble)q));
        !           728:                                                        break;
        !           729:                                        }
        !           730: #if defined(ITVDEBUG)
        !           731:                                        printbin(INF((IntervalDouble)q));
        !           732:                                        printbin(SUP((IntervalDouble)q));
        !           733: #endif
        !           734:                                        break;
        !           735:                                case MID_PRINTF_G:
        !           736:                                        switch ( outputstyle ) {
        !           737:                                                case 1:
        !           738:                                                        TAIL PRINTF(OUT, "intvalm(%g,%g)",
        !           739:                                                                (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,
        !           740:                                                                (SUP((IntervalDouble)q)-INF((IntervalDouble)q))*0.5);
        !           741:                                                        break;
        !           742:                                                case 0:
        !           743:                                                default:
        !           744:                                                        TAIL PRINTF(OUT, "<%g,%g>",
        !           745:                                                                (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,
        !           746:                                                                (SUP((IntervalDouble)q)-INF((IntervalDouble)q))*0.5);
        !           747:                                                        break;
        !           748:                                        }
        !           749:                                        break;
        !           750:                                case MID_PRINTF_E:
        !           751:                                        switch ( outputstyle ) {
        !           752:                                                case 1:
        !           753:                                                        TAIL PRINTF(OUT, "intvalm(%.16e,%.16e)",
        !           754:                                                        (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,
        !           755:                                                        (SUP((IntervalDouble)q)-INF((IntervalDouble)q))*0.5);
        !           756:                                                        break;
        !           757:                                                case 0:
        !           758:                                                default:
        !           759:                                                        TAIL PRINTF(OUT, "<%.16e,%.16e>",
        !           760:                                                        (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,
        !           761:                                                        (SUP((IntervalDouble)q)-INF((IntervalDouble)q))*0.5);
        !           762:                                                        break;
        !           763:                                        }
        !           764:                                        break;
        !           765:                                case PRINTF_G:
        !           766:                                default:
        !           767:                                        switch ( outputstyle ) {
        !           768:                                                case 1:
        !           769:                                                        TAIL PRINTF(OUT, "intval(%g,%g)",
        !           770:                                                                INF((IntervalDouble)q),SUP((IntervalDouble)q));
        !           771:                                                        break;
        !           772:                                                case 0:
        !           773:                                                default:
        !           774:                                                        TAIL PRINTF(OUT, "[%g,%g]",
        !           775:                                                                INF((IntervalDouble)q),SUP((IntervalDouble)q));
        !           776:                                                        break;
        !           777:                                        }
        !           778:                                break;
        !           779:                        }
        !           780:                        break;
        !           781: #endif
        !           782:                case N_C:
        !           783:                        PRINTCPLX((C)q); break;
        !           784:                case N_M:
        !           785:                        TAIL PRINTF(OUT,"%d",CONT((MQ)q)); break;
        !           786:                case N_LM:
        !           787:                        PRINTN(((LM)q)->body); break;
        !           788:                case N_GF2N:
        !           789:                        if ( hex_output )
        !           790:                                PRINTN((N)(((GF2N)q)->body));
        !           791:                        else
        !           792:                                PRINTUP2(((GF2N)q)->body);
        !           793:                        break;
        !           794:                case N_GFPN:
        !           795:                        PRINTUP((UP)(((GFPN)q)->body));
        !           796:                        break;
        !           797:                case N_GFS:
        !           798:                        TAIL PRINTF(OUT,"@_%d",CONT((GFS)q));
        !           799:                        break;
        !           800:                case N_GFSN:
        !           801:                        PRINTUM(BDY((GFSN)q));
        !           802:                        break;
        !           803:        }
        !           804: }
        !           805:
        !           806: void PRINTN(n)
        !           807: N n;
        !           808: {
        !           809:        register int i,*ptr;
        !           810:        N tn;
        !           811:
        !           812:        if ( !n ) {
        !           813:                PUTS("0");
        !           814:                return;
        !           815:        }
        !           816:        if ( hex_output ) {
        !           817:                ptr = BD(n);
        !           818:                TAIL PRINTF(OUT,"0x%x",ptr[PL(n)-1]);
        !           819:                if ( hex_output < 0 )
        !           820:                        for ( i = PL(n) - 2; i >= 0; i-- ) {
        !           821:                                TAIL PRINTF(OUT,"|%08x",ptr[i]);
        !           822:                        }
        !           823:                else
        !           824:                        for ( i = PL(n) - 2; i >= 0; i-- ) {
        !           825:                                TAIL PRINTF(OUT,"%08x",ptr[i]);
        !           826:                        }
        !           827:        } else {
        !           828:                ntobn(DBASE,n,&tn);
        !           829:                ptr = BD(tn);
        !           830:                TAIL PRINTF(OUT,"%d",ptr[PL(tn) - 1]);
        !           831:                for ( i = PL(tn) - 2; i >= 0; i-- ) {
        !           832:                        TAIL PRINTF(OUT,DFORMAT,ptr[i]);
        !           833:                }
        !           834:        }
        !           835: }
        !           836:
        !           837: void PRINTV(vl,v)
        !           838: VL vl;
        !           839: V v;
        !           840: {
        !           841:        PF pf;
        !           842:        PFAD ad;
        !           843:        int i;
        !           844:
        !           845:        if ( NAME(v) )
        !           846:                PUTS(NAME(v));
        !           847:        else if ( (vid)v->attr == V_PF ) {
        !           848:                pf = ((PFINS)v->priv)->pf; ad = ((PFINS)v->priv)->ad;
        !           849:                if ( !strcmp(NAME(pf),"pow") ) {
        !           850:                        PUTS("(("); PRINTR(vl,(R)ad[0].arg); PUTS(")"); PRINTHAT; PUTS("(");
        !           851:                        PRINTR(vl,(R)ad[1].arg); PUTS("))");
        !           852:                } else if ( !pf->argc ) {
        !           853:                        TAIL PRINTF(OUT,"%s",NAME(pf));
        !           854:                } else {
        !           855:                        if ( hideargs ) {
        !           856:                                for ( i = 0; i < pf->argc; i++ )
        !           857:                                        if ( ad[i].d )
        !           858:                                                break;
        !           859:                                if ( i < pf->argc ) {
        !           860:                                        TAIL PRINTF(OUT,"%s{%d",NAME(pf),ad[0].d);
        !           861:                                        for ( i = 1; i < pf->argc; i++ ) {
        !           862:                                                TAIL PRINTF(OUT,",%d",ad[i].d);
        !           863:                                        }
        !           864:                                        PUTS("}");
        !           865:                                } else {
        !           866:                                        TAIL PRINTF(OUT,"%s",NAME(pf));
        !           867:                                }
        !           868:                        } else {
        !           869:                                for ( i = 0; i < pf->argc; i++ )
        !           870:                                        if ( ad[i].d )
        !           871:                                                break;
        !           872:                                if ( i < pf->argc ) {
        !           873:                                        TAIL PRINTF(OUT,"%s{%d",NAME(pf),ad[0].d);
        !           874:                                        for ( i = 1; i < pf->argc; i++ ) {
        !           875:                                                TAIL PRINTF(OUT,",%d",ad[i].d);
        !           876:                                        }
        !           877:                                        PUTS("}(");
        !           878:                                } else {
        !           879:                                        TAIL PRINTF(OUT,"%s(",NAME(pf));
        !           880:                                }
        !           881:                                PRINTR(vl,(R)ad[0].arg);
        !           882:                                for ( i = 1; i < pf->argc; i++ ) {
        !           883:                                        PUTS(","); PRINTR(vl,(R)ad[i].arg);
        !           884:                                }
        !           885:                                PUTS(")");
        !           886:                        }
        !           887:                }
        !           888:        }
        !           889: }
        !           890:
        !           891: void PRINTSTR(str)
        !           892: STRING str;
        !           893: {
        !           894:        char *p;
        !           895:
        !           896:        for ( p = BDY(str); *p; p++ )
        !           897:                if ( *p == '"' )
        !           898:                        PUTS("\"");
        !           899:                else {
        !           900:                        TAIL PRINTF(OUT,"%c",*p);
        !           901:                }
        !           902: }
        !           903:
        !           904: void PRINTDP(vl,d)
        !           905: VL vl;
        !           906: DP d;
        !           907: {
        !           908:        int n,i;
        !           909:        MP m;
        !           910:        DL dl;
        !           911:
        !           912:        for ( n = d->nv, m = BDY(d); m; m = NEXT(m) ) {
        !           913:                PUTS("("); PRINTEXPR(vl,(pointer)m->c); PUTS(")*<<");
        !           914:                for ( i = 0, dl = m->dl; i < n-1; i++ ) {
        !           915:                        TAIL PRINTF(OUT,"%d,",dl->d[i]);
        !           916:                }
        !           917:                TAIL PRINTF(OUT,"%d",dl->d[i]);
        !           918:                PUTS(">>");
        !           919:                if ( NEXT(m) )
        !           920:                        PUTS("+");
        !           921:        }
        !           922: }
        !           923:
        !           924: void PRINTUI(vl,u)
        !           925: VL vl;
        !           926: USINT u;
        !           927: {
        !           928:        TAIL PRINTF(OUT,"%u",BDY(u));
        !           929: }
        !           930:
        !           931: void PRINTGFMMAT(vl,mat)
        !           932: VL vl;
        !           933: GFMMAT mat;
        !           934: {
        !           935:        int row,col,i,j;
        !           936:        unsigned int **b;
        !           937:
        !           938:        row = mat->row;
        !           939:        col = mat->col;
        !           940:        b = mat->body;
        !           941:        for ( i = 0; i < row; i++ ) {
        !           942:                PUTS("[");
        !           943:                for ( j = 0; j < col; j++ ) {
        !           944:                        TAIL PRINTF(OUT,"%8d",b[i][j]);
        !           945:                }
        !           946:                PUTS("]\n");
        !           947:        }
        !           948: }
        !           949:
        !           950: void PRINTBYTEARRAY(vl,array)
        !           951: VL vl;
        !           952: BYTEARRAY array;
        !           953: {
        !           954:        int len,i;
        !           955:        unsigned char *b;
        !           956:
        !           957:        len = array->len;
        !           958:        b = array->body;
        !           959:        PUTS("|");
        !           960:        for ( i = 0; i < len-1; i++ ) {
        !           961:                TAIL PRINTF(OUT,"%02x ",(unsigned int)b[i]);
        !           962:        }
        !           963:        TAIL PRINTF(OUT,"%02x",(unsigned int)b[i]);
        !           964:        PUTS("|");
        !           965: }
        !           966:
        !           967: void PRINTQUOTE(vl,quote)
        !           968: VL vl;
        !           969: QUOTE quote;
        !           970: {
        !           971:        LIST list;
        !           972:
        !           973:        if ( print_quote == 1 ) {
        !           974:                fnodetotree(BDY(quote),&list);
        !           975:                PRINTEXPR(vl,(Obj)list);
        !           976:        } else if ( print_quote == 2 ) {
        !           977:                PRINTFNODE(BDY(quote),0);
        !           978:        } else {
        !           979:                PUTS("<...quoted...>");
        !           980:        }
        !           981: }
        !           982:
        !           983: void PRINTTB(VL vl,TB p)
        !           984: {
        !           985:        int i;
        !           986:
        !           987:        for ( i = 0; i < p->next; i++ ) {
        !           988:                PUTS(p->body[i]);
        !           989:        }
        !           990: }
        !           991:
        !           992: void PRINTUP2(p)
        !           993: UP2 p;
        !           994: {
        !           995:        int d,i;
        !           996:
        !           997:        if ( !p ) {
        !           998:                TAIL PRINTF(OUT,"0");
        !           999:        } else {
        !          1000:                d = degup2(p);
        !          1001:                TAIL PRINTF(OUT,"(");
        !          1002:                if ( !d ) {
        !          1003:                        TAIL PRINTF(OUT,"1");
        !          1004:                } else if ( d == 1 ) {
        !          1005:                        TAIL PRINTF(OUT,"@");
        !          1006:                } else {
        !          1007:                        PUTS("@"); PRINTHAT; TAIL PRINTF(OUT,"%d",d);
        !          1008:                }
        !          1009:                for ( i = d-1; i >= 0; i-- ) {
        !          1010:                        if ( p->b[i/BSH] & (1<<(i%BSH)) )
        !          1011:                                if ( !i ) {
        !          1012:                                        TAIL PRINTF(OUT,"+1");
        !          1013:                                } else if ( i == 1 ) {
        !          1014:                                        TAIL PRINTF(OUT,"+@");
        !          1015:                                } else {
        !          1016:                                        PUTS("+@"); PRINTHAT; TAIL PRINTF(OUT,"%d",i);
        !          1017:                                }
        !          1018:                }
        !          1019:                TAIL PRINTF(OUT,")");
        !          1020:        }
        !          1021: }
        !          1022:
        !          1023: void PRINTQOP(vl,f)
        !          1024: VL vl;
        !          1025: F f;
        !          1026: {
        !          1027:        char *op;
        !          1028:
        !          1029:        op = FOP(f)==AL_EX?"ex":"all";
        !          1030:        TAIL PRINTF(OUT,"%s(%s,",op,NAME(FQVR(f)));
        !          1031:        PRINTEXPR(vl,(Obj)FQMAT(f)); PUTS(")");
        !          1032: }
        !          1033:
        !          1034: void PRINTUP(n)
        !          1035: UP n;
        !          1036: {
        !          1037:        int i,d;
        !          1038:
        !          1039:        if ( !n )
        !          1040:                PUTS("0");
        !          1041:        else if ( !n->d )
        !          1042:                PRINTNUM(n->c[0]);
        !          1043:        else {
        !          1044:                d = n->d;
        !          1045:                PUTS("(");
        !          1046:                if ( !d ) {
        !          1047:                        PRINTNUM(n->c[d]);
        !          1048:                } else if ( d == 1 ) {
        !          1049:                        PRINTNUM(n->c[d]);
        !          1050:                        PUTS("*@p");
        !          1051:                } else {
        !          1052:                        PRINTNUM(n->c[d]);
        !          1053:                        PUTS("*@p"); PRINTHAT; TAIL PRINTF(OUT,"%d",d);
        !          1054:                }
        !          1055:                for ( i = d-1; i >= 0; i-- ) {
        !          1056:                        if ( n->c[i] ) {
        !          1057:                                PUTS("+("); PRINTNUM(n->c[i]); PUTS(")");
        !          1058:                                if ( i >= 2 ) {
        !          1059:                                        PUTS("*@p"); PRINTHAT; TAIL PRINTF(OUT,"%d",i);
        !          1060:                                } else if ( i == 1 )
        !          1061:                                        PUTS("*@p");
        !          1062:                        }
        !          1063:                }
        !          1064:                PUTS(")");
        !          1065:        }
        !          1066: }
        !          1067:
        !          1068: void PRINTUM(n)
        !          1069: UM n;
        !          1070: {
        !          1071:        int i,d;
        !          1072:
        !          1073:        if ( !n )
        !          1074:                PUTS("0");
        !          1075:        else if ( !n->d )
        !          1076:                PRINTSF(n->c[0]);
        !          1077:        else {
        !          1078:                d = n->d;
        !          1079:                PUTS("(");
        !          1080:                if ( !d ) {
        !          1081:                        PRINTSF(n->c[d]);
        !          1082:                } else if ( d == 1 ) {
        !          1083:                        PRINTSF(n->c[d]);
        !          1084:                        PUTS("*@s");
        !          1085:                } else {
        !          1086:                        PRINTSF(n->c[d]);
        !          1087:                        PUTS("*@s"); PRINTHAT; TAIL PRINTF(OUT,"%d",d);
        !          1088:                }
        !          1089:                for ( i = d-1; i >= 0; i-- ) {
        !          1090:                        if ( n->c[i] ) {
        !          1091:                                PUTS("+("); PRINTSF(n->c[i]); PUTS(")");
        !          1092:                                if ( i >= 2 ) {
        !          1093:                                        PUTS("*@s"); PRINTHAT; TAIL PRINTF(OUT,"%d",i);
        !          1094:                                } else if ( i == 1 )
        !          1095:                                        PUTS("*@s");
        !          1096:                        }
        !          1097:                }
        !          1098:                PUTS(")");
        !          1099:        }
        !          1100: }
        !          1101:
        !          1102: void PRINTSF(i)
        !          1103: unsigned int i;
        !          1104: {
        !          1105:        if ( !i ) {
        !          1106:                PUTS("0");
        !          1107:        } else {
        !          1108:                TAIL PRINTF(OUT,"@_%d",IFTOF(i));
        !          1109:        }
        !          1110: }
        !          1111:
        !          1112: void PRINTSYMBOL(SYMBOL sym)
        !          1113: {
        !          1114:        PUTS(sym->name);
        !          1115: }
        !          1116:
        !          1117: #endif /* CPRINT */

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