=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/include/ca.h,v retrieving revision 1.43 retrieving revision 1.50 diff -u -p -r1.43 -r1.50 --- OpenXM_contrib2/asir2000/include/ca.h 2004/02/04 07:42:07 1.43 +++ OpenXM_contrib2/asir2000/include/ca.h 2004/07/13 07:59:53 1.50 @@ -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.42 2004/02/03 23:31:58 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/include/ca.h,v 1.49 2004/05/14 06:02:54 noro Exp $ */ #include #include @@ -120,6 +120,10 @@ typedef void * pointer; #define O_QUOTE 17 #define O_OPTLIST 18 #define O_SYMBOL 19 +#define O_RANGE 20 +#define O_TB 21 +#define O_DPV 22 +#define O_QUOTEARG 23 #define O_VOID -1 #define N_Q 0 @@ -138,6 +142,10 @@ typedef void * pointer; #define ORD_GRADLEX 1 #define ORD_LEX 2 +typedef enum { + A_end=0,A_fnode,A_arf,A_int,A_str,A_internal,A_node,A_notimpl,A_func +} farg_type; + #if defined(LONG_IS_32BIT) #if defined(VISUAL) typedef _int64 L; @@ -325,6 +333,13 @@ typedef struct oDP { struct oMP *body; } *DP; +typedef struct oDPV { + short id; + int len; + int sugar; + struct oDP **body; +} *DPV; + typedef struct oUSINT { short id; short pad; @@ -356,19 +371,39 @@ typedef struct oQUOTE { pointer body; } *QUOTE; +typedef struct oQUOTEARG { + short id; + short pad; + farg_type type; + pointer body; +} *QUOTEARG; + typedef struct oOPTLIST { short id; short pad; struct oNODE *body; } *OPTLIST; -typedef struct oSymbol { +typedef struct oSYMBOL { short id; short pad; char *name; int value; -} *Symbol; +} *SYMBOL; +typedef struct oRANGE { + short id; + short pad; + struct oObj *start,*end; +} *RANGE; + +typedef struct oTB { + short id; + short pad; + int size,next; + char **body; +} *TB; + typedef struct oObj { short id; short pad; @@ -540,6 +575,14 @@ struct order_spec { } ord; }; +struct modorder_spec { + /* id : ORD_REVGRADLEX, ORD_GRADLEX, ORD_LEX */ + int id; + Obj obj; + int len; + int *degree_shift; +}; + /* structure for cputime */ struct oEGT { @@ -695,13 +738,17 @@ bzero((char *)(q)->b,(w)*sizeof(unsigned int))) #define NEWSTR(l) ((l)=(STRING)MALLOC(sizeof(struct oSTRING)),OID(l)=O_STR) #define NEWCOMP(c,n) ((c)=(COMP)MALLOC(sizeof(struct oCOMP)+((n)-1)*sizeof(Obj)),OID(c)=O_COMP) #define NEWDP(d) ((d)=(DP)MALLOC(sizeof(struct oDP)),OID(d)=O_DP) +#define NEWDPV(d) ((d)=(DPV)MALLOC(sizeof(struct oDPV)),OID(d)=O_DPV) #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 NEWQUOTE(e) ((e)=(QUOTE)MALLOC(sizeof(struct oQUOTE)),OID(e)=O_QUOTE) +#define NEWQUOTEARG(e) ((e)=(QUOTEARG)MALLOC(sizeof(struct oQUOTEARG)),OID(e)=O_QUOTEARG) #define NEWOPTLIST(l) ((l)=(OPTLIST)MALLOC(sizeof(struct oOPTLIST)),OID(l)=O_OPTLIST) #define NEWSYMBOL(l) ((l)=(SYMBOL)MALLOC(sizeof(struct oSYMBOL)),OID(l)=O_SYMBOL) +#define NEWRANGE(l) ((l)=(RANGE)MALLOC(sizeof(struct oRANGE)),OID(l)=O_RANGE) +#define NEWTB(l) ((l)=(TB)MALLOC(sizeof(struct oTB)),OID(l)=O_TB,(l)->size=256,(l)->next=0,(l)->body=(char **)MALLOC((l)->size*sizeof(char *))) #define NEWNODE(a) ((a)=(NODE)MALLOC(sizeof(struct oNODE))) #define NEWDC(dc) ((dc)=(DCP)MALLOC(sizeof(struct oDCP))) @@ -747,6 +794,7 @@ DEG(DC(p))=ONE,COEF(DC(p))=(P)ONEM,NEXT(DC(p))=0) #define TOGFMMAT(r,c,b,m) (NEWGFMMAT(m),(m)->row=(r),(m)->col=(c),(m)->body=(b)) #define MKSTR(a,b) (NEWSTR(a),(a)->body=(char *)(b)) #define MKDP(n,m,d) (NEWDP(d),(d)->nv=(n),BDY(d)=(m)) +#define MKDPV(len,m,d) (NEWDPV(d),(d)->len=(len),BDY(d)=(m)) #define MKLM(b,l) (!(b)?(l)=0:(NEWLM(l),(l)->body=(b),(l))) #define MKGF2N(b,l) (!(b)?(l)=0:(NEWGF2N(l),(l)->body=(b),(l))) #define MKGFPN(b,l) (!(b)?(l)=0:(NEWGFPN(l),(l)->body=(b),(l))) @@ -756,6 +804,7 @@ DEG(DC(p))=ONE,COEF(DC(p))=(P)ONEM,NEXT(DC(p))=0) #define MKBYTEARRAY(m,l) \ (NEWBYTEARRAY(m),(m)->len=(l),(m)->body=(char *)MALLOC_ATOMIC((l)),bzero((m)->body,(l))) #define MKQUOTE(q,b) (NEWQUOTE(q),(q)->body=(pointer)(b)) +#define MKQUOTEARG(q,t,b) (NEWQUOTEARG(q),(q)->type=(t),(q)->body=(pointer)(b)) #define NEXTDC(r,c) \ if(!(r)){NEWDC(r);(c)=(r);}else{NEWDC(NEXT(c));(c)=NEXT(c);} @@ -1022,6 +1071,7 @@ void square_rem_tab_up_gf2n(UP,UP *,UP *); void powertabup_gf2n(UP,UP,UP *); void find_root_gf2n(UP,GF2N *); +int cmpdl_composite(int,DL,DL); int cmpdl_matrix(int,DL,DL); int cmpdl_order_pair(int,DL,DL); int cmpdl_elim(int,DL,DL); @@ -1049,6 +1099,12 @@ void nodetod(NODE,DP *); void dtop(VL,VL,DP,P *); void ptod(VL,VL,P,DP *); void initd(struct order_spec *); + +void adddv(VL,DPV,DPV,DPV *); +void subdv(VL,DPV,DPV,DPV *); +void muldv(VL,DP,DPV,DPV *); +void chsgndv(DPV,DPV *); +int compdv(VL,DPV,DPV); void _printdp(DP); void _dp_sp_mod(DP,DP,int,DP *);