=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/function.c,v retrieving revision 1.2 retrieving revision 1.10 diff -u -p -r1.2 -r1.10 --- OpenXM_contrib2/asir2000/parse/function.c 2000/08/21 08:31:46 1.2 +++ OpenXM_contrib2/asir2000/parse/function.c 2018/03/29 01:32:54 1.10 @@ -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,23 +45,54 @@ * 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.1.1.1 1999/12/03 07:39:12 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/function.c,v 1.9 2014/08/09 06:08:11 noro Exp $ */ #include "ca.h" #include "parse.h" -void appendbinf(flistp,name,func,argc) +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,0); + if ( f ) { + f->secure = value; + return 0; + } + return -1; +} + +void appendbinf(flistp,name,func,argc,quote) NODE *flistp; char *name; void (*func)(); int argc; +unsigned int quote; { - FUNC t; - NODE n; + FUNC t; + NODE n; - t = (FUNC)MALLOC(sizeof(struct oFUNC)); - t->name = name; t->id = A_BIN; t->argc = argc; t->f.binf = func; - MKNODE(n,t,*flistp); *flistp = n; + t = (FUNC)MALLOC(sizeof(struct oFUNC)); + t->name = name; t->id = A_BIN; t->argc = argc; t->f.binf = func; + t->fullname = name; t->quote = quote; + MKNODE(n,t,*flistp); *flistp = n; } void appendparif(flistp,name,func,type) @@ -70,41 +101,61 @@ char *name; int (*func)(); int type; { - FUNC t; - NODE n; + FUNC t; + NODE n; - t = (FUNC)MALLOC(sizeof(struct oFUNC)); - t->name = name; t->id = A_PARI; t->type = type; t->f.binf = (void (*)())func; - MKNODE(n,t,*flistp); *flistp = n; + 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; } -void appendsysf(name,func,argc) +void appendsysf(name,func,argc,quote) char *name; void (*func)(); int argc; +unsigned int quote; { - appendbinf(&sysf,name,func,argc); + appendbinf(&sysf,name,func,argc,quote); } -void appendubinf(name,func,argc) +void appendubinf(name,func,argc,quote) char *name; void (*func)(); int argc; +unsigned int quote; { - appendbinf(&ubinf,name,func,argc); + appendbinf(&ubinf,name,func,argc,quote); } +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; + NODE node,tnode,ln0,ln1; + LIST l; + DCP *w,t; + int i,n; - for ( node = 0; dc; dc = NEXT(dc) ) { - NEXTNODE(node,tnode); - MKNODE(ln1,DEG(dc),0); MKNODE(ln0,COEF(dc),ln1); - MKLIST(l,ln0); BDY(tnode) = (pointer)l; - } - NEXT(tnode) = 0; MKLIST(l,node); *listp = l; + 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(w[i]),0); MKNODE(ln0,COEF(w[i]),ln1); + MKLIST(l,ln0); BDY(tnode) = (pointer)l; + } + NEXT(tnode) = 0; MKLIST(l,node); *listp = l; }