[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.24 and 1.31

version 1.24, 2003/06/09 16:18:10 version 1.31, 2004/02/27 09:13:04
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.23 2003/06/07 16:40:25 saito Exp $   * $OpenXM: OpenXM_contrib2/asir2000/io/pexpr.c,v 1.30 2004/02/13 05:48:36 saito Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "al.h"  #include "al.h"
Line 52 
Line 52 
 #include "comp.h"  #include "comp.h"
 #include "base.h"  #include "base.h"
   
   #if defined(PARI)
   #include "genpari.h"
   #endif
   
 #ifndef FPRINT  #ifndef FPRINT
 #define FPRINT  #define FPRINT
 #endif  #endif
Line 67  int hex_output;
Line 71  int hex_output;
 int fortran_output;  int fortran_output;
 int double_output;  int double_output;
 int real_digit;  int real_digit;
   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 102  int print_quote;
Line 108  int print_quote;
 #define PRINTUP printup  #define PRINTUP printup
 #define PRINTUM printum  #define PRINTUM printum
 #define PRINTSF printsf  #define PRINTSF printsf
   #define PRINTSYMBOL printsymbol
   #define PRINTRANGE printrange
 #endif  #endif
   
 #ifdef SPRINT  #ifdef SPRINT
Line 112  extern int hex_output;
Line 120  extern int hex_output;
 extern int fortran_output;  extern int fortran_output;
 extern int double_output;  extern int double_output;
 extern int real_digit;  extern int real_digit;
   extern int real_binary;
 extern int print_quote;  extern int print_quote;
   
   
Line 148  extern int print_quote;
Line 157  extern int print_quote;
 #define PRINTUP sprintup  #define PRINTUP sprintup
 #define PRINTUM sprintum  #define PRINTUM sprintum
 #define PRINTSF sprintsf  #define PRINTSF sprintsf
   #define PRINTSYMBOL sprintsymbol
   #define PRINTRANGE sprintrange
 #endif  #endif
   
 void PRINTEXPR();  void PRINTEXPR();
Line 179  void PRINTEOP();
Line 190  void PRINTEOP();
 void PRINTLOP();  void PRINTLOP();
 void PRINTQOP();  void PRINTQOP();
 void PRINTSF();  void PRINTSF();
   void PRINTSYMBOL();
   void PRINTRANGE();
   
 #ifdef FPRINT  #ifdef FPRINT
 void output_init() {  void output_init() {
Line 209  P p;
Line 222  P p;
 void printbf(a)  void printbf(a)
 BF a;  BF a;
 {  {
         void sor();  
   
         sor(a->body,double_output ? 'f' : 'g',-1,0);          sor(a->body,double_output ? 'f' : 'g',-1,0);
 }  }
 #endif  #endif
Line 224  char *s;
Line 235  char *s;
 }  }
   
 #if defined(PARI)  #if defined(PARI)
 #include "genpari.h"  
   
 void myoutbrute(g)  void myoutbrute(g)
 GEN g;  GEN g;
 {  {
   # if PARI_VERSION_CODE > 131588
           brute(g, 'f',-1);
   # else
         bruteall(g,'f',-1,1);          bruteall(g,'f',-1,1);
   # endif
 }  }
   
 void sprintbf(a)  void sprintbf(a)
 BF a;  BF a;
 {  {
         char *str;          char *str;
         char *GENtostr();  
         char *GENtostr0();          char *GENtostr0();
   
         if ( double_output ) {          if ( double_output ) {
Line 250  BF a;
Line 262  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;
                 default:                          case O_SYMBOL:
                         break;                                  PRINTSYMBOL((SYMBOL)p); break;
         }                          case O_RANGE:
                                   PRINTRANGE(vl,(RANGE)p); break;
                           default:
                                   break;
                   }
           if ( asir_texmacs && !user_print_function ) { putchar('\5'); fflush(stdout); }
 }  }
   
 void PRINTN(n)  void PRINTN(n)
Line 395  Num q;
Line 416  Num q;
                                 case MID_PRINTF_G:                                  case MID_PRINTF_G:
 #endif  #endif
                                 default:                                  default:
                                         if ( real_digit ) {                                          if ( real_binary ) {
                                                   unsigned int *m;
                                                   unsigned int u,l,mask;
                                                   int i,expo;
   
                                                   m = (unsigned int *)&BDY((Real)q);
   #if defined(__i386__) || defined(MIPSEL) || defined(VISUAL) || defined(__alpha) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__x86_64)
                                                   u = m[1]; l = m[0];
   #else
                                                   u = m[0]; l = m[1];
   #endif
                                                   if (u&0x80000000) {
                                                           TAIL PRINTF(OUT,"-");
                                                   }
                                                   u &= 0x7fffffff;
                                                   expo = ((int)(u>>20));
                                                   u &= 0xfffff;
                                                   if ( expo == 2047 ) {
                                                           if ( u || l ) {
                                                                   TAIL PRINTF(OUT,"NaN");
                                                           } else {
                                                                   TAIL PRINTF(OUT,"Inf");
                                                           }
                                                   } else if ( expo == 0 ) {
                                                           if ( u || l ) {
                                                                   TAIL PRINTF(OUT,"0b0.");
                                                                   for ( i = 0, mask = 0x80000; i < 20;
                                                                           i++, mask >>= 1) {
                                                                           TAIL
                                                                           if ( u&mask )
                                                                                   PRINTF(OUT,"1");
                                                                           else
                                                                                   PRINTF(OUT,"0");
                                                                   }
                                                                   for ( i = 0, mask = 0x80000000; i < 32;
                                                                           i++, mask >>= 1) {
                                                                           TAIL
                                                                           if ( l&mask )
                                                                                   PRINTF(OUT,"1");
                                                                           else
                                                                                   PRINTF(OUT,"0");
                                                                   }
                                                                   TAIL PRINTF(OUT,"*2^%d",-1022);
                                                           } else {
                                                                   TAIL PRINTF(OUT,"0");
                                                           }
                                                   } else {
                                                           expo -= 1023;
                                                           TAIL PRINTF(OUT,"0b1.");
                                                           for ( i = 0, mask = 0x80000; i < 20;
                                                                   i++, mask >>= 1) {
                                                                   TAIL
                                                                   if ( u&mask )
                                                                           PRINTF(OUT,"1");
                                                                   else
                                                                           PRINTF(OUT,"0");
                                                           }
                                                           for ( i = 0, mask = 0x80000000; i < 32;
                                                                   i++, mask >>= 1) {
                                                                   TAIL
                                                                   if ( l&mask )
                                                                           PRINTF(OUT,"1");
                                                                   else
                                                                           PRINTF(OUT,"0");
                                                           }
                                                           if ( expo ) {
                                                                   TAIL PRINTF(OUT,"*2^%d",expo);
                                                           }
                                                   }
                                           } else if ( real_digit ) {
                                                 sprintf(real_format,                                                  sprintf(real_format,
                                                         double_output?"%%.%df":"%%.%dg",real_digit);                                                          double_output?"%%.%df":"%%.%dg",real_digit);
                                                 TAIL PRINTF(OUT,real_format,BDY((Real)q));                                                  TAIL PRINTF(OUT,real_format,BDY((Real)q));
Line 1100  unsigned int i;
Line 1190  unsigned int i;
         } else {          } else {
                 TAIL PRINTF(OUT,"@_%d",IFTOF(i));                  TAIL PRINTF(OUT,"@_%d",IFTOF(i));
         }          }
   }
   
   void PRINTSYMBOL(SYMBOL sym)
   {
           PUTS(sym->name);
   }
   
   void PRINTRANGE(VL vl,RANGE p)
   {
           PUTS("range(");
           PRINTEXPR(vl,p->start);
           PUTS(",");
           PRINTEXPR(vl,p->end);
           PUTS(")");
 }  }

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.31

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