=================================================================== RCS file: /home/cvs/OpenXM/src/ox_toolkit/testclient.c,v retrieving revision 1.1 retrieving revision 1.14 diff -u -p -r1.1 -r1.14 --- OpenXM/src/ox_toolkit/testclient.c 1999/12/15 05:21:25 1.1 +++ OpenXM/src/ox_toolkit/testclient.c 2005/07/20 17:48:03 1.14 @@ -1,5 +1,5 @@ /* -*- mode: C -*- */ -/* $OpenXM$ */ +/* $OpenXM: OpenXM/src/ox_toolkit/testclient.c,v 1.13 2003/09/15 09:31:42 ohara Exp $ */ /* A sample implementation of an OpenXM client with OpenXM C library */ @@ -9,73 +9,86 @@ #include #include #include -#include "ox.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]; 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); + ox_printf("I have read %d byte from socket(%d).\n", len, oxfp->fd); for(i = 0; i < len; i++) { - fprintf(stderr, "%02x ", buff[i]); + ox_printf("%02x ", buff[i]); if (i%20 == 19) { - fprintf(stderr, "\n"); + ox_printf("\n"); } } - fprintf(stderr, "\n"); + ox_printf("\n"); return len; } -#define VERSION 0x11121500 -#define ID_STRING "testclient version 0.11121500" +#define SIZE_CMDLINE 8192 -int prompt() +static int size = SIZE_CMDLINE; +static char cmdline[SIZE_CMDLINE]; + +static void prompt() { - printf("> "); + fprintf(stdout, "> "); + fgets(cmdline, size, stdin); } -int test_0() +#define VERSION 0x11121500 +#define ID_STRING "v0.11121500" + +void test_0() { cmo* c = NULL; -#ifdef DEBUG - fprintf(stderr, "testclient:: calling ox_mathcap().\n"); - c = ox_mathcap(sv); - fprintf(stderr, "testclient:: cmo received.(%p)\n", c); -#else - c = ox_mathcap(sv); -#endif + ox_printf("testclient:: calling ox_mathcap().\n"); + c = (cmo *)ox_mathcap(sv); + ox_printf("testclient:: cmo received.(%p)\n", c); print_cmo(c); - fflush(stderr); - send_ox_cmo(sv->stream, make_mathcap_object(VERSION, ID_STRING)); + mathcap_init(VERSION, ID_STRING, "testclient", NULL, NULL); + send_ox_cmo(sv, (cmo *)oxf_cmo_mathcap(sv)); + ox_reset(sv); - send_ox_cmo(sv->stream, new_cmo_string("N[ArcTan[1]]")); - send_ox_command(sv->stream, SM_executeStringByLocalParser); - send_ox_command(sv->stream, SM_popCMO); - receive_ox_tag(sv->stream); - c = receive_cmo(sv->stream); - fprintf(stderr, "testclient:: cmo received.\n"); + send_ox_cmo(sv, (cmo *)new_cmo_string("N[ArcTan[1]]")); + send_ox_command(sv, SM_executeStringByLocalParser); + send_ox_command(sv, SM_popCMO); + receive_ox_tag(sv); + c = receive_cmo(sv); + ox_printf("testclient:: cmo received.\n"); print_cmo(c); } -int test_1() +void test_1() { - cmo *c = NULL; - cmo *m = make_mathcap_object(1000, "test!"); - fprintf(stderr, "testclient:: test cmo_mathcap.\n"); - send_ox_cmo(sv->stream, m); - send_ox_command(sv->stream, SM_popCMO); - receive_ox_tag(sv->stream); - c = receive_cmo(sv->stream); - fprintf(stderr, "testclient:: cmo received.(%p)\n", c); + cmo *c, *m; + + mathcap_init(1000, "test!", "testclient", NULL, NULL); + m = (cmo *)oxf_cmo_mathcap(sv); + ox_printf("testclient:: test cmo_mathcap.\n"); + send_ox_cmo(sv, m); + send_ox_command(sv, SM_popCMO); + receive_ox_tag(sv); + c = receive_cmo(sv); + ox_printf("testclient:: cmo received.(%p)\n", c); print_cmo(c); - fputc('\n', stderr); + ox_printf("\n"); } +/* Example: + testclient + >(OX_DATA,(CMO_INT32,123)) + >(OX_COMMAND,(SM_popCMO)) + */ + int main(int argc, char* argv[]) { ox* m = NULL; @@ -83,15 +96,15 @@ int main(int argc, char* argv[]) int code; char *server = "ox_sm1"; - setbuf(stderr, NULL); + ox_stderr_init(stderr); if (argc>1) { server = argv[1]; } - fprintf(stderr, "testclient:: I use %s as an OX server.\n", server); - sv = ox_start("localhost", "ox", server); + ox_printf("testclient:: I use %s as an OX server.\n", server); +/* sv = ox_start("localhost", "ox", server); */ if (sv == NULL) { - fprintf(stderr, "testclient:: I cannot connect to servers.\n"); + ox_printf("testclient:: I cannot connect to servers.\n"); exit(1); } @@ -99,25 +112,25 @@ int main(int argc, char* argv[]) test_1(); } - while(prompt(), (m = parse()) != NULL) { - send_ox(sv->stream, m); + while(prompt(), (m = ox_parse_lisp(cmdline)) != NULL) { + send_ox(sv, m); if (m->tag == OX_COMMAND) { code = ((ox_command *)m)->command; if (code >= 1024) { break; }else if (code == SM_popCMO || code == SM_popString) { - receive_ox_tag(sv->stream); - c = receive_cmo(sv->stream); - fprintf(stderr, "testclient:: cmo received.\n"); + receive_ox_tag(sv); + c = receive_cmo(sv); + ox_printf("testclient:: cmo received.\n"); print_cmo(c); } } } ox_reset(sv); - fprintf(stderr, "The testclient resets.\n"); + ox_printf("The testclient resets.\n"); ox_close(sv); - fprintf(stderr, "The testclient halts.\n"); + ox_printf("The testclient halts.\n"); return 0; }