=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/parse.h,v retrieving revision 1.36 retrieving revision 1.57 diff -u -p -r1.36 -r1.57 --- OpenXM_contrib2/asir2000/parse/parse.h 2005/08/25 18:59:11 1.36 +++ OpenXM_contrib2/asir2000/parse/parse.h 2018/03/29 01:32:54 1.57 @@ -45,9 +45,9 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/parse/parse.h,v 1.35 2005/07/27 04:35:11 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/parse.h,v 1.56 2017/08/31 02:36:21 noro Exp $ */ -# if defined(VISUAL) +# if defined(VISUAL) || defined(__MINGW32__) #include #else #include @@ -62,24 +62,24 @@ /* identifiers for expressions */ typedef enum { - I_BOP, I_COP, I_AND, I_OR, I_NOT, I_CE, - I_PRESELF, I_POSTSELF, - I_FUNC, I_FUNC_OPT, I_IFUNC, I_MAP, I_RECMAP, I_PFDERIV, - I_ANS, I_PVAR, I_ASSPVAR, - I_FORMULA, I_LIST, I_STR, I_NEWCOMP, I_CAR, I_CDR, I_CAST, - I_INDEX, I_EV, I_TIMER, I_GF2NGEN, I_GFPNGEN, I_GFSNGEN, - I_LOP, I_OPT, I_GETOPT, I_POINT, I_PAREN, I_MINUS, - I_NARYOP + I_BOP, I_COP, I_AND, I_OR, I_NOT, I_CE, + I_PRESELF, I_POSTSELF, + I_FUNC, I_FUNC_OPT, I_IFUNC, I_MAP, I_RECMAP, I_PFDERIV, + I_ANS, I_PVAR, I_ASSPVAR, + I_FORMULA, I_LIST, I_STR, I_NEWCOMP, I_CAR, I_CDR, I_CAST, + I_INDEX, I_EV, I_TIMER, I_GF2NGEN, I_GFPNGEN, I_GFSNGEN, + I_LOP, I_OPT, I_GETOPT, I_POINT, I_PAREN, I_MINUS, + I_NARYOP, I_CONS, I_FUNC_QARG, I_FUNC_HEAD, I_EVM } fid; /* identifiers for statements */ typedef enum { - S_BP, S_PFDEF, - S_SINGLE, S_CPLX, - S_IFELSE, S_FOR, S_DO, - S_BREAK, S_RETURN, S_CONTINUE, - S_MODULE + S_BP, S_PFDEF, + S_SINGLE, S_CPLX, + S_IFELSE, S_FOR, S_DO, + S_BREAK, S_RETURN, S_CONTINUE, + S_MODULE } sid; /* identifiers for comparison operators */ @@ -99,130 +99,137 @@ typedef enum { A_UNDEF, A_BIN, A_USR, A_PURE, A_PARI } typedef enum { V_IND, V_UC, V_PF, V_SR } vid; typedef struct oVS { - unsigned int n; - unsigned int asize; - unsigned int at; - unsigned int level; - struct oFUNC *usrf; - struct oPV *va; - NODE opt; + unsigned int n; + unsigned int asize; + unsigned int at; + unsigned int level; + struct oFUNC *usrf; + struct oPV *va; + NODE opt; } *VS; typedef struct oMODULE { - char *name; - VS pvs; - NODE usrf_list; + char *name; + VS pvs; + NODE usrf_list; } *MODULE; typedef struct oPV { - char *name; - short attr,type; - pointer priv; + char *name; + short attr,type; + pointer priv; } *PV; typedef struct oINFILE { - char *name; - FILE *fp; - int ln; - struct oINFILE *next; - char *tname; - int encoded; - short vol; + char *name; + FILE *fp; + JMP_BUF jmpbuf; + int ready_for_longjmp; + int ln; + struct oINFILE *next; + char *tname; + int encoded; + short vol; } *INFILE; struct oTKWD { - char *name; - int token; + char *name; + int token; }; typedef struct fid_spec { - fid id; - farg_type type[10]; + fid id; + farg_type type[10]; } *fid_spec_p; typedef struct oARF { - char *name; - void (*fp)(); + char *name; + void (*fp)(); } *ARF; typedef struct oFUNC { - char *name,*fullname; - int argc; - int type; - int secure; - aid id; - union { - void (*binf)(); - struct oUSRF *usrf; - struct oPF *puref; - } f; + char *name,*fullname; + int argc; + int type; + int secure; + aid id; + unsigned int quote; + union { + void (*binf)(); + struct oUSRF *usrf; + struct oPF *puref; + } f; } *FUNC; typedef struct oUSRF { - char *fname; - MODULE module; - int startl,endl; - NODE args; - VS pvs; - char *desc; - struct oSNODE *body; + char *fname; + MODULE module; + int startl,endl; + NODE args; + VS pvs; + char *desc; + struct oSNODE *body; } *USRF; typedef struct oPF { - char *name; - int argc; - Obj body; - V *args; - Obj *deriv; - NODE ins; - int (*pari)(); - double (*libm)(); - int (*simplify)(); + char *name; + int argc; + Obj body; + V *args; + Obj *deriv; + NODE ins; + int (*pari)(); + double (*libm)(); + int (*simplify)(); } *PF; typedef struct oPFAD { - Obj arg; - int d; + Obj arg; + int d; } *PFAD; typedef struct oPFINS { - struct oPF *pf; - struct oPFAD ad[1]; + struct oPF *pf; + struct oPFAD ad[1]; } *PFINS; #define NEWPF(p) ((p)=(PF)MALLOC(sizeof(struct oPF))) typedef struct oFNODE { - fid id; - pointer arg[1]; + short id; + unsigned normalized:1; + unsigned expanded:2; + unsigned coef:1; + pointer arg[1]; } *FNODE; #define NEWFNODE(a,b) \ ((a)=(FNODE)MALLOC(sizeof(struct oFNODE)+sizeof(pointer)*(b-1))) typedef struct oSNODE { - sid id; - int ln; - pointer arg[1]; + sid id; + int ln; + pointer arg[1]; } *SNODE; #define NEWSNODE(a,b) \ ((a)=(SNODE)MALLOC(sizeof(struct oSNODE)+sizeof(pointer)*(b-1)),(a)->ln=asir_infile->ln) typedef struct oPVI { - int pv; - NODE index; + int pv; + NODE index; } *PVI; typedef struct oNODE2 { - pointer body1,body2; - struct oNODE2 *next; + pointer body1,body2; + struct oNODE2 *next; } *NODE2; struct ftab { - char *name; - void (*f)(); - int argc; + char *name; + void (*f)(); + int argc; + unsigned int quote; }; #define MKPVI(a,b,c)\ @@ -250,47 +257,55 @@ struct ftab { #define asir_assert(ptr,id,message)\ switch ( id ) {\ - case O_N: case O_P: case O_R:\ - if( (ptr) && (OID(ptr) > (id)) ) {\ - fprintf(stderr,message);\ - error(" : invalid argument");\ - }\ - break;\ - case O_DP:\ - if( (ptr) && (OID(ptr) != (id)) ) {\ - fprintf(stderr,message);\ - error(" : invalid argument");\ - }\ - break;\ - default:\ - if( !(ptr) || (OID(ptr) != (id)) ) {\ - fprintf(stderr,message);\ - error(" : invalid argument");\ - }\ - break;\ + case O_N: case O_P: case O_R:\ + if( (ptr) && (OID(ptr) > (id)) ) {\ + fprintf(stderr,message);\ + error(" : invalid argument");\ + }\ + break;\ + case O_DP:\ + if( (ptr) && (OID(ptr) != (id)) ) {\ + fprintf(stderr,message);\ + error(" : invalid argument");\ + }\ + break;\ + default:\ + if( !(ptr) || (OID(ptr) != (id)) ) {\ + fprintf(stderr,message);\ + error(" : invalid argument");\ + }\ + break;\ } #define DEFSIZE 32 #define PVGLOBAL(i) (((unsigned int)(i))|(1<<30)) -#define PVMGLOBAL(i) (((unsigned int)(i))|(3<<30)) +#define PVMGLOBAL(i) (((unsigned int)(i))|(2<<30)) +#define PVPATTERN(i) (((unsigned int)(i))|(3<<30)) #define PVATTR(i) (((unsigned int)(i))>>30) #define PVIND(i) (((unsigned int)(i))&0x3fffffff) #define GETPV(i,p) \ (PVATTR(i)==0?(int)((p)=CPVS->va[(unsigned int)(i)].priv)\ - :PVATTR(i)==1?(int)((p)=GPVS->va[PVIND(i)].priv)\ - :(int)((p)=MPVS->va[PVIND(i)].priv)) + :PVATTR(i)==1?(int)((p)=GPVS->va[PVIND(i)].priv)\ + :PVATTR(i)==2?(int)((p)=MPVS->va[PVIND(i)].priv)\ + :(int)((p)=PPVS->va[PVIND(i)].priv)) + #define GETPVREF(i,p) \ (PVATTR(i)==0?(int)((p)=&(CPVS->va[(unsigned int)(i)].priv))\ - :PVATTR(i)==1?(int)((p)=&(GPVS->va[PVIND(i)].priv))\ - :(int)((p)=&(MPVS->va[PVIND(i)].priv))) + :PVATTR(i)==1?(int)((p)=&(GPVS->va[PVIND(i)].priv))\ + :PVATTR(i)==2?(int)((p)=&(MPVS->va[PVIND(i)].priv))\ + :(int)((p)=&(PPVS->va[PVIND(i)].priv))) + #define GETPVNAME(i,p) \ (PVATTR(i)==0?(int)((p)=CPVS->va[(unsigned int)(i)].name)\ - :PVATTR(i)==1?(int)((p)=GPVS->va[PVIND(i)].name)\ - :(int)((p)=MPVS->va[PVIND(i)].name)) + :PVATTR(i)==1?(int)((p)=GPVS->va[PVIND(i)].name)\ + :PVATTR(i)==2?(int)((p)=MPVS->va[PVIND(i)].name)\ + :(int)((p)=PPVS->va[PVIND(i)].name)) + #define ASSPV(i,p) \ (PVATTR(i)==0?(int)(CPVS->va[(unsigned int)(i)].priv=(pointer)(p))\ - :PVATTR(i)==1?(int)(GPVS->va[PVIND(i)].priv=(pointer)(p))\ - :(int)(MPVS->va[PVIND(i)].priv=(pointer)(p))) + :PVATTR(i)==1?(int)(GPVS->va[PVIND(i)].priv=(pointer)(p))\ + :PVATTR(i)==2?(int)(MPVS->va[PVIND(i)].priv=(pointer)(p))\ + :(int)(PPVS->va[PVIND(i)].priv=(pointer)(p))) #define NEWNODE2(a) ((a)=(NODE2)MALLOC(sizeof(struct oNODE2))) #define MKNODE2(a,b,c,d) \ @@ -298,7 +313,7 @@ switch ( id ) {\ #define BDY1(a) ((a)->body1) #define BDY2(a) ((a)->body2) -extern VS GPVS,CPVS,EPVS,APVS,MPVS; +extern VS GPVS,CPVS,EPVS,APVS,MPVS,PPVS; extern MODULE CUR_MODULE; extern NODE MODULE_LIST; extern char *CUR_FUNC; @@ -326,7 +341,7 @@ extern NODE current_option; #define fflush w_fflush #endif -#if defined(__GNUC__) || defined(VISUAL) || (defined(__MACH__) && defined(__ppc__)) || defined(__FreeBSD__) +#if defined(__GNUC__) || defined(VISUAL) || defined(__MINGW32__) || (defined(__MACH__) && defined(__ppc__)) || defined(__FreeBSD__) NODE mknode(int,...); FNODE mkfnode(int,fid,...); SNODE mksnode(int,sid,...); @@ -386,33 +401,6 @@ int create_order_spec(VL,Obj,struct order_spec **); int dl_equal(int,DL,DL); void qltozl(Q *,int,Q *); -int cmpdl_matrix(int,DL,DL); -int cmpdl_order_pair(int,DL,DL); -int cmpdl_elim(int,DL,DL); -int cmpdl_blexrev(int,DL,DL); -int cmpdl_bgradrev(int,DL,DL); -int cmpdl_brevrev(int,DL,DL); -int cmpdl_brevgradlex(int,DL,DL); -int cmpdl_bgradlex(int,DL,DL); -int cmpdl_blex(int,DL,DL); -int cmpdl_revgradlex(int,DL,DL); -int cmpdl_gradlex(int,DL,DL); -int cmpdl_revlex(int,DL,DL); -int cmpdl_lex(int,DL,DL); -int compd(VL,DP,DP); -void adddl(int,DL,DL,DL *); -void divsdc(VL,DP,P,DP *); -void muldc(VL,DP,P,DP *); -void muldm(VL,DP,MP,DP *); -void muld(VL,DP,DP,DP *); -void chsgnd(DP,DP *); -void subd(VL,DP,DP,DP *); -void addd(VL,DP,DP,DP *); -int sugard(MP); -void nodetod(NODE,DP *); -void dtop(VL,VL,DP,P *); -void ptod(VL,VL,P,DP *); -void initd(struct order_spec *); int mainparse(SNODE *); int exprparse(FUNC,char *,FNODE *); @@ -452,7 +440,6 @@ void tty_reset(void); void set_timer(int); void reset_timer(void); void int_handler(int); -void int_handler(int); void segv_handler(int); void bus_handler(int); void fpe_handler(int); @@ -471,7 +458,7 @@ int yyparse(void); void nodetod(NODE,DP *); void poppvs(void); int length(NODE); -int get_heapsize(void); +size_t get_heapsize(void); int searchpvar(char *); void mkparif(char *,FUNC *); void makevar(char *,P *); @@ -483,8 +470,8 @@ void closecurrentinput(void); void asir_terminate(int); void searchasirpath(char *,char **); void get_vars(Obj,VL *); -void appendbinf(NODE *,char *,void(*)(),int); -void appendubinf(char *,void(*)(),int); +void appendbinf(NODE *,char *,void(*)(),int,unsigned int); +void appendubinf(char *,void(*)(),int,unsigned int); void parif_init(void); void sysf_init(void); void makesrvar(FUNC, P *); @@ -500,10 +487,8 @@ void printv(VL,V); void sprintv(VL,V); int arf_comp(VL, Obj, Obj); int complist(VL, LIST, LIST); -int complist(VL, LIST, LIST); int getcompsize(int); int getpvar(VS,char *,int); -int getpvar(VS,char *,int); int gettype(unsigned int); int indextotype(int,int); int loadfile(char *); @@ -514,15 +499,6 @@ int qcoefp(Obj); int qcoefr(Obj); int rangecheck(Obj,int); int structtoindex(char *); -pointer eval(FNODE); -pointer evalf(FUNC,FNODE,FNODE); -pointer bevalf(FUNC,NODE); -pointer evalif(FNODE,FNODE); -pointer evalnode(NODE node); -pointer evalpf(PF,NODE); -pointer evalparif(FUNC,NODE); -pointer evalpv(int,FNODE,pointer); -pointer evalstat(SNODE f); void _mkpfins(PF ,Obj *,V *); void appendpfins(V ,V *); void appenduf(char *,FUNC *); @@ -648,7 +624,6 @@ void dp_mbase(NODE hlist,NODE *mbase); void dp_idiv(DP p,Q c,DP *rp); void dp_ptozp2(DP p0,DP p1,DP *hp,DP *rp); void dp_ptozp(DP p,DP *rp); -int eqdl(int nv,DL dl1,DL dl2); void _dpmod_to_vect(DP f,DL *at,int *b); void _tf_to_vect_compress(NODE tf,DL *at,CDP *b); void dp_to_vect(DP f,DL *at,Q *b); @@ -749,21 +724,21 @@ void reduce_reducers_mod(int **mat,int row,int col,int void pre_reduce_mod(int **mat,int row,int col,int nred,int md); void reduce_sp_by_red_mod(int *sp,int **redmat,int *ind,int nred,int col,int md); void red_by_compress(int m,unsigned int *p,unsigned int *r, - unsigned int *ri,unsigned int hc,int len); + unsigned int *ri,unsigned int hc,int len); void red_by_vect(int m,unsigned int *p,unsigned int *r,unsigned int hc,int len); void reduce_sp_by_red_mod_compress (int *sp,CDP *redmat,int *ind, - int nred,int col,int md); + int nred,int col,int md); int generic_gauss_elim_mod(int **mat0,int row,int col,int md,int *colstat); int lu_gfmmat(GFMMAT mat,unsigned int md,int *perm); int find_lhs_and_lu_mod(unsigned int **a,int row,int col, - unsigned int md,int **rinfo,int **cinfo); + unsigned int md,int **rinfo,int **cinfo); void solve_by_lu_mod(int **a,int n,int md,int **b,int l,int normalize); int gauss_elim_mod1(int **mat,int row,int col,int md); int gauss_elim_geninv_mod(unsigned int **mat,int row,int col,int md); void solve_by_lu_gfmmat(GFMMAT lu,unsigned int md,unsigned int *b,unsigned int *x); void mat_to_gfmmat(MAT m,unsigned int md,GFMMAT *rp); int gauss_elim_geninv_mod_swap(unsigned int **mat,int row,int col, - unsigned int md,unsigned int ***invmatp,int **indexp); + unsigned int md,unsigned int ***invmatp,int **indexp); void inner_product_int(Q *a,Q *b,int n,Q *r); void inner_product_mat_int_mod(Q **a,int **b,int n,int k,int l,Q *r); int generate_ONB_polynomial(UP2 *rp,int m,int type); @@ -820,7 +795,6 @@ void prompt() ; void sprompt(char *ptr); void process_args(int ac,char **av); void sig_init() ; -static void (*old_int)(int);; void asir_save_handler() ; void asir_set_handler() ; void asir_reset_handler() ; @@ -847,7 +821,7 @@ void init_cmdwin(); void searchpf(char *name,FUNC *fp); void searchc(char *name,FUNC *fp); void mkpf(char *name,Obj body,int argc,V *args, - int (*parif)(),double (*libmf)(), int (*simp)(),PF *pfp); + int (*parif)(),double (*libmf)(), int (*simp)(),PF *pfp); void mkpfins(PF pf,V *args,V *vp); void _mkpfins(PF pf,Obj *args,V *vp); void _mkpfins_with_darray(PF pf,Obj *args,int *darray,V *vp); @@ -883,12 +857,15 @@ pointer eval(FNODE f); pointer evalstat(SNODE f); pointer evalnode(NODE node); pointer evalf(FUNC f,FNODE a,FNODE opt); +pointer evalparif(FUNC f,NODE a); +pointer evalf_deriv(FUNC f,FNODE a,FNODE deriv); pointer evalmapf(FUNC f,FNODE a); pointer eval_rec_mapf(FUNC f,FNODE a); pointer beval_rec_mapf(FUNC f,NODE node); pointer bevalf(FUNC f,NODE a); -pointer evalif(FNODE f,FNODE a); -pointer evalpf(PF pf,NODE args); +pointer bevalf_with_opts(FUNC f,NODE a,NODE opts); +pointer evalif(FNODE f,FNODE a,FNODE opt); +pointer evalpf(PF pf,NODE args,NODE deriv); void evalnodebody(NODE sn,NODE *dnp); void gen_searchf(char *name,FUNC *r); void searchf(NODE fn,char *name,FUNC *r); @@ -896,11 +873,11 @@ void appenduf(char *name,FUNC *r); void mkparif(char *name,FUNC *r); void mkuf(char *name,char *fname,NODE args,SNODE body,int startl,int endl,char *desc,MODULE module); Obj getopt_from_cpvs(char *key); -void des_enc(unsigned long *, unsigned char *, unsigned long *); -unsigned long round_func(unsigned long , unsigned char *); -unsigned long s_box_func(unsigned char *); -void des_dec(unsigned long *, unsigned char *, unsigned long *); -void key_schedule(unsigned char *,unsigned char *); +void des_enc(unsigned long *, unsigned char *, unsigned long *); +unsigned long round_func(unsigned long , unsigned char *); +unsigned long s_box_func(unsigned char *); +void des_dec(unsigned long *, unsigned char *, unsigned long *); +void key_schedule(unsigned char *,unsigned char *); void debug_init(); void add_alias(char *com,char *alias); void show_alias(char *alias);