version 1.18, 2000/12/05 08:30:25 |
version 1.22, 2003/03/23 20:17:35 |
|
|
/* -*- mode: C; coding: euc-japan -*- */ |
/* -*- 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.21 2003/02/04 20:43:55 ohara Exp $ */ |
|
|
/* |
/* |
This module includes functions for sending/receiveng CMO's. |
This module includes functions for sending/receiveng CMO's. |
|
|
|
|
#include <stdio.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
|
#include <stdarg.h> |
#include <string.h> |
#include <string.h> |
#include <unistd.h> |
#include <unistd.h> |
#include <fcntl.h> |
#include <fcntl.h> |
|
|
#include "ox_toolkit.h" |
#include "ox_toolkit.h" |
#include "parse.h" |
#include "parse.h" |
|
|
|
static FILE *ox_stderr = NULL; |
|
|
/* sorting by the value of CMO_xxx. (for debugging) */ |
/* 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); |
Line 26 static cmo_string* receive_cmo_string(OXFILE *ox |
|
Line 29 static cmo_string* receive_cmo_string(OXFILE *ox |
|
static cmo_mathcap* receive_cmo_mathcap(OXFILE *oxfp); |
static cmo_mathcap* receive_cmo_mathcap(OXFILE *oxfp); |
static cmo_list* receive_cmo_list(OXFILE *oxfp); |
static cmo_list* receive_cmo_list(OXFILE *oxfp); |
static cmo_monomial32* receive_cmo_monomial32(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_zero* receive_cmo_zero(OXFILE *oxfp); |
static cmo_dms_generic* receive_cmo_dms_generic(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_ring_by_name* receive_cmo_ring_by_name(OXFILE *oxfp); |
static cmo_distributed_polynomial* receive_cmo_distributed_polynomial(OXFILE *oxfp); |
static cmo_distributed_polynomial* receive_cmo_distributed_polynomial(OXFILE *oxfp); |
|
|
static cmo_error2* receive_cmo_error2(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_null(OXFILE *oxfp, cmo_null* c); |
static int send_cmo_int32(OXFILE *oxfp, cmo_int32* m); |
static int send_cmo_int32(OXFILE *oxfp, cmo_int32* m); |
Line 41 static int send_cmo_string(OXFILE *oxfp, cmo_ |
|
Line 41 static int send_cmo_string(OXFILE *oxfp, cmo_ |
|
static int send_cmo_mathcap(OXFILE *oxfp, cmo_mathcap* c); |
static int send_cmo_mathcap(OXFILE *oxfp, cmo_mathcap* c); |
static int send_cmo_list(OXFILE *oxfp, cmo_list* 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_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_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 int send_cmo_distributed_polynomial(OXFILE *oxfp, cmo_distributed_polynomial* c); |
|
|
|
#if defined(WITH_GMP) |
|
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); |
|
#endif /* WITH_GMP */ |
|
|
/* hook functions. (yet not implemented) */ |
/* hook functions. (yet not implemented) */ |
static hook_t hook_before_send_cmo = NULL; |
static hook_t hook_before_send_cmo = NULL; |
static hook_t hook_after_send_cmo = NULL; |
static hook_t hook_after_send_cmo = NULL; |
Line 180 static cmo_monomial32* receive_cmo_monomial32(OXFILE * |
|
Line 185 static cmo_monomial32* receive_cmo_monomial32(OXFILE * |
|
return c; |
return c; |
} |
} |
|
|
|
#if defined(WITH_GMP) |
static cmo_zz* receive_cmo_zz(OXFILE *oxfp) |
static cmo_zz* receive_cmo_zz(OXFILE *oxfp) |
{ |
{ |
cmo_zz* c = new_cmo_zz(); |
cmo_zz* c = new_cmo_zz(); |
receive_mpz(oxfp, c->mpz); |
receive_mpz(oxfp, c->mpz); |
return c; |
return c; |
} |
} |
|
#endif /* WITH_GMP */ |
|
|
static cmo_zero* receive_cmo_zero(OXFILE *oxfp) |
static cmo_zero* receive_cmo_zero(OXFILE *oxfp) |
{ |
{ |
Line 249 cmo* receive_cmo(OXFILE *oxfp) |
|
Line 256 cmo* receive_cmo(OXFILE *oxfp) |
|
case CMO_MONOMIAL32: |
case CMO_MONOMIAL32: |
m = (cmo *)receive_cmo_monomial32(oxfp); |
m = (cmo *)receive_cmo_monomial32(oxfp); |
break; |
break; |
|
#if defined(WITH_GMP) |
case CMO_ZZ: |
case CMO_ZZ: |
m = (cmo *)receive_cmo_zz(oxfp); |
m = (cmo *)receive_cmo_zz(oxfp); |
break; |
break; |
|
#endif /* WITH_GMP */ |
case CMO_ZERO: |
case CMO_ZERO: |
m = (cmo *)receive_cmo_zero(oxfp); |
m = (cmo *)receive_cmo_zero(oxfp); |
break; |
break; |
Line 271 cmo* receive_cmo(OXFILE *oxfp) |
|
Line 280 cmo* receive_cmo(OXFILE *oxfp) |
|
case CMO_QQ: |
case CMO_QQ: |
default: |
default: |
m = NULL; |
m = NULL; |
fprintf(stderr, "the CMO (%d) is not implemented.\n", tag); |
ox_printf("the CMO (%d) is not implemented.\n", tag); |
} |
} |
return m; |
return m; |
} |
} |
|
|
|
#if defined(WITH_GMP) |
static void receive_mpz(OXFILE *oxfp, mpz_ptr mpz) |
static void receive_mpz(OXFILE *oxfp, mpz_ptr mpz) |
{ |
{ |
int i; |
int i; |
Line 287 static void receive_mpz(OXFILE *oxfp, mpz_ptr mpz) |
|
Line 297 static void receive_mpz(OXFILE *oxfp, mpz_ptr mpz) |
|
mpz->_mp_d[i] = receive_int32(oxfp); |
mpz->_mp_d[i] = receive_int32(oxfp); |
} |
} |
} |
} |
|
#endif /* WITH_GMP */ |
|
|
void send_ox_command(OXFILE *oxfp, int sm_command) |
void send_ox_command(OXFILE *oxfp, int sm_command) |
{ |
{ |
Line 298 void send_ox_command(OXFILE *oxfp, int sm_command) |
|
Line 309 void send_ox_command(OXFILE *oxfp, int sm_command) |
|
void ox_close(OXFILE *sv) |
void ox_close(OXFILE *sv) |
{ |
{ |
send_ox_command(oxf_control(sv), SM_control_kill); |
send_ox_command(oxf_control(sv), SM_control_kill); |
#ifdef DEBUG |
|
sleep(2); |
sleep(2); |
/* We wait thar an OpenXM server terminates. */ |
/* 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 |
|
} |
} |
|
|
void ox_shutdown(OXFILE *sv) |
void ox_shutdown(OXFILE *sv) |
Line 383 void ox_reset(OXFILE *sv) |
|
Line 392 void ox_reset(OXFILE *sv) |
|
} |
} |
|
|
send_ox_tag(sv, OX_SYNC_BALL); |
send_ox_tag(sv, OX_SYNC_BALL); |
#ifdef DEBUG |
ox_printf("I have reset an Open XM server.\n"); |
fprintf(stderr, "I have reset an Open XM server.\n"); |
|
#endif |
|
} |
} |
|
|
void send_ox(OXFILE *oxfp, ox *m) |
void send_ox(OXFILE *oxfp, ox *m) |
Line 475 static int send_cmo_monomial32(OXFILE *oxfp, cmo_monom |
|
Line 482 static int send_cmo_monomial32(OXFILE *oxfp, cmo_monom |
|
return 0; |
return 0; |
} |
} |
|
|
|
#if defined(WITH_GMP) |
static int send_cmo_zz(OXFILE *oxfp, cmo_zz* c) |
static int send_cmo_zz(OXFILE *oxfp, cmo_zz* c) |
{ |
{ |
send_mpz(oxfp, c->mpz); |
send_mpz(oxfp, c->mpz); |
return 0; |
return 0; |
} |
} |
|
#endif /* WITH_GMP */ |
|
|
static int send_cmo_error2(OXFILE *oxfp, cmo_error2* c) |
static int send_cmo_error2(OXFILE *oxfp, cmo_error2* c) |
{ |
{ |
Line 519 void send_cmo(OXFILE *oxfp, cmo* c) |
|
Line 528 void send_cmo(OXFILE *oxfp, cmo* c) |
|
case CMO_MONOMIAL32: |
case CMO_MONOMIAL32: |
send_cmo_monomial32(oxfp, (cmo_monomial32 *)c); |
send_cmo_monomial32(oxfp, (cmo_monomial32 *)c); |
break; |
break; |
|
#if defined(WITH_GMP) |
case CMO_ZZ: |
case CMO_ZZ: |
send_cmo_zz(oxfp, (cmo_zz *)c); |
send_cmo_zz(oxfp, (cmo_zz *)c); |
break; |
break; |
|
#endif /* WITH_GMP */ |
case CMO_DISTRIBUTED_POLYNOMIAL: |
case CMO_DISTRIBUTED_POLYNOMIAL: |
send_cmo_distributed_polynomial(oxfp, (cmo_distributed_polynomial *)c); |
send_cmo_distributed_polynomial(oxfp, (cmo_distributed_polynomial *)c); |
break; |
break; |
Line 530 void send_cmo(OXFILE *oxfp, cmo* c) |
|
Line 541 void send_cmo(OXFILE *oxfp, cmo* c) |
|
} |
} |
} |
} |
|
|
|
#if defined(WITH_GMP) |
static int send_mpz(OXFILE *oxfp, mpz_ptr mpz) |
static int send_mpz(OXFILE *oxfp, mpz_ptr mpz) |
{ |
{ |
int i; |
int i; |
Line 540 static int send_mpz(OXFILE *oxfp, mpz_ptr mpz) |
|
Line 552 static int send_mpz(OXFILE *oxfp, mpz_ptr mpz) |
|
} |
} |
return 0; |
return 0; |
} |
} |
|
#endif /* WITH_GMP */ |
|
|
ox_data* new_ox_data(cmo* c) |
ox_data* new_ox_data(cmo* c) |
{ |
{ |
Line 562 ox_sync_ball* new_ox_sync_ball() |
|
Line 575 ox_sync_ball* new_ox_sync_ball() |
|
ox_sync_ball *m = malloc(sizeof(ox_sync_ball)); |
ox_sync_ball *m = malloc(sizeof(ox_sync_ball)); |
m->tag = OX_SYNC_BALL; |
m->tag = OX_SYNC_BALL; |
return m; |
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); |
|
} |
} |
} |