=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/include/ca.h,v retrieving revision 1.4 retrieving revision 1.8 diff -u -p -r1.4 -r1.8 --- OpenXM_contrib2/asir2000/include/ca.h 2000/08/21 08:31:36 1.4 +++ OpenXM_contrib2/asir2000/include/ca.h 2000/12/05 06:59:17 1.8 @@ -23,7 +23,7 @@ * shall be made on your publication or presentation in any form of the * results obtained by use of the SOFTWARE. * (4) In the event that you modify the SOFTWARE, you shall notify FLL by - * e-mail at risa-admin@flab.fujitsu.co.jp of the detailed specification + * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification * for such modification or the source code of the modified part of the * SOFTWARE. * @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/include/ca.h,v 1.3 2000/03/10 03:05:01 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/include/ca.h,v 1.7 2000/12/05 01:24:53 noro Exp $ */ #include @@ -58,10 +58,6 @@ #include #endif -#if defined(__MWERKS__) -#define THINK_C -#endif - #if defined(linux) || (defined(sun) && !defined(SYSV)) || defined(news5000) || (defined(mips) && defined(ultrix)) #include #endif @@ -111,6 +107,7 @@ typedef void * pointer; #define O_MATHCAP 13 #define O_F 14 #define O_GFMMAT 15 +#define O_BYTEARRAY 16 #define O_VOID -1 #define N_Q 0 @@ -318,6 +315,13 @@ typedef struct oMATHCAP { struct oLIST *body; } *MATHCAP; +typedef struct oBYTEARRAY { + short id; + short pad; + int len; + unsigned char *body; +} *BYTEARRAY; + typedef struct oObj { short id; short pad; @@ -527,6 +531,7 @@ bzero((char *)(q)->b,(w)*sizeof(unsigned int))) #define NEWUSINT(u) ((u)=(USINT)MALLOC_ATOMIC(sizeof(struct oUSINT)),OID(u)=O_USINT) #define NEWERR(e) ((e)=(ERR)MALLOC(sizeof(struct oERR)),OID(e)=O_ERR) #define NEWMATHCAP(e) ((e)=(MATHCAP)MALLOC(sizeof(struct oMATHCAP)),OID(e)=O_MATHCAP) +#define NEWBYTEARRAY(e) ((e)=(BYTEARRAY)MALLOC(sizeof(struct oBYTEARRAY)),OID(e)=O_BYTEARRAY) #define NEWNODE(a) ((a)=(NODE)MALLOC(sizeof(struct oNODE))) #define NEWDC(dc) ((dc)=(DCP)MALLOC(sizeof(struct oDCP))) @@ -574,6 +579,8 @@ DEG(DC(p))=ONE,COEF(DC(p))=(P)ONEM,NEXT(DC(p))=0) #define MKUSINT(u,b) (NEWUSINT(u),(u)->body=(unsigned)(b)) #define MKERR(e,b) (NEWERR(e),(e)->body=(Obj)(b)) #define MKMATHCAP(e,b) (NEWMATHCAP(e),(e)->body=(LIST)(b)) +#define MKBYTEARRAY(m,l) \ +(NEWBYTEARRAY(m),(m)->len=(l),(m)->body=(char *)MALLOC_ATOMIC((l)),bzero((m)->body,(l))) #define NEXTDC(r,c) \ if(!(r)){NEWDC(r);(c)=(r);}else{NEWDC(NEXT(c));(c)=NEXT(c);} @@ -634,7 +641,43 @@ PL(NM(q))=1,BD(NM(q))[0]=(unsigned int)(n),DN(q)=0,(q) #define UNIN(n) ((n)&&(PL(n)==1)&&(BD(n)[0]==1)) #define EVENN(n) ((!(n))||(!(BD(n)[0]%2))) +/* special macros for private memory management */ +#define NV(p) ((p)->nv) +#define C(p) ((p)->c) +#define ITOS(p) (((unsigned int)(p))&0x7fffffff) +#define STOI(i) ((P)((unsigned int)(i)|0x80000000)) + +struct cdl { + P c; + DL d; +}; + +struct cdlm { + int c; + DL d; +}; + +extern MP _mp_free_list; +extern DP _dp_free_list; +extern DL _dl_free_list; +extern int current_dl_length; + +#define _NEWDL_NOINIT(d,n) if ((n)!= current_dl_length){_dl_free_list=0; current_dl_length=(n);} if(!_dl_free_list)_DL_alloc(); (d)=_dl_free_list; _dl_free_list = *((DL *)_dl_free_list) +#define _NEWDL(d,n) if ((n)!= current_dl_length){_dl_free_list=0; current_dl_length=(n);} if(!_dl_free_list)_DL_alloc(); (d)=_dl_free_list; _dl_free_list = *((DL *)_dl_free_list); bzero((d),(((n)+1)*sizeof(int))) +#define _NEWMP(m) if(!_mp_free_list)_MP_alloc(); (m)=_mp_free_list; _mp_free_list = NEXT(_mp_free_list) +#define _MKDP(n,m,d) if(!_dp_free_list)_DP_alloc(); (d)=_dp_free_list; _dp_free_list = (DP)BDY(_dp_free_list); (d)->nv=(n); BDY(d)=(m) + +#define _NEXTMP(r,c) \ +if(!(r)){_NEWMP(r);(c)=(r);}else{_NEWMP(NEXT(c));(c)=NEXT(c);} + +#define _NEXTMP2(r,c,s) \ +if(!(r)){(c)=(r)=(s);}else{NEXT(c)=(s);(c)=(s);} + +#define _FREEDL(m) *((DL *)m)=_dl_free_list; _dl_free_list=(m) +#define _FREEMP(m) NEXT(m)=_mp_free_list; _mp_free_list=(m) +#define _FREEDP(m) BDY(m)=(MP)_dp_free_list; _dp_free_list=(m) + /* externals */ #if 0 double NatToReal(); @@ -660,7 +703,7 @@ extern N ONEN; extern UP2 ONEUP2; extern FILE *asir_out; -#if defined(__GNUC__) || defined(THINK_C) +#if defined(__GNUC__) extern const int sprime[]; extern const int lprime[]; #else @@ -678,6 +721,7 @@ extern void (*chsgnnumt[])(); /* prototypes */ int compui(VL,USINT,USINT); +int compbytearray(VL,BYTEARRAY,BYTEARRAY); void powermodup(UP,UP *); void hybrid_powermodup(UP,UP *);