Annotation of OpenXM/src/kxx/nullstackmachine.c, Revision 1.1
1.1 ! maekawa 1: #include <stdio.h>
! 2: #include "ox_kan.h"
! 3: #include "serversm.h"
! 4: #include <setjmp.h>
! 5: jmp_buf EnvOfStackMachine; /* dummy data. */
! 6:
! 7: int SerialCurrent = -1;
! 8: int Quiet = 0;
! 9:
! 10: void *GC_malloc(n) {
! 11: return((void *)malloc(n));
! 12: }
! 13:
! 14: /* internal use. */
! 15: int Sm1_popInt();
! 16:
! 17: Sm1_start() {
! 18: fprintf(stderr,"nullstackmachine: sleep, pstack\n");
! 19: }
! 20:
! 21: int nullCmoGetInt32(ox_stream ostream)
! 22: {
! 23: char d[4];
! 24: int i;
! 25: for (i=0; i<4; i++) {
! 26: d[i] = fp2fgetc(ostream);
! 27: }
! 28: return(ntohl(* ( (int *)d)));
! 29: }
! 30:
! 31: /* server stack machine */
! 32: static CMO_Object *LocalStack[200];
! 33: static int Stackp = 0;
! 34: void Sm1_pushToLocalStack(CMO_Object *op) {
! 35: if (Stackp < 200) {
! 36: LocalStack[Stackp++] = op;
! 37: }else{
! 38: fprintf(stderr,"Stack Overflow.\n");
! 39: }
! 40: }
! 41: CMO_Object *Sm1_popFromLocalStack() {
! 42: fprintf(stderr,"Stackp=%d\n",Stackp);
! 43: if (Stackp <= 0) {
! 44: fprintf(stderr,"Stack underflow.\n");
! 45: return(NULL);
! 46: }
! 47: Stackp--;
! 48: return(LocalStack[Stackp]);
! 49: }
! 50:
! 51: CMO_Object *CMO_new_string(char *s) {
! 52: CMO_string_object *op;
! 53: int i;
! 54: op = (CMO_string_object *)mymalloc(sizeof(CMO_string_object)+strlen(s));
! 55: op->tag = htonl(CMO_STRING);
! 56: op->size = htonl(strlen(s)+1);
! 57: for (i=0; i< strlen(s); i++) {
! 58: (op->data)[i] = s[i];
! 59: (op->data)[i+1] = '\0';
! 60: }
! 61: return( (CMO_Object *)op);
! 62: }
! 63: CMO_Object *CMO_new_int32(int k) {
! 64: CMO_int32_object *op;
! 65: int i;
! 66: op = (CMO_int32_object *)mymalloc(sizeof(CMO_int32_object));
! 67: op->tag = htonl(CMO_INT32);
! 68: op->n = k;
! 69: return( (CMO_Object *)op);
! 70: }
! 71: void printCMO_object(FILE *fp,CMO_Object *op)
! 72: {
! 73: int n,i;
! 74: if (op == NULL) {
! 75: fprintf(fp,"null");
! 76: }else{
! 77: switch(ntohl(op->tag)) {
! 78: case CMO_INT32:
! 79: fprintf(fp,"%d",((CMO_int32_object *)op)->n);
! 80: break;
! 81: case CMO_STRING:
! 82: n = ntohl(((CMO_string_object *)op)->size);
! 83: fprintf(stderr,"n=%d :"); fflush(NULL);
! 84: for (i=0; i<n; i++) {
! 85: fprintf(fp,"%c",((CMO_string_object *)op)->data[i]);
! 86: }
! 87: break;
! 88: default:
! 89: fprintf(fp,"Unknown object: tag=%d ",ntohl(op->tag));
! 90: break;
! 91: }
! 92: }
! 93: }
! 94:
! 95: void *Sm1_mathcap(void) {
! 96: int n,i;
! 97: struct mathCap *mathcap;
! 98: mathcap = (struct mathCap *) malloc(sizeof(struct mathCap));
! 99: strcpy(mathcap->name,"nullserver00 Version=0.1");
! 100: mathcap->version = 199901160;
! 101: mathcap->cmo[0] = CMO_ERROR2;
! 102: mathcap->cmo[1] = CMO_NULL;
! 103: mathcap->cmo[2] = CMO_INT32;
! 104: mathcap->cmo[3] = CMO_STRING;
! 105: mathcap->cmo[4] = CMO_LIST;
! 106: mathcap->n = 5;
! 107: return((void *)mathcap);
! 108: }
! 109: int Sm1_setMathCap(ox_stream os) {
! 110: fprintf(stderr,"setMathCap is not implemented.\n");
! 111: return(-1);
! 112: }
! 113: void Sm1_pops(void) {
! 114: int n;
! 115: n = Sm1_popInt32();
! 116: Stackp -= n;
! 117: if (Stackp < 0) Stackp = 0;
! 118: }
! 119: int Sm1_executeStringByLocalParser(void) {
! 120: char *s;
! 121: CMO_Object *op;
! 122: int i;
! 123: s = Sm1_popString();
! 124: if (s != NULL) {
! 125: if (strcmp(s,"sleep") == 0) {
! 126: while (1) {
! 127: fprintf(stderr,"Sleeping... "); fflush(NULL);
! 128: sleep(10);
! 129: }
! 130: }else if (strcmp(s,"pstack") == 0) {
! 131: fprintf(stderr,"pstack -------------- Stackp = %d\n",Stackp);
! 132: for (i=Stackp-1; i>=0; i--) {
! 133: printCMO_object(stdout,LocalStack[i]); fprintf(stderr,"\n");
! 134: }
! 135: fprintf(stderr,"\n--------------------\n");
! 136: }else{
! 137: fprintf(stderr,"Unknown operator: %s\n",s);
! 138: }
! 139: }else {
! 140: fprintf(stderr,"nullstackmachine.c: pop the null string.");
! 141: }
! 142: /* Sm1_pushToLocalStack(CMO_new_string(s)); */
! 143: return(0);
! 144: }
! 145: char *Sm1_popString() {
! 146: CMO_Object *op;
! 147: CMO_string_object *sop;
! 148: char *c;
! 149: op = Sm1_popFromLocalStack();
! 150: if (op != NULL) {
! 151: switch(ntohl(op->tag)) {
! 152: case CMO_INT32:
! 153: c = (char *)malloc(30);
! 154: sprintf(c,"%d",((CMO_int32_object *)op)->n);
! 155: return(c);
! 156: break;
! 157: case CMO_STRING:
! 158: sop = (CMO_string_object *)op;
! 159: return(sop->data);
! 160: break;
! 161: default:
! 162: fprintf(stderr,"tag error \n");
! 163: return(NULL);
! 164: }
! 165: }else{
! 166: return(NULL);
! 167: }
! 168: }
! 169:
! 170: int Sm1_popInt32() {
! 171: CMO_Object *op;
! 172: CMO_int32_object *sop;
! 173: op = Sm1_popFromLocalStack();
! 174: if (op != NULL) {
! 175: if (op->tag != htonl(CMO_INT32)) {
! 176: fprintf(stderr,"Object on the stack is not CMO_INT32. \n");
! 177: return(0);
! 178: }
! 179: sop = (CMO_int32_object *)op;
! 180: return(sop->n);
! 181: }else{
! 182: return(0);
! 183: }
! 184: }
! 185:
! 186:
! 187: int Sm1_setName(void)
! 188: {
! 189: char *s;
! 190: s = Sm1_popString();
! 191: if (s != NULL) fprintf(stderr,"setName %s\n",s);
! 192: return(-1);
! 193: }
! 194:
! 195: int Sm1_evalName(void)
! 196: {
! 197: char *s;
! 198: s = Sm1_popString();
! 199: if (s != NULL) fprintf(stderr,"evalName : %s");
! 200: return(-1);
! 201: }
! 202:
! 203: static int isData(FILE2 *fp)
! 204: {
! 205: if (fp->readpos < fp->readsize) return(1);
! 206: else {
! 207: return(oxSocketSelect0(fp->fd,0));
! 208: }
! 209: }
! 210:
! 211: int Sm1_pushCMO(ox_stream ostream) /* old one went to junk.c */
! 212: {
! 213: int size;
! 214: char data[1000];
! 215: int i;
! 216: int c,n;
! 217: if (ostream == NULL || ostream->initialized != 1) {
! 218: fprintf(stderr,"pushCMO, ostream is not initialized or null.\n");
! 219: return(-1);
! 220: }
! 221: /* Read data from ostream */
! 222: fprintf(stderr,"----------- CMO data from stream -----------------\n");fflush(NULL);
! 223: if (isData(ostream) || oxSocketSelect0(ostream->fd,-1)) {
! 224: c = nullCmoGetInt32(ostream);
! 225: fprintf(stderr,"cmo tag=%d : ",c);
! 226: switch(c) {
! 227: case CMO_ERROR2: fprintf(stderr,"CMO_ERROR2 ;"); break;
! 228: case CMO_ERROR: fprintf(stderr,"CMO_ERROR ;"); break;
! 229: case CMO_INT32: fprintf(stderr,"CMO_INT32 ;"); break;
! 230: case CMO_STRING: fprintf(stderr,"CMO_STRING ;"); break;
! 231: default: fprintf(stderr,"Unknown"); break;
! 232: }
! 233: switch(c) {
! 234: case CMO_ERROR:
! 235: break;
! 236: case CMO_INT32:
! 237: n = nullCmoGetInt32(ostream);
! 238: fprintf(stderr,"%d",n);
! 239: Sm1_pushToLocalStack(CMO_new_int32(n));
! 240: break;
! 241: case CMO_STRING:
! 242: n = nullCmoGetInt32(ostream);
! 243: fprintf(stderr,"size=%d ",n);
! 244: if (n > 1000-2) {
! 245: fprintf(stderr," size is too large. \n");
! 246: }else{
! 247: for (i=0; i<n; i++) {
! 248: data[i] = fp2fgetc(ostream);
! 249: data[i+1] = '\0';
! 250: }
! 251: fprintf(stderr," string=%s ",data);
! 252: Sm1_pushToLocalStack(CMO_new_string(data));
! 253: }
! 254: break;
! 255: default:
! 256: do {
! 257: if ((c = fp2fgetc(ostream)) == EOF) {
! 258: fprintf(stderr,"pushCMOFromStrem: Select returns 0, but there is no data or unexpected EOF.\n");
! 259: return(-1);
! 260: }
! 261: fprintf(stderr,"%2x ",c);
! 262: }while(isData(ostream));
! 263: }
! 264: }
! 265: fprintf(stderr,"\n-------------------------------------------------\n"); fflush(NULL);
! 266: return(0);
! 267: }
! 268:
! 269: int Sm1_popCMO(ox_stream os,int serial)
! 270: {
! 271: FILE *fp2;
! 272: extern int errno;
! 273: int c;
! 274: int p;
! 275: char data[1000];
! 276:
! 277: fp2 = fopen("ex1.cmo","r");
! 278: if (fp2 == NULL) {
! 279: fprintf(stderr,"popCMO : file ex1.cmo is not found.\n");
! 280: return(-1);
! 281: }
! 282: p = 0;
! 283: while ((c=fgetc(fp2)) != EOF) {
! 284: data[p] = c; p++;
! 285: if (p >= 1000) {fp2write(os,data,1000); p=0;}
! 286: fprintf(stderr," %2x ",c);
! 287: }
! 288: if (p>0) { fp2write(os,data,p); }
! 289: fp2fflush(os);
! 290:
! 291: return(0);
! 292: }
! 293:
! 294: int Sm1_pushError2(int serial,int no,char *s)
! 295: {
! 296: fprintf(stderr,"Sm1_pushError2 : [%d,%d,%s] \n",serial,no,s);
! 297: }
! 298:
! 299:
! 300: /* These are dummy. It is defined in stackmachine.c */
! 301: unlockCtrlCForOx() { ; }
! 302: restoreLockCtrlCForOx() { ; }
! 303:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>