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

version 1.24, 2015/08/16 03:12:09 version 1.25, 2015/08/17 05:18:36
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/builtin/parif.c,v 1.23 2015/08/07 08:00:30 takayama Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/builtin/parif.c,v 1.24 2015/08/16 03:12:09 noro Exp $ */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
 #include "ox.h"  #include "ox.h"
Line 52  pointer evalparif(FUNC f,NODE arg)
Line 52  pointer evalparif(FUNC f,NODE arg)
 {  {
   int ac,intarg,opt,prec;    int ac,intarg,opt,prec;
   Q q,r,narg;    Q q,r,narg;
   NODE nd,oxarg;    NODE nd,oxarg,t,t1,n;
   STRING name;    STRING name;
   USINT ui;    USINT ui;
   Obj ret,dmy;    Obj ret,dmy;
Line 66  pointer evalparif(FUNC f,NODE arg)
Line 66  pointer evalparif(FUNC f,NODE arg)
   if ( !ox_pari_stream_initialized ) {    if ( !ox_pari_stream_initialized ) {
           MKSTR(name,"ox_pari");            MKSTR(name,"ox_pari");
           nd = mknode(2,NULL,name);            nd = mknode(2,NULL,name);
           Pox_launch(nd,&r);            Pox_launch_nox(nd,&r);
           ox_pari_stream = r;            ox_pari_stream = r;
     ox_pari_stream_initialized = 1;      ox_pari_stream_initialized = 1;
   }    }
         switch ( f->type ) {  
                 case 0: /* in/out : integer */  
                         ac = argc(arg);  
                         if ( ac > 1 ) {  
                                 fprintf(stderr,"argument mismatch in %s()\n",NAME(f));  
                                 error("");  
                                 /* NOTREACHED */  
                                 return 0;  
                         }  
       intarg = ac == 0 ? 0 : QTOS((Q)ARG0(arg));  
       MKUSINT(ui,intarg);  
       oxarg = mknode(2,ox_pari_stream,ui);  
       Pox_push_cmo(oxarg,&dmy);  
       MKSTR(name,f->name);  
       oxarg = mknode(3,ox_pari_stream,name,ONE);  
       Pox_execute_function(oxarg,&dmy);  
       oxarg = mknode(1,ox_pari_stream);  
       Pox_pop_cmo(oxarg,&r);  
       return r;  
   
                 case 1:          ac = argc(arg);
                         ac = argc(arg);    /* reverse the arg list */
                         if ( !ac || ( ac > 2 ) ) {    for ( n = arg, t = 0; n; n = NEXT(n) ) {
                                 fprintf(stderr,"argument mismatch in %s()\n",NAME(f));      MKNODE(t1,BDY(n),t); t = t1;
                                 error("");    }
                                 /* NOTREACHED */    /* push the reversed arg list */
                                 return 0;    for ( ; t; t = NEXT(t) ) {
                         }      oxarg = mknode(2,ox_pari_stream,BDY(t));
       /* arg1 : prec */      Pox_push_cmo(oxarg,&dmy);
       prec = ac == 1 ? 0 : QTOS((Q)ARG1(arg));    }
       MKUSINT(ui,prec);    MKSTR(name,f->name);
       oxarg = mknode(2,ox_pari_stream,ui);    STOQ(ac,narg);
       Pox_push_cmo(oxarg,&dmy);    oxarg = mknode(3,ox_pari_stream,name,narg);
     Pox_execute_function(oxarg,&dmy);
       /* arg0 : arg */    oxarg = mknode(1,ox_pari_stream);
       oxarg = mknode(2,ox_pari_stream,ARG0(arg));    Pox_pop_cmo(oxarg,&r);
       Pox_push_cmo(oxarg,&dmy);    return r;
   
       MKSTR(name,f->name);  
       STOQ(2,narg);  
       oxarg = mknode(3,ox_pari_stream,name,narg);  
       Pox_execute_function(oxarg,&dmy);  
       oxarg = mknode(1,ox_pari_stream);  
       Pox_pop_cmo(oxarg,&r);  
       return r;  
   
                 case 2:  
                         ac = argc(arg);  
                         if ( !ac || ( ac > 2 ) ) {  
                                 fprintf(stderr,"argument mismatch in %s()\n",NAME(f));  
                                 error("");  
                                 /* NOTREACHED */  
                                 return 0;  
                         }  
                         if ( ac == 1 )  
                                 opt = 0;  
                         else  
                                 opt = QTOS((Q)ARG1(arg));  
                         return r;  
   
                 default:  
                         error("evalparif : not implemented yet.");  
                         /* NOTREACHED */  
                         return 0;  
         }  
 }  }
   
 struct pariftab {  struct pariftab {

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

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