Annotation of OpenXM/src/ox_math/testclient.c, Revision 1.1
1.1 ! ohara 1: /* -*- mode: C; coding: euc-japan -*- */
! 2: /* $OpenXM$ */
! 3: /* $Id: client.c,v 1.2 1999/10/14 06:34:05 ohara Exp ohara $ */
! 4:
! 5: /*
! 6: ソケットで通信する場合のサーバの立ち上げ方。
! 7: dc3$ cd ~/openasir/bin
! 8: dc3$ ./ox -ox ox_sm1 -host dc3
! 9: */
! 10:
! 11: #include <stdio.h>
! 12: #include <stdlib.h>
! 13: #include <unistd.h>
! 14: #include <string.h>
! 15: #include <errno.h>
! 16: #include <fcntl.h>
! 17: #include "ox.h"
! 18:
! 19: ox_file_t sv;
! 20:
! 21: int dumpx(int fd, int n)
! 22: {
! 23: unsigned char buff[2048];
! 24: int i;
! 25: int len = read(fd, buff, n);
! 26:
! 27: fprintf(stderr, "I have read %d byte from socket.\n", len);
! 28: for(i = 0; i < len; i++) {
! 29: fprintf(stderr, "%02x ", buff[i]);
! 30: if (i%20 == 19) {
! 31: fprintf(stderr, "\n");
! 32: }
! 33: }
! 34: fprintf(stderr, "\n");
! 35: return len;
! 36: }
! 37:
! 38: int mathematica_main()
! 39: {
! 40: int fd = sv->stream;
! 41: char* s = "Plus[31415926535, -1234567]";
! 42: char* s2 = "Plus[1, 2]";
! 43: char* s_result;
! 44: cmo* m = NULL;
! 45:
! 46: fprintf(stderr, "%s\n", s2);
! 47: ox_executeStringByLocalParser(sv, s2);
! 48:
! 49: m = ox_pop_cmo(sv, sv->stream);
! 50: fprintf(stderr, "the tag of result is %d.\n", m->tag);
! 51:
! 52: fprintf(stderr, "executeFunction(\"Plus\", 2, zz(5), zz(3))\n");
! 53: send_ox_cmo(sv->stream, new_cmo_zz_set_si(3));
! 54: send_ox_cmo(sv->stream, new_cmo_zz_set_si(5));
! 55: send_ox_cmo(sv->stream, new_cmo_int32(2)); /* number of arguments */
! 56: send_ox_cmo(sv->stream, new_cmo_string("Plus"));
! 57: send_ox_command(sv->stream, SM_executeFunction);
! 58:
! 59: s_result = ox_popString(sv, sv->stream);
! 60: fprintf(stderr, "result = %s.\n", s_result);
! 61:
! 62: return;
! 63: }
! 64:
! 65: void asir_main()
! 66: {
! 67: cmo* m = NULL;
! 68: int fd = sv->stream;
! 69:
! 70: send_ox_cmo(sv->stream, new_cmo_int32(12345));
! 71: ox_executeStringByLocalParser(sv, "print(\"Hello world!!\");");
! 72: fprintf(stderr, "result = %s.\n", ox_popString(sv, sv->stream));
! 73: return;
! 74:
! 75: send_ox_command(fd, SM_popString);
! 76: receive_ox_tag(fd); /* OX_DATA */
! 77: m = receive_cmo(fd);
! 78:
! 79: m = ox_pop_cmo(sv, sv->stream);
! 80: fprintf(stderr, "tag = %d.\n", m->tag);
! 81: }
! 82:
! 83: void asir_main0()
! 84: {
! 85:
! 86: char* sf1 = "diff((x+2*y)^2,x);";
! 87:
! 88: /* この辺は ox_asir に実行させる場合に使う。 */
! 89: ox_executeStringByLocalParser(sv, "print(\"Hello world!!\");");
! 90:
! 91: ox_executeStringByLocalParser(sv, "diff((x+2*y)^2,x);");
! 92: fprintf(stderr,
! 93: "I let Asir evaluate \"%s\"\n and get a result \"%s\"\n", sf1, ox_popString(sv, sv->stream));
! 94: }
! 95:
! 96: void asir_main1()
! 97: {
! 98: send_ox_cmo(sv->stream, new_cmo_zz_set_si(10));
! 99: send_ox_command(sv->stream, SM_popCMO);
! 100: fprintf(stderr, "I send SM_popCMO.\n");
! 101:
! 102: dumpx(sv->stream, 17);
! 103: }
! 104:
! 105: void asir_main2()
! 106: {
! 107: cmo* m = NULL;
! 108:
! 109: /* add 関数の定義 */
! 110: /* char* adddef = "def add(X,Y){return X+Y;};"; */
! 111:
! 112: /* この辺は ox_asir に実行させる場合に使う。 */
! 113: /* ox_executeStringByLocalParser(sv, adddef); */
! 114: send_ox_cmo(sv->stream, new_cmo_int32(3));
! 115: send_ox_cmo(sv->stream, new_cmo_int32(5));
! 116: send_ox_cmo(sv->stream, new_cmo_int32(2)); /* number of arguments */
! 117: send_ox_cmo(sv->stream, new_cmo_string("igcd"));
! 118: send_ox_command(sv->stream, SM_executeFunction);
! 119: /* この段階でCMO_ERROR2 が積まれるはず */
! 120:
! 121: send_ox_command(sv->stream, SM_popCMO);
! 122:
! 123: #if 0
! 124: fprintf(stderr, "dump:\n");
! 125: dumpx(sv->stream, 36);
! 126: return;
! 127: #endif
! 128:
! 129: receive_ox_tag(sv->stream); /* OX_DATA */
! 130: m = receive_cmo(sv->stream);
! 131: fprintf(stderr, "tag is (%d).\n", m->tag);
! 132: }
! 133:
! 134: void asir_main3()
! 135: {
! 136: int i1, i2;
! 137: cmo_zz* z1;
! 138: cmo_zz* z2;
! 139:
! 140: i1 = 2*7;
! 141: i2 = 2*11;
! 142:
! 143: z1 = new_cmo_zz_set_si(i1);
! 144: z2 = new_cmo_zz_set_si(i2);
! 145: fprintf(stderr, "i1 = %d, i2 = %d.\n", i1, i2);
! 146:
! 147: send_ox_cmo(sv->stream, z1);
! 148: send_ox_cmo(sv->stream, z2);
! 149: send_ox_cmo(sv->stream, new_cmo_int32(2)); /* number of arguments */
! 150: send_ox_cmo(sv->stream, new_cmo_string("igcd"));
! 151: send_ox_command(sv->stream, SM_executeFunction);
! 152:
! 153: fprintf(stderr, "result1 = (%s).\n", ox_popString(sv, sv->stream));
! 154: }
! 155:
! 156: void sm_main()
! 157: {
! 158: ox_mathcap(sv);
! 159: }
! 160:
! 161: /* 平成11年7月10日 */
! 162: #define VERSION 0x11071000
! 163: #define ID_STRING "client version 0.11071000"
! 164:
! 165: int prompt()
! 166: {
! 167: printf(":- ");
! 168: }
! 169:
! 170:
! 171: int main(int argc, char* argv[])
! 172: {
! 173: ox* m = NULL;
! 174: cmo* c = NULL;
! 175: int code;
! 176:
! 177: setbuf(stderr, NULL);
! 178:
! 179: if (argc>1) {
! 180: fprintf(stderr, "I use ox_math.\n");
! 181: sv = ox_start("localhost", "ox", "ox_math");
! 182: ox_mathcap(sv);
! 183: send_ox_cmo(sv->stream, make_mathcap_object(VERSION, ID_STRING));
! 184: }else {
! 185: fprintf(stderr, "I use ox_sm1.\n");
! 186: sv = ox_start("localhost", "ox", "ox_sm1");
! 187: }
! 188:
! 189: ox_reset(sv);
! 190: send_ox_cmo(sv->stream, new_cmo_string("N[ArcTan[1]]"));
! 191: send_ox_command(sv->stream, SM_executeStringByLocalParser);
! 192: send_ox_command(sv->stream, SM_popCMO);
! 193: fprintf(stderr, "for debug.\n");
! 194:
! 195: receive_ox_tag(sv->stream);
! 196: fprintf(stderr, "for debug.\n");
! 197: c = receive_cmo(sv->stream);
! 198: fprintf(stderr, "for debug.\n");
! 199: fprintf(stderr, "local:: cmo received.\n");
! 200: print_cmo(c);
! 201:
! 202: while(prompt(), (m = parse()) != NULL) {
! 203: send_ox(sv, m);
! 204: if (m->tag == OX_COMMAND) {
! 205: code = ((ox_command *)m)->command;
! 206: if (code >= 1024) {
! 207: break;
! 208: }else if (code == SM_popCMO || code == SM_popString) {
! 209: receive_ox_tag(sv->stream);
! 210: c = receive_cmo(sv->stream);
! 211: fprintf(stderr, "local:: cmo received.\n");
! 212: print_cmo(c);
! 213: }
! 214: }
! 215: }
! 216:
! 217: #if 0
! 218: sm_main();
! 219: asir_main();
! 220: mathematica_main();
! 221: #endif
! 222:
! 223: ox_reset(sv);
! 224: fprintf(stderr, "The client resets.\n");
! 225: ox_close(sv);
! 226: fprintf(stderr, "The client halts.\n");
! 227:
! 228: return 0;
! 229: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>