=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/function.c,v retrieving revision 1.3 retrieving revision 1.7 diff -u -p -r1.3 -r1.7 --- OpenXM_contrib2/asir2000/parse/function.c 2000/08/22 05:04:26 1.3 +++ OpenXM_contrib2/asir2000/parse/function.c 2004/11/16 01:47:31 1.7 @@ -45,11 +45,40 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/parse/function.c,v 1.2 2000/08/21 08:31:46 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/function.c,v 1.6 2004/10/27 08:21:47 noro Exp $ */ #include "ca.h" #include "parse.h" +static int secure_mode; + +void setsecuremode(int value) +{ + secure_mode = value; +} + +int getsecuremode() +{ + return secure_mode; +} + +int setsecureflag(char *name,int value) +{ + FUNC f; + + searchf(noargsysf,name,&f); + if ( f ) { + f->secure = value; + return 0; + } + gen_searchf_searchonly(name,&f); + if ( f ) { + f->secure = value; + return 0; + } + return -1; +} + void appendbinf(flistp,name,func,argc) NODE *flistp; char *name; @@ -61,6 +90,7 @@ int argc; t = (FUNC)MALLOC(sizeof(struct oFUNC)); t->name = name; t->id = A_BIN; t->argc = argc; t->f.binf = func; + t->fullname = name; MKNODE(n,t,*flistp); *flistp = n; } @@ -75,6 +105,7 @@ int type; t = (FUNC)MALLOC(sizeof(struct oFUNC)); t->name = name; t->id = A_PARI; t->type = type; t->f.binf = (void (*)())func; + t->fullname = name; MKNODE(n,t,*flistp); *flistp = n; } @@ -94,16 +125,33 @@ int argc; appendbinf(&ubinf,name,func,argc); } +int comp_dcp(DCP *a,DCP *b) +{ + int c; + + c = arf_comp(CO,(Obj)(*a)->c,(Obj)(*b)->c); + if ( c > 0 ) return 1; + else if ( c < 0 ) return -1; + else return 0; +} + void dcptolist(dc,listp) DCP dc; LIST *listp; { NODE node,tnode,ln0,ln1; LIST l; + DCP *w,t; + int i,n; - for ( node = 0; dc; dc = NEXT(dc) ) { + for ( n = 0, t = dc; t; t = NEXT(t), n++ ); + w = (DCP *)ALLOCA(n*sizeof(DCP)); + for ( i = 0, t = dc; i < n; t = NEXT(t), i++ ) + w[i] = t; + qsort(w,n,sizeof(DCP),(int (*)(const void *,const void *))comp_dcp); + for ( node = 0, i = 0; i < n; i++ ) { NEXTNODE(node,tnode); - MKNODE(ln1,DEG(dc),0); MKNODE(ln0,COEF(dc),ln1); + MKNODE(ln1,DEG(w[i]),0); MKNODE(ln0,COEF(w[i]),ln1); MKLIST(l,ln0); BDY(tnode) = (pointer)l; } NEXT(tnode) = 0; MKLIST(l,node); *listp = l;