version 1.2, 1999/12/09 22:50:56 |
version 1.3, 1999/12/14 09:31:55 |
|
|
/* -*- mode: C; coding: euc-japan -*- */ |
/* -*- mode: C; coding: euc-japan -*- */ |
/* $OpenXM: OpenXM/src/ox_math/mlo.c,v 1.1 1999/11/29 12:09:58 ohara Exp $ */ |
/* $OpenXM: OpenXM/src/ox_math/mlo.c,v 1.2 1999/12/09 22:50:56 ohara Exp $ */ |
|
|
/* Open Mathematica サーバ */ |
/* Open Mathematica サーバ */ |
/* ファイルディスクリプタ 3, 4 は open されていると仮定して動作する. */ |
/* ファイルディスクリプタ 3, 4 は open されていると仮定して動作する. */ |
Line 22 int flag_mlo_symbol = FLAG_MLTKSYM_IS_INDETERMINATE; |
|
Line 22 int flag_mlo_symbol = FLAG_MLTKSYM_IS_INDETERMINATE; |
|
/* MLINK はポインタ型. */ |
/* MLINK はポインタ型. */ |
MLINK stdlink; |
MLINK stdlink; |
|
|
typedef cmo mlo; |
|
typedef cmo_string mlo_string; |
|
typedef cmo_zz mlo_zz; |
|
|
|
mlo *receive_mlo_zz() |
mlo *receive_mlo_zz() |
{ |
{ |
char *s; |
char *s; |
Line 72 cmo *receive_mlo_function() |
|
Line 68 cmo *receive_mlo_function() |
|
return m; |
return m; |
} |
} |
|
|
|
#if 0 |
|
cmo *convert_mlo_to_cmo(mlo *m) |
|
{ |
|
if (m->tag == MLO_FUNCTION) { |
|
if (strcmp(((mlo_function *)m)->function, "List") == 0) { |
|
return convert_mlo_function_list_to_cmo_list(m); |
|
} |
|
} |
|
return m; |
|
} |
|
#endif |
|
|
mlo_function *new_mlo_function(char *function) |
mlo_function *new_mlo_function(char *function) |
{ |
{ |
mlo_function *c = malloc(sizeof(mlo_function)); |
mlo_function *c = malloc(sizeof(mlo_function)); |
Line 123 cmo *receive_mlo_symbol() |
|
Line 131 cmo *receive_mlo_symbol() |
|
return ob; |
return ob; |
} |
} |
|
|
/* Mathematica を起動する. */ |
/* Mathematica との通信を開始する. */ |
int ml_init() |
int ml_init() |
{ |
{ |
int argc = 2; |
int argc = 2; |
|
|
return 0; |
return 0; |
} |
} |
|
|
|
/* Mathematica との通信を終了する. */ |
int ml_exit() |
int ml_exit() |
{ |
{ |
/* quit Mathematica then close the link */ |
/* quit Mathematica then close the link */ |
|
|
MLClose(stdlink); |
MLClose(stdlink); |
} |
} |
|
|
cmo *ml_get_object() |
/* receive_mlo() する前に必ず ml_select() しなければならない */ |
|
int ml_select() |
{ |
{ |
/* skip any packets before the first ReturnPacket */ |
/* skip any packets before the first ReturnPacket */ |
while (MLNextPacket(stdlink) != RETURNPKT) { |
while (MLNextPacket(stdlink) != RETURNPKT) { |
usleep(10); |
usleep(10); |
MLNewPacket(stdlink); |
MLNewPacket(stdlink); |
} |
} |
return receive_mlo(); |
|
} |
} |
|
|
|
/* send_mlo() した後で必ず ml_flush() しなければならない */ |
|
int ml_flush() |
|
{ |
|
MLEndPacket(stdlink); |
|
} |
|
|
cmo *receive_mlo() |
cmo *receive_mlo() |
{ |
{ |
char *s; |
char *s; |
Line 199 int send_mlo_zz(cmo *m) |
|
Line 214 int send_mlo_zz(cmo *m) |
|
{ |
{ |
char *s; |
char *s; |
MLPutFunction(stdlink, "ToExpression", 1); |
MLPutFunction(stdlink, "ToExpression", 1); |
s = convert_cmo_to_string(m); |
s = new_string_set_cmo(m); |
MLPutString(stdlink, s); |
MLPutString(stdlink, s); |
} |
} |
|
|
Line 216 int send_mlo_list(cmo *c) |
|
Line 231 int send_mlo_list(cmo *c) |
|
} |
} |
} |
} |
|
|
int ml_sendObject(cmo *m) |
|
{ |
|
send_mlo(m); |
|
MLEndPacket(stdlink); |
|
} |
|
|
|
int send_mlo(cmo *m) |
int send_mlo(cmo *m) |
{ |
{ |
char *s; |
char *s; |
Line 247 int send_mlo(cmo *m) |
|
Line 256 int send_mlo(cmo *m) |
|
break; |
break; |
default: |
default: |
MLPutFunction(stdlink, "ToExpression", 1); |
MLPutFunction(stdlink, "ToExpression", 1); |
s = convert_cmo_to_string(m); |
s = new_string_set_cmo(m); |
MLPutString(stdlink, s); |
MLPutString(stdlink, s); |
break; |
break; |
} |
} |