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