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

Diff for /OpenXM/src/ox_math/Attic/serv2.c between version 1.3 and 1.4

version 1.3, 1999/11/03 10:56:40 version 1.4, 1999/11/04 03:05:51
Line 1 
Line 1 
 /* -*- mode: C; coding: euc-japan -*- */  /* -*- mode: C; coding: euc-japan -*- */
 /* $OpenXM: OpenXM/src/ox_math/serv2.c,v 1.2 1999/11/02 06:11:58 ohara Exp $ */  /* $OpenXM: OpenXM/src/ox_math/serv2.c,v 1.3 1999/11/03 10:56:40 ohara Exp $ */
   
 /* Open Mathematica サーバ */  /* Open Mathematica サーバ */
 /* ファイルディスクリプタ 3, 4 は open されていると仮定して動作する. */  /* ファイルディスクリプタ 3, 4 は open されていると仮定して動作する. */
Line 17 
Line 17 
 #define UNKNOWN_SM_COMMAND 50000  #define UNKNOWN_SM_COMMAND 50000
 #define MATH_ERROR         50001  #define MATH_ERROR         50001
   
   
 /* MLINK はポインタ型. */  /* MLINK はポインタ型. */
 MLINK lp = NULL;  MLINK lp = NULL;
   
   
   typedef cmo mlo;
   typedef cmo_string mlo_string;
   typedef cmo_zz mlo_zz;
   
   /* cmo_list の派生クラス*/
   typedef struct {
           int tag;
           int length;
           cell *head;
           char *function;
   } mlo_function;
   
   
   mlo *receive_mlo_zz()
   {
           char *s;
           mlo  *m;
   
           MLGetString(lp, &s);
           fprintf(stderr, "--debug: zz = %s.\n", s);
           m = (mlo *)new_cmo_zz_set_string(s);
           MLDisownString(lp, s);
           return m;
   }
   
   mlo *receive_mlo_string()
   {
           char *s;
           mlo  *m;
           MLGetString(lp, &s);
           m = (cmo *)new_cmo_string(s);
           MLDisownString(lp, s);
           return m;
   }
   
 /* Mathematica を起動する. */  /* Mathematica を起動する. */
 int MATH_init()  int MATH_init()
 {  {
Line 68  char *MATH_getObject()
Line 103  char *MATH_getObject()
     return s;      return s;
 }  }
   
   
 cmo *MATH_getObject2()  cmo *MATH_getObject2()
 {  {
     char *s;  
     cmo  *m;  
     char **sp;  
     int  i,n;  
   
     /* skip any packets before the first ReturnPacket */      /* skip any packets before the first ReturnPacket */
     while (MLNextPacket(lp) != RETURNPKT) {      while (MLNextPacket(lp) != RETURNPKT) {
         usleep(10);          usleep(10);
         MLNewPacket(lp);          MLNewPacket(lp);
     }      }
     /* いまはタイプにかかわらず文字列を取得する. */      /* いまはタイプにかかわらず文字列を取得する. */
     switch(MLGetNext(lp)) {          return MATH_getObject3();
   }
   
   cmo *MATH_getObject3()
   {
       char *s;
       cmo  *m;
       cmo  *ob;
       int  i,n;
           int type;
   
       /* いまはタイプにかかわらず文字列を取得する. */
           type = MLGetNext(lp);
       switch(type) {
     case MLTKINT:      case MLTKINT:
         fprintf(stderr, "type is INTEGER.\n");          fprintf(stderr, "--debug: MLO == MLTKINT.\n");
         MLGetString(lp, &s);                  m = receive_mlo_zz();
         m = (cmo *)new_cmo_zz_set_string(s);  
         break;          break;
     case MLTKSTR:      case MLTKSTR:
         fprintf(stderr, "type is STRING.\n");          fprintf(stderr, "--debug: MLO == MLTKSTR.\n");
                   m = receive_mlo_string();
           break;
   #if 0
       case MLTKREAL:
           fprintf(stderr, "MLTKREAL is not supported: we use MLTKSTR.\n");
         MLGetString(lp, &s);          MLGetString(lp, &s);
         m = (cmo *)new_cmo_string(s);          m = (cmo *)new_cmo_string(s);
         break;          break;
     case MLTKERR:      case MLTKERR:
         fprintf(stderr, "type is ERROR.\n");          fprintf(stderr, "--debug: MLO == MLTKERR.\n");
         m = (cmo *)gen_error_object(MATH_ERROR);          m = (cmo *)gen_error_object(MATH_ERROR);
         break;          break;
   #endif
     case MLTKSYM:      case MLTKSYM:
         fprintf(stderr, "MLTKSYM.\n");                  fprintf(stderr, "--debug: MLO == MLTKSYM.\n");
         MLGetString(lp, s);                  /* この部分に問題がある. */
           MLGetSymbol(lp, &s);
                   fprintf(stderr, "--debug: Symbol \"%s\".\n", s);
         m = (cmo *)new_cmo_string(s);          m = (cmo *)new_cmo_string(s);
         break;          break;
     case MLTKFUNC:      case MLTKFUNC:
         fprintf(stderr, "MLTKFUNC.\n");          fprintf(stderr, "--debug: MLO == MLTKFUNC.\n");
 #if DEBUG          MLGetFunction(lp, &s, &n);
         MLGetString(lp, s);          fprintf(stderr, "--debug: Function = \"%s\", # of args = %d\n", s, n);
         m = (cmo *)new_cmo_string(s);                  m = new_cmo_list();
         break;                  append_cmo_list(m, new_cmo_string(s));
 #endif                  fflush(stderr);
         MLGetFunction(lp, sp, &n);          for (i=0; i<n; i++) {
         fprintf(stderr, "n = %d\n", n);              fprintf(stderr, "--debug: arg[%d]\n", i);
         for (i=0; i<=n; i++) {                          fflush(stderr);
             fprintf(stderr, "%s ");                          ob = MATH_getObject3();
                           append_cmo_list(m, ob);
         }          }
         fprintf(stderr, "\n");  
         m = (cmo *)new_cmo_string(s);  
         break;          break;
     case MLTKREAL:  
         fprintf(stderr, "MLTKREAL is not supported: we use MLTKSTR.\n");  
         MLGetString(lp, &s);  
         m = (cmo *)new_cmo_string(s);  
         break;  
     default:      default:
         fprintf(stderr, "unknown type: we use STRING.\n");          fprintf(stderr, "--debug: MLO(%d) != MLTKINT, MLTKSTR.\n", type);
           fprintf(stderr, "--debug: MLTKFUNC(%d), MLTKSYM(%d).\n", MLTKFUNC, MLTKSYM);
   
         MLGetString(lp, &s);          MLGetString(lp, &s);
                   fprintf(stderr, "--debug: \"%s\"\n", s);
         m = (cmo *)new_cmo_string(s);          m = (cmo *)new_cmo_string(s);
     }      }
     return m;      return m;

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

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