[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.22 and 1.23

version 1.22, 2004/03/04 13:19:11 version 1.23, 2004/03/05 01:15:48
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.21 2004/03/04 13:12:27 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/builtin/strobj.c,v 1.22 2004/03/04 13:19:11 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 112  void write_tb(char *s,TB tb)
Line 112  void write_tb(char *s,TB tb)
   
 int register_symbol_table(Obj arg);  int register_symbol_table(Obj arg);
 int register_conv_rule(Obj arg);  int register_conv_rule(Obj arg);
   int register_dp_vars(Obj arg);
 static struct TeXSymbol *user_texsymbol;  static struct TeXSymbol *user_texsymbol;
 static char *(*conv_rule)(char *);  static char *(*conv_rule)(char *);
   static char **dp_vars;
   int dp_vars_len;
   
 static struct {  static struct {
         char *name;          char *name;
Line 122  static struct {
Line 125  static struct {
 } qtot_env[] = {  } qtot_env[] = {
         {"symbol_table",0,register_symbol_table},          {"symbol_table",0,register_symbol_table},
         {"conv_rule",0,register_conv_rule},          {"conv_rule",0,register_conv_rule},
           {"dp_vars",0,register_dp_vars},
         {0,0,0},          {0,0,0},
 };  };
   
Line 218  int register_symbol_table(Obj arg)
Line 222  int register_symbol_table(Obj arg)
                 if ( !t || !NEXT(t) ) return 0;                  if ( !t || !NEXT(t) ) return 0;
                 a0 = (STRING)BDY(t);                  a0 = (STRING)BDY(t);
                 a1 = (STRING)BDY(NEXT(t));                  a1 = (STRING)BDY(NEXT(t));
                 if ( !a0 || OID(a0) != O_STR ) return 0;                  if ( !a0 ) return 0;
                 if ( !a1 || OID(a1) != O_STR ) return 0;                  if ( OID(a0) == O_STR )
                 uts[i].text = BDY(a0);                          uts[i].text = BDY(a0);
                 uts[i].symbol = BDY(a1);                  else if ( OID(a0) == O_P )
                           uts[i].text = NAME(VR((P)a0));
                   else
                           return 0;
                   if ( !a1 ) return 0;
                   if ( OID(a1) == O_STR )
                           uts[i].symbol = BDY(a1);
                   else if ( OID(a1) == O_P )
                           uts[i].symbol = NAME(VR((P)a1));
                   else
                           return 0;
         }          }
         uts[i].text = 0;          uts[i].text = 0;
         uts[i].symbol = 0;          uts[i].symbol = 0;
Line 248  int register_conv_rule(Obj arg)
Line 262  int register_conv_rule(Obj arg)
         } else return 0;          } else return 0;
 }  }
   
   int register_dp_vars(Obj arg)
   {
           int l,i;
           char **r;
           NODE n;
           STRING a;
   
           if ( !arg ) {
                   dp_vars = 0;
                   dp_vars_len = 0;
           } else if ( OID(arg) != O_LIST )
                   return 0;
           else {
                   n = BDY((LIST)arg);
                   l = length(n);
                   r = (char **)MALLOC_ATOMIC(l*sizeof(char *));
                   for ( i = 0; i < l; i++, n = NEXT(n) ) {
                           a = (STRING)BDY(n);
                           if ( !a ) return 0;
                           if ( OID(a) == O_STR )
                                   r[i] = BDY(a);
                           else if ( OID(a) == O_P )
                                   r[i] = NAME(VR((P)a));
                           else
                                   return 0;
                   }
                   dp_vars = r;
                   dp_vars_len = l;
                   return 1;
           }
   }
   
 void Pquotetotex_setenv(NODE arg,Obj *rp)  void Pquotetotex_setenv(NODE arg,Obj *rp)
 {  {
         int ac,i;          int ac,i;
Line 644  void fnodetotex_tb(FNODE f,TB tb)
Line 690  void fnodetotex_tb(FNODE f,TB tb)
 {  {
         NODE n,t,t0;          NODE n,t,t0;
         char vname[BUFSIZ];          char vname[BUFSIZ];
         char *opname;          char *opname,*vname_conv;
         Obj obj;          Obj obj;
         int i,len,allzero;          int i,len,allzero;
         FNODE fi,f2;          FNODE fi,f2;
Line 656  void fnodetotex_tb(FNODE f,TB tb)
Line 702  void fnodetotex_tb(FNODE f,TB tb)
         }          }
         switch ( f->id ) {          switch ( f->id ) {
                 /* unary operators */                  /* unary operators */
                 case I_NOT: case I_PAREN: case I_MINUS:                  case I_NOT:
                         switch ( f->id ) {                          write_tb("\\neg (",tb);
                                 case I_NOT:                          fnodetotex_tb((FNODE)FA0(f),tb);
                                         write_tb("\\neg (",tb);                          write_tb(")",tb);
                                         fnodetotex_tb((FNODE)FA0(f),tb);  
                                         write_tb(")",tb);  
                                         break;  
                                 case I_PAREN:  
                                         write_tb("(",tb);  
                                         fnodetotex_tb((FNODE)FA0(f),tb);  
                                         write_tb(")",tb);  
                                         break;  
                                 case I_MINUS:  
                                         write_tb("-",tb);  
                                         fnodetotex_tb((FNODE)FA0(f),tb);  
                                         break;  
                         }  
                         break;                          break;
                   case I_PAREN:
                           write_tb("(",tb);
                           fnodetotex_tb((FNODE)FA0(f),tb);
                           write_tb(")",tb);
                           break;
                   case I_MINUS:
                           write_tb("-",tb);
                           fnodetotex_tb((FNODE)FA0(f),tb);
                           break;
   
                 /* binary operators */                  /* binary operators */
                 case I_BOP: case I_COP: case I_LOP: case I_AND: case I_OR:                  /* arg list */
                         /* arg list */                  /* I_AND, I_OR => FA0(f), FA1(f) */
                         /* I_AND, I_OR => FA0(f), FA1(f) */                  /* otherwise   => FA1(f), FA2(f) */
                         /* otherwise   => FA1(f), FA2(f) */                  case I_BOP:
                           opname = ((ARF)FA0(f))->name;
                         /* op */                          if ( !strcmp(opname,"+") ) {
                         switch ( f->id ) {                                  fnodetotex_tb((FNODE)FA1(f),tb);
                                 case I_BOP:                                  write_tb(opname,tb);
                                         opname = ((ARF)FA0(f))->name;                                  fnodetotex_tb((FNODE)FA2(f),tb);
                                         if ( !strcmp(opname,"+") ) {                          } else if ( !strcmp(opname,"-") ) {
                                                 fnodetotex_tb((FNODE)FA1(f),tb);                                  if ( FA1(f) ) fnodetotex_tb((FNODE)FA1(f),tb);
                                                 write_tb(opname,tb);                                  write_tb(opname,tb);
                                                 fnodetotex_tb((FNODE)FA2(f),tb);                                  fnodetotex_tb((FNODE)FA2(f),tb);
                                         } else if ( !strcmp(opname,"-") ) {                          } else if ( !strcmp(opname,"*") ) {
                                                 if ( FA1(f) ) fnodetotex_tb((FNODE)FA1(f),tb);                                  fnodetotex_tb((FNODE)FA1(f),tb);
                                                 write_tb(opname,tb);                                  write_tb(" ",tb);
                                                 fnodetotex_tb((FNODE)FA2(f),tb);                                  /* XXX special care for DP */
                                         } else if ( !strcmp(opname,"*") ) {                                  f2 = (FNODE)FA2(f);
                                                 fnodetotex_tb((FNODE)FA1(f),tb);                                  if ( f2->id == I_EV ) {
                                                 write_tb(" ",tb);                                          n = (NODE)FA0(f2);
                                                 /* XXX special care for DP */                                          for ( i = 0; n; n = NEXT(n), i++ ) {
                                                 f2 = (FNODE)FA2(f);                                                  fi = (FNODE)BDY(n);
                                                 if ( f2->id == I_EV ) {                                                  if ( fi->id != I_FORMULA || FA0(fi) )
                                                         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,"/") ) {  
                                                 write_tb("\\frac{",tb);  
                                                 fnodetotex_tb((FNODE)FA1(f),tb);  
                                                 write_tb("} {",tb);  
                                                 fnodetotex_tb((FNODE)FA2(f),tb);  
                                                 write_tb("}",tb);  
                                         } else if ( !strcmp(opname,"^") ) {  
                                                 fnodetotex_tb((FNODE)FA1(f),tb);  
                                                 write_tb("^{",tb);  
                                                 fnodetotex_tb((FNODE)FA2(f),tb);  
                                                 write_tb("} ",tb);  
                                         } else if ( !strcmp(opname,"%") ) {  
                                                 fnodetotex_tb((FNODE)FA1(f),tb);  
                                                 write_tb(" {\\rm mod}\\, ",tb);  
                                                 fnodetotex_tb((FNODE)FA2(f),tb);  
                                         } else  
                                                 error("invalid binary operator");  
   
                                 case I_COP:  
                                         switch( (cid)FA0(f) ) {  
                                                 case C_EQ:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" = ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;                                                          break;
                                                 case C_NE:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" \\neq ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                                 case C_GT:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" \\gt ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                                 case C_LT:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" \\lt ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                                 case C_GE:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" \\geq ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                                 case C_LE:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" \\leq ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                         }                                          }
                                         break;                                          if ( n )
                                                   fnodetotex_tb((FNODE)FA2(f),tb);
                                   } else
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                           } else if ( !strcmp(opname,"/") ) {
                                   write_tb("\\frac{",tb);
                                   fnodetotex_tb((FNODE)FA1(f),tb);
                                   write_tb("} {",tb);
                                   fnodetotex_tb((FNODE)FA2(f),tb);
                                   write_tb("}",tb);
                           } else if ( !strcmp(opname,"^") ) {
                                   fnodetotex_tb((FNODE)FA1(f),tb);
                                   write_tb("^{",tb);
                                   fnodetotex_tb((FNODE)FA2(f),tb);
                                   write_tb("} ",tb);
                           } else if ( !strcmp(opname,"%") ) {
                                   fnodetotex_tb((FNODE)FA1(f),tb);
                                   write_tb(" {\\rm mod}\\, ",tb);
                                   fnodetotex_tb((FNODE)FA2(f),tb);
                           } else
                                   error("invalid binary operator");
                           break;
   
                                 case I_LOP:                  case I_COP:
                                         switch( (lid)FA0(f) ) {                          switch( (cid)FA0(f) ) {
                                                 case L_EQ:                                  case C_EQ:
                                                         fnodetotex_tb((FNODE)FA1(f),tb);                                          fnodetotex_tb((FNODE)FA1(f),tb);
                                                         write_tb(" = ",tb);                                          write_tb(" = ",tb);
                                                         fnodetotex_tb((FNODE)FA2(f),tb);                                          fnodetotex_tb((FNODE)FA2(f),tb);
                                                         break;  
                                                 case L_NE:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" \\neq ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                                 case L_GT:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" \\gt ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                                 case L_LT:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" \\lt ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                                 case L_GE:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" \\geq ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                                 case L_LE:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" \\leq ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                                 case L_AND:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" {\\rm \\ and\\ } ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                                 case L_OR:  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(" {\\rm \\ or\\ } ",tb);  
                                                         fnodetotex_tb((FNODE)FA2(f),tb);  
                                                         break;  
                                                 case L_NOT:  
                                                         /* XXX : L_NOT is a unary operator */  
                                                         write_tb("\\neg (",tb);  
                                                         fnodetotex_tb((FNODE)FA1(f),tb);  
                                                         write_tb(")",tb);  
                                                         return;  
                                         }  
                                         break;                                          break;
                                   case C_NE:
                                 case I_AND:  
                                         fnodetotex_tb((FNODE)FA0(f),tb);  
                                         write_tb(" {\\rm \\ and\\ } ",tb);  
                                         fnodetotex_tb((FNODE)FA1(f),tb);                                          fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" \\neq ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                         break;                                          break;
                                   case C_GT:
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" \\gt ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                           break;
                                   case C_LT:
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" \\lt ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                           break;
                                   case C_GE:
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" \\geq ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                           break;
                                   case C_LE:
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" \\leq ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                           break;
                           }
                           break;
   
                                 case I_OR:                  case I_LOP:
                                         fnodetotex_tb((FNODE)FA0(f),tb);                          switch( (lid)FA0(f) ) {
                                         write_tb(" {\\rm \\ or\\ } ",tb);                                  case L_EQ:
                                         fnodetotex_tb((FNODE)FA1(f),tb);                                          fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" = ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                         break;                                          break;
                                   case L_NE:
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" \\neq ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                           break;
                                   case L_GT:
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" \\gt ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                           break;
                                   case L_LT:
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" \\lt ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                           break;
                                   case L_GE:
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" \\geq ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                           break;
                                   case L_LE:
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" \\leq ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                           break;
                                   case L_AND:
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" {\\rm \\ and\\ } ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                           break;
                                   case L_OR:
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(" {\\rm \\ or\\ } ",tb);
                                           fnodetotex_tb((FNODE)FA2(f),tb);
                                           break;
                                   case L_NOT:
                                           /* XXX : L_NOT is a unary operator */
                                           write_tb("\\neg (",tb);
                                           fnodetotex_tb((FNODE)FA1(f),tb);
                                           write_tb(")",tb);
                                           return;
                         }                          }
                         break;                          break;
   
                   case I_AND:
                           fnodetotex_tb((FNODE)FA0(f),tb);
                           write_tb(" {\\rm \\ and\\ } ",tb);
                           fnodetotex_tb((FNODE)FA1(f),tb);
                           break;
   
                   case I_OR:
                           fnodetotex_tb((FNODE)FA0(f),tb);
                           write_tb(" {\\rm \\ or\\ } ",tb);
                           fnodetotex_tb((FNODE)FA1(f),tb);
                           break;
   
                 /* ternary operators */                  /* ternary operators */
                 case I_CE:                  case I_CE:
                         error("fnodetotex_tb : not implemented yet");                          error("fnodetotex_tb : not implemented yet");
Line 841  void fnodetotex_tb(FNODE f,TB tb)
Line 878  void fnodetotex_tb(FNODE f,TB tb)
                         break;                          break;
   
                 /* function */                  /* function */
                 case I_FUNC: case I_CAR: case I_CDR: case I_EV:                  case I_FUNC:
                         switch ( f->id ) {                          opname = symbol_name(((FUNC)FA0(f))->name);
                                 case I_FUNC:                          write_tb(opname,tb);
                                         opname = symbol_name(((FUNC)FA0(f))->name);                          write_tb("(",tb);
                           fargstotex_tb(opname,FA1(f),tb);
                           write_tb(")",tb);
                           break;
   
                   /* XXX */
                   case I_CAR:
                           opname = symbol_name("car");
                           write_tb(opname,tb);
                           write_tb("(",tb);
                           fargstotex_tb(opname,FA0(f),tb);
                           write_tb(")",tb);
                           break;
   
                   case I_CDR:
                           opname = symbol_name("cdr");
                           write_tb(opname,tb);
                           write_tb("(",tb);
                           fargstotex_tb(opname,FA0(f),tb);
                           write_tb(")",tb);
                           break;
   
                   /* exponent vector */
                   case I_EV:
                           n = (NODE)FA0(f);
                           allzero = 1;
                           for ( t0 = 0, i = 0; n; n = NEXT(n), i++ ) {
                                   fi = (FNODE)BDY(n);
                                   if ( fi->id == I_FORMULA && !FA0(fi) ) continue;
                                   allzero = 0;
                                   if ( dp_vars && i < dp_vars_len )
                                           strcpy(vname,dp_vars[i]);
                                   else
                                           sprintf(vname,"x_{%d}",i);
                                   vname_conv = symbol_name(vname);
                                   if ( fi->id == I_FORMULA && UNIQ(FA0(fi)) ) {
                                           len = strlen(vname_conv);
                                           opname = MALLOC_ATOMIC(len+2);
                                           sprintf(opname,"%s ",vname_conv);
                                         write_tb(opname,tb);                                          write_tb(opname,tb);
                                         write_tb("(",tb);                                  } else {
                                         fargstotex_tb(opname,FA1(f),tb);                                          len = strlen(vname_conv);
                                         write_tb(")",tb);                                          /* 2: ^{ */
                                         break;                                          opname = MALLOC_ATOMIC(len+1+2);
                                 case I_CAR:                                          sprintf(opname,"%s^{",vname_conv);
                                         opname = symbol_name("car");  
                                         write_tb(opname,tb);                                          write_tb(opname,tb);
                                         write_tb("(",tb);                                          fnodetotex_tb((FNODE)BDY(n),tb);
                                         fargstotex_tb(opname,FA0(f),tb);                                          write_tb("} ",tb);
                                         write_tb(")",tb);                                  }
                                         break;  
                                 case I_CDR:  
                                         opname = symbol_name("cdr");  
                                         write_tb(opname,tb);  
                                         write_tb("(",tb);  
                                         fargstotex_tb(opname,FA0(f),tb);  
                                         write_tb(")",tb);  
                                         break;  
                                 case I_EV:  
                                         n = (NODE)FA0(f);  
                                         allzero = 1;  
                                         for ( t0 = 0, i = 0; n; n = NEXT(n), i++ ) {  
                                                 fi = (FNODE)BDY(n);  
                                                 if ( fi->id == I_FORMULA && !FA0(fi) ) continue;  
                                                 allzero = 0;  
                                                 if ( fi->id == I_FORMULA && UNIQ(FA0(fi)) ) {  
                                                         sprintf(vname,"x_{%d}",i);  
                                                         len = strlen(vname);  
                                                         opname = MALLOC_ATOMIC(len+1);  
                                                         strcpy(opname,vname);  
                                                         write_tb(opname,tb);  
                                                 } else {  
                                                         sprintf(vname,"x_{%d}^{",i);  
                                                         len = strlen(vname);  
                                                         opname = MALLOC_ATOMIC(len+1);  
                                                         strcpy(opname,vname);  
                                                         write_tb(opname,tb);  
                                                         fnodetotex_tb((FNODE)BDY(n),tb);  
                                                         write_tb("} ",tb);  
                                                 }  
                                         }  
                                         /* XXX */  
                                         if ( allzero )  
                                                 write_tb(" 1 ",tb);  
                                         break;  
                         }                          }
                           /* XXX */
                           if ( allzero )
                                   write_tb(" 1 ",tb);
                         break;                          break;
   
                   /* string */
                 case I_STR:                  case I_STR:
                         write_tb((char *)FA0(f),tb);                          write_tb((char *)FA0(f),tb);
                         break;                          break;
   
                   /* internal object */
                 case I_FORMULA:                  case I_FORMULA:
                         obj = (Obj)FA0(f);                          obj = (Obj)FA0(f);
                         if ( obj && OID(obj) == O_P ) {                          if ( obj && OID(obj) == O_P ) {
Line 911  void fnodetotex_tb(FNODE f,TB tb)
Line 955  void fnodetotex_tb(FNODE f,TB tb)
                         write_tb(opname,tb);                          write_tb(opname,tb);
                         break;                          break;
   
                   /* program variable */
                 case I_PVAR:                  case I_PVAR:
                         if ( FA1(f) )                          if ( FA1(f) )
                                 error("fnodetotex_tb : not implemented yet");                                  error("fnodetotex_tb : not implemented yet");

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.23

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