[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.3 and 1.39

version 1.3, 2000/02/08 04:47:12 version 1.39, 2018/03/29 01:32:54
Line 1 
Line 1 
 /* $OpenXM: OpenXM_contrib2/asir2000/parse/main.c,v 1.2 2000/01/19 02:08:07 noro Exp $ */  /*
    * Copyright (c) 1994-2000 FUJITSU LABORATORIES LIMITED
    * All rights reserved.
    *
    * FUJITSU LABORATORIES LIMITED ("FLL") hereby grants you a limited,
    * non-exclusive and royalty-free license to use, copy, modify and
    * redistribute, solely for non-commercial and non-profit purposes, the
    * computer program, "Risa/Asir" ("SOFTWARE"), subject to the terms and
    * conditions of this Agreement. For the avoidance of doubt, you acquire
    * only a limited right to use the SOFTWARE hereunder, and FLL or any
    * third party developer retains all rights, including but not limited to
    * copyrights, in and to the SOFTWARE.
    *
    * (1) FLL does not grant you a license in any way for commercial
    * purposes. You may use the SOFTWARE only for non-commercial and
    * non-profit purposes only, such as academic, research and internal
    * business use.
    * (2) The SOFTWARE is protected by the Copyright Law of Japan and
    * international copyright treaties. If you make copies of the SOFTWARE,
    * with or without modification, as permitted hereunder, you shall affix
    * to all such copies of the SOFTWARE the above copyright notice.
    * (3) An explicit reference to this SOFTWARE and its copyright owner
    * shall be made on your publication or presentation in any form of the
    * results obtained by use of the SOFTWARE.
    * (4) In the event that you modify the SOFTWARE, you shall notify FLL by
    * e-mail at risa-admin@sec.flab.fujitsu.co.jp of the detailed specification
    * for such modification or the source code of the modified part of the
    * SOFTWARE.
    *
    * THE SOFTWARE IS PROVIDED AS IS WITHOUT ANY WARRANTY OF ANY KIND. FLL
    * MAKES ABSOLUTELY NO WARRANTIES, EXPRESSED, IMPLIED OR STATUTORY, AND
    * EXPRESSLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS
    * FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT OF THIRD PARTIES'
    * RIGHTS. NO FLL DEALER, AGENT, EMPLOYEES IS AUTHORIZED TO MAKE ANY
    * MODIFICATIONS, EXTENSIONS, OR ADDITIONS TO THIS WARRANTY.
    * UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, TORT, CONTRACT,
    * OR OTHERWISE, SHALL FLL BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY
    * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
    * DAMAGES OF ANY CHARACTER, INCLUDING, WITHOUT LIMITATION, DAMAGES
    * ARISING OUT OF OR RELATING TO THE SOFTWARE OR THIS AGREEMENT, DAMAGES
    * FOR LOSS OF GOODWILL, WORK STOPPAGE, OR LOSS OF DATA, OR FOR ANY
    * DAMAGES, EVEN IF FLL SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF
    * SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY. EVEN IF A PART
    * 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/parse/main.c,v 1.38 2015/08/14 13:51:56 fujimoto Exp $
   */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
 #if defined(THINK_C)  
 #include <console.h>  #include <stdlib.h>
   #if defined(VISUAL) || defined(__MINGW32__)
   #include <io.h>
   #define R_OK 4
   #else
   #include <unistd.h>
   #include <fcntl.h>
 #endif  #endif
   
 #if PARI  extern JMP_BUF main_env;
 #include "genpari.h"  
   
 extern jmp_buf environnement;  #ifndef ASIRRCNAME
   #define ASIRRCNAME      "asirrc"
 #endif  #endif
   
 extern jmp_buf env;  
 extern int *StackBottom;  
   
 double get_current_time();  double get_current_time();
   void init_socket();
   void recover();
   void set_stacksize();
   
 extern int mpi_nprocs,mpi_myid;  extern int mpi_nprocs,mpi_myid;
   
   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) || defined(__MINGW32__)
     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(argc,argv)  void Main(int argc,char *argv[])
 #else  #else
 #if defined(VISUAL)  #if defined(VISUAL) || defined(__MINGW32__)
 void  void
 #endif  #endif
 main(argc,argv)  main(int argc,char *argv[])
 #endif  #endif
 int argc;  
 char *argv[];  
 {  {
         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 read_exec_file;    extern int do_file;
         extern int do_asirrc;    extern char *do_filename;
         extern int do_file;    extern int asir_setenv;
         extern FILE *in_fp;    extern FILE *in_fp;
         char *getenv();    extern int *StackBottom;
         char *homedir;  #if !defined(VISUAL) && !defined(__MINGW32__)
         char *slash,*binname;    char *slash,*bslash,*binname,*p;
         char *ptr;  #endif
   
         StackBottom = &tmp + 1; /* XXX */    set_stacksize();
 #if MPI    StackBottom = &tmp;
         mpi_init();    GC_init();
         if ( mpi_myid ) {  #if defined(MPI)
                 int slave_argc;    mpi_init();
                 char *slave_argv[2];    if ( mpi_myid ) {
       int slave_argc;
       char *slave_argv[2];
   
                 ox_mpi_slave_init();      ox_mpi_slave_init();
                 slave_argc = 1;      slave_argc = 1;
                 slave_argv[0] = "ox_asir"; slave_argv[1]=0;      slave_argv[0] = "ox_asir"; slave_argv[1]=0;
                 ox_main(argc,argv);      ox_main(argc,argv);
                 exit(0);      exit(0);
         } else    } else
                 ox_mpi_master_init();      ox_mpi_master_init();
 #elif !defined(VISUAL)  #elif !defined(VISUAL) && !defined(__MINGW32__)
         slash = (char *)rindex(argv[0],'/');    slash = (char *)rindex(argv[0],'/');
         if ( slash )    bslash = (char *)rindex(argv[0],'\\');
                 binname = slash+1;    if ( slash )
         else      binname = slash+1;
                 binname = argv[0];    else if ( bslash )
         if ( !strcmp(binname,"ox_asir") ) {      binname = bslash+1;
                 /* never return */    else
                 ox_main(argc,argv);      binname = argv[0];
                 exit(0);    for ( p = binname; *p; p++ )
 #if DO_PLOT      *p = tolower(*p);
         } else if ( !strcmp(binname,"ox_plot") ) {    if ( !strncmp(binname,"ox_asir",strlen("ox_asir")) ) {
                 /* never return */      /* never return */
                 ox_plot_main(argc,argv);      ox_main(argc,argv);
                 exit(0);      exit(0);
   #if defined(DO_PLOT)
     } else if ( !strncmp(binname,"ox_plot",strlen("ox_plot")) ) {
       /* never return */
       ox_plot_main(argc,argv);
       exit(0);
 #endif  #endif
         } else if ( !strcmp(binname,"ox_launch") ) {    } else if ( !strncmp(binname,"ox_launch",strlen("ox_launch")) ) {
                 /* never return */      /* never return */
                 launch_main(argc,argv);      launch_main(argc,argv);
                 exit(0);      exit(0);
         }    }
 #endif  #endif
   
         srandom((int)get_current_time());    srandom((int)get_current_time());
 /*      mt_sgenrand((unsigned long)get_current_time()); */  /*  mt_sgenrand((unsigned long)get_current_time()); */
   
 #if defined(THINK_C)    rtime_init();
         param_init();    env_init();
     endian_init();
     cppname_init();
     process_args(--argc,++argv);
     if (!do_quiet) {
       copyright();
     }
     output_init();
     arf_init();
     nglob_init();
     glob_init();
     sig_init();
     tty_init();
     debug_init();
     pf_init();
     sysf_init();
     parif_init();
     order_init();
     /* XXX set the default ordering */
   #if defined(VISUAL) || defined(__MINGW32__)
     init_socket();
 #endif  #endif
         rtime_init();  
         env_init();  
         endian_init();  
 #if !defined(VISUAL) && !defined(THINK_C)  
         check_key();  
 #endif  
         GC_init();  
         process_args(--argc,++argv);  
 #if PARI  
     risa_pari_init();  
 #endif  
         copyright();  
         output_init();  
         arf_init();  
         nglob_init();  
         glob_init();  
         sig_init();  
         tty_init();  
         debug_init();  
         pf_init();  
         sysf_init();  
         parif_init();  
 #if defined(VISUAL)  
         init_socket();  
 #endif  
 #if defined(UINIT)  #if defined(UINIT)
         reg_sysf();    reg_sysf();
 #endif  #endif
   
 /* if ASIR_CONFIG is set, execute it; else execute .asirrc */    if ( do_file ) {
         if ( ptr = getenv("ASIR_CONFIG") )      asir_infile=NULL;
                 strcpy(ifname,ptr);      loadasirfile(do_filename);
         else {    } else {
 #if defined(THINK_C)      /* the bottom of the input stack */
                 sprintf(ifname,"asirrc");      input_init(stdin,"stdin");
 #else    }
                 homedir = getenv("HOME");  
                 if ( !homedir ) {  
                         char rootname[BUFSIZ];  
   
                         get_rootdir(rootname,sizeof(rootname));    if ( do_asirrc && (ifname = find_asirrc()) ) {
                         homedir = rootname;      if ( !SETJMP(main_env) )
                 }        execasirfile(ifname);
                 sprintf(ifname,"%s/.asirrc",homedir);    }
 #endif  
         }  
   
         if ( do_asirrc && (ifp = fopen(ifname,"r")) ) {    prompt();
                 input_init(ifp,ifname);    while ( 1 ) {
                 if ( !setjmp(env) ) {      if ( SETJMP(main_env) )
                         read_exec_file = 1;        prompt();
                         read_eval_loop();      if ( !do_file ) {
                         read_exec_file = 0;        if ( SETJMP(asir_infile->jmpbuf) )
                 }          prompt();
                 fclose(ifp);        else
         }          asir_infile->ready_for_longjmp = 1;
       }
         if ( do_file )      restore_handler();
                 input_init(in_fp,"stdin");      read_eval_loop();
         else    }
                 input_init(stdin,"stdin");  
         prompt();  
         while ( 1 ) {  
 #if PARI  
                 recover(0);  
                 if ( setjmp(environnement) ) {  
                         avma = top; recover(1);  
                         resetenv("");  
                 }  
 #endif  
                 if ( setjmp(env) )  
                         prompt();  
                 read_eval_loop();  
         }  
 }  }
   
 #if !defined(VISUAL_LIB)  #if !defined(VISUAL_LIB)
 /* a dummy function */  /* a dummy function */
   
 void set_error(code,reasion,action)  void set_error(int code,char *reason,char *action)
 int code;  
 char *reasion,*action;  
 {}  {}
 #endif  #endif
   
   void set_stacksize()
   {
   #if !defined(VISUAL) && !defined(__MINGW32__)
     struct rlimit rlim;
     int c,m;
   
     getrlimit(RLIMIT_STACK,&rlim);
     if ( rlim.rlim_cur < (1<<26) ) {
       rlim.rlim_cur = MIN(1<<26,rlim.rlim_max);
       setrlimit(RLIMIT_STACK,&rlim);
     }
   #endif
   }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.39

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