=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/builtin/strobj.c,v retrieving revision 1.115 retrieving revision 1.116 diff -u -p -r1.115 -r1.116 --- OpenXM_contrib2/asir2000/builtin/strobj.c 2006/08/09 05:05:28 1.115 +++ OpenXM_contrib2/asir2000/builtin/strobj.c 2006/08/19 05:35:07 1.116 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.114 2005/12/19 01:31:43 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.115 2006/08/09 05:05:28 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -108,7 +108,7 @@ void Pnbp_tm(), Pnbp_tt(), Pnbp_tc(), Pnbp_trest(); void Pnbm_deg(); void Pnbm_hp_rest(); void Pnbm_hxky(), Pnbm_xky_rest(); -void Pnbm_hv(), Pnbm_rest(); +void Pnbm_hv(), Pnbm_tv(), Pnbm_rest(); void Pquote_to_funargs(),Pfunargs_to_quote(),Pget_function_name(); void Pqt_match(),Pget_quote_id(); @@ -192,6 +192,7 @@ struct ftab str_tab[] = { {"nbm_xky_rest", Pnbm_xky_rest,1}, {"nbm_hp_rest", Pnbm_hp_rest,1}, {"nbm_hv", Pnbm_hv,1}, + {"nbm_tv", Pnbm_tv,1}, {"nbm_rest", Pnbm_rest,1}, {"qt_to_nary",Pqt_to_nary,1}, @@ -2603,6 +2604,26 @@ void Pnbm_hv(NODE arg, NBP *rp) *rp = 0; else separate_nbm((NBM)BDY(BDY(p)),0,rp,0); +} + +void Pnbm_tv(NODE arg, NBP *rp) +{ + NBP p; + NBM m,t; + int d; + + p = (NBP)ARG0(arg); + if ( !p ) + *rp = 0; + else { + m = (NBM)BDY(BDY(p)); + d = m->d; + if ( !d ) error("nbm_tv : invalid argument"); + NEWNBM(t); NEWNBMBDY(t,1); t->d = 1; t->c = (P)ONE; + if ( NBM_GET(m->b,d-1) ) NBM_SET(t->b,0); + else NBM_CLR(t->b,0); + *rp = (NBP)nbmtonbp(t); + } } void Pnbm_rest(NODE arg, NBP *rp)