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