=================================================================== RCS file: /home/cvs/OpenXM/src/ox_toolkit/ox.c,v retrieving revision 1.16 retrieving revision 1.20 diff -u -p -r1.16 -r1.20 --- OpenXM/src/ox_toolkit/ox.c 2000/11/28 22:11:13 1.16 +++ OpenXM/src/ox_toolkit/ox.c 2003/01/13 12:03:12 1.20 @@ -1,5 +1,5 @@ /* -*- mode: C; coding: euc-japan -*- */ -/* $OpenXM: OpenXM/src/ox_toolkit/ox.c,v 1.15 2000/10/12 15:53:25 ohara Exp $ */ +/* $OpenXM: OpenXM/src/ox_toolkit/ox.c,v 1.19 2003/01/11 11:42:31 ohara Exp $ */ /* This module includes functions for sending/receiveng CMO's. @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -19,7 +20,9 @@ #include "ox_toolkit.h" #include "parse.h" -/* CMO_xxx の値の順にならべること(デバッグのため) */ +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); static cmo_string* receive_cmo_string(OXFILE *oxfp); @@ -88,7 +91,6 @@ cmo_error2* make_error_object(int err_code, cmo *ob) list_append(li, (cmo *)new_cmo_int32(current_received_serial)); list_append(li, (cmo *)new_cmo_int32(err_code)); list_append(li, ob); - /* 他の情報を加えるならココ */ return new_cmo_error2((cmo *)li); } @@ -226,10 +228,7 @@ static cmo_error2* receive_cmo_error2(OXFILE *oxfp) return new_cmo_error2(ob); } -/* receive_ox_tag() == OX_DATA の後に呼び出される */ -/* 関数ポインタを使った方がきれいに書けるような気がする. */ -/* if (foo[tag] != NULL) foo[tag](oxfp); とか */ - +/* receive_cmo() is called after receive_ox_tag(). */ cmo* receive_cmo(OXFILE *oxfp) { cmo* m; @@ -275,7 +274,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; } @@ -305,7 +304,7 @@ void ox_close(OXFILE *sv) #ifdef DEBUG sleep(2); /* We wait thar an OpenXM server terminates. */ - fprintf(stderr, "I have closed the connection to an Open XM server.\n"); + ox_printf("I have closed the connection to an Open XM server.\n"); #endif } @@ -382,17 +381,13 @@ int ox_flush(OXFILE *sv) void ox_reset(OXFILE *sv) { send_ox_command(oxf_control(sv), SM_control_reset_connection); - - receive_ox_tag(oxf_control(sv)); /* OX_DATA */ - receive_cmo(oxf_control(sv)); /* (CMO_INT32, 0) */ - while(receive_ox_tag(sv) != OX_SYNC_BALL) { receive_cmo(sv); /* skipping a message. */ } send_ox_tag(sv, OX_SYNC_BALL); #ifdef DEBUG - fprintf(stderr, "I have reset an Open XM server.\n"); + ox_printf("I have reset an Open XM server.\n"); #endif } @@ -570,4 +565,17 @@ 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 != NULL)? fp: (stderr); + setbuf(ox_stderr, NULL); +} + +int ox_printf(char *format, ...) +{ + va_list ap; + va_start(ap, format); + vfprintf(ox_stderr, format, ap); }