=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/io/bsave.c,v retrieving revision 1.14 retrieving revision 1.16 diff -u -p -r1.14 -r1.16 --- OpenXM_contrib2/asir2000/io/bsave.c 2004/12/10 07:36:35 1.14 +++ OpenXM_contrib2/asir2000/io/bsave.c 2009/03/16 16:43:03 1.16 @@ -44,7 +44,7 @@ * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. - * $OpenXM: OpenXM_contrib2/asir2000/io/bsave.c,v 1.13 2003/12/22 09:33:47 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/io/bsave.c,v 1.15 2006/08/09 02:40:47 noro Exp $ */ /* saveXXX must not use GC_malloc(), GC_malloc_atomic(). */ @@ -57,8 +57,11 @@ int get_lg(GEN); #endif +void savenbp(FILE *s,NBP p); + void (*savef[])() = { 0, savenum, savep, saver, savelist, savevect, - savemat, savestring, 0, savedp, saveui, saveerror,0,0,0,savegfmmat, savebytearray }; + savemat, savestring, 0, savedp, saveui, saveerror,0,0,0,savegfmmat, + savebytearray, 0, 0, 0, 0, 0, 0, 0, 0, savenbp }; #if defined(INTERVAL) void saveitv(); void saveitvd(); @@ -125,12 +128,12 @@ void savebf(FILE *s,BF p) write_int(s,&sign); -#if defined(LONG_IS_32BIT) +#if SIZEOF_LONG == 4 write_int(s,(int *)&zeroval); /* expo>>32 is always 0 */ write_int(s,(int *)&expo); write_int(s,&len); write_intarray(s,(int *)&z[2],len); -#elif defined(LONG_IS_64BIT) +#elif SIZEOF_LONG == 8 t = expo>>32; write_int(s,(int *)&t); t = expo&0xffffffff; write_int(s,&t); t = 2*len; write_int(s,&t); @@ -203,8 +206,8 @@ void savegfsn(FILE *s,GFSN p) void savedalg(FILE *s,DAlg p) { - saveobj(s,p->nm); - saveobj(s,p->dn); + saveobj(s,(Obj)p->nm); + saveobj(s,(Obj)p->dn); } void savep(FILE *s,P p) @@ -344,4 +347,21 @@ void savebytearray(FILE *s,BYTEARRAY p) { write_short(s,&OID(p)); write_int(s,&p->len); write_string(s,p->body,p->len); +} + +void savenbp(FILE *s,NBP p) +{ + int i,n; + NODE t; + NBM m; + + write_short(s,&OID(p)); + for ( n = 0, t = BDY(p); t; t = NEXT(t), n++ ); + write_int(s,&n); + for ( i = 0, t = BDY(p); i < n; t = NEXT(t), i++ ) { + m = (NBM)BDY(t); + saveobj(s,(Obj)m->c); + write_int(s,&m->d); + write_intarray(s,m->b,(m->d+31)/32); + } }