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

Diff for /OpenXM_contrib2/asir2000/io/spexpr.c between version 1.1 and 1.2

version 1.1, 1999/12/03 07:39:11 version 1.2, 2000/02/07 03:14:39
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/asir99/io/spexpr.c,v 1.1.1.1 1999/11/10 08:12:30 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/io/spexpr.c,v 1.1.1.1 1999/12/03 07:39:11 noro Exp $ */
 #include "ca.h"  #include "ca.h"
   #include "al.h"
 #include "parse.h"  #include "parse.h"
 #include "comp.h"  #include "comp.h"
 #include "base.h"  #include "base.h"
Line 8 
Line 9 
 #define SPRINT  #define SPRINT
 #endif  #endif
   
   #define PRINTHAT (fortran_output?PUTS("**"):PUTS("^"))
   
 #ifdef FPRINT  #ifdef FPRINT
 FILE *asir_out;  FILE *asir_out;
 #define OUT asir_out  #define OUT asir_out
 char DFORMAT[BUFSIZ];  char DFORMAT[BUFSIZ];
   int hex_output;
   int fortran_output;
   
 #define TAIL  #define TAIL
 #define PUTS(s) fputs(s,OUT)  #define PUTS(s) fputs(s,OUT)
Line 19  char DFORMAT[BUFSIZ];
Line 24  char DFORMAT[BUFSIZ];
 #define PRINTN printn  #define PRINTN printn
 #define PRINTBF printbf  #define PRINTBF printbf
 #define PRINTCPLX printcplx  #define PRINTCPLX printcplx
   #define PRINTLM printlm
   #define PRINTUP2 printup2
 #define PRINTV printv  #define PRINTV printv
 #define PRINTEXPR printexpr  #define PRINTEXPR printexpr
 #define PRINTNUM printnum  #define PRINTNUM printnum
Line 30  char DFORMAT[BUFSIZ];
Line 37  char DFORMAT[BUFSIZ];
 #define PRINTSTR printstr  #define PRINTSTR printstr
 #define PRINTCOMP printcomp  #define PRINTCOMP printcomp
 #define PRINTDP printdp  #define PRINTDP printdp
   #define PRINTUI printui
   #define PRINTGF2MAT printgf2mat
   #define PRINTGFMMAT printgfmmat
   #define PRINTERR printerr
   #define PRINTLF printlf
   #define PRINTLOP printlop
   #define PRINTFOP printfop
   #define PRINTEOP printeop
   #define PRINTQOP printqop
   #define PRINTUP printup
 #endif  #endif
   
 #ifdef SPRINT  #ifdef SPRINT
 static char *buf;  static char *buf;
 #define OUT buf  #define OUT buf
 extern char DFORMAT[BUFSIZ];  extern char DFORMAT[BUFSIZ];
   extern int hex_output;
   extern int fortran_output;
   
 #define TAIL while ( *OUT ) OUT++;  #define TAIL while ( *OUT ) OUT++;
 #define PUTS(s) strcat(OUT,s)  #define PUTS(s) strcat(OUT,s)
Line 43  extern char DFORMAT[BUFSIZ];
Line 62  extern char DFORMAT[BUFSIZ];
 #define PRINTN sprintn  #define PRINTN sprintn
 #define PRINTBF sprintbf  #define PRINTBF sprintbf
 #define PRINTCPLX sprintcplx  #define PRINTCPLX sprintcplx
   #define PRINTLM sprintlm
   #define PRINTUP2 sprintup2
 #define PRINTV sprintv  #define PRINTV sprintv
 #define PRINTEXPR sprintexpr  #define PRINTEXPR sprintexpr
 #define PRINTNUM sprintnum  #define PRINTNUM sprintnum
Line 54  extern char DFORMAT[BUFSIZ];
Line 75  extern char DFORMAT[BUFSIZ];
 #define PRINTSTR sprintstr  #define PRINTSTR sprintstr
 #define PRINTCOMP sprintcomp  #define PRINTCOMP sprintcomp
 #define PRINTDP sprintdp  #define PRINTDP sprintdp
   #define PRINTUI sprintui
   #define PRINTGF2MAT sprintgf2mat
   #define PRINTGFMMAT sprintgfmmat
   #define PRINTERR sprinterr
   #define PRINTLF sprintlf
   #define PRINTLOP sprintlop
   #define PRINTFOP sprintfop
   #define PRINTEOP sprinteop
   #define PRINTQOP sprintqop
   #define PRINTUP sprintup
 #endif  #endif
   
 #if defined(THINK_C)  
 void PRINTEXPR(VL,Obj);  
 void PRINTNUM(Num);  
 void PRINTN(N);  
 void PRINTV(VL,V);  
 void PRINTP(VL,P);  
 void PRINTR(VL,R);  
 void PRINTLIST(VL,LIST);  
 void PRINTVECT(VL,VECT);  
 void PRINTMAT(VL,MAT);  
 void PRINTSTR(STRING);  
 void PRINTCOMP(VL,COMP);  
 void PRINTDP(VL,DP);  
 void PRINTCPLX(C);  
 #else  
 void PRINTEXPR();  void PRINTEXPR();
 void PRINTNUM();  void PRINTNUM();
 void PRINTN();  void PRINTN();
Line 83  void PRINTMAT();
Line 99  void PRINTMAT();
 void PRINTSTR();  void PRINTSTR();
 void PRINTCOMP();  void PRINTCOMP();
 void PRINTDP();  void PRINTDP();
   void PRINTUI();
   void PRINTGF2MAT();
   void PRINTGFMMAT();
   void PRINTERR();
 void PRINTCPLX();  void PRINTCPLX();
 #endif  void PRINTLM();
   void PRINTLF();
   void PRINTUP2();
   
 #ifdef FPRINT  #ifdef FPRINT
 void output_init() {  void output_init() {
Line 107  P p;
Line 129  P p;
 }  }
   
 #if PARI  #if PARI
 printbf(a)  void printbf(a)
 BF a;  BF a;
 {  {
         sor(a->body,'g',-1,0);          sor(a->body,'g',-1,0);
Line 164  Obj p;
Line 186  Obj p;
                         PRINTCOMP(vl,(COMP)p); break;                          PRINTCOMP(vl,(COMP)p); break;
                 case O_DP:                  case O_DP:
                         PRINTDP(vl,(DP)p); break;                          PRINTDP(vl,(DP)p); break;
                   case O_USINT:
                           PRINTUI(vl,(USINT)p); break;
                   case O_GF2MAT:
                           PRINTGF2MAT(vl,(GF2MAT)p); break;
                   case O_ERR:
                           PRINTERR(vl,(ERR)p); break;
                   case O_MATHCAP:
                           PRINTLIST(vl,((MATHCAP)p)->body); break;
                   case O_F:
                           PRINTLF(vl,(F)p); break;
                   case O_GFMMAT:
                           PRINTGFMMAT(vl,(GFMMAT)p); break;
                 default:                  default:
                         break;                          break;
         }          }
Line 179  N n;
Line 213  N n;
                 PUTS("0");                  PUTS("0");
                 return;                  return;
         }          }
         ntobn(DBASE,n,&tn);          if ( hex_output ) {
         ptr = BD(tn);                  ptr = BD(n);
         TAIL PRINTF(OUT,"%d",ptr[PL(tn) - 1]);                  TAIL PRINTF(OUT,"0x%x",ptr[PL(n)-1]);
         for ( i = PL(tn) - 2; i >= 0; i-- ) {                  if ( hex_output < 0 )
                 TAIL PRINTF(OUT,DFORMAT,ptr[i]);                          for ( i = PL(n) - 2; i >= 0; i-- ) {
                                   TAIL PRINTF(OUT,"|%08x",ptr[i]);
                           }
                   else
                           for ( i = PL(n) - 2; i >= 0; i-- ) {
                                   TAIL PRINTF(OUT,"%08x",ptr[i]);
                           }
           } else {
                   ntobn(DBASE,n,&tn);
                   ptr = BD(tn);
                   TAIL PRINTF(OUT,"%d",ptr[PL(tn) - 1]);
                   for ( i = PL(tn) - 2; i >= 0; i-- ) {
                           TAIL PRINTF(OUT,DFORMAT,ptr[i]);
                   }
         }          }
 }  }
   
Line 216  Num q;
Line 263  Num q;
                 case N_C:                  case N_C:
                         PRINTCPLX((C)q); break;                          PRINTCPLX((C)q); break;
                 case N_M:                  case N_M:
                         TAIL PRINTF(OUT,"%d",CONT((MQ)q));                          TAIL PRINTF(OUT,"%d",CONT((MQ)q)); break;
                   case N_LM:
                           PRINTN(((LM)q)->body); break;
                   case N_GF2N:
                           if ( hex_output )
                                   PRINTN((N)(((GF2N)q)->body));
                           else
                                   PRINTUP2(((GF2N)q)->body);
                         break;                          break;
                   case N_GFPN:
                           PRINTUP((UP)(((GFPN)q)->body));
                           break;
         }          }
 }  }
   
Line 262  P p;
Line 319  P p;
                                 }                                  }
                                 PRINTV(vl,v);                                  PRINTV(vl,v);
                                 if ( cmpq(DEG(dc),ONE) ) {                                  if ( cmpq(DEG(dc),ONE) ) {
                                         PUTS("^");                                          PRINTHAT;
                                         if ( INT(DEG(dc)) && SGN(DEG(dc))>0 )                                          if ( INT(DEG(dc)) && SGN(DEG(dc))>0 )
                                                 PRINTNUM((Num)DEG(dc));                                                  PRINTNUM((Num)DEG(dc));
                                         else {                                          else {
Line 290  P p;
Line 347  P p;
                 }                  }
 }  }
   
   int hideargs;
   
 void PRINTV(vl,v)  void PRINTV(vl,v)
 VL vl;  VL vl;
 V v;  V v;
Line 303  V v;
Line 362  V v;
         else if ( (vid)v->attr == V_PF ) {          else if ( (vid)v->attr == V_PF ) {
                 pf = ((PFINS)v->priv)->pf; ad = ((PFINS)v->priv)->ad;                  pf = ((PFINS)v->priv)->pf; ad = ((PFINS)v->priv)->ad;
                 if ( !strcmp(NAME(pf),"pow") ) {                  if ( !strcmp(NAME(pf),"pow") ) {
                         PUTS("("); PRINTR(vl,(R)ad[0].arg); PUTS(")^(");                          PUTS("("); PRINTR(vl,(R)ad[0].arg); PUTS(")"); PRINTHAT; PUTS("(");
                         PRINTR(vl,(R)ad[1].arg); PUTS(")");                          PRINTR(vl,(R)ad[1].arg); PUTS(")");
                 } else if ( !pf->argc ) {                  } else if ( !pf->argc ) {
                         TAIL PRINTF(OUT,"%s",NAME(pf));                          TAIL PRINTF(OUT,"%s",NAME(pf));
                 } else {                  } else {
                         for ( i = 0; i < pf->argc; i++ )                          if ( hideargs ) {
                                 if ( ad[i].d )                                  for ( i = 0; i < pf->argc; i++ )
                                         break;                                          if ( ad[i].d )
                         if ( i < pf->argc ) {                                                  break;
                                 TAIL PRINTF(OUT,"%s(%d",NAME(pf),ad[0].d);                                  if ( i < pf->argc ) {
                                 for ( i = 1; i < pf->argc; i++ ) {                                          TAIL PRINTF(OUT,"%s{%d",NAME(pf),ad[0].d);
                                         TAIL PRINTF(OUT,",%d",ad[i].d);                                          for ( i = 1; i < pf->argc; i++ ) {
                                                   TAIL PRINTF(OUT,",%d",ad[i].d);
                                           }
                                           PUTS("}");
                                   } else {
                                           TAIL PRINTF(OUT,"%s",NAME(pf));
                                 }                                  }
                                 PUTS(")(");  
                         } else {                          } else {
                                 TAIL PRINTF(OUT,"%s(",NAME(pf));                                  for ( i = 0; i < pf->argc; i++ )
                                           if ( ad[i].d )
                                                   break;
                                   if ( i < pf->argc ) {
                                           TAIL PRINTF(OUT,"%s{%d",NAME(pf),ad[0].d);
                                           for ( i = 1; i < pf->argc; i++ ) {
                                                   TAIL PRINTF(OUT,",%d",ad[i].d);
                                           }
                                           PUTS("}(");
                                   } else {
                                           TAIL PRINTF(OUT,"%s(",NAME(pf));
                                   }
                                   PRINTR(vl,(R)ad[0].arg);
                                   for ( i = 1; i < pf->argc; i++ ) {
                                           PUTS(","); PRINTR(vl,(R)ad[i].arg);
                                   }
                                   PUTS(")");
                         }                          }
                         PRINTR(vl,(R)ad[0].arg);  
                         for ( i = 1; i < pf->argc; i++ ) {  
                                 PUTS(","); PRINTR(vl,(R)ad[i].arg);  
                         }  
                         PUTS(")");  
                 }                  }
         }          }
 }  }
Line 438  DP d;
Line 512  DP d;
                 PUTS(">>");                  PUTS(">>");
                 if ( NEXT(m) )                  if ( NEXT(m) )
                         PUTS("+");                          PUTS("+");
           }
   }
   
   void PRINTUI(vl,u)
   VL vl;
   USINT u;
   {
           TAIL PRINTF(OUT,"%u",BDY(u));
   }
   
   void PRINTGF2MAT(vl,mat)
   VL vl;
   GF2MAT mat;
   {
           int row,col,w,i,j,k,m;
           unsigned int t;
           unsigned int **b;
   
           row = mat->row;
           col = mat->col;
           w = (col+BSH-1)/BSH;
           b = mat->body;
           for ( i = 0; i < row; i++ ) {
                   for ( j = 0, m = 0; j < w; j++ ) {
                           t = b[i][j];
                           for ( k = 0; m < col && k < BSH; k++, m++ )
                                   if ( t & (1<<k) )
                                           PUTS("1");
                                   else
                                           PUTS("0");
                   }
                   PUTS("\n");
           }
   }
   
   void PRINTGFMMAT(vl,mat)
   VL vl;
   GFMMAT mat;
   {
           int row,col,i,j;
           unsigned int t;
           unsigned int **b;
   
           row = mat->row;
           col = mat->col;
           b = mat->body;
           for ( i = 0; i < row; i++ ) {
                   PUTS("[");
                   for ( j = 0; j < col; j++ ) {
                           TAIL PRINTF(OUT,"%8d",b[i][j]);
                   }
                   PUTS("]\n");
           }
   }
   
   void PRINTERR(vl,e)
   VL vl;
   ERR e;
   {
           PUTS("error("); PRINTEXPR(vl,e->body); PUTS(")");
   }
   
   void PRINTUP2(p)
   UP2 p;
   {
           int d,i;
   
           if ( !p ) {
                   TAIL PRINTF(OUT,"0");
           } else {
                   d = degup2(p);
                   TAIL PRINTF(OUT,"(");
                   if ( !d ) {
                           TAIL PRINTF(OUT,"1");
                   } else if ( d == 1 ) {
                           TAIL PRINTF(OUT,"@");
                   } else {
                           PUTS("@"); PRINTHAT; TAIL PRINTF(OUT,"%d",d);
                   }
                   for ( i = d-1; i >= 0; i-- ) {
                           if ( p->b[i/BSH] & (1<<(i%BSH)) )
                                   if ( !i ) {
                                           TAIL PRINTF(OUT,"+1");
                                   } else if ( i == 1 ) {
                                           TAIL PRINTF(OUT,"+@");
                                   } else {
                                           PUTS("+@"); PRINTHAT; TAIL PRINTF(OUT,"%d",i);
                                   }
                   }
                   TAIL PRINTF(OUT,")");
           }
   }
   
   void PRINTLF(vl,f)
   VL vl;
   F f;
   {
           switch ( FOP(f) ) {
                   case AL_TRUE:
                           TAIL PRINTF(OUT,"@true");
                           break;
                   case AL_FALSE:
                           TAIL PRINTF(OUT,"@false");
                           break;
   
                   case AL_OR: case AL_AND:
                           PRINTFOP(vl,f); break;
                   case AL_NOT: case AL_IMPL: case AL_REPL: case AL_EQUIV:
                           PRINTEOP(vl,f); break;
   
                   case AL_EQUAL: case AL_NEQ: case AL_LESSP:
                   case AL_GREATERP: case AL_LEQ: case AL_GEQ:
                           PRINTLOP(vl,f); break;
   
                   case AL_EX: case AL_ALL:
                           PRINTQOP(vl,f); break;
                   default:
                           break;
           }
   }
   
   PRINTFOP(vl,f)
   VL vl;
   F f;
   {
           char *op;
           NODE n;
   
           op = FOP(f)==AL_OR?" @|| ":" @&& ";
           n = FJARG(f);
           PUTS("("); PRINTEXPR(vl,BDY(n)); PUTS(")");
           for ( n = NEXT(n); n; n = NEXT(n) ) {
                   PUTS(op); PUTS("("); PRINTEXPR(vl,BDY(n)); PUTS(")");
           }
   }
   
   PRINTEOP(vl,f)
   VL vl;
   F f;
   {
           oFOP op;
           char *sop;
   
           if ( (op = FOP(f)) == AL_NOT ) {
                   PUTS("(@! "); PRINTEXPR(vl,(Obj)FARG(f)); PUTS(")"); return;
           }
           switch ( op ) {
                   case AL_IMPL:
                           sop = " @impl "; break;
                   case AL_REPL:
                           sop = " @repl "; break;
                   case AL_EQUIV:
                           sop = " @equiv "; break;
                   default:
                           break;
           }
           PUTS("(");
           PRINTEXPR(vl,(Obj)FLHS(f));
           PUTS(sop);
           PRINTEXPR(vl,(Obj)FRHS(f));
           PUTS(")");
   }
   
   PRINTLOP(vl,f)
   VL vl;
   F f;
   {
           char *op;
   
           switch ( FOP(f) ) {
                   case AL_EQUAL:
                           op = " @== "; break;
                   case AL_NEQ:
                           op = " @!= "; break;
                   case AL_LESSP:
                           op = " @< "; break;
                   case AL_GREATERP:
                           op = " @> "; break;
                   case AL_LEQ:
                           op = " @<= "; break;
                   case AL_GEQ:
                           op = " @>= "; break;
                   default:
                           error("PRINTLOP : invalid operator");
                           break;
           }
           PRINTEXPR(vl,(Obj)FPL(f)); PUTS(op); PUTS("0");
   }
   
   PRINTQOP(vl,f)
   VL vl;
   F f;
   {
           char *op;
   
           op = FOP(f)==AL_EX?"ex":"all";
           TAIL PRINTF(OUT,"%s(%s,",op,NAME(FQVR(f)));
           PRINTEXPR(vl,(Obj)FQMAT(f)); PUTS(")");
   }
   
   PRINTUP(n)
   UP n;
   {
           int i,d;
   
           if ( !n )
                   PUTS("0");
           else if ( !n->d )
                   PRINTNUM(n->c[0]);
           else {
                   d = n->d;
                   PUTS("(");
                   if ( !d ) {
                           PRINTNUM(n->c[d]);
                   } else if ( d == 1 ) {
                           PRINTNUM(n->c[d]);
                           PUTS("*@p");
                   } else {
                           PRINTNUM(n->c[d]);
                           PUTS("*@p"); PRINTHAT; TAIL PRINTF(OUT,"%d",d);
                   }
                   for ( i = d-1; i >= 0; i-- ) {
                           if ( n->c[i] ) {
                                   PUTS("+("); PRINTNUM(n->c[i]); PUTS(")");
                                   if ( i >= 2 ) {
                                           PUTS("*@p"); PRINTHAT; TAIL PRINTF(OUT,"%d",i);
                                   } else if ( i == 1 )
                                           PUTS("*@p");
                           }
                   }
                   PUTS(")");
         }          }
 }  }

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

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