version 1.1, 1999/10/29 08:06:41 |
version 1.3, 1999/11/03 10:56:40 |
|
|
/* -*- mode: C; coding: euc-japan -*- */ |
/* -*- mode: C; coding: euc-japan -*- */ |
/* $OpenXM$ */ |
/* $OpenXM: OpenXM/src/ox_math/serv2.c,v 1.2 1999/11/02 06:11:58 ohara Exp $ */ |
/* $Id$ */ |
|
|
|
/* Open Mathematica サーバ */ |
/* Open Mathematica サーバ */ |
/* ファイルディスクリプタ 3, 4 は open されていると仮定して動作する. */ |
/* ファイルディスクリプタ 3, 4 は open されていると仮定して動作する. */ |
Line 95 cmo *MATH_getObject2() |
|
Line 94 cmo *MATH_getObject2() |
|
break; |
break; |
case MLTKERR: |
case MLTKERR: |
fprintf(stderr, "type is ERROR.\n"); |
fprintf(stderr, "type is ERROR.\n"); |
m = gen_error_object(MATH_ERROR); |
m = (cmo *)gen_error_object(MATH_ERROR); |
break; |
break; |
case MLTKSYM: |
case MLTKSYM: |
fprintf(stderr, "MLTKSYM.\n"); |
fprintf(stderr, "MLTKSYM.\n"); |
Line 115 cmo *MATH_getObject2() |
|
Line 114 cmo *MATH_getObject2() |
|
fprintf(stderr, "%s "); |
fprintf(stderr, "%s "); |
} |
} |
fprintf(stderr, "\n"); |
fprintf(stderr, "\n"); |
m = (cmo *)new_cmo_string(s[0]); |
m = (cmo *)new_cmo_string(s); |
break; |
break; |
case MLTKREAL: |
case MLTKREAL: |
fprintf(stderr, "MLTKREAL is not supported: we use MLTKSTR.\n"); |
fprintf(stderr, "MLTKREAL is not supported: we use MLTKSTR.\n"); |
Line 144 int MATH_sendObject(cmo *m) |
|
Line 143 int MATH_sendObject(cmo *m) |
|
break; |
break; |
default: |
default: |
MLPutFunction(lp, "ToExpression", 1); |
MLPutFunction(lp, "ToExpression", 1); |
s = CONVERT_CMO_TO_CSTRING(m); |
s = convert_cmo_to_string(m); |
MLPutString(lp, s); |
MLPutString(lp, s); |
fprintf(stderr, "put %s.", s); |
fprintf(stderr, "put %s.", s); |
break; |
break; |
Line 196 int push(cmo* m) |
|
Line 195 int push(cmo* m) |
|
} |
} |
} |
} |
|
|
/* エラーのときは NULL を返す */ |
/* スタックが空のときは, (CMO_NULL) をかえす. */ |
/* gen_error_object(SM_popCMO); */ |
|
/* CMO_ERROR2 */ |
|
|
|
cmo* pop() |
cmo* pop() |
{ |
{ |
if (Stack_Pointer > 0) { |
if (Stack_Pointer > 0) { |
Stack_Pointer--; |
Stack_Pointer--; |
return Operand_Stack[Stack_Pointer]; |
return Operand_Stack[Stack_Pointer]; |
} |
} |
return NULL; |
return new_cmo_null(); |
} |
} |
|
|
void pops(int n) |
void pops(int n) |
Line 217 void pops(int n) |
|
Line 213 void pops(int n) |
|
} |
} |
} |
} |
|
|
|
|
/* sm_XXX 関数群は、エラーのときは 0 以外の値を返し、呼び出し元で |
/* sm_XXX 関数群は、エラーのときは 0 以外の値を返し、呼び出し元で |
エラーオブジェクトをセットする */ |
エラーオブジェクトをセットする */ |
int sm_popCMO(int fd_write) |
int sm_popCMO(int fd_write) |
Line 252 int sm_popString(int fd_write) |
|
Line 247 int sm_popString(int fd_write) |
|
fprintf(stderr, "code: SM_popString.\n"); |
fprintf(stderr, "code: SM_popString.\n"); |
#endif |
#endif |
|
|
if ((m = pop()) != NULL && (s = CONVERT_CMO_TO_CSTRING(m)) != NULL) { |
if ((m = pop()) != NULL && (s = convert_cmo_to_string(m)) != NULL) { |
send_ox_cmo(fd_write, new_cmo_string(s)); |
send_ox_cmo(fd_write, (cmo *)new_cmo_string(s)); |
return 0; |
return 0; |
} |
} |
return SM_popString; |
return SM_popString; |
Line 343 int execute_sm_command(int fd_write, int code) |
|
Line 338 int execute_sm_command(int fd_write, int code) |
|
case SM_executeFunction: |
case SM_executeFunction: |
err = sm_executeFunction(fd_write); |
err = sm_executeFunction(fd_write); |
break; |
break; |
case SM_setMathcap: |
case SM_setMathCap: |
pop(); /* 無視する */ |
pop(); /* 無視する */ |
break; |
break; |
default: |
default: |
Line 352 int execute_sm_command(int fd_write, int code) |
|
Line 347 int execute_sm_command(int fd_write, int code) |
|
} |
} |
|
|
if (err != 0) { |
if (err != 0) { |
push(gen_error_object(err)); |
push((cmo *)gen_error_object(err)); |
} |
} |
} |
} |