=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/io/cpexpr.c,v retrieving revision 1.7 retrieving revision 1.12 diff -u -p -r1.7 -r1.12 --- OpenXM_contrib2/asir2000/io/cpexpr.c 2000/12/16 06:16:10 1.7 +++ OpenXM_contrib2/asir2000/io/cpexpr.c 2001/09/03 07:01:08 1.12 @@ -44,14 +44,14 @@ * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. - * $OpenXM: OpenXM_contrib2/asir2000/io/cpexpr.c,v 1.6 2000/11/10 08:28:53 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/io/cpexpr.c,v 1.11 2001/04/20 02:34:23 noro Exp $ */ #include "ca.h" #include "parse.h" #include "al.h" #include "base.h" -extern int hex_output,fortran_output,double_output; +extern int hex_output,fortran_output,double_output,real_digit; #define PRINTHAT (fortran_output?PUTS("**"):PUTS("^")) @@ -77,6 +77,7 @@ extern int hex_output,fortran_output,double_output; #define PRINTGF2MAT length_gf2mat #define PRINTGFMMAT length_gfmmat #define PRINTBYTEARRAY length_bytearray +#define PRINTQUOTE length_QUOTE #define PRINTERR length_err #define PRINTLF length_lf #define PRINTLOP length_lop @@ -84,6 +85,8 @@ extern int hex_output,fortran_output,double_output; #define PRINTEOP length_eop #define PRINTQOP length_qop #define PRINTUP length_up +#define PRINTUM length_um +#define PRINTSF length_sf void PRINTEXPR(); void PRINTNUM(); @@ -101,6 +104,7 @@ void PRINTUI(); void PRINTGF2MAT(); void PRINTGFMMAT(); void PRINTBYTEARRAY(); +void PRINTQUOTE(); void PRINTERR(); void PRINTCPLX(); void PRINTLM(); @@ -179,6 +183,8 @@ pointer p; PRINTGFMMAT(vl,(GFMMAT)p); break; case O_BYTEARRAY: PRINTBYTEARRAY(vl,(BYTEARRAY)p); break; + case O_QUOTE: + PRINTQUOTE(vl,(QUOTE)p); break; default: break; } @@ -215,9 +221,9 @@ Num q; break; case N_R: if ( double_output ) - total_length += 400; /* XXX */ + total_length += 400+real_digit; /* XXX */ else - total_length += 20; /* XXX */ + total_length += 20+real_digit; /* XXX */ break; case N_A: PUTS("("); PRINTR(ALG,(R)BDY((Alg)q)); PUTS(")"); @@ -242,6 +248,12 @@ Num q; case N_GFPN: PRINTUP((UP)(((GFPN)q)->body)); break; + case N_GFS: + total_length += 13; /* XXX */ + break; + case N_GFSN: + PRINTUM(BDY((GFSN)q)); + break; default: break; } @@ -549,6 +561,14 @@ BYTEARRAY array; total_length += 1+3*array->len; } +void PRINTQUOTE(vl,quote) +VL vl; +QUOTE quote; +{ + /* <...quoted...> */ + total_length += 20; +} + void PRINTERR(vl,e) VL vl; ERR e; @@ -731,4 +751,47 @@ UP n; } PUTS(")"); } +} + +PRINTUM(n) +UM n; +{ + int i,d; + + if ( !n ) + PUTS("0"); + else if ( !n->d ) + PRINTSF(n->c[0]); + else { + d = n->d; + PUTS("("); + if ( !d ) { + PRINTSF(n->c[d]); + } else if ( d == 1 ) { + PRINTSF(n->c[d]); + PUTS("*@s"); + } else { + PRINTSF(n->c[d]); + PUTS("*@s"); PRINTHAT; total_length += 13; + } + for ( i = d-1; i >= 0; i-- ) { + if ( n->c[i] ) { + PUTS("+("); PRINTSF(n->c[i]); PUTS(")"); + if ( i >= 2 ) { + PUTS("*@s"); PRINTHAT; total_length += 13; + } else if ( i == 1 ) + PUTS("*@s"); + } + } + PUTS(")"); + } +} + +PRINTSF(i) +unsigned int i; +{ + if ( !i ) { + PUTS("0"); + } else + total_length += 15; }