version 1.15, 2000/10/12 15:53:25 |
version 1.18, 2000/12/05 08:30:25 |
|
|
/* -*- mode: C; coding: euc-japan -*- */ |
/* -*- mode: C; coding: euc-japan -*- */ |
/* $OpenXM: OpenXM/src/ox_toolkit/ox.c,v 1.14 2000/10/11 06:56:02 ohara Exp $ */ |
/* $OpenXM: OpenXM/src/ox_toolkit/ox.c,v 1.17 2000/12/03 16:15:03 ohara Exp $ */ |
|
|
/* |
/* |
This module includes functions for sending/receiveng CMO's. |
This module includes functions for sending/receiveng CMO's. |
|
|
#include "ox_toolkit.h" |
#include "ox_toolkit.h" |
#include "parse.h" |
#include "parse.h" |
|
|
/* CMO_xxx の値の順にならべること(デバッグのため) */ |
/* sorting by the value of CMO_xxx. (for debugging) */ |
static cmo_null* receive_cmo_null(OXFILE *oxfp); |
static cmo_null* receive_cmo_null(OXFILE *oxfp); |
static cmo_int32* receive_cmo_int32(OXFILE *oxfp); |
static cmo_int32* receive_cmo_int32(OXFILE *oxfp); |
static cmo_string* receive_cmo_string(OXFILE *oxfp); |
static cmo_string* receive_cmo_string(OXFILE *oxfp); |
Line 88 cmo_error2* make_error_object(int err_code, cmo *ob) |
|
Line 88 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(current_received_serial)); |
list_append(li, (cmo *)new_cmo_int32(err_code)); |
list_append(li, (cmo *)new_cmo_int32(err_code)); |
list_append(li, ob); |
list_append(li, ob); |
/* 他の情報を加えるならココ */ |
|
return new_cmo_error2((cmo *)li); |
return new_cmo_error2((cmo *)li); |
} |
} |
|
|
#define DEFAULT_SERIAL_NUMBER 0x0000ffff |
|
#define receive_serial_number(x) (receive_int32((x))) |
|
|
|
/* getting a next serial number. */ |
/* getting a next serial number. */ |
int next_serial(OXFILE *oxfp) |
int next_serial(OXFILE *oxfp) |
{ |
{ |
/* |
|
static int serial_number = DEFAULT_SERIAL_NUMBER; |
|
*/ |
|
return oxfp->serial_number++; |
return oxfp->serial_number++; |
} |
} |
|
|
Line 120 int receive_int32(OXFILE *oxfp) |
|
Line 113 int receive_int32(OXFILE *oxfp) |
|
int receive_ox_tag(OXFILE *oxfp) |
int receive_ox_tag(OXFILE *oxfp) |
{ |
{ |
int tag = receive_int32(oxfp); |
int tag = receive_int32(oxfp); |
current_received_serial = receive_serial_number(oxfp); |
oxfp->received_serial_number = receive_int32(oxfp); |
return tag; |
return tag; |
} |
} |
|
|
Line 232 static cmo_error2* receive_cmo_error2(OXFILE *oxfp) |
|
Line 225 static cmo_error2* receive_cmo_error2(OXFILE *oxfp) |
|
return new_cmo_error2(ob); |
return new_cmo_error2(ob); |
} |
} |
|
|
/* receive_ox_tag() == OX_DATA の後に呼び出される */ |
/* receive_cmo() is called after receive_ox_tag(). */ |
/* 関数ポインタを使った方がきれいに書けるような気がする. */ |
|
/* if (foo[tag] != NULL) foo[tag](oxfp); とか */ |
|
|
|
cmo* receive_cmo(OXFILE *oxfp) |
cmo* receive_cmo(OXFILE *oxfp) |
{ |
{ |
cmo* m; |
cmo* m; |
Line 388 int ox_flush(OXFILE *sv) |
|
Line 378 int ox_flush(OXFILE *sv) |
|
void ox_reset(OXFILE *sv) |
void ox_reset(OXFILE *sv) |
{ |
{ |
send_ox_command(oxf_control(sv), SM_control_reset_connection); |
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) { |
while(receive_ox_tag(sv) != OX_SYNC_BALL) { |
receive_cmo(sv); /* skipping a message. */ |
receive_cmo(sv); /* skipping a message. */ |
} |
} |