version 1.11, 1999/12/14 09:31:56 |
version 1.13, 2000/01/22 06:29:18 |
|
|
/* -*- mode: C; coding: euc-japan -*- */ |
/* -*- mode: C; coding: euc-japan -*- */ |
/* $OpenXM: OpenXM/src/ox_math/serv2.c,v 1.10 1999/11/29 12:09:58 ohara Exp $ */ |
/* $OpenXM: OpenXM/src/ox_math/serv2.c,v 1.12 2000/01/05 06:09:11 ohara Exp $ */ |
|
|
/* Open Mathematica サーバ */ |
/* |
/* ファイルディスクリプタ 3, 4 は open されていると仮定して動作する. */ |
Copyright (C) Katsuyoshi OHARA, 2000. |
|
Portions copyright 1999 Wolfram Research, Inc. |
|
|
|
You must see OpenXM/Copyright/Copyright.generic. |
|
The MathLink Library is licensed from Wolfram Research Inc.. |
|
See OpenXM/Copyright/Copyright.mathlink for detail. |
|
*/ |
|
|
|
/* |
|
Remarks: |
|
file descripter 3 and 4 are already opened by the parent process. |
|
*/ |
|
|
#include <stdio.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
#include <unistd.h> |
#include <unistd.h> |
|
|
|
|
extern int flag_mlo_symbol; |
extern int flag_mlo_symbol; |
|
|
/* MathLink 非依存部分 */ |
/* MathLink independent */ |
#define INIT_S_SIZE 2048 |
#define INIT_S_SIZE 2048 |
#define EXT_S_SIZE 2048 |
#define EXT_S_SIZE 2048 |
|
|
|
|
} |
} |
} |
} |
|
|
/* スタックが空のときは, (CMO_NULL) をかえす. */ |
/* if the stack is empty, then pop() returns (CMO_NULL). */ |
cmo* pop() |
cmo* pop() |
{ |
{ |
if (stack_pointer > 0) { |
if (stack_pointer > 0) { |
|
|
} |
} |
} |
} |
|
|
/* sm_XXX 関数群は、エラーのときは 0 以外の値を返し、呼び出し元で |
/* |
エラーオブジェクトをセットする */ |
if error occurs, then a sm_*() function returns non-zero and |
|
an error obect is set by a function which calls sm_*(). |
|
*/ |
int sm_popCMO(int fd_write) |
int sm_popCMO(int fd_write) |
{ |
{ |
cmo* m = pop(); |
cmo* m = pop(); |
Line 104 int sm_pops(int fd_write) |
|
Line 117 int sm_pops(int fd_write) |
|
return ERROR_ID_UNKNOWN_SM; |
return ERROR_ID_UNKNOWN_SM; |
} |
} |
|
|
/* MathLink 依存部分 */ |
/* MathLink dependent */ |
int sm_popString(int fd_write) |
int sm_popString(int fd_write) |
{ |
{ |
char *s; |
char *s; |
Line 143 int local_execute(char *s) |
|
Line 156 int local_execute(char *s) |
|
return 0; |
return 0; |
} |
} |
|
|
/* この関数はサーバに依存する. */ |
/* The following function is depend on an implementation of a server. */ |
int sm_executeStringByLocalParser(int fd_write) |
int sm_executeStringByLocalParser(int fd_write) |
{ |
{ |
symbol *symp; |
symbol *symp; |
Line 159 int sm_executeStringByLocalParser(int fd_write) |
|
Line 172 int sm_executeStringByLocalParser(int fd_write) |
|
local_execute(++s); |
local_execute(++s); |
}else { |
}else { |
/* for mathematica */ |
/* for mathematica */ |
/* mathematica に文字列を送って評価させる */ |
/* Sending the string `s' to mathematica for its evaluation. */ |
ml_evaluateStringByLocalParser(s); |
ml_evaluateStringByLocalParser(s); |
ml_select(); |
ml_select(); |
push(receive_mlo()); |
push(receive_mlo()); |
Line 200 int sm_executeFunction(int fd_write) |
|
Line 213 int sm_executeFunction(int fd_write) |
|
return 0; |
return 0; |
} |
} |
|
|
/* 平成12年12月14日 */ |
|
#define VERSION 0x11121400 |
#define VERSION 0x11121400 |
#define ID_STRING "ox_math server 1999/12/14 15:25:00" |
#define ID_STRING "ox_math server 1999/12/14 15:25:00" |
|
|
Line 247 int execute_sm_command(int fd_write, int code) |
|
Line 259 int execute_sm_command(int fd_write, int code) |
|
shutdown(); |
shutdown(); |
break; |
break; |
case SM_setMathCap: |
case SM_setMathCap: |
pop(); /* 無視する */ |
pop(); /* ignore */ |
break; |
break; |
default: |
default: |
fprintf(stderr, "unknown command: %d.\n", code); |
fprintf(stderr, "unknown command: %d.\n", code); |