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>