=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/array.c,v retrieving revision 1.50 retrieving revision 1.52 diff -u -p -r1.50 -r1.52 --- OpenXM_contrib2/asir2000/builtin/array.c 2006/01/05 00:21:20 1.50 +++ OpenXM_contrib2/asir2000/builtin/array.c 2006/05/30 07:35:30 1.52 @@ -45,13 +45,17 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/array.c,v 1.49 2005/12/21 23:18:15 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/array.c,v 1.51 2006/03/16 10:08:20 noro Exp $ */ #include "ca.h" #include "base.h" #include "parse.h" #include "inline.h" +#include +#include +#include + #define F4_INTRAT_PERIOD 8 #if 0 @@ -444,13 +448,28 @@ void Pnewbytearray(NODE arg,BYTEARRAY *rp) char *str; LIST list; NODE tn; + int ac; + struct stat sbuf; + char *fname; + FILE *fp; - asir_assert(ARG0(arg),O_N,"newbytearray"); - len = QTOS((Q)ARG0(arg)); - if ( len < 0 ) - error("newbytearray : invalid size"); - MKBYTEARRAY(array,len); - if ( argc(arg) == 2 ) { + ac = argc(arg); + if ( ac == 1 ) { + /* ARG0(arg) must be a filename */ + asir_assert(ARG0(arg),O_STR,"newbytearray"); + fname = BDY((STRING)ARG0(arg)); + fp = fopen(fname,"rb"); + if ( !fp ) error("newbytearray : fopen failed"); + if ( stat(fname,&sbuf) < 0 ) error("newbytearray : stat failed"); + len = sbuf.st_size; + MKBYTEARRAY(array,len); + fread(BDY(array),len,sizeof(char),fp); + } else if ( ac == 2 ) { + asir_assert(ARG0(arg),O_N,"newbytearray"); + len = QTOS((Q)ARG0(arg)); + if ( len < 0 ) + error("newbytearray : invalid size"); + MKBYTEARRAY(array,len); if ( !ARG1(arg) ) error("newbytearray : invalid initialization"); switch ( OID((Obj)ARG1(arg)) ) { @@ -474,7 +493,8 @@ void Pnewbytearray(NODE arg,BYTEARRAY *rp) if ( !ARG1(arg) ) error("newbytearray : invalid initialization"); } - } + } else + error("newbytearray : invalid argument"); *rp = array; } @@ -483,7 +503,7 @@ void Pnewbytearray(NODE arg,BYTEARRAY *rp) void Pmemoryplot_to_coord(NODE arg,LIST *rp) { int len,blen,y,i,j; - char *a; + unsigned char *a; NODE r0,r,n; LIST l; BYTEARRAY ba; @@ -1262,11 +1282,11 @@ int generic_gauss_elim_hensel(MAT mat,MAT *nmmat,Q *dn } else wi[j] = 0; - if ( DP_Print ) { + if ( DP_Print > 3 ) { fprintf(asir_out,"LU decomposition.."); fflush(asir_out); } rank = find_lhs_and_lu_mod((unsigned int **)w,row,col,md,&rinfo,&cinfo); - if ( DP_Print ) { + if ( DP_Print > 3 ) { fprintf(asir_out,"done.\n"); fflush(asir_out); } a = (Q **)almat_pointer(rank,rank); /* lhs mat */ @@ -1305,7 +1325,7 @@ int generic_gauss_elim_hensel(MAT mat,MAT *nmmat,Q *dn wx = (int *)MALLOC_ATOMIC(wxsize*sizeof(int)); for ( i = 0; i < wxsize; i++ ) wx[i] = 0; for ( q = ONE, count = 0; ; ) { - if ( DP_Print ) + if ( DP_Print > 3 ) fprintf(stderr,"o"); /* wc = -b mod md */ get_eg(&tmp0);