version 1.15, 2004/03/04 01:41:32 |
version 1.17, 2004/03/04 05:16:42 |
|
|
* 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.14 2004/03/03 09:25:30 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.16 2004/03/04 03:31:28 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
Line 106 void write_tb(char *s,TB tb) |
|
Line 106 void write_tb(char *s,TB tb) |
|
void Pwrite_to_tb(NODE arg,Q *rp) |
void Pwrite_to_tb(NODE arg,Q *rp) |
{ |
{ |
int i; |
int i; |
|
Obj obj; |
|
TB tb; |
|
|
asir_assert(ARG1(arg),O_TB,"write_to_tb"); |
asir_assert(ARG1(arg),O_TB,"write_to_tb"); |
write_tb(BDY((STRING)ARG0(arg)),ARG1(arg)); |
obj = ARG0(arg); |
|
if ( !obj ) |
|
write_tb("",ARG1(arg)); |
|
else if ( OID(obj) == O_STR ) |
|
write_tb(BDY((STRING)obj),ARG1(arg)); |
|
else if ( OID(obj) == O_TB ) { |
|
tb = (TB)obj; |
|
for ( i = 0; i < tb->next; i++ ) |
|
write_tb(tb->body[i],ARG1(arg)); |
|
} |
*rp = 0; |
*rp = 0; |
} |
} |
|
|
Line 182 void Pstr_len(arg,rp) |
|
Line 193 void Pstr_len(arg,rp) |
|
NODE arg; |
NODE arg; |
Q *rp; |
Q *rp; |
{ |
{ |
STRING str; |
Obj obj; |
int r; |
TB tb; |
|
int r,i; |
|
|
str = (STRING)ARG0(arg); |
obj = (Obj)ARG0(arg); |
asir_assert(str,O_STR,"str_chr"); |
if ( !obj || (OID(obj) != O_STR && OID(obj) != O_TB) ) |
r = strlen(BDY(str)); |
error("str_len : invalid argument"); |
|
if ( OID(obj) == O_STR) |
|
r = strlen(BDY((STRING)obj)); |
|
else if ( OID(obj) == O_TB ) { |
|
tb = (TB)obj; |
|
for ( r = i = 0; i < tb->next; i++ ) |
|
r += strlen(tb->body[i]); |
|
} |
STOQ(r,*rp); |
STOQ(r,*rp); |
} |
} |
|
|
Line 445 void fnodetotex_tb(FNODE f,TB tb) |
|
Line 464 void fnodetotex_tb(FNODE f,TB tb) |
|
char *opname; |
char *opname; |
Obj obj; |
Obj obj; |
int i,len,allzero; |
int i,len,allzero; |
FNODE fi; |
FNODE fi,f2; |
|
|
write_tb(" ",tb); |
write_tb(" ",tb); |
if ( !f ) { |
if ( !f ) { |
Line 494 void fnodetotex_tb(FNODE f,TB tb) |
|
Line 513 void fnodetotex_tb(FNODE f,TB tb) |
|
} else if ( !strcmp(opname,"*") ) { |
} else if ( !strcmp(opname,"*") ) { |
fnodetotex_tb((FNODE)FA1(f),tb); |
fnodetotex_tb((FNODE)FA1(f),tb); |
write_tb(" ",tb); |
write_tb(" ",tb); |
fnodetotex_tb((FNODE)FA2(f),tb); |
/* XXX special care for DP */ |
|
f2 = (FNODE)FA2(f); |
|
if ( f2->id == I_EV ) { |
|
n = (NODE)FA0(f2); |
|
for ( i = 0; n; n = NEXT(n), i++ ) { |
|
fi = (FNODE)BDY(n); |
|
if ( fi->id != I_FORMULA || FA0(fi) ) |
|
break; |
|
} |
|
if ( n ) |
|
fnodetotex_tb((FNODE)FA2(f),tb); |
|
} else |
|
fnodetotex_tb((FNODE)FA2(f),tb); |
} else if ( !strcmp(opname,"/") ) { |
} else if ( !strcmp(opname,"/") ) { |
write_tb("\\frac{",tb); |
write_tb("\\frac{",tb); |
fnodetotex_tb((FNODE)FA1(f),tb); |
fnodetotex_tb((FNODE)FA1(f),tb); |