| version 1.3, 1999/12/22 11:26:37 |
version 1.9, 2003/01/11 11:42:32 |
|
|
| /* -*- mode: C -*- */ |
/* -*- mode: C -*- */ |
| /* $OpenXM: OpenXM/src/ox_toolkit/testclient.c,v 1.2 1999/12/15 07:51:20 takayama Exp $ */ |
/* $OpenXM: OpenXM/src/ox_toolkit/testclient.c,v 1.8 2000/11/28 04:24:12 ohara Exp $ */ |
| |
|
| /* A sample implementation of an OpenXM client with OpenXM C library */ |
/* A sample implementation of an OpenXM client with OpenXM C library */ |
| |
|
|
|
| #include <string.h> |
#include <string.h> |
| #include <errno.h> |
#include <errno.h> |
| #include <fcntl.h> |
#include <fcntl.h> |
| #include "ox.h" |
|
| #include "parse.h" |
|
| |
|
| ox_file_t sv; |
#include "ox_toolkit.h" |
| |
|
| int dumpx(int fd, int n) |
extern OXFILE *ox_start(char* host, char* prog1, char* prog2); |
| |
OXFILE *sv; |
| |
|
| |
int dumpx(OXFILE *oxfp, int n) |
| { |
{ |
| unsigned char buff[2048]; |
unsigned char buff[2048]; |
| int i; |
int i; |
| int len = read(fd, buff, n); |
int len = oxf_read(buff, 1, n, oxfp); |
| |
|
| fprintf(stderr, "I have read %d byte from socket.\n", len); |
fprintf(ox_stderr, "I have read %d byte from socket(%d).\n", len, oxfp->fd); |
| for(i = 0; i < len; i++) { |
for(i = 0; i < len; i++) { |
| fprintf(stderr, "%02x ", buff[i]); |
fprintf(ox_stderr, "%02x ", buff[i]); |
| if (i%20 == 19) { |
if (i%20 == 19) { |
| fprintf(stderr, "\n"); |
fprintf(ox_stderr, "\n"); |
| } |
} |
| } |
} |
| fprintf(stderr, "\n"); |
fprintf(ox_stderr, "\n"); |
| return len; |
return len; |
| } |
} |
| |
|
| Line 44 static int prompt() |
|
| Line 45 static int prompt() |
|
| } |
} |
| |
|
| #define VERSION 0x11121500 |
#define VERSION 0x11121500 |
| #define ID_STRING "testclient version 0.11121500" |
#define ID_STRING "v0.11121500" |
| |
|
| int test_0() |
int test_0() |
| { |
{ |
| cmo* c = NULL; |
cmo* c = NULL; |
| #ifdef DEBUG |
#ifdef DEBUG |
| fprintf(stderr, "testclient:: calling ox_mathcap().\n"); |
fprintf(ox_stderr, "testclient:: calling ox_mathcap().\n"); |
| c = ox_mathcap(sv); |
c = ox_mathcap(sv); |
| fprintf(stderr, "testclient:: cmo received.(%p)\n", c); |
fprintf(ox_stderr, "testclient:: cmo received.(%p)\n", c); |
| #else |
#else |
| c = ox_mathcap(sv); |
c = (cmo *)ox_mathcap(sv); |
| #endif |
#endif |
| print_cmo(c); |
print_cmo(c); |
| fflush(stderr); |
fflush(ox_stderr); |
| send_ox_cmo(sv->stream, make_mathcap_object(VERSION, ID_STRING)); |
|
| |
|
| |
mathcap_init(VERSION, ID_STRING, "testclient", NULL, NULL); |
| |
send_ox_cmo(sv, oxf_cmo_mathcap(sv)); |
| |
|
| ox_reset(sv); |
ox_reset(sv); |
| send_ox_cmo(sv->stream, new_cmo_string("N[ArcTan[1]]")); |
send_ox_cmo(sv, (cmo *)new_cmo_string("N[ArcTan[1]]")); |
| send_ox_command(sv->stream, SM_executeStringByLocalParser); |
send_ox_command(sv, SM_executeStringByLocalParser); |
| send_ox_command(sv->stream, SM_popCMO); |
send_ox_command(sv, SM_popCMO); |
| receive_ox_tag(sv->stream); |
receive_ox_tag(sv); |
| c = receive_cmo(sv->stream); |
c = receive_cmo(sv); |
| fprintf(stderr, "testclient:: cmo received.\n"); |
fprintf(ox_stderr, "testclient:: cmo received.\n"); |
| print_cmo(c); |
print_cmo(c); |
| } |
} |
| |
|
| int test_1() |
int test_1() |
| { |
{ |
| cmo *c = NULL; |
cmo *c, *m; |
| cmo *m = make_mathcap_object(1000, "test!"); |
|
| fprintf(stderr, "testclient:: test cmo_mathcap.\n"); |
mathcap_init(1000, "test!", "testclient", NULL, NULL); |
| send_ox_cmo(sv->stream, m); |
m = oxf_cmo_mathcap(sv); |
| send_ox_command(sv->stream, SM_popCMO); |
fprintf(ox_stderr, "testclient:: test cmo_mathcap.\n"); |
| receive_ox_tag(sv->stream); |
send_ox_cmo(sv, m); |
| c = receive_cmo(sv->stream); |
send_ox_command(sv, SM_popCMO); |
| fprintf(stderr, "testclient:: cmo received.(%p)\n", c); |
receive_ox_tag(sv); |
| |
c = receive_cmo(sv); |
| |
fprintf(ox_stderr, "testclient:: cmo received.(%p)\n", c); |
| print_cmo(c); |
print_cmo(c); |
| fputc('\n', stderr); |
fputc('\n', ox_stderr); |
| } |
} |
| |
|
| /* Example: |
/* Example: |
| Line 97 int main(int argc, char* argv[]) |
|
| Line 102 int main(int argc, char* argv[]) |
|
| int code; |
int code; |
| char *server = "ox_sm1"; |
char *server = "ox_sm1"; |
| |
|
| setbuf(stderr, NULL); |
ox_stderr_init(NULL); |
| |
setbuf(ox_stderr, NULL); |
| |
|
| if (argc>1) { |
if (argc>1) { |
| server = argv[1]; |
server = argv[1]; |
| } |
} |
| fprintf(stderr, "testclient:: I use %s as an OX server.\n", server); |
fprintf(ox_stderr, "testclient:: I use %s as an OX server.\n", server); |
| sv = ox_start("localhost", "ox", server); |
/* sv = ox_start("localhost", "ox", server); */ |
| if (sv == NULL) { |
if (sv == NULL) { |
| fprintf(stderr, "testclient:: I cannot connect to servers.\n"); |
fprintf(ox_stderr, "testclient:: I cannot connect to servers.\n"); |
| exit(1); |
exit(1); |
| } |
} |
| |
|
| Line 116 int main(int argc, char* argv[]) |
|
| Line 122 int main(int argc, char* argv[]) |
|
| setflag_parse(PFLAG_ADDREV); |
setflag_parse(PFLAG_ADDREV); |
| |
|
| while(prompt(), (m = parse()) != NULL) { |
while(prompt(), (m = parse()) != NULL) { |
| send_ox(sv->stream, m); |
send_ox(sv, m); |
| if (m->tag == OX_COMMAND) { |
if (m->tag == OX_COMMAND) { |
| code = ((ox_command *)m)->command; |
code = ((ox_command *)m)->command; |
| if (code >= 1024) { |
if (code >= 1024) { |
| break; |
break; |
| }else if (code == SM_popCMO || code == SM_popString) { |
}else if (code == SM_popCMO || code == SM_popString) { |
| receive_ox_tag(sv->stream); |
receive_ox_tag(sv); |
| c = receive_cmo(sv->stream); |
c = receive_cmo(sv); |
| fprintf(stderr, "testclient:: cmo received.\n"); |
fprintf(ox_stderr, "testclient:: cmo received.\n"); |
| print_cmo(c); |
print_cmo(c); |
| } |
} |
| } |
} |
| } |
} |
| |
|
| ox_reset(sv); |
ox_reset(sv); |
| fprintf(stderr, "The testclient resets.\n"); |
fprintf(ox_stderr, "The testclient resets.\n"); |
| ox_close(sv); |
ox_close(sv); |
| fprintf(stderr, "The testclient halts.\n"); |
fprintf(ox_stderr, "The testclient halts.\n"); |
| |
|
| return 0; |
return 0; |
| } |
} |