=================================================================== RCS file: /home/cvs/OpenXM/src/ox_toolkit/print.c,v retrieving revision 1.1 retrieving revision 1.8 diff -u -p -r1.1 -r1.8 --- OpenXM/src/ox_toolkit/print.c 2000/10/10 05:23:21 1.1 +++ OpenXM/src/ox_toolkit/print.c 2018/04/05 06:17:27 1.8 @@ -1,5 +1,5 @@ /* -*- mode: C; coding: euc-japan -*- */ -/* $OpenXM$ */ +/* $OpenXM: OpenXM/src/ox_toolkit/print.c,v 1.7 2018/04/04 09:52:03 ohara Exp $ */ /* Functions in this module print a given CMO to console. @@ -15,16 +15,22 @@ static void print_cmo_int32(cmo_int32* c); static void print_cmo_list(cmo_list* li); static void print_cmo_mathcap(cmo_mathcap* c); static void print_cmo_string(cmo_string* c); +static void print_cmo_double(cmo_double* c); +static void print_cmo_bf(cmo_bf* c); +static void print_cmo_zz(cmo_zz* c); +static void print_cmo_qq(cmo_qq* c); +static void print_cmo_tree(cmo_tree* c); +static void print_cmo_polynomial_in_one_variable(cmo_polynomial_in_one_variable* c); +static void print_cmo_recursive_polynomial(cmo_recursive_polynomial* c); void print_cmo(cmo* c) { int tag = c->tag; - - symbol_t symp = lookup_by_tag(tag); - if (symp != NULL) { - fprintf(stderr, "(%s", symp->key); + char *s = get_symbol_by_tag(tag); + if (s != NULL) { + ox_printf("(%s", s); }else { - fprintf(stderr, "(%d", tag); + ox_printf("(%d", tag); } switch(tag) { @@ -46,38 +52,121 @@ void print_cmo(cmo* c) case CMO_NULL: case CMO_ZERO: case CMO_DMS_GENERIC: - fprintf(stderr, ")"); + ox_printf(")"); break; + case CMO_ZZ: + print_cmo_zz((cmo_zz *)c); + break; + case CMO_QQ: + print_cmo_qq((cmo_qq *)c); + break; + case CMO_BIGFLOAT: + print_cmo_bf((cmo_bf *)c); + break; + case CMO_IEEE_DOUBLE_FLOAT: + case CMO_64BIT_MACHINE_DOUBLE: + print_cmo_double((cmo_double *)c); + break; + case CMO_TREE: + print_cmo_tree((cmo_tree *)c); + break; + case CMO_POLYNOMIAL_IN_ONE_VARIABLE: + print_cmo_polynomial_in_one_variable((cmo_polynomial_in_one_variable *)c); + break; + case CMO_RECURSIVE_POLYNOMIAL: + print_cmo_recursive_polynomial((cmo_recursive_polynomial *)c); + break; default: - fprintf(stderr, "print_cmo() does not know how to print.\n"); + ox_printf("\nprint_cmo() does not know how to print cmo of type %d.\n", tag); } } static void print_cmo_int32(cmo_int32* c) { - fprintf(stderr, ", %d)", c->i); + ox_printf(", %d)", c->i); } static void print_cmo_list(cmo_list* this) { cell* cp = list_first(this); + ox_printf("[%d]", list_length(this)); while(!list_endof(this, cp)) { - fprintf(stderr, ", "); + ox_printf(", "); print_cmo(cp->cmo); cp=list_next(cp); } - fprintf(stderr, ")"); + ox_printf(")"); } static void print_cmo_mathcap(cmo_mathcap* c) { - fprintf(stderr, ", "); + ox_printf(", "); print_cmo(c->ob); - fprintf(stderr, ")"); + ox_printf(")"); } static void print_cmo_string(cmo_string* c) { - fprintf(stderr, ", \"%s\")", c->s); + ox_printf(", \"%s\")", c->s); +} + +static void print_cmo_double(cmo_double* c) +{ + ox_printf(", %.14f)", c->d); +} + +static void print_cmo_zz(cmo_zz* c) +{ + char buf[4096]; + gmp_sprintf(buf, ", %Zd)", c->mpz); + ox_printf("%s", buf); +} + +static void print_cmo_qq(cmo_qq* c) +{ + char buf[4096]; + gmp_sprintf(buf, ", %Qd)", c->mpq); + ox_printf("%s", buf); +} + +static void print_cmo_bf(cmo_bf* c) +{ + char buf[4096]; + mpfr_sprintf(buf, ", %.12f)", c->mpfr); + ox_printf("%s", buf); +} + +static void print_cmo_tree(cmo_tree* c) +{ + ox_printf(", "); + print_cmo(c->name); + ox_printf(", "); + print_cmo(c->attributes); + ox_printf(", "); + print_cmo(c->leaves); + ox_printf(")"); +} + + +static void print_cmo_polynomial_in_one_variable(cmo_polynomial_in_one_variable* c) +{ + int i; + cell *cc; + ox_printf(", %d", c->var); + for(i=0; ilength; i++) { + cc = list_nth_cell((cmo_list *)c, i); + ox_printf(", %d, ", cc->exp); + print_cmo(cc->cmo); + } + ox_printf(")"); +} + +static void print_cmo_recursive_polynomial(cmo_recursive_polynomial* c) +{ + ox_printf(", "); + print_cmo((cmo *)c->ringdef); + ox_printf(", "); + print_cmo(c->coef); + ox_printf(")"); }