[BACK]Return to strobj.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / builtin

Diff for /OpenXM_contrib2/asir2000/builtin/strobj.c between version 1.15 and 1.17

version 1.15, 2004/03/04 01:41:32 version 1.17, 2004/03/04 05:16:42
Line 45 
Line 45 
  * 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);

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.17

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>