version 1.5, 2000/12/05 01:24:57 |
version 1.9, 2003/08/21 08:05:02 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2000/parse/util.c,v 1.4 2000/11/08 08:02:52 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/parse/util.c,v 1.8 2001/10/09 01:36:25 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
#include "parse.h" |
#include "parse.h" |
#if defined(VISUAL) |
#if defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) || defined(__FreeBSD__) |
#include <stdarg.h> |
#include <stdarg.h> |
#else |
#else |
#include <varargs.h> |
#include <varargs.h> |
|
|
pointer *vp; |
pointer *vp; |
{ |
{ |
Obj len,row,col; |
Obj len,row,col; |
int i,l; |
int i; |
NODE n,n0; |
NODE n,n0; |
VECT v; |
VECT v; |
Q q; |
Q q; |
|
|
break; |
break; |
case O_LIST: |
case O_LIST: |
n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind)); |
n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind)); |
for ( l = 0, n = n0; n; n = NEXT(n), l++ ); |
if ( i < 0 ) |
if ( i < 0 || i >= l ) |
|
error("getarray : Out of range"); |
error("getarray : Out of range"); |
else { |
for ( n = n0; i > 0 && n; n = NEXT(n), i-- ); |
for ( n = n0, l = 0; l < i; l++, n = NEXT(n) ); |
if ( i || !n ) |
|
error("getarray : Out of range"); |
|
else |
a = (pointer)BDY(n); |
a = (pointer)BDY(n); |
} |
|
break; |
break; |
default: |
default: |
error("getarray : array or list expected"); |
error("getarray : array or list expected"); |
|
|
pointer b; |
pointer b; |
{ |
{ |
Obj len,row,col; |
Obj len,row,col; |
int i,l; |
int i; |
NODE n,n0; |
NODE n,n0; |
|
|
if ( a && OID(a) == O_BYTEARRAY ) { |
if ( a && OID(a) == O_BYTEARRAY ) { |
|
|
case O_LIST: |
case O_LIST: |
if ( NEXT(ind) ) { |
if ( NEXT(ind) ) { |
n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind)); |
n0 = BDY((LIST)a); i = QTOS((Q)BDY(ind)); |
for ( l = 0, n = n0; n; n = NEXT(n), l++ ); |
if ( i < 0 ) |
if ( i < 0 || i >= l ) |
|
error("putarray : Out of range"); |
error("putarray : Out of range"); |
else { |
for ( n = n0; i > 0 && n; n = NEXT(n), i-- ); |
for ( n = n0, l = 0; l < i; l++, n = NEXT(n) ); |
if ( i || !n ) |
|
error("puarray : Out of range"); |
|
else |
a = (pointer)BDY(n); |
a = (pointer)BDY(n); |
} |
|
} else |
} else |
error("putarray : invalid assignment"); |
error("putarray : invalid assignment"); |
break; |
break; |
|
|
return ( r ); |
return ( r ); |
} |
} |
|
|
#if defined(VISUAL) |
#if defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) || defined(__FreeBSD__) |
NODE mknode(int ac,...) |
NODE mknode(int ac,...) |
{ |
{ |
va_list ap; |
va_list ap; |