=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/util.c,v retrieving revision 1.3 retrieving revision 1.7 diff -u -p -r1.3 -r1.7 --- OpenXM_contrib2/asir2000/parse/util.c 2000/08/22 05:04:28 1.3 +++ OpenXM_contrib2/asir2000/parse/util.c 2001/06/04 02:49:48 1.7 @@ -45,12 +45,12 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/parse/util.c,v 1.2 2000/08/21 08:31:47 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/util.c,v 1.6 2000/12/11 09:28:03 noro Exp $ */ #include "ca.h" #include "base.h" #include "parse.h" -#if defined(THINK_C) || defined(VISUAL) +#if defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) #include #else #include @@ -124,7 +124,21 @@ pointer *vp; int i,l; NODE n,n0; VECT v; + Q q; + if ( a && OID(a) == O_BYTEARRAY ) { + len = (Obj)BDY(ind); + if ( !rangecheck(len,((BYTEARRAY)a)->len) ) + error("getarray : Out of range"); + else if ( NEXT(ind) ) + error("getarray : invalid index"); + else { + i = (int)BDY((BYTEARRAY)a)[QTOS((Q)len)]; + STOQ(i,q); + *vp = (pointer)q; + } + return; + } for ( ; ind; ind = NEXT(ind) ) { if ( !a ) error("getarray : array or list expected"); @@ -155,13 +169,13 @@ pointer *vp; break; case O_LIST: n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind)); - for ( l = 0, n = n0; n; n = NEXT(n), l++ ); - if ( i < 0 || i >= l ) + if ( i < 0 ) error("getarray : Out of range"); - else { - for ( n = n0, l = 0; l < i; l++, n = NEXT(n) ); + for ( n = n0; i > 0 && n; n = NEXT(n), i-- ); + if ( i || !n ) + error("getarray : Out of range"); + else a = (pointer)BDY(n); - } break; default: error("getarray : array or list expected"); @@ -180,6 +194,16 @@ pointer b; int i,l; NODE n,n0; + if ( a && OID(a) == O_BYTEARRAY ) { + len = (Obj)BDY(ind); + if ( !rangecheck(len,((BYTEARRAY)a)->len) ) + error("putarray : Out of range"); + else if ( NEXT(ind) ) + error("putarray : invalid index"); + else + BDY((BYTEARRAY)a)[QTOS((Q)len)] = (unsigned char)QTOS((Q)b); + return; + } for ( ; ind; ind = NEXT(ind) ) { if ( !a ) error("putarray : array expected"); @@ -212,13 +236,13 @@ pointer b; case O_LIST: if ( NEXT(ind) ) { n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind)); - for ( l = 0, n = n0; n; n = NEXT(n), l++ ); - if ( i < 0 || i >= l ) + if ( i < 0 ) error("putarray : Out of range"); - else { - for ( n = n0, l = 0; l < i; l++, n = NEXT(n) ); + for ( n = n0; i > 0 && n; n = NEXT(n), i-- ); + if ( i || !n ) + error("puarray : Out of range"); + else a = (pointer)BDY(n); - } } else error("putarray : invalid assignment"); break; @@ -261,7 +285,7 @@ P p; return ( r ); } -#if defined(THINK_C) || defined(VISUAL) +#if defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) NODE mknode(int ac,...) { va_list ap; @@ -470,43 +494,3 @@ int esize; *arrayp = new; } } - -#if defined(THINK_C) -void bzero(p,len) -register char *p; -register int len; -{ - for ( ; len; len-- ) - *p++ = 0; -} - -void bcopy(s,d,len) -register char *s; -register char *d; -int len; -{ - for ( ; len; len-- ) - *d++ = *s++; -} - -char *index(char *s,char c) -{ - for ( ; *s && *s != c; s++ ); - if ( *s ) - return s; - else - return 0; -} - -void printap(p) -P p; -{ - DCP dc; - - for ( dc = DC(p); dc; dc = NEXT(dc) ) { - printf("(c=0x%lx c->nm=0x%lx c->nm->p=%ld) ", - (int *)dc->c,(int *)((Q)dc->c)->nm,(int)((Q)dc->c)->nm->p); - } - printf("\n"); -} -#endif