=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/util.c,v retrieving revision 1.7 retrieving revision 1.12 diff -u -p -r1.7 -r1.12 --- OpenXM_contrib2/asir2000/parse/util.c 2001/06/04 02:49:48 1.7 +++ OpenXM_contrib2/asir2000/parse/util.c 2004/12/18 16:50:10 1.12 @@ -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.6 2000/12/11 09:28:03 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/util.c,v 1.11 2004/06/21 00:58:32 noro Exp $ */ #include "ca.h" #include "base.h" #include "parse.h" -#if defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) +#if defined(__GNUC__) || defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) || defined(__FreeBSD__) #include #else #include @@ -120,8 +120,8 @@ pointer a; NODE ind; pointer *vp; { - Obj len,row,col; - int i,l; + Obj len,row,col,trg; + int i; NODE n,n0; VECT v; Q q; @@ -167,6 +167,17 @@ pointer *vp; a = (pointer)v; } break; + case O_IMAT: + row = (Obj)BDY(ind); + ind = NEXT(ind); + col = (Obj)BDY(ind); + if ( ((IMAT)a)->row < QTOS((Q)row) || + ((IMAT)a)->col < QTOS((Q)col) || + (QTOS((Q)row) < 0) || (QTOS((Q)col) < 0)) + error("putarray : Out of range"); + GetIbody((IMAT)a, QTOS((Q)row), QTOS((Q)col), (Obj)&trg); + a = (pointer)trg; + break; case O_LIST: n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind)); if ( i < 0 ) @@ -191,7 +202,7 @@ NODE ind; pointer b; { Obj len,row,col; - int i,l; + int i; NODE n,n0; if ( a && OID(a) == O_BYTEARRAY ) { @@ -233,6 +244,16 @@ pointer b; } else error("putarray : invalid assignment"); break; + case O_IMAT: + row = (Obj)BDY(ind); + ind = NEXT(ind); + col = (Obj)BDY(ind); + if ( ((IMAT)a)->row < QTOS((Q)row) || + ((IMAT)a)->col < QTOS((Q)col) || + (QTOS((Q)row) < 0) || (QTOS((Q)col) < 0)) + error("putarray : Out of range"); + PutIent((IMAT)a, QTOS((Q)row), QTOS((Q)col), (Obj)b); + break; case O_LIST: if ( NEXT(ind) ) { n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind)); @@ -285,7 +306,7 @@ P p; return ( r ); } -#if defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) +#if defined(__GNUC__) || defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) || defined(__FreeBSD__) NODE mknode(int ac,...) { va_list ap; @@ -415,7 +436,7 @@ P *p; P t; char *str; - for ( vl = CO, str = NAME(f); ; ) + for ( vl = CO, str = f->fullname; ; ) if ( NAME(VR(vl)) && !strcmp(NAME(VR(vl)),str) ) { VR(vl)->attr = (pointer)V_SR; VR(vl)->priv = (pointer)f; MKV(VR(vl),t); *p = t;