[BACK]Return to output.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Kan

Diff for /OpenXM/src/kan96xx/Kan/output.c between version 1.1.1.1 and 1.8

version 1.1.1.1, 1999/10/08 02:12:01 version 1.8, 2020/10/06 11:33:46
Line 1 
Line 1 
   /* $OpenXM: OpenXM/src/kan96xx/Kan/output.c,v 1.7 2011/10/05 05:46:14 takayama Exp $ */
 #include <stdio.h>  #include <stdio.h>
   #include <stdlib.h>
   #include <string.h>
   #include <ctype.h>
 #include "datatype.h"  #include "datatype.h"
 #include "stackm.h"  #include "stackm.h"
 #include "extern.h"  #include "extern.h"
Line 16  struct outputQueue {
Line 20  struct outputQueue {
 static void putstr(char *s,struct outputQueue *oq);  static void putstr(char *s,struct outputQueue *oq);
   
 static void putstr(s,oq)  static void putstr(s,oq)
 char *s;       char *s;
 struct outputQueue *oq;       struct outputQueue *oq;
 {  {
   int i;    int i;
   char **tmp;    char **tmp;
Line 50  struct outputQueue *oq;
Line 54  struct outputQueue *oq;
 #define multStr(c) (c==' '?" ":(c=='\0'?"":"*"))  #define multStr(c) (c==' '?" ":(c=='\0'?"":"*"))
   
 char *POLYToString(f,multSym,brace)  char *POLYToString(f,multSym,brace)
 POLY f;       POLY f;
 int multSym;       int multSym;
 int brace;       int brace;
 {  {
   extern int Wrap;    extern int Wrap;
     extern int UseDsmall;
     extern int COutput;
   int i,j,jj,fi;    int i,j,jj,fi;
   int printed = 0;    int printed = 0;
   int vi; /* index for variables */    int vi; /* index for variables */
Line 83  int brace;
Line 89  int brace;
     printed = 1;      printed = 1;
     xnames = dnames = (char **)NULL;      xnames = dnames = (char **)NULL;
   }else{    }else{
     ringp = f->m->ringp; xnames = f->m->ringp->x; dnames = f->m->ringp->D;      ringp = f->m->ringp; xnames = f->m->ringp->x;
       if (UseDsmall) dnames = f->m->ringp->Dsmall;
       else dnames = f->m->ringp->D;
     n = ringp->n;      n = ringp->n;
     xout = ringp->outputOrder;      xout = ringp->outputOrder;
   }    }
Line 92  int brace;
Line 100  int brace;
     /*print coefficient*/      /*print coefficient*/
     if (fi == 0) {      if (fi == 0) {
       if (isConstant(f)) {        if (isConstant(f)) {
         putstr(coeffToString(f->coeffp),&oq);          putstr(coeffToString(f->coeffp),&oq);
       }else if (isOne(f->coeffp)) {        }else if (isOne(f->coeffp)) {
         /* do nothing */          /* do nothing */
       }else if (isMinusOne(f->coeffp)) {        }else if (isMinusOne(f->coeffp)) {
         putstr("-",&oq);          putstr("-",&oq);
       }else{        }else{
         putstr(coeffToString(f->coeffp),&oq);          putstr(coeffToString(f->coeffp),&oq);
         putstr(multStr(multSym),&oq);          putstr(multStr(multSym),&oq);
       }        }
     }else{      }else{
       if (isConstant(f)) {        if (isConstant(f)) {
         if (isNegative(f->coeffp)) {          if (isNegative(f->coeffp)) {
           putstr(coeffToString(f->coeffp),&oq);            putstr(coeffToString(f->coeffp),&oq);
         }else{          }else{
           putstr("+",&oq);            putstr("+",&oq);
           putstr(coeffToString(f->coeffp),&oq);            putstr(coeffToString(f->coeffp),&oq);
         }          }
       } else if (isOne(f->coeffp)) {        } else if (isOne(f->coeffp)) {
         putstr("+",&oq);          putstr("+",&oq);
       }else if (isMinusOne(f->coeffp)) {        }else if (isMinusOne(f->coeffp)) {
         putstr("-",&oq);          putstr("-",&oq);
       }else{        }else{
         if (!isNegative(f->coeffp)) putstr("+",&oq);          if (!isNegative(f->coeffp)) putstr("+",&oq);
         putstr(coeffToString(f->coeffp),&oq);          putstr(coeffToString(f->coeffp),&oq);
         putstr(multStr(multSym),&oq);          putstr(multStr(multSym),&oq);
       }        }
     }      }
Line 124  int brace;
Line 132  int brace;
     for (jj=0; jj<n*2; jj++) {      for (jj=0; jj<n*2; jj++) {
       j = xout[jj];        j = xout[jj];
       if (j <n) {        if (j <n) {
         if (f->m->e[j].x) {                  if (COutput) {
           vi++;                    if (f->m->e[j].x) {
           if (vi != 1) putstr(multStr(multSym),&oq);                          vi++;
           putstr(xnames[j],&oq);                          if (vi != 1) putstr(multStr(multSym),&oq);
           if (f->m->e[j].x >= 2) {                          if (f->m->e[j].x == 1) {
             putstr("^",&oq);                            putstr(xnames[j],&oq);
             putstr(intToString(f->m->e[j].x),&oq);                          } else {
           }else if (f->m->e[j].x < 0) {                            putstr("sm1power(",&oq);
             putstr("^(",&oq);                            putstr(xnames[j],&oq);
             putstr(intToString(f->m->e[j].x),&oq);                            putstr(",",&oq);
             putstr(")",&oq);                            putstr(intToString(f->m->e[j].x),&oq);
           }                            putstr(")",&oq);
         }                          }
                     }
                   }else{
                     if (f->m->e[j].x) {
                           vi++;
                           if (vi != 1) putstr(multStr(multSym),&oq);
                           putstr(xnames[j],&oq);
                           if (f->m->e[j].x >= 2) {
                             putstr("^",&oq);
                             putstr(intToString(f->m->e[j].x),&oq);
                           }else if (f->m->e[j].x < 0) {
                             putstr("^(",&oq);
                             putstr(intToString(f->m->e[j].x),&oq);
                             putstr(")",&oq);
                           }
                     }
                   }
       }else {        }else {
         j = j-n;                  if (COutput) {
         if (f->m->e[j].D) {                    j = j-n;
           vi++;                    if (f->m->e[j].D) {
           if (vi != 1) putstr(multStr(multSym),&oq);                          vi++;
           putstr(dnames[j],&oq);                          if (vi != 1) putstr(multStr(multSym),&oq);
           if (f->m->e[j].D >= 2) {                          if (f->m->e[j].D == 1) {
             putstr("^",&oq);                            putstr(dnames[j],&oq);
             putstr(intToString(f->m->e[j].D),&oq);                          }else {
           }else if (f->m->e[j].D < 0) {                            if (f->m->e[j].D) putstr("sm1power(",&oq);
             putstr("^(",&oq);                            putstr(dnames[j],&oq);
             putstr(intToString(f->m->e[j].D),&oq);                            putstr(",",&oq);
             putstr(")",&oq);                            putstr(intToString(f->m->e[j].D),&oq);
           }                            putstr(")",&oq);
         }                          }
                     }
                   }else{
                     j = j-n;
                     if (f->m->e[j].D) {
                           vi++;
                           if (vi != 1) putstr(multStr(multSym),&oq);
                           putstr(dnames[j],&oq);
                           if (f->m->e[j].D >= 2) {
                             putstr("^",&oq);
                             putstr(intToString(f->m->e[j].D),&oq);
                           }else if (f->m->e[j].D < 0) {
                             putstr("^(",&oq);
                             putstr(intToString(f->m->e[j].D),&oq);
                             putstr(")",&oq);
                           }
                     }
                   }
       }        }
     }      }
     fi++;      fi++;
Line 182  int brace;
Line 223  int brace;
 }  }
   
 char *KPOLYToString(f)  char *KPOLYToString(f)
 POLY f;       POLY f;
 {  {
   extern int OutputStyle;    extern int OutputStyle;
   return(POLYToString(f,OutputStyle,0));    return(POLYToString(f,OutputStyle,0));
 }  }
   
 isOne(c)  int isOne(c)
 struct coeff *c;       struct coeff *c;
 {  {
   switch(c->tag) {    switch(c->tag) {
   case INTEGER:    case INTEGER:
Line 206  struct coeff *c;
Line 247  struct coeff *c;
     errorCoeff("not yet");      errorCoeff("not yet");
   }    }
 }  }
 isMinusOne(c)  int isMinusOne(c)
 struct coeff *c;       struct coeff *c;
 {  {
   switch(c->tag) {    switch(c->tag) {
   case INTEGER:    case INTEGER:
Line 224  struct coeff *c;
Line 265  struct coeff *c;
   }    }
   
 }  }
 isNegative(c)  int isNegative(c)
 struct coeff *c;       struct coeff *c;
 {  {
   switch(c->tag) {    switch(c->tag) {
   case INTEGER:    case INTEGER:
Line 243  struct coeff *c;
Line 284  struct coeff *c;
   }    }
 }  }
   
 isConstant(f)  int isConstant(f)
 POLY f;       POLY f;
 {  {
   int i;    int i;
   int n;    int n;
Line 256  POLY f;
Line 297  POLY f;
   return(1);    return(1);
 }  }
   
   int isConstantAll(POLY f)
   {
     int i;
     int n;
     if (f == POLYNULL) return(1);
     while (f != POLYNULL) {
           if (!isConstant(f)) return 0;
           f = f->next;
     }
     return 1;
   }
   
 void errorOutput(s)  void errorOutput(s)
 char *s;       char *s;
 {  {
   fprintf(stderr,"Error(output.c):%s\n",s);    fprintf(stderr,"Error(output.c):%s\n",s);
   exit(15);    exit(15);
   }
   
   char **makeDsmall(char **dvars,int n) {
     char **ans;
     int i;
     ans = (char **) sGC_malloc(sizeof(char *)*(n+1));
     for (i=0; i<n; i++) {
           ans[i] =  (char *) sGC_malloc(sizeof(char)*(strlen(dvars[i])+1));
           strcpy(ans[i],dvars[i]);
           ans[i][0] = tolower(ans[i][0]);
     }
     ans[n] = NULL;
     return ans;
 }  }

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.8

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