version 1.114, 2005/12/19 01:31:43 |
version 1.117, 2006/08/27 22:17:27 |
|
|
* 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/asir2000/builtin/strobj.c,v 1.113 2005/12/18 06:54:28 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.116 2006/08/19 05:35:07 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
Line 104 void Pnqt_match_rewrite(); |
|
Line 104 void Pnqt_match_rewrite(); |
|
void Pqt_to_nbp(); |
void Pqt_to_nbp(); |
void Pshuffle_mul(), Pharmonic_mul(); |
void Pshuffle_mul(), Pharmonic_mul(); |
void Pnbp_hm(), Pnbp_ht(), Pnbp_hc(), Pnbp_rest(); |
void Pnbp_hm(), Pnbp_ht(), Pnbp_hc(), Pnbp_rest(); |
|
void Pnbp_tm(), Pnbp_tt(), Pnbp_tc(), Pnbp_trest(); |
void Pnbm_deg(); |
void Pnbm_deg(); |
void Pnbm_hp_rest(); |
void Pnbm_hp_rest(); |
void Pnbm_hxky(), Pnbm_xky_rest(); |
void Pnbm_hxky(), Pnbm_xky_rest(); |
void Pnbm_hv(), Pnbm_rest(); |
void Pnbm_hv(), Pnbm_tv(), Pnbm_rest(),Pnbm_trest(); |
|
|
void Pquote_to_funargs(),Pfunargs_to_quote(),Pget_function_name(); |
void Pquote_to_funargs(),Pfunargs_to_quote(),Pget_function_name(); |
void Pqt_match(),Pget_quote_id(); |
void Pqt_match(),Pget_quote_id(); |
Line 182 struct ftab str_tab[] = { |
|
Line 183 struct ftab str_tab[] = { |
|
{"nbp_ht", Pnbp_ht,1}, |
{"nbp_ht", Pnbp_ht,1}, |
{"nbp_hc", Pnbp_hc,1}, |
{"nbp_hc", Pnbp_hc,1}, |
{"nbp_rest", Pnbp_rest,1}, |
{"nbp_rest", Pnbp_rest,1}, |
|
{"nbp_tm", Pnbp_tm,1}, |
|
{"nbp_tt", Pnbp_tt,1}, |
|
{"nbp_tc", Pnbp_tc,1}, |
|
{"nbp_trest", Pnbp_trest,1}, |
{"nbm_deg", Pnbm_deg,1}, |
{"nbm_deg", Pnbm_deg,1}, |
{"nbm_hxky", Pnbm_hxky,1}, |
{"nbm_hxky", Pnbm_hxky,1}, |
{"nbm_xky_rest", Pnbm_xky_rest,1}, |
{"nbm_xky_rest", Pnbm_xky_rest,1}, |
{"nbm_hp_rest", Pnbm_hp_rest,1}, |
{"nbm_hp_rest", Pnbm_hp_rest,1}, |
{"nbm_hv", Pnbm_hv,1}, |
{"nbm_hv", Pnbm_hv,1}, |
|
{"nbm_tv", Pnbm_tv,1}, |
{"nbm_rest", Pnbm_rest,1}, |
{"nbm_rest", Pnbm_rest,1}, |
|
{"nbm_trest", Pnbm_trest,1}, |
|
|
{"qt_to_nary",Pqt_to_nary,1}, |
{"qt_to_nary",Pqt_to_nary,1}, |
{"qt_to_bin",Pqt_to_bin,2}, |
{"qt_to_bin",Pqt_to_bin,2}, |
Line 2410 void Pnbp_ht(NODE arg, NBP *rp) |
|
Line 2417 void Pnbp_ht(NODE arg, NBP *rp) |
|
else { |
else { |
m = (NBM)BDY(BDY(p)); |
m = (NBM)BDY(BDY(p)); |
NEWNBM(m1); |
NEWNBM(m1); |
m1->d = m->d; m1->c = ONE; m1->b = m->b; |
m1->d = m->d; m1->c = (P)ONE; m1->b = m->b; |
MKNODE(n,m1,0); |
MKNODE(n,m1,0); |
MKNBP(*rp,n); |
MKNBP(*rp,n); |
} |
} |
} |
} |
|
|
void Pnbp_hc(NODE arg, Q *rp) |
void Pnbp_hc(NODE arg, P *rp) |
{ |
{ |
NBP p; |
NBP p; |
NBM m; |
NBM m; |
Line 2444 void Pnbp_rest(NODE arg, NBP *rp) |
|
Line 2451 void Pnbp_rest(NODE arg, NBP *rp) |
|
} |
} |
} |
} |
|
|
|
void Pnbp_tm(NODE arg, NBP *rp) |
|
{ |
|
NBP p; |
|
NODE n; |
|
NBM m; |
|
|
|
p = (NBP)ARG0(arg); |
|
if ( !p ) *rp = 0; |
|
else { |
|
for ( n = BDY(p); NEXT(n); n = NEXT(n) ); |
|
m = (NBM)BDY(n); |
|
MKNODE(n,m,0); |
|
MKNBP(*rp,n); |
|
} |
|
} |
|
|
|
void Pnbp_tt(NODE arg, NBP *rp) |
|
{ |
|
NBP p; |
|
NODE n; |
|
NBM m,m1; |
|
|
|
p = (NBP)ARG0(arg); |
|
if ( !p ) *rp = 0; |
|
else { |
|
for ( n = BDY(p); NEXT(n); n = NEXT(n) ); |
|
m = (NBM)BDY(n); |
|
NEWNBM(m1); |
|
m1->d = m->d; m1->c = (P)ONE; m1->b = m->b; |
|
MKNODE(n,m1,0); |
|
MKNBP(*rp,n); |
|
} |
|
} |
|
|
|
void Pnbp_tc(NODE arg, P *rp) |
|
{ |
|
NBP p; |
|
NBM m; |
|
NODE n; |
|
|
|
p = (NBP)ARG0(arg); |
|
if ( !p ) *rp = 0; |
|
else { |
|
for ( n = BDY(p); NEXT(n); n = NEXT(n) ); |
|
m = (NBM)BDY(n); |
|
*rp = m->c; |
|
} |
|
} |
|
|
|
void Pnbp_trest(NODE arg, NBP *rp) |
|
{ |
|
NBP p; |
|
NODE n,r,r0; |
|
|
|
p = (NBP)ARG0(arg); |
|
if ( !p ) *rp = 0; |
|
else { |
|
n = BDY(p); |
|
for ( r0 = 0; NEXT(n); n = NEXT(n) ) { |
|
NEXTNODE(r0,r); |
|
BDY(r) = (pointer)BDY(n); |
|
} |
|
if ( r0 ) { |
|
NEXT(r) = 0; |
|
MKNBP(*rp,r0); |
|
} else |
|
*rp = 0; |
|
} |
|
} |
|
|
void Pnbm_deg(NODE arg, Q *rp) |
void Pnbm_deg(NODE arg, Q *rp) |
{ |
{ |
NBP p; |
NBP p; |
Line 2479 void Pnbm_hp_rest(NODE arg, LIST *rp) |
|
Line 2556 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 = ONE; |
b1 = 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 = ONE; |
b1 = 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 2541 void Pnbm_rest(NODE arg, NBP *rp) |
|
Line 2618 void Pnbm_rest(NODE arg, NBP *rp) |
|
separate_nbm((NBM)BDY(BDY(p)),0,0,rp); |
separate_nbm((NBM)BDY(BDY(p)),0,0,rp); |
} |
} |
|
|
|
void Pnbm_tv(NODE arg, NBP *rp) |
|
{ |
|
NBP p; |
|
|
|
p = (NBP)ARG0(arg); |
|
if ( !p ) |
|
*rp = 0; |
|
else |
|
separate_tail_nbm((NBM)BDY(BDY(p)),0,0,rp); |
|
} |
|
|
|
void Pnbm_trest(NODE arg, NBP *rp) |
|
{ |
|
NBP p; |
|
|
|
p = (NBP)ARG0(arg); |
|
if ( !p ) |
|
*rp = 0; |
|
else |
|
separate_tail_nbm((NBM)BDY(BDY(p)),0,rp,0); |
|
} |
|
|
NBP fnode_to_nbp(FNODE f) |
NBP fnode_to_nbp(FNODE f) |
{ |
{ |
Q r; |
Q r; |
Line 2554 NBP fnode_to_nbp(FNODE f) |
|
Line 2653 NBP fnode_to_nbp(FNODE f) |
|
r = eval(f); |
r = eval(f); |
NEWNBM(m); |
NEWNBM(m); |
if ( OID(r) == O_N ) { |
if ( OID(r) == O_N ) { |
m->d = 0; m->c = (Q)r; m->b = 0; |
m->d = 0; m->c = (P)r; m->b = 0; |
} else { |
} else { |
v = VR((P)r); |
v = VR((P)r); |
m->d = 1; m->c = ONE; NEWNBMBDY(m,1); |
m->d = 1; m->c = (P)ONE; NEWNBMBDY(m,1); |
if ( !strcmp(NAME(v),"x") ) NBM_SET(m->b,0); |
if ( !strcmp(NAME(v),"x") ) NBM_SET(m->b,0); |
else NBM_CLR(m->b,0); |
else NBM_CLR(m->b,0); |
} |
} |