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

Diff for /OpenXM_contrib2/asir2000/parse/main.c between version 1.32 and 1.36

version 1.32, 2006/09/26 05:35:26 version 1.36, 2015/08/04 06:20:45
Line 45 
Line 45 
  * 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/parse/main.c,v 1.31 2006/09/25 04:57:55 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/parse/main.c,v 1.35 2014/05/09 19:35:52 ohara Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
   
 #if defined(PARI)  #include <stdlib.h>
 #include "genpari.h"  #if defined(VISUAL)
   #include <io.h>
 /* XXX : environment is defined in libpari.a */  #define R_OK 4
 #  if !(PARI_VERSION_CODE > 131588)  #else
 extern jmp_buf environnement;  #include <unistd.h>
 #  endif  #include <fcntl.h>
 #endif  #endif
   
 extern JMP_BUF main_env;  extern JMP_BUF main_env;
   
 #if defined(INTERVAL)  
 #ifndef ASIRRCNAME  #ifndef ASIRRCNAME
 #define ASIRRCNAME      "int_asirrc"  
 #endif  
 #else  
 #ifndef ASIRRCNAME  
 #define ASIRRCNAME      "asirrc"  #define ASIRRCNAME      "asirrc"
 #endif  #endif
 #endif  
   
   
 double get_current_time();  double get_current_time();
 void init_socket();  void init_socket();
 void recover();  void recover();
 void set_stacksize();  void set_stacksize();
 void batch_loop();  
   
 extern int mpi_nprocs,mpi_myid;  extern int mpi_nprocs,mpi_myid;
 extern int do_batch;  
   
   char *find_asirrc()
   {
           static char name[BUFSIZ];
           char dir[BUFSIZ];
           char *env,*env2;
   
   /* if ASIR_CONFIG is set, execute it; else execute .asirrc */
           env = getenv("ASIR_CONFIG");
           if( env && !access(env, R_OK) ) {
                   strcpy(name,env);
                   return name;
           }
           env = getenv("HOME");
           if ( env ) {
                   sprintf(name, "%s/.asirrc", env);
                   if (!access(name, R_OK)) {
                           return name;
                   }
           }
   #if defined(VISUAL)
           env  = getenv("HOMEDRIVE");
           env2 = getenv("HOMEPATH");
           if ( env && env2 ) {
                   sprintf(name, "%s%s/.asirrc", env, env2);
                   if (!access(name, R_OK)) {
                           return name;
                   }
           }
           env  = getenv("APPDATA");
           if ( env ) {
                   sprintf(name, "%s/OpenXM/.asirrc", env);
                   if (!access(name, R_OK)) {
                           return name;
                   }
           }
           get_rootdir(dir, BUFSIZ);
           sprintf(name, "%s/.asirrc", dir);
           if (!access(name, R_OK)) {
                   return name;
           }
   #endif
           return NULL;
   }
   
 #if defined(VISUAL_LIB)  #if defined(VISUAL_LIB)
 void Main(int argc,char *argv[])  void Main(int argc,char *argv[])
 #else  #else
Line 91  main(int argc,char *argv[])
Line 127  main(int argc,char *argv[])
 #endif  #endif
 {  {
         int tmp;          int tmp;
         FILE *ifp;          char *ifname;
         char ifname[BUFSIZ];  
         extern int GC_dont_gc;          extern int GC_dont_gc;
         extern int do_asirrc;          extern int do_asirrc;
         extern int do_file;          extern int do_file;
Line 100  main(int argc,char *argv[])
Line 135  main(int argc,char *argv[])
         extern int asir_setenv;          extern int asir_setenv;
         extern FILE *in_fp;          extern FILE *in_fp;
         extern int *StackBottom;          extern int *StackBottom;
         char *getenv();  
         char *homedir;  
         char *ptr;  
 #if !defined(VISUAL)  #if !defined(VISUAL)
         char *slash,*bslash,*binname,*p;          char *slash,*bslash,*binname,*p;
 #endif  #endif
Line 159  main(int argc,char *argv[])
Line 191  main(int argc,char *argv[])
         endian_init();          endian_init();
         cppname_init();          cppname_init();
         process_args(--argc,++argv);          process_args(--argc,++argv);
 #if defined(PARI)          if (!do_quiet) {
     risa_pari_init();  
 #endif  
         if (!do_batch && !do_quiet) {  
                 copyright();                  copyright();
         }          }
         output_init();          output_init();
Line 184  main(int argc,char *argv[])
Line 213  main(int argc,char *argv[])
         reg_sysf();          reg_sysf();
 #endif  #endif
   
 /* if ASIR_CONFIG is set, execute it; else execute .asirrc */  
         if ( ptr = getenv("ASIR_CONFIG") )  
                 strcpy(ifname,ptr);  
         else {  
                 homedir = getenv("HOME");  
                 if ( !homedir ) {  
                         char rootname[BUFSIZ];  
   
                         get_rootdir(rootname,sizeof(rootname));  
                         homedir = rootname;  
                 }  
                 sprintf(ifname,"%s/." ASIRRCNAME,homedir);  
         }  
   
         if ( do_file ) {          if ( do_file ) {
                 asir_infile=NULL;                  asir_infile=NULL;
                 loadasirfile(do_filename);                  loadasirfile(do_filename);
Line 206  main(int argc,char *argv[])
Line 221  main(int argc,char *argv[])
                 input_init(stdin,"stdin");                  input_init(stdin,"stdin");
         }          }
   
         if ( do_asirrc && (ifp = fopen(ifname,"r")) ) {          if ( do_asirrc && (ifname = find_asirrc()) ) {
                 fclose(ifp);  
                 if ( !SETJMP(main_env) )                  if ( !SETJMP(main_env) )
                         execasirfile(ifname);                          execasirfile(ifname);
         }          }
         if ( do_batch )  
                 batch_loop();  
   
         prompt();          prompt();
         while ( 1 ) {          while ( 1 ) {
 #if defined(PARI)  
                 recover(0);  
                 /* XXX environement is defined in libpari.a */  
 #  if !(PARI_VERSION_CODE > 131588)  
                 if ( setjmp(environnement) ) {  
                         avma = top; recover(1);  
                         resetenv("");  
                 }  
 #  endif  
 #endif  
                 if ( SETJMP(main_env) )                  if ( SETJMP(main_env) )
                         prompt();                          prompt();
                 if ( !do_file ) {                  if ( !do_file ) {
Line 258  void set_stacksize()
Line 260  void set_stacksize()
                 setrlimit(RLIMIT_STACK,&rlim);                  setrlimit(RLIMIT_STACK,&rlim);
         }          }
 #endif  #endif
 }  
   
 void batch_loop()  
 {  
         char *inbuf;  
         int i,c,size;  
   
         input_init(0,"string");  
   
         size = 2;  
         inbuf = (char *)malloc(size);  
         while ( 1 ) {  
                 for ( i = 0; ; i++ ) {  
                         c = w_fgetc(stdin);  
                         if ( c == '0xff' ) {  
                                 inbuf[i] = 0;  
                                 break;  
                         } else  
                                 inbuf[i] = c;  
                         if ( i == size-1 ) {  
                                 size *= 2;  
                                 inbuf = realloc(inbuf,size);  
                         }  
                 }  
                 execute_string(inbuf);  
         }  
 }  
   
 /* a function for batch-loop mode */  
   
 extern char *parse_strp;  
   
 int execute_string(char *cmd)  
 {  
         SNODE snode;  
         pointer val;  
 #if defined(PARI)  
         recover(0);  
         /* environement is defined in libpari.a */  
 # if !(PARI_VERSION_CODE > 131588 )  
         if ( setjmp(environnement) ) {  
                 avma = top; recover(1);  
                 resetenv("");  
         }  
 # endif  
 #endif  
         parse_strp = cmd;  
         asir_infile->ln = 1;  
         if ( mainparse(&snode) ) {  
                 return -1;  
         }  
         val = evalstat(snode);  
         if ( NEXT(asir_infile) ) {  
                 while ( NEXT(asir_infile) ) {  
                         if ( mainparse(&snode) ) {  
                                 return -1;  
                         }  
                         nextbp = 0;  
                         val = evalstat(snode);  
                 }  
         }  
         printexpr(CO,val);  
         return 0;  
 }  }

Legend:
Removed from v.1.32  
changed lines
  Added in v.1.36

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