version 1.2, 2018/09/28 08:20:27 |
version 1.4, 2021/03/25 05:06:06 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2018/builtin/strobj.c,v 1.1 2018/09/19 05:45:06 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2018/builtin/strobj.c,v 1.3 2020/10/06 06:31:19 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
Line 880 void fnode_do_assign(NODE arg) |
|
Line 880 void fnode_do_assign(NODE arg) |
|
} |
} |
|
|
/* |
/* |
/* consistency check and merge |
* consistency check and merge |
*/ |
*/ |
|
|
int merge_matching_node(NODE n,NODE a,NODE *rp) |
int merge_matching_node(NODE n,NODE a,NODE *rp) |
Line 1080 int qt_match(Obj f, Obj pat, NODE *rp) |
|
Line 1080 int qt_match(Obj f, Obj pat, NODE *rp) |
|
return qt_match_node(farg,parg,rp); |
return qt_match_node(farg,parg,rp); |
} |
} |
} |
} |
|
/* XXX */ |
|
return 0; |
} |
} |
|
|
void Pquotetotex(NODE arg,STRING *rp) |
void Pquotetotex(NODE arg,STRING *rp) |
|
|
LIST *rp; |
LIST *rp; |
{ |
{ |
STRING str; |
STRING str; |
unsigned char *p; |
char *p; |
int len,i; |
int len,i; |
NODE n,n1; |
NODE n,n1; |
Z q; |
Z q; |
Line 1677 void fnodetotex_tb(FNODE f,TB tb) |
|
Line 1679 void fnodetotex_tb(FNODE f,TB tb) |
|
fnodetotex_tb((FNODE)FA1(f),tb); |
fnodetotex_tb((FNODE)FA1(f),tb); |
write_tb(")",tb); |
write_tb(")",tb); |
return; |
return; |
|
default: |
|
return; |
} |
} |
break; |
break; |
|
|
Line 1829 void fnodetotex_tb(FNODE f,TB tb) |
|
Line 1833 void fnodetotex_tb(FNODE f,TB tb) |
|
|
|
default: |
default: |
error("fnodetotex_tb : not implemented yet"); |
error("fnodetotex_tb : not implemented yet"); |
|
return; |
} |
} |
} |
} |
|
|
Line 1962 void Psprintf(NODE arg,STRING *rp) |
|
Line 1967 void Psprintf(NODE arg,STRING *rp) |
|
if (argc < n) { |
if (argc < n) { |
error("sprintf: invalid argument"); |
error("sprintf: invalid argument"); |
} |
} |
r = (char *)MALLOC_ATOMIC(len); |
r = (char *)MALLOC_ATOMIC(len+1); |
for(node = NEXT(arg), t = r; *s; s++) { |
for(node = NEXT(arg), t = r; *s; s++) { |
if (*s=='%' && *(s+1)=='a') { |
if (*s=='%' && *(s+1)=='a') { |
strcpy(t,objtostr(BDY(node))); |
strcpy(t,objtostr(BDY(node))); |
Line 2583 void Pnbm_hp_rest(NODE arg, LIST *rp) |
|
Line 2588 void Pnbm_hp_rest(NODE arg, LIST *rp) |
|
MKLIST(*rp,0); |
MKLIST(*rp,0); |
else { |
else { |
m = (NBM)BDY(BDY(p)); |
m = (NBM)BDY(BDY(p)); |
b = m->b; d = m->d; |
b = (int *)m->b; d = m->d; |
if ( !d ) |
if ( !d ) |
MKLIST(*rp,0); |
MKLIST(*rp,0); |
else { |
else { |
Line 2591 void Pnbm_hp_rest(NODE arg, LIST *rp) |
|
Line 2596 void Pnbm_hp_rest(NODE arg, LIST *rp) |
|
for ( i = 1; i < d; i++ ) |
for ( i = 1; i < d; i++ ) |
if ( NBM_GET(b,i) != v ) break; |
if ( NBM_GET(b,i) != v ) break; |
NEWNBM(m1); NEWNBMBDY(m1,i); |
NEWNBM(m1); NEWNBMBDY(m1,i); |
b1 = m1->b; m1->d = i; m1->c = (P)ONE; |
b1 = (int *)m1->b; m1->d = i; m1->c = (P)ONE; |
if ( v ) for ( j = 0; j < i; j++ ) NBM_SET(b1,j); |
if ( v ) for ( j = 0; j < i; j++ ) NBM_SET(b1,j); |
else for ( j = 0; j < i; j++ ) NBM_CLR(b1,j); |
else for ( j = 0; j < i; j++ ) NBM_CLR(b1,j); |
MKNODE(n,m1,0); MKNBP(h,n); |
MKNODE(n,m1,0); MKNBP(h,n); |
|
|
d1 = d-i; |
d1 = d-i; |
NEWNBM(m1); NEWNBMBDY(m1,d1); |
NEWNBM(m1); NEWNBMBDY(m1,d1); |
b1 = m1->b; m1->d = d1; m1->c = (P)ONE; |
b1 = (int *)m1->b; m1->d = d1; m1->c = (P)ONE; |
for ( j = 0, k = i; j < d1; j++, k++ ) |
for ( j = 0, k = i; j < d1; j++, k++ ) |
if ( NBM_GET(b,k) ) NBM_SET(b1,j); |
if ( NBM_GET(b,k) ) NBM_SET(b1,j); |
else NBM_CLR(b1,j); |
else NBM_CLR(b1,j); |
Line 2717 NBP fnode_to_nbp(FNODE f) |
|
Line 2722 NBP fnode_to_nbp(FNODE f) |
|
pwrnbp(CO,u,r,&u1); |
pwrnbp(CO,u,r,&u1); |
return u1; |
return u1; |
} |
} |
|
/* XXX */ |
|
return 0; |
} |
} |
|
|
void Pnqt_weight(NODE arg,Z *rp) |
void Pnqt_weight(NODE arg,Z *rp) |
Line 3341 FNODE nfnode_mul_coef(Obj c,FNODE f,int expand) |
|
Line 3348 FNODE nfnode_mul_coef(Obj c,FNODE f,int expand) |
|
return fnode_node_to_nary(mulfs,mknode(2,cc,b1)); |
return fnode_node_to_nary(mulfs,mknode(2,cc,b1)); |
} |
} |
} |
} |
|
/* XXX */ |
|
return 0; |
} |
} |
|
|
void fnode_coef_body(FNODE f,Obj *cp,FNODE *bp) |
void fnode_coef_body(FNODE f,Obj *cp,FNODE *bp) |
Line 3414 int nfnode_weight(struct wtab *tab,FNODE f) |
|
Line 3423 int nfnode_weight(struct wtab *tab,FNODE f) |
|
return nfnode_weight(tab,FA1(f))*w; |
return nfnode_weight(tab,FA1(f))*w; |
default: |
default: |
error("nfnode_weight : not_implemented"); |
error("nfnode_weight : not_implemented"); |
|
return 0; |
} |
} |
} |
} |
|
|
Line 3470 int nfnode_comp_lex(FNODE f1,FNODE f2) |
|
Line 3480 int nfnode_comp_lex(FNODE f1,FNODE f2) |
|
if ( IS_BINARYPWR(f1) || IS_BINARYPWR(f2) ) { |
if ( IS_BINARYPWR(f1) || IS_BINARYPWR(f2) ) { |
fnode_base_exp(f1,&b1,&e1); |
fnode_base_exp(f1,&b1,&e1); |
fnode_base_exp(f2,&b2,&e2); |
fnode_base_exp(f2,&b2,&e2); |
if ( r = nfnode_comp_lex(b1,b2) ) { |
if ( ( r = nfnode_comp_lex(b1,b2) ) != 0 ) { |
if ( r > 0 ) |
if ( r > 0 ) |
return nfnode_comp_lex(e1,mkfnode(1,I_FORMULA,NULLP)); |
return nfnode_comp_lex(e1,mkfnode(1,I_FORMULA,NULLP)); |
else if ( r < 0 ) |
else if ( r < 0 ) |
Line 3506 int nfnode_comp_lex(FNODE f1,FNODE f2) |
|
Line 3516 int nfnode_comp_lex(FNODE f1,FNODE f2) |
|
/* compare args */ |
/* compare args */ |
n1 = FA0((FNODE)FA1(f1)); n2 = FA0((FNODE)FA1(f2)); |
n1 = FA0((FNODE)FA1(f1)); n2 = FA0((FNODE)FA1(f2)); |
while ( n1 && n2 ) |
while ( n1 && n2 ) |
if ( r = nfnode_comp_lex(BDY(n1),BDY(n2)) ) return r; |
if ( ( r = nfnode_comp_lex(BDY(n1),BDY(n2)) ) != 0 ) return r; |
else { |
else { |
n1 = NEXT(n1); n2 = NEXT(n2); |
n1 = NEXT(n1); n2 = NEXT(n2); |
} |
} |
Line 3544 int nfnode_comp_lex(FNODE f1,FNODE f2) |
|
Line 3554 int nfnode_comp_lex(FNODE f1,FNODE f2) |
|
/* compare args */ |
/* compare args */ |
n1 = FA0((FNODE)FA1(f1)); n2 = FA0((FNODE)FA1(f2)); |
n1 = FA0((FNODE)FA1(f1)); n2 = FA0((FNODE)FA1(f2)); |
while ( n1 && n2 ) |
while ( n1 && n2 ) |
if ( r = nfnode_comp_lex(BDY(n1),BDY(n2)) ) return r; |
if ( ( r = nfnode_comp_lex(BDY(n1),BDY(n2)) ) != 0 ) return r; |
else { |
else { |
n1 = NEXT(n1); n2 = NEXT(n2); |
n1 = NEXT(n1); n2 = NEXT(n2); |
} |
} |
Line 3554 int nfnode_comp_lex(FNODE f1,FNODE f2) |
|
Line 3564 int nfnode_comp_lex(FNODE f1,FNODE f2) |
|
|
|
default: |
default: |
error("nfnode_comp_lex : undefined"); |
error("nfnode_comp_lex : undefined"); |
|
return 0; |
} |
} |
break; |
break; |
default: |
default: |
error("nfnode_comp_lex : undefined"); |
error("nfnode_comp_lex : undefined"); |
|
return 0; |
} |
} |
|
return 0; |
} |
} |
|
|
NODE append_node(NODE a1,NODE a2) |
NODE append_node(NODE a1,NODE a2) |
Line 3661 int nfnode_match(FNODE f,FNODE pat,NODE *rp) |
|
Line 3674 int nfnode_match(FNODE f,FNODE pat,NODE *rp) |
|
|
|
default: |
default: |
error("nfnode_match : invalid pattern"); |
error("nfnode_match : invalid pattern"); |
|
return 0; |
} |
} |
|
return 0; |
} |
} |
|
|
/* remove i-th element */ |
/* remove i-th element */ |
Line 3684 FNODE fnode_removeith_naryadd(FNODE p,int i) |
|
Line 3699 FNODE fnode_removeith_naryadd(FNODE p,int i) |
|
NEXT(r) = NEXT(t); |
NEXT(r) = NEXT(t); |
return fnode_node_to_nary(addfs,r0); |
return fnode_node_to_nary(addfs,r0); |
} |
} |
|
/* XXX */ |
|
return 0; |
} |
} |
|
|
/* a0,...,a(i-1) */ |
/* a0,...,a(i-1) */ |
Line 3883 NODE nfnode_pvars(FNODE pat,NODE found) |
|
Line 3899 NODE nfnode_pvars(FNODE pat,NODE found) |
|
|
|
default: |
default: |
error("nfnode_match : invalid pattern"); |
error("nfnode_match : invalid pattern"); |
|
return 0; |
} |
} |
} |
} |