=================================================================== RCS file: /home/cvs/OpenXM/src/ox_toolkit/ox.c,v retrieving revision 1.18 retrieving revision 1.24 diff -u -p -r1.18 -r1.24 --- OpenXM/src/ox_toolkit/ox.c 2000/12/05 08:30:25 1.18 +++ OpenXM/src/ox_toolkit/ox.c 2003/05/25 16:35:40 1.24 @@ -1,5 +1,5 @@ /* -*- mode: C; coding: euc-japan -*- */ -/* $OpenXM: OpenXM/src/ox_toolkit/ox.c,v 1.17 2000/12/03 16:15:03 ohara Exp $ */ +/* $OpenXM: OpenXM/src/ox_toolkit/ox.c,v 1.23 2003/03/30 08:05:22 ohara Exp $ */ /* This module includes functions for sending/receiveng CMO's. @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -19,6 +20,8 @@ #include "ox_toolkit.h" #include "parse.h" +static FILE *ox_stderr = NULL; + /* sorting by the value of CMO_xxx. (for debugging) */ static cmo_null* receive_cmo_null(OXFILE *oxfp); static cmo_int32* receive_cmo_int32(OXFILE *oxfp); @@ -26,14 +29,11 @@ static cmo_string* receive_cmo_string(OXFILE *ox static cmo_mathcap* receive_cmo_mathcap(OXFILE *oxfp); static cmo_list* receive_cmo_list(OXFILE *oxfp); static cmo_monomial32* receive_cmo_monomial32(OXFILE *oxfp); -static cmo_zz* receive_cmo_zz(OXFILE *oxfp); static cmo_zero* receive_cmo_zero(OXFILE *oxfp); static cmo_dms_generic* receive_cmo_dms_generic(OXFILE *oxfp); static cmo_ring_by_name* receive_cmo_ring_by_name(OXFILE *oxfp); static cmo_distributed_polynomial* receive_cmo_distributed_polynomial(OXFILE *oxfp); - static cmo_error2* receive_cmo_error2(OXFILE *oxfp); -static void receive_mpz(OXFILE *oxfp, mpz_ptr mpz); static int send_cmo_null(OXFILE *oxfp, cmo_null* c); static int send_cmo_int32(OXFILE *oxfp, cmo_int32* m); @@ -41,11 +41,14 @@ static int send_cmo_string(OXFILE *oxfp, cmo_ static int send_cmo_mathcap(OXFILE *oxfp, cmo_mathcap* c); static int send_cmo_list(OXFILE *oxfp, cmo_list* c); static int send_cmo_monomial32(OXFILE *oxfp, cmo_monomial32* c); -static int send_cmo_zz(OXFILE *oxfp, cmo_zz* c); static int send_cmo_error2(OXFILE *oxfp, cmo_error2* c); -static int send_mpz(OXFILE *oxfp, mpz_ptr mpz); static int send_cmo_distributed_polynomial(OXFILE *oxfp, cmo_distributed_polynomial* c); +static cmo_zz* receive_cmo_zz(OXFILE *oxfp); +static void receive_mpz(OXFILE *oxfp, mpz_ptr mpz); +static int send_cmo_zz(OXFILE *oxfp, cmo_zz* c); +static int send_mpz(OXFILE *oxfp, mpz_ptr mpz); + /* hook functions. (yet not implemented) */ static hook_t hook_before_send_cmo = NULL; static hook_t hook_after_send_cmo = NULL; @@ -228,8 +231,13 @@ static cmo_error2* receive_cmo_error2(OXFILE *oxfp) /* receive_cmo() is called after receive_ox_tag(). */ cmo* receive_cmo(OXFILE *oxfp) { - cmo* m; int tag = receive_int32(oxfp); + return receive_cmo_tag(oxfp, tag); +} + +cmo *receive_cmo_tag(OXFILE *oxfp, int tag) +{ + cmo* m; switch(tag) { case CMO_NULL: m = receive_cmo_null(oxfp); @@ -271,7 +279,7 @@ cmo* receive_cmo(OXFILE *oxfp) case CMO_QQ: default: m = NULL; - fprintf(stderr, "the CMO (%d) is not implemented.\n", tag); + ox_printf("the CMO (%d) is not implemented.\n", tag); } return m; } @@ -298,11 +306,9 @@ void send_ox_command(OXFILE *oxfp, int sm_command) void ox_close(OXFILE *sv) { send_ox_command(oxf_control(sv), SM_control_kill); -#ifdef DEBUG sleep(2); /* We wait thar an OpenXM server terminates. */ - fprintf(stderr, "I have closed the connection to an Open XM server.\n"); -#endif + ox_printf("I have closed the connection to an Open XM server.\n"); } void ox_shutdown(OXFILE *sv) @@ -383,9 +389,7 @@ void ox_reset(OXFILE *sv) } send_ox_tag(sv, OX_SYNC_BALL); -#ifdef DEBUG - fprintf(stderr, "I have reset an Open XM server.\n"); -#endif + ox_printf("I have reset an Open XM server.\n"); } void send_ox(OXFILE *oxfp, ox *m) @@ -562,4 +566,21 @@ ox_sync_ball* new_ox_sync_ball() ox_sync_ball *m = malloc(sizeof(ox_sync_ball)); m->tag = OX_SYNC_BALL; return m; +} + +int ox_stderr_init(FILE *fp) +{ + ox_stderr = fp; + if (ox_stderr != NULL) { + setbuf(ox_stderr, NULL); + } +} + +int ox_printf(char *format, ...) +{ + if (ox_stderr != NULL) { + va_list ap; + va_start(ap, format); + vfprintf(ox_stderr, format, ap); + } }