version 1.15, 2000/03/10 12:45:48 |
version 1.17, 2000/11/28 20:16:03 |
|
|
/* -*- mode: C; coding: euc-japan -*- */ |
/* -*- mode: C; coding: euc-japan -*- */ |
/* $OpenXM: OpenXM/src/ox_math/serv2.c,v 1.14 2000/03/10 12:38:47 ohara Exp $ */ |
/* $OpenXM: OpenXM/src/ox_math/serv2.c,v 1.16 2000/10/10 19:58:30 ohara Exp $ */ |
|
|
/* |
/* |
Copyright (C) Katsuyoshi OHARA, 2000. |
Copyright (C) Katsuyoshi OHARA, 2000. |
|
|
if error occurs, then a sm_*() function returns non-zero and |
if error occurs, then a sm_*() function returns non-zero and |
an error obect is set by a function which calls sm_*(). |
an error obect is set by a function which calls sm_*(). |
*/ |
*/ |
int sm_popCMO(int fd_write) |
int sm_popCMO(OXFILE* oxfp) |
{ |
{ |
cmo* m = pop(); |
cmo* m = pop(); |
#ifdef DEBUG |
#ifdef DEBUG |
Line 100 int sm_popCMO(int fd_write) |
|
Line 100 int sm_popCMO(int fd_write) |
|
#endif |
#endif |
|
|
if (m != NULL) { |
if (m != NULL) { |
send_ox_cmo(fd_write, m); |
send_ox_cmo(oxfp, m); |
return 0; |
return 0; |
} |
} |
return SM_popCMO; |
return SM_popCMO; |
} |
} |
|
|
int sm_pops(int fd_write) |
int sm_pops(OXFILE* oxfp) |
{ |
{ |
cmo* m = pop(); |
cmo* m = pop(); |
if (m != NULL && m->tag == CMO_INT32) { |
if (m != NULL && m->tag == CMO_INT32) { |
Line 117 int sm_pops(int fd_write) |
|
Line 117 int sm_pops(int fd_write) |
|
} |
} |
|
|
/* MathLink dependent */ |
/* MathLink dependent */ |
int sm_popString(int fd_write) |
int sm_popString(OXFILE* oxfp) |
{ |
{ |
char *s; |
char *s; |
cmo *err; |
cmo *err; |
Line 129 int sm_popString(int fd_write) |
|
Line 129 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(oxfp, m); |
}else if ((s = new_string_set_cmo(m)) != NULL) { |
}else if ((s = new_string_set_cmo(m)) != NULL) { |
send_ox_cmo(fd_write, (cmo *)new_cmo_string(s)); |
send_ox_cmo(oxfp, (cmo *)new_cmo_string(s)); |
}else { |
}else { |
err = make_error_object(SM_popString, m); |
err = make_error_object(SM_popString, m); |
send_ox_cmo(fd_write, err); |
send_ox_cmo(oxfp, err); |
} |
} |
return 0; |
return 0; |
} |
} |
Line 156 int local_execute(char *s) |
|
Line 156 int local_execute(char *s) |
|
} |
} |
|
|
/* The following function is depend on an implementation of a server. */ |
/* The following function is depend on an implementation of a server. */ |
int sm_executeStringByLocalParser(int fd_write) |
int sm_executeStringByLocalParser(OXFILE* oxfp) |
{ |
{ |
symbol_t symp; |
symbol_t symp; |
cmo* m = pop(); |
cmo* m = pop(); |
Line 185 int sm_executeStringByLocalParser(int fd_write) |
|
Line 185 int sm_executeStringByLocalParser(int fd_write) |
|
return SM_executeStringByLocalParser; |
return SM_executeStringByLocalParser; |
} |
} |
|
|
int sm_executeFunction(int fd_write) |
int sm_executeFunction(OXFILE* oxfp) |
{ |
{ |
int i, argc; |
int i, argc; |
cmo **argv; |
cmo **argv; |
Line 212 int sm_executeFunction(int fd_write) |
|
Line 212 int sm_executeFunction(int fd_write) |
|
return 0; |
return 0; |
} |
} |
|
|
#define VERSION 0x11121400 |
int sm_mathcap(OXFILE* oxfp) |
#define ID_STRING "ox_math server 1999/12/14 15:25:00" |
|
|
|
int sm_mathcap(int fd_write) |
|
{ |
{ |
push(make_mathcap_object(VERSION, ID_STRING)); |
push((cmo *)oxf_cmo_mathcap(oxfp)); |
return 0; |
return 0; |
} |
} |
|
|
int receive_sm_command(int fd_read) |
void sm_set_mathcap(OXFILE *oxfp) |
{ |
{ |
return receive_int32(fd_read); |
cmo_mathcap *m = (cmo_mathcap *)pop(); |
|
if (m->tag == CMO_MATHCAP) { |
|
oxf_mathcap_update(oxfp, m); |
|
}else { |
|
push_error(-1, m); |
|
/* an error object must be pushed */ |
|
} |
} |
} |
|
|
int execute_sm_command(int fd_write, int code) |
int receive_sm_command(OXFILE* oxfp) |
{ |
{ |
|
return receive_int32(oxfp); |
|
} |
|
|
|
int execute_sm_command(OXFILE* oxfp, int code) |
|
{ |
int err = 0; |
int err = 0; |
#ifdef DEBUG |
#ifdef DEBUG |
symbol_t sp = lookup_by_tag(code); |
symbol_t sp = lookup_by_tag(code); |
Line 236 int execute_sm_command(int fd_write, int code) |
|
Line 244 int execute_sm_command(int fd_write, int code) |
|
|
|
switch(code) { |
switch(code) { |
case SM_popCMO: |
case SM_popCMO: |
err = sm_popCMO(fd_write); |
err = sm_popCMO(oxfp); |
break; |
break; |
case SM_popString: |
case SM_popString: |
err = sm_popString(fd_write); |
err = sm_popString(oxfp); |
break; |
break; |
case SM_mathcap: |
case SM_mathcap: |
err = sm_mathcap(fd_write); |
err = sm_mathcap(oxfp); |
break; |
break; |
case SM_pops: |
case SM_pops: |
err = sm_pops(fd_write); |
err = sm_pops(oxfp); |
break; |
break; |
case SM_executeStringByLocalParser: |
case SM_executeStringByLocalParser: |
case SM_executeStringByLocalParserInBatchMode: |
case SM_executeStringByLocalParserInBatchMode: |
err = sm_executeStringByLocalParser(fd_write); |
err = sm_executeStringByLocalParser(oxfp); |
break; |
break; |
case SM_executeFunction: |
case SM_executeFunction: |
err = sm_executeFunction(fd_write); |
err = sm_executeFunction(oxfp); |
break; |
break; |
case SM_shutdown: |
case SM_shutdown: |
shutdown(); |
shutdown(); |