[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.10 and 1.12

version 1.10, 1999/11/29 12:09:58 version 1.12, 2000/01/05 06:09:11
Line 1 
Line 1 
 /* -*- mode: C; coding: euc-japan -*- */  /* -*- mode: C; coding: euc-japan -*- */
 /* $OpenXM: OpenXM/src/ox_math/serv2.c,v 1.9 1999/11/19 20:51:36 ohara Exp $ */  /* $OpenXM: OpenXM/src/ox_math/serv2.c,v 1.11 1999/12/14 09:31:56 ohara Exp $ */
   
 /* Open Mathematica サーバ */  /* Open Mathematica サーバ */
 /* ファイルディスクリプタ 3, 4 は open されていると仮定して動作する. */  /* ファイルディスクリプタ 3, 4 は open されていると仮定して動作する. */
Line 16 
Line 16 
 extern int flag_mlo_symbol;  extern int flag_mlo_symbol;
   
 /* MathLink 非依存部分 */  /* MathLink 非依存部分 */
   #define INIT_S_SIZE 2048
   #define EXT_S_SIZE  2048
   
 #define SIZE_OPERAND_STACK   2048  static int stack_size = 0;
   static int stack_pointer = 0;
   static cmo **stack = NULL;
   
 static cmo* Operand_Stack[SIZE_OPERAND_STACK];  
 static int Stack_Pointer = 0;  
   
 int initialize_stack()  int initialize_stack()
 {  {
     Stack_Pointer = 0;      stack_pointer = 0;
           stack_size = INIT_S_SIZE;
           stack = malloc(stack_size*sizeof(cmo*));
 }  }
   
   static int extend_stack()
   {
           int size2 = stack_size + EXT_S_SIZE;
           cmo **stack2 = malloc(size2*sizeof(cmo*));
           memcpy(stack2, stack, stack_size*sizeof(cmo *));
           free(stack);
           stack = stack2;
           stack_size = size2;
   }
   
 int push(cmo* m)  int push(cmo* m)
 {  {
 #if DEBUG  #if DEBUG
Line 39  int push(cmo* m)
Line 52  int push(cmo* m)
         fprintf(stderr, "ox_math:: a %s was pushed.\n", symp->key);          fprintf(stderr, "ox_math:: a %s was pushed.\n", symp->key);
     }      }
 #endif  #endif
     Operand_Stack[Stack_Pointer] = m;      stack[stack_pointer] = m;
     Stack_Pointer++;      stack_pointer++;
     if (Stack_Pointer >= SIZE_OPERAND_STACK) {      if (stack_pointer >= stack_size) {
         fprintf(stderr, "stack over flow.\n");                  extend_stack();
         Stack_Pointer--;  
     }      }
 }  }
   
 /* スタックが空のときは, (CMO_NULL) をかえす. */  /* スタックが空のときは, (CMO_NULL) をかえす. */
 cmo* pop()  cmo* pop()
 {  {
     if (Stack_Pointer > 0) {      if (stack_pointer > 0) {
         Stack_Pointer--;          stack_pointer--;
         return Operand_Stack[Stack_Pointer];          return stack[stack_pointer];
     }      }
     return new_cmo_null();      return new_cmo_null();
 }  }
   
 void pops(int n)  void pops(int n)
 {  {
     Stack_Pointer -= n;      stack_pointer -= n;
     if (Stack_Pointer < 0) {      if (stack_pointer < 0) {
         Stack_Pointer = 0;          stack_pointer = 0;
     }      }
 }  }
   
Line 106  int sm_popString(int fd_write)
Line 118  int sm_popString(int fd_write)
     m = pop();      m = pop();
     if (m->tag == CMO_STRING) {      if (m->tag == CMO_STRING) {
         send_ox_cmo(fd_write, m);          send_ox_cmo(fd_write, m);
     }else if ((s = convert_cmo_to_string(m)) != NULL) {      }else if ((s = new_string_set_cmo(m)) != NULL) {
         send_ox_cmo(fd_write, (cmo *)new_cmo_string(s));          send_ox_cmo(fd_write, (cmo *)new_cmo_string(s));
     }else {      }else {
         err = make_error_object(SM_popString, m);          err = make_error_object(SM_popString, m);
Line 149  int sm_executeStringByLocalParser(int fd_write)
Line 161  int sm_executeStringByLocalParser(int fd_write)
             /* for mathematica */              /* for mathematica */
             /* mathematica に文字列を送って評価させる */              /* mathematica に文字列を送って評価させる */
             ml_evaluateStringByLocalParser(s);              ml_evaluateStringByLocalParser(s);
             push(ml_get_object());                          ml_select();
               push(receive_mlo());
         }          }
         return 0;          return 0;
     }      }
Line 182  int sm_executeFunction(int fd_write)
Line 195  int sm_executeFunction(int fd_write)
         argv[i] = pop();          argv[i] = pop();
     }      }
     ml_executeFunction(func, argc, argv);      ml_executeFunction(func, argc, argv);
     push(ml_get_object());          ml_select();
       push(receive_mlo());
     return 0;      return 0;
 }  }
   
 /* 平成11年10月13日 */  #define VERSION 0x11121400
 #define VERSION 0x11102700  #define ID_STRING  "ox_math server 1999/12/14 15:25:00"
 #define ID_STRING  "ox_math server 1999/10/28 17:29:25"  
   
 int sm_mathcap(int fd_write)  int sm_mathcap(int fd_write)
 {  {

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.12

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