=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Kan/primitive.c,v retrieving revision 1.16 retrieving revision 1.19 diff -u -p -r1.16 -r1.19 --- OpenXM/src/kan96xx/Kan/primitive.c 2004/09/12 10:58:28 1.16 +++ OpenXM/src/kan96xx/Kan/primitive.c 2004/09/20 02:11:22 1.19 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/kan96xx/Kan/primitive.c,v 1.15 2004/09/12 10:22:50 takayama Exp $ */ +/* $OpenXM: OpenXM/src/kan96xx/Kan/primitive.c,v 1.18 2004/09/17 02:42:57 takayama Exp $ */ /* primitive.c */ /* The functions in this module were in stackmachine.c */ @@ -200,6 +200,9 @@ void printObject(ob,nl,fp) case Sdouble: fprintf(fp," "); break; + case SbyteArray: + fprintf(fp," "); + break; default: fprintf(fp,"",ob.tag); break; @@ -294,6 +297,9 @@ void printObject(ob,nl,fp) case Sdouble: fprintf(fp,"%f",KopDouble(ob)); break; + case SbyteArray: + printObject(byteArrayToArray(ob),nl,fp); /* Todo: I should save memory.*/ + break; default: fprintf(fp,"[Unknown object tag.]"); break; @@ -446,6 +452,7 @@ int executePrimitive(ob) extern struct ring *CurrentRingp; extern TimerOn; extern SecureMode; + extern int RestrictedMode; infixOn = 0; @@ -453,6 +460,18 @@ int executePrimitive(ob) fprintf(Fstack,"In execute %d\n",ob.lc.ival); printOperandStack(); } + if (RestrictedMode) { + switch(ob.lc.ival) { + case SleftBrace: + case SrightBrace: + case Sexec: + break; + default: + fprintf(stderr,"primitive No = %d : ", ob.lc.ival); + errorStackmachine("You cannot use this primitive in the RestrictedMode.\n"); + } + } + if (GotoP) return(0); switch (ob.lc.ival) { /* Postscript primitives :stack */ @@ -501,6 +520,11 @@ int executePrimitive(ob) } Kpush(ob3); break; + case SbyteArray: + n = getByteArraySize(ob2); + ob3 = newByteArray(n,ob2); + Kpush(ob3); + break; default: Kpush(ob2); break; @@ -617,6 +641,8 @@ int executePrimitive(ob) /* Or; [[a_00 ....] [a_10 ....] ....] [1 0] any put. MultiIndex. */ ob1 = Kpop(); ob2 = Kpop(); ob3 = Kpop(); switch(ob2.tag) { + case SuniversalNumber: + ob2 = Kto_int32(ob2); /* do not break and go to Sinteger */ case Sinteger: switch(ob3.tag) { case Sarray: @@ -641,6 +667,17 @@ int executePrimitive(ob) errorStackmachine("Index is out of bound. (put)\n"); } break; + case SbyteArray: + i = ob2.lc.ival; + size = getByteArraySize(ob3); + if ((0 <= i) && (i