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

Diff for /OpenXM_contrib2/asir2000/io/pexpr.c between version 1.30 and 1.34

version 1.30, 2004/02/13 05:48:36 version 1.34, 2004/03/17 02:23:45
Line 44 
Line 44 
  * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY   * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY
  * 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/io/pexpr.c,v 1.29 2004/02/09 08:23:30 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/io/pexpr.c,v 1.33 2004/03/17 02:10:31 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "al.h"  #include "al.h"
Line 73  int double_output;
Line 73  int double_output;
 int real_digit;  int real_digit;
 int real_binary;  int real_binary;
 int print_quote;  int print_quote;
   extern int asir_texmacs;
   
 #define TAIL  #define TAIL
 #define PUTS(s) fputs(s,OUT)  #define PUTS(s) fputs(s,OUT)
Line 109  int print_quote;
Line 110  int print_quote;
 #define PRINTSF printsf  #define PRINTSF printsf
 #define PRINTSYMBOL printsymbol  #define PRINTSYMBOL printsymbol
 #define PRINTRANGE printrange  #define PRINTRANGE printrange
   #define PRINTTB printtb
   #define PRINTFNODE printfnode
   #define PRINTFNODENODE printfnodenode
   #define PRINTFARGS printfargs
 #endif  #endif
   
 #ifdef SPRINT  #ifdef SPRINT
Line 158  extern int print_quote;
Line 163  extern int print_quote;
 #define PRINTSF sprintsf  #define PRINTSF sprintsf
 #define PRINTSYMBOL sprintsymbol  #define PRINTSYMBOL sprintsymbol
 #define PRINTRANGE sprintrange  #define PRINTRANGE sprintrange
   #define PRINTTB sprinttb
   #define PRINTFNODE sprintfnode
   #define PRINTFNODENODE sprintfnodenode
   #define PRINTFARGS sprintfargs
 #endif  #endif
   
 void PRINTEXPR();  void PRINTEXPR();
Line 191  void PRINTQOP();
Line 200  void PRINTQOP();
 void PRINTSF();  void PRINTSF();
 void PRINTSYMBOL();  void PRINTSYMBOL();
 void PRINTRANGE();  void PRINTRANGE();
   void PRINTTB();
   void PRINTFNODE();
   
 #ifdef FPRINT  #ifdef FPRINT
 void output_init() {  void output_init() {
Line 261  BF a;
Line 272  BF a;
 #endif  #endif
 #endif  #endif
   
   #define DATA_BEGIN 2
   #define DATA_END 5
   
   extern FUNC user_print_function;
   
 void PRINTEXPR(vl,p)  void PRINTEXPR(vl,p)
 VL vl;  VL vl;
 Obj p;  Obj p;
 {  {
           if ( asir_texmacs && !user_print_function ) printf("\2verbatim:");
         if ( !p ) {          if ( !p ) {
                 PRINTR(vl,(R)p);                  PRINTR(vl,(R)p);
                 return;          } else
         }                  switch ( OID(p) ) {
                           case O_N:
         switch ( OID(p) ) {                                  PRINTNUM((Num)p); break;
                 case O_N:                          case O_P:
                         PRINTNUM((Num)p); break;                                  PRINTP(vl,(P)p); break;
                 case O_P:                          case O_R:
                         PRINTP(vl,(P)p); break;                                  PRINTR(vl,(R)p); break;
                 case O_R:                          case O_LIST:
                         PRINTR(vl,(R)p); break;                                  PRINTLIST(vl,(LIST)p); break;
                 case O_LIST:                          case O_VECT:
                         PRINTLIST(vl,(LIST)p); break;                                  PRINTVECT(vl,(VECT)p); break;
                 case O_VECT:                          case O_MAT:
                         PRINTVECT(vl,(VECT)p); break;                                  PRINTMAT(vl,(MAT)p); break;
                 case O_MAT:                          case O_STR:
                         PRINTMAT(vl,(MAT)p); break;                                  PRINTSTR((STRING)p); break;
                 case O_STR:                          case O_COMP:
                         PRINTSTR((STRING)p); break;                                  PRINTCOMP(vl,(COMP)p); break;
                 case O_COMP:                          case O_DP:
                         PRINTCOMP(vl,(COMP)p); break;                                  PRINTDP(vl,(DP)p); break;
                 case O_DP:                          case O_USINT:
                         PRINTDP(vl,(DP)p); break;                                  PRINTUI(vl,(USINT)p); break;
                 case O_USINT:                          case O_GF2MAT:
                         PRINTUI(vl,(USINT)p); break;                                  PRINTGF2MAT(vl,(GF2MAT)p); break;
                 case O_GF2MAT:                          case O_ERR:
                         PRINTGF2MAT(vl,(GF2MAT)p); break;  
                 case O_ERR:  
                         PRINTERR(vl,(ERR)p); break;                          PRINTERR(vl,(ERR)p); break;
                 case O_MATHCAP:                          case O_MATHCAP:
                         PRINTLIST(vl,((MATHCAP)p)->body); break;                                  PRINTLIST(vl,((MATHCAP)p)->body); break;
                 case O_F:                          case O_F:
                         PRINTLF(vl,(F)p); break;                                  PRINTLF(vl,(F)p); break;
                 case O_GFMMAT:                          case O_GFMMAT:
                         PRINTGFMMAT(vl,(GFMMAT)p); break;                                  PRINTGFMMAT(vl,(GFMMAT)p); break;
                 case O_BYTEARRAY:                          case O_BYTEARRAY:
                         PRINTBYTEARRAY(vl,(BYTEARRAY)p); break;                                  PRINTBYTEARRAY(vl,(BYTEARRAY)p); break;
                 case O_QUOTE:                          case O_QUOTE:
                         PRINTQUOTE(vl,(QUOTE)p); break;                                  PRINTQUOTE(vl,(QUOTE)p); break;
                 case O_SYMBOL:                          case O_SYMBOL:
                         PRINTSYMBOL((SYMBOL)p); break;                                  PRINTSYMBOL((SYMBOL)p); break;
                 case O_RANGE:                          case O_RANGE:
                         PRINTRANGE(vl,(RANGE)p); break;                                  PRINTRANGE(vl,(RANGE)p); break;
                 default:                          case O_TB:
                         break;                                  PRINTTB(vl,(TB)p); break;
         }                          default:
                                   break;
                   }
           if ( asir_texmacs && !user_print_function ) { putchar('\5'); fflush(stdout); }
 }  }
   
 void PRINTN(n)  void PRINTN(n)
Line 955  QUOTE quote;
Line 973  QUOTE quote;
 {  {
         LIST list;          LIST list;
   
         if ( print_quote ) {          if ( print_quote == 1 ) {
                 fnodetotree(BDY(quote),&list);                  fnodetotree(BDY(quote),&list);
                 PRINTEXPR(vl,(Obj)list);                  PRINTEXPR(vl,(Obj)list);
           } else if ( print_quote == 2 ) {
                   PRINTFNODE(BDY(quote),0);
         } else {          } else {
                 PUTS("<...quoted...>");                  PUTS("<...quoted...>");
         }          }
Line 1198  void PRINTRANGE(VL vl,RANGE p)
Line 1218  void PRINTRANGE(VL vl,RANGE p)
         PUTS(",");          PUTS(",");
         PRINTEXPR(vl,p->end);          PRINTEXPR(vl,p->end);
         PUTS(")");          PUTS(")");
   }
   
   void PRINTTB(VL vl,TB p)
   {
           int i;
   
           for ( i = 0; i < p->next; i++ ) {
                   PUTS(p->body[i]);
           }
   }
   
   void PRINTFNODENODE(NODE n)
   {
           for ( ; n; n = NEXT(n) ) {
                   PRINTFNODE((FNODE)BDY(n),0);
                   if ( NEXT(n) ) PUTS(",");
           }
   }
   
   void PRINTFARGS(FNODE f)
   {
           NODE n;
   
           if ( f->id == I_LIST ) {
                   n = (NODE)FA0(f);
                   PRINTFNODENODE(n);
           } else
                   PRINTFNODE(f,0);
   }
   
   void PRINTFNODE(FNODE f,int paren)
   {
           NODE n,t,t0;
           char vname[BUFSIZ],prefix[BUFSIZ];
           char *opname,*vname_conv,*prefix_conv;
           Obj obj;
           int i,len,allzero,elen,elen2;
           C cplx;
           char *r;
           FNODE fi,f2;
   
           if ( !f ) {
                   PUTS("(0)");
                   return;
           }
           if ( paren ) PUTS("(");
           switch ( f->id ) {
                   /* unary operators */
                   case I_NOT: PUTS("!"); PRINTFNODE((FNODE)FA0(f),1); break;
                   case I_PAREN: PRINTFNODE((FNODE)FA0(f),0); break;
                   case I_MINUS: PUTS("-"); PRINTFNODE((FNODE)FA0(f),1); break;
                   /* binary operators */
                   /* arg list */
                   /* I_AND, I_OR => FA0(f), FA1(f) */
                   /* otherwise   => FA1(f), FA2(f) */
                   case I_BOP:
                           PRINTFNODE((FNODE)FA1(f),1);
                           PUTS(((ARF)FA0(f))->name);
                           PRINTFNODE((FNODE)FA2(f),1);
                           break;
                   case I_COP:
                           switch( (cid)FA0(f) ) {
                                   case C_EQ: opname = ("=="); break;
                                   case C_NE: opname = ("!="); break;
                                   case C_GT: opname = (">"); break;
                                   case C_LT: opname = ("<"); break;
                                   case C_GE: opname = (">="); break;
                                   case C_LE: opname = ("<="); break;
                           }
                           PRINTFNODE((FNODE)FA1(f),1);
                           PUTS(opname);
                           PRINTFNODE((FNODE)FA2(f),1);
                           break;
                   case I_LOP:
                           switch( (lid)FA0(f) ) {
                                   case L_EQ: opname = ("@=="); break;
                                   case L_NE: opname = ("@!="); break;
                                   case L_GT: opname = ("@>"); break;
                                   case L_LT: opname = ("@<"); break;
                                   case L_GE: opname = ("@>="); break;
                                   case L_LE: opname = ("@<="); break;
                                   case L_AND: opname = ("@&&"); break;
                                   case L_OR: opname = ("@||"); break;
                                   case L_NOT: opname = ("@!"); break;
                           }
                           if ( (lid)FA0(f)==L_NOT ) {
                                   PUTS(opname); PRINTFNODE((FNODE)FA1(f),1);
                           } else {
                                   PRINTFNODE((FNODE)FA1(f),1);
                                   PUTS(opname);
                                   PRINTFNODE((FNODE)FA2(f),1);
                           }
                           break;
                   case I_AND:
                           PRINTFNODE((FNODE)FA0(f),1);
                           PUTS("&&");
                           PRINTFNODE((FNODE)FA1(f),1);
                           break;
                   case I_OR:
                           PRINTFNODE((FNODE)FA0(f),1);
                           PUTS("!!");
                           PRINTFNODE((FNODE)FA1(f),1);
                           break;
                   /* ternary operators */
                   case I_CE:
                           PRINTFNODE((FNODE)FA0(f),1); PUTS("?"); PRINTFNODE((FNODE)FA1(f),1);
                           PUTS(":"); PRINTFNODE((FNODE)FA2(f),1);
                           break;
                   /* lists */
                   case I_LIST: PUTS("["); PRINTFNODENODE((NODE)FA0(f)); PUTS("]"); break;
                   /* function */
                   case I_FUNC:
                           if ( !strcmp(((FUNC)FA0(f))->name,"@pi") ) PUTS("@pi");
                           else if ( !strcmp(((FUNC)FA0(f))->name,"@e") ) PUTS("@e");
                           else {
                                   PUTS(((FUNC)FA0(f))->name);
                                   PUTS("("); PRINTFARGS(FA1(f)); PUTS(")");
                           }
                           break;
                   /* XXX */
                   case I_CAR: PUTS("car("); PRINTFNODE(FA0(f),0); PUTS(")"); break;
                   case I_CDR: PUTS("cdr("); PRINTFNODE(FA0(f),0); PUTS(")"); break;
                   /* exponent vector */
                   case I_EV: PUTS("<<"); PRINTFNODENODE((NODE)FA0(f)); PUTS(">>"); break;
                   /* string */
                   case I_STR: PUTS((char *)FA0(f)); break;
                   /* internal object */
                   case I_FORMULA: obj = (Obj)FA0(f); PRINTEXPR(CO,obj); break;
                   /* program variable */
                   case I_PVAR:
                           if ( FA1(f) )
                                   error("printfnode : not implemented yet");
                           GETPVNAME(FA0(f),opname);
                           PUTS(opname);
                           break;
                   default: error("printfnode : not implemented yet");
           }
           if ( paren ) PUTS(")");
 }  }

Legend:
Removed from v.1.30  
changed lines
  Added in v.1.34

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