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

Diff for /OpenXM_contrib2/asir2000/builtin/parif.c between version 1.37 and 1.38

version 1.37, 2017/08/30 09:40:30 version 1.38, 2018/03/29 01:32:50
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/builtin/parif.c,v 1.36 2017/03/31 06:10:13 ohara Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/builtin/parif.c,v 1.37 2017/08/30 09:40:30 ohara Exp $ */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
 #include "ox.h"  #include "ox.h"
Line 22  struct mpfr_tab_rec {
Line 22  struct mpfr_tab_rec {
   char *name;    char *name;
   mpfr_func func;    mpfr_func func;
 } mpfr_tab[] = {  } mpfr_tab[] = {
         {"ai",Pmpfr_ai},    {"ai",Pmpfr_ai},
         {"zeta",Pmpfr_zeta},    {"zeta",Pmpfr_zeta},
         {"j0",Pmpfr_j0},    {"j0",Pmpfr_j0},
         {"j1",Pmpfr_j1},    {"j1",Pmpfr_j1},
         {"y0",Pmpfr_y0},    {"y0",Pmpfr_y0},
         {"y1",Pmpfr_y1},    {"y1",Pmpfr_y1},
         {"eint",Pmpfr_eint},    {"eint",Pmpfr_eint},
         {"erf",Pmpfr_erf},    {"erf",Pmpfr_erf},
         {"li2",Pmpfr_li2},    {"li2",Pmpfr_li2},
         {"gamma",Pmpfr_gamma},    {"gamma",Pmpfr_gamma},
         {"lngamma",Pmpfr_gamma},    {"lngamma",Pmpfr_gamma},
         {"digamma",Pmpfr_gamma},    {"digamma",Pmpfr_gamma},
         {"floor",Pmpfr_floor},    {"floor",Pmpfr_floor},
         {"ceil",Pmpfr_ceil},    {"ceil",Pmpfr_ceil},
         {"round",Pmpfr_round},    {"round",Pmpfr_round},
 };  };
   
 mpfr_func mpfr_search(char *name)  mpfr_func mpfr_search(char *name)
Line 72  Obj vect_to_mat(VECT v)
Line 72  Obj vect_to_mat(VECT v)
   len = v->len;    len = v->len;
   if ( v->body[0] && OID((Obj)v->body[0]) == O_VECT ) {    if ( v->body[0] && OID((Obj)v->body[0]) == O_VECT ) {
     col = ((VECT)v->body[0])->len;      col = ((VECT)v->body[0])->len;
         for ( i = 1; i < len; i++ )    for ( i = 1; i < len; i++ )
           if ( !v->body[i] || OID((Obj)v->body[i]) != O_VECT      if ( !v->body[i] || OID((Obj)v->body[i]) != O_VECT
            || ((VECT)v->body[i])->len != col )       || ((VECT)v->body[i])->len != col )
           break;      break;
     if ( i == len ) {      if ( i == len ) {
           /* convert to a matrix */      /* convert to a matrix */
           MKMAT(m,len,col);      MKMAT(m,len,col);
           for ( i = 0; i < len; i++ )      for ( i = 0; i < len; i++ )
             for ( j = 0; j < col; j++ )        for ( j = 0; j < col; j++ )
                   m->body[i][j] = ((VECT)v->body[i])->body[j];        m->body[i][j] = ((VECT)v->body[i])->body[j];
           return (Obj)m;      return (Obj)m;
         }  
   }    }
     }
   return (Obj)v;    return (Obj)v;
 }  }
   
Line 94  void reset_ox_pari()
Line 94  void reset_ox_pari()
   Obj r;    Obj r;
   
   if ( ox_get_pari_result ) {    if ( ox_get_pari_result ) {
         nd = mknode(1,ox_pari_stream);    nd = mknode(1,ox_pari_stream);
         Pox_shutdown(nd,&r);    Pox_shutdown(nd,&r);
     ox_get_pari_result = 0;      ox_get_pari_result = 0;
         ox_pari_stream_initialized = 0;    ox_pari_stream_initialized = 0;
   }    }
 }  }
   
Line 121  pointer evalparif(FUNC f,NODE arg)
Line 121  pointer evalparif(FUNC f,NODE arg)
   }    }
   
   if ( !ox_pari_stream_initialized ) {    if ( !ox_pari_stream_initialized ) {
         if ( ox_pari_starting_function && OID(ox_pari_starting_function) == O_P ) {    if ( ox_pari_starting_function && OID(ox_pari_starting_function) == O_P ) {
                 v = VR(ox_pari_starting_function);      v = VR(ox_pari_starting_function);
                 if ( (int)v->attr != V_SR ) {      if ( (int)v->attr != V_SR ) {
                         error("pari : no handler.");        error("pari : no handler.");
                 }      }
                 MKNODE(nd,0,0);      MKNODE(nd,0,0);
                 r = (Q)bevalf((FUNC)v->priv,0);      r = (Q)bevalf((FUNC)v->priv,0);
         }else {    }else {
 #if !defined(VISUAL)  #if !defined(VISUAL)
         MKSTR(name,"ox_pari");    MKSTR(name,"ox_pari");
         nd = mknode(2,NULL,name);    nd = mknode(2,NULL,name);
         Pox_launch_nox(nd,&r);    Pox_launch_nox(nd,&r);
 #else  #else
         error("Please load names.rr from latest asir-contrib library before using pari functions.");    error("Please load names.rr from latest asir-contrib library before using pari functions.");
 #endif  #endif
         }    }
         ox_pari_stream = r;    ox_pari_stream = r;
     ox_pari_stream_initialized = 1;      ox_pari_stream_initialized = 1;
   }    }
   
         ac = argc(arg);    ac = argc(arg);
   /* reverse the arg list */    /* reverse the arg list */
   for ( n = arg, t = 0; n; n = NEXT(n) ) {    for ( n = arg, t = 0; n; n = NEXT(n) ) {
     MKNODE(t1,BDY(n),t); t = t1;      MKNODE(t1,BDY(n),t); t = t1;
Line 167  pointer evalparif(FUNC f,NODE arg)
Line 167  pointer evalparif(FUNC f,NODE arg)
   oxarg = mknode(2,list,sec);    oxarg = mknode(2,list,sec);
   ret=0;    ret=0;
   do {    do {
           check_intr();      check_intr();
           Pox_select(oxarg,&list);      Pox_select(oxarg,&list);
           oxarg = mknode(1,list);      oxarg = mknode(1,list);
           Plength(oxarg,&ret);      Plength(oxarg,&ret);
   }while (!ret);    }while (!ret);
   oxarg = mknode(1,ox_pari_stream);    oxarg = mknode(1,ox_pari_stream);
   Pox_get(oxarg,&ret);    Pox_get(oxarg,&ret);
Line 187  pointer evalparif(FUNC f,NODE arg)
Line 187  pointer evalparif(FUNC f,NODE arg)
   }    }
   if ( ret && OID(ret) == O_LIST ) {    if ( ret && OID(ret) == O_LIST ) {
     ret = list_to_vect(ret);      ret = list_to_vect(ret);
         ret = vect_to_mat((VECT)ret);    ret = vect_to_mat((VECT)ret);
   }    }
   return ret;    return ret;
 }  }
   
 struct pariftab {  struct pariftab {
         char *name;    char *name;
   int dmy;    int dmy;
         int type;    int type;
 };  };
   
 /*  /*
Line 335  struct pariftab pariftab[] = {
Line 335  struct pariftab pariftab[] = {
 };  };
   
 void parif_init() {  void parif_init() {
         int i;    int i;
   
         for ( i = 0, parif = 0; pariftab[i].name; i++ )    for ( i = 0, parif = 0; pariftab[i].name; i++ )
                  appendparif(&parif,pariftab[i].name, 0,pariftab[i].type);       appendparif(&parif,pariftab[i].name, 0,pariftab[i].type);
 }  }

Legend:
Removed from v.1.37  
changed lines
  Added in v.1.38

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