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

Diff for /OpenXM_contrib2/asir2000/parse/load.c between version 1.15 and 1.25

version 1.15, 2005/03/24 12:46:45 version 1.25, 2014/04/02 22:08:29
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/load.c,v 1.14 2004/03/18 01:59:41 noro Exp $   * $OpenXM: OpenXM_contrib2/asir2000/parse/load.c,v 1.24 2014/03/30 10:48:16 ohara Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 76 
Line 76 
   
 #ifdef MALLOC  #ifdef MALLOC
 #undef MALLOC  #undef MALLOC
 #define MALLOC(x) GC_malloc((x)+4)  #define MALLOC(x) Risa_GC_malloc((x)+4)
 #endif  #endif
   
 char **ASIRLOADPATH;  char **ASIRLOADPATH;
Line 90  char **ASIRLOADPATH;
Line 90  char **ASIRLOADPATH;
 #endif  #endif
   
 #ifndef ASIR_LIBDIR  #ifndef ASIR_LIBDIR
 #define ASIR_LIBDIR "."  #define ASIR_LIBDIR "/usr/local/lib/asir"
 #endif  #endif
   #ifndef ASIR_CONTRIB_DIR
   #define ASIR_CONTRIB_DIR "/usr/local/lib/asir-contrib"
   #endif
   
 char *getenv();  char *getenv();
 void Pget_rootdir();  void Pget_rootdir();
 char *search_executable(char *name);  char *search_executable(char *name);
   
 extern char *asir_libdir;  extern char *asir_libdir;
   extern char *asir_contrib_dir;
   extern char *asir_private_dir;
 extern char *asir_pager;  extern char *asir_pager;
 extern int read_exec_file;  
 extern int main_parser;  extern int main_parser;
 extern JMP_BUF exec_env;  extern JMP_BUF exec_env;
   
Line 140  void env_init() {
Line 144  void env_init() {
         char *getenv();          char *getenv();
         char *oxhome;          char *oxhome;
         char rootname[BUFSIZ];          char rootname[BUFSIZ];
       size_t len;
   
           if ( oxhome = getenv("OpenXM_HOME") ) {
                   len = strlen(oxhome);
           }else {
   #if defined(VISUAL)
                   get_rootdir(rootname,sizeof(rootname));
                   len = strlen(rootname);
                   oxhome = rootname;
   #endif
           }
   
         if ( !(asir_libdir = getenv("ASIR_LIBDIR")) ) {          if ( !(asir_libdir = getenv("ASIR_LIBDIR")) ) {
                 if ( oxhome = getenv("OpenXM_HOME") ) {                  if ( oxhome ) {
                         asir_libdir = (char *)malloc(strlen(oxhome)+strlen("/lib/asir")+1);                          asir_libdir = (char *)malloc(len+strlen("/lib/asir")+1);
                         sprintf(asir_libdir,"%s/lib/asir",oxhome);                          sprintf(asir_libdir,"%s/lib/asir",oxhome);
                 } else {                  } else {
 #if defined(VISUAL)  
                         get_rootdir(rootname,sizeof(rootname));  
                         asir_libdir = (char *)malloc(strlen(rootname)+strlen("/lib")+1);  
                         sprintf(asir_libdir,"%s/lib",rootname);  
 #else  
                         asir_libdir = (char *)malloc(strlen(ASIR_LIBDIR)+1);                          asir_libdir = (char *)malloc(strlen(ASIR_LIBDIR)+1);
                         strcpy(asir_libdir,ASIR_LIBDIR);                          strcpy(asir_libdir,ASIR_LIBDIR);
 #endif  
                 }                  }
         }          }
   
           if ( !(asir_contrib_dir = getenv("ASIR_CONTRIB_DIR")) ) {
                   if ( oxhome ) {
                           asir_contrib_dir = (char *)malloc(len+strlen("/lib/asir-contrib")+1);
                           sprintf(asir_contrib_dir,"%s/lib/asir-contrib",oxhome);
                   } else {
                           asir_contrib_dir = (char *)malloc(strlen(ASIR_CONTRIB_DIR)+1);
                           strcpy(asir_contrib_dir,ASIR_CONTRIB_DIR);
                   }
           }
   
       asir_private_dir = NULL;
   #if defined(VISUAL)
       if ( e = getenv("APPDATA") ) {
           asir_private_dir = (char *)malloc(strlen(e)+strlen("/asir/lib/asir-contrib")+1);
           sprintf(asir_private_dir,"%s/asir/lib/asir-contrib",e);
       }
   #endif
   
         if ( !(asir_pager = getenv("PAGER")) ) {          if ( !(asir_pager = getenv("PAGER")) ) {
                 japanese = 0;                  japanese = 0;
                 if ( (e = getenv("LANGUAGE")) &&                  if ( (e = getenv("LANGUAGE")) &&
Line 180  void env_init() {
Line 208  void env_init() {
                         if ( !p )                          if ( !p )
                                 break;                                  break;
                 }                  }
                 i += 2;                  i += 4;
         ASIRLOADPATH=(char **)MALLOC(sizeof(char *)*i);          ASIRLOADPATH=(char **)MALLOC(sizeof(char *)*i);
                 for ( l = 0; l<i; l++) ASIRLOADPATH[l] = NULL;                  for ( l = 0; l<i; l++) ASIRLOADPATH[l] = NULL;
                 e = getenv("ASIRLOADPATH");                  e = getenv("ASIRLOADPATH");
Line 193  void env_init() {
Line 221  void env_init() {
                         if ( !p )                          if ( !p )
                                 break;                                  break;
                 }                  }
     }      }else{
             ASIRLOADPATH=(char **)MALLOC(sizeof(char *)*3);
             ASIRLOADPATH[0] = NULL;
           }
   
         for ( i = 0; ASIRLOADPATH[i]; i++ );          for ( i = 0; ASIRLOADPATH[i]; i++ );
         ASIRLOADPATH[i] = asir_libdir;          if (asir_private_dir) ASIRLOADPATH[i++] = asir_private_dir;
           if (asir_contrib_dir) ASIRLOADPATH[i++] = asir_contrib_dir;
           if (asir_libdir) ASIRLOADPATH[i++] = asir_libdir;
           ASIRLOADPATH[i] = NULL;
 }  }
   
   #if defined(VISUAL)
   #define R_OK 4
   #endif
   
 void searchasirpath(char *name,char **pathp)  void searchasirpath(char *name,char **pathp)
 {  {
         char **p;          char **p;
         char *q;          char *q;
         int l;          size_t l;
 #if !defined(VISUAL)          int ret;
         struct stat sbuf;          struct stat sbuf;
   
         if ( (name[0] == '/') || ( name[0] == '.') || strchr(name,':')          if ( (name[0] == '/') || ( name[0] == '.') || strchr(name,':')
                 || !ASIRLOADPATH[0] ) {                  || !ASIRLOADPATH[0] ) {
                 if ( access(name,R_OK) >= 0 ) {                  if ( access(name,R_OK) >= 0 ) {
                         stat(name,&sbuf);                          ret = stat(name,&sbuf);
                         if ( (sbuf.st_mode & S_IFMT) != S_IFDIR )                          if ( ret == 0 && (sbuf.st_mode & S_IFMT) != S_IFDIR )
                                 *pathp = name;                                  *pathp = name;
                         else                          else
                                 *pathp = 0;                                  *pathp = 0;
Line 221  void searchasirpath(char *name,char **pathp)
Line 260  void searchasirpath(char *name,char **pathp)
                         l = strlen(*p)+strlen(name)+2;                          l = strlen(*p)+strlen(name)+2;
                         q = (char *)ALLOCA(l); sprintf(q,"%s/%s",*p,name);                          q = (char *)ALLOCA(l); sprintf(q,"%s/%s",*p,name);
                         if ( access(q,R_OK) >= 0 ) {                          if ( access(q,R_OK) >= 0 ) {
                                 stat(q,&sbuf);                                  ret = stat(q,&sbuf);
                                 if ( (sbuf.st_mode & S_IFMT) != S_IFDIR ) {                                  if ( ret == 0 && (sbuf.st_mode & S_IFMT) != S_IFDIR ) {
                                         *pathp = (char *)MALLOC(l); strcpy(*pathp,q);                                          *pathp = (char *)MALLOC(l); strcpy(*pathp,q);
                                         return;                                          return;
                                 }                                  }
Line 230  void searchasirpath(char *name,char **pathp)
Line 269  void searchasirpath(char *name,char **pathp)
                 }                  }
                 *pathp = 0;                  *pathp = 0;
         }          }
 #else  
         if ( (name[0] == '/') || ( name[0] == '.') || strchr(name,':')  
                 || !ASIRLOADPATH[0] )  
                 *pathp = name;  
         else {  
                 for ( p = ASIRLOADPATH; *p; p++ ) {  
                         l = strlen(*p)+strlen(name)+2;  
                         q = (char *)ALLOCA(l); sprintf(q,"%s/%s",*p,name);  
                         if ( access(q,04) >= 0 ) {  
                                 *pathp = (char *)MALLOC(l); strcpy(*pathp,q);  
                                 return;  
                         }  
                 }  
                 *pathp = 0;  
         }  
 #endif  
 }  }
   
 #define DELIM '/'  #define DELIM '/'
Line 358  void loadasirfile(char *name0)
Line 381  void loadasirfile(char *name0)
 void execasirfile(char *name)  void execasirfile(char *name)
 {  {
         loadasirfile(name);          loadasirfile(name);
         read_exec_file = 1;          if ( !SETJMP(asir_infile->jmpbuf) ) {
         read_eval_loop();                  asir_infile->ready_for_longjmp = 1;
         read_exec_file = 0;  
 }  
   
 void load_and_execfile(char *name)  
 {  
         FILE *fp;  
         INFILE save_asir_infile;  
         int save_prresult;  
         extern prresult;  
   
         savepvs();  
         save_asir_infile = asir_infile;  
         save_prresult = prresult;  
         fp = fopen(name,"rb");  
         input_init(fp,name);  
         if ( !SETJMP(exec_env) ) {  
                 /* XXX : information for asir_teriminate() */  
                 read_exec_file = 2;  
                 read_eval_loop();                  read_eval_loop();
                 read_exec_file = 0;  
         }          }
         fclose(fp);          closecurrentinput();
         restorepvs();  
         asir_infile = save_asir_infile;  
         prresult = save_prresult;  
 }  }
   
 static NODE objfile = 0;  static NODE objfile = 0;

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

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