[BACK]Return to ox.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / ox_toolkit

Diff for /OpenXM/src/ox_toolkit/ox.c between version 1.15 and 1.22

version 1.15, 2000/10/12 15:53:25 version 1.22, 2003/03/23 20:17:35
Line 1 
Line 1 
 /* -*- 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.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.
Line 9 
Line 9 
   
 #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>
Line 19 
Line 20 
 #include "ox_toolkit.h"  #include "ox_toolkit.h"
 #include "parse.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_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);
 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 88  cmo_error2* make_error_object(int err_code, cmo *ob)
Line 93  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 118  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 187  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 232  static cmo_error2* receive_cmo_error2(OXFILE *oxfp)
Line 232  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 259  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 281  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 297  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 308  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 388  int ox_flush(OXFILE *sv)
Line 387  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. */
     }      }
   
     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 489  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 533  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 544  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 554  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 576  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);
       }
 }  }

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.22

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>