[BACK]Return to d.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / k097

Diff for /OpenXM/src/k097/d.c between version 1.9 and 1.15

version 1.9, 2003/07/13 08:18:27 version 1.15, 2004/06/30 08:00:18
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/k097/d.c,v 1.8 2002/02/24 10:27:21 takayama Exp $ */  /* $OpenXM: OpenXM/src/k097/d.c,v 1.14 2004/06/16 02:40:10 takayama Exp $ */
 /* simple.c,  1996, 1/1 --- 1/5 */  /* simple.c,  1996, 1/1 --- 1/5 */
 #include <stdio.h>  #include <stdio.h>
 #include <ctype.h>  #include <ctype.h>
Line 8 
Line 8 
 #include <sys/stat.h>  #include <sys/stat.h>
 #include "d.h"  #include "d.h"
 #include "simple.tab.h"  #include "simple.tab.h"
   #include "ox_pathfinder.h"
   
 #if defined(__CYGWIN__)  #if defined(__CYGWIN__)
 #define JMP_BUF sigjmp_buf  #define JMP_BUF sigjmp_buf
Line 1057  void loadFileWithCpp(objectp op)
Line 1058  void loadFileWithCpp(objectp op)
   char tmpName[1024];    char tmpName[1024];
   int pid;    int pid;
   objectp ob;    objectp ob;
     char *outfile;
     char *cpp;
     char *argv[10];
     int n;
     char *sfile = NULL;
   if (op->tag != Sstring) {    if (op->tag != Sstring) {
     fprintf(stderr,"File name must be given as an argment of load.\n");      fprintf(stderr,"File name must be given as an argment of load.\n");
     return;      return;
Line 1067  void loadFileWithCpp(objectp op)
Line 1073  void loadFileWithCpp(objectp op)
     fprintf(stderr,"Too long file name.\n");      fprintf(stderr,"Too long file name.\n");
     return;      return;
   }    }
   system("/bin/rm -f k00.cppload.tmp");    /* Use gcc -v to know what symbols are defined.
   /* Use gcc -v to know what symbols are defined. */           if  defined(linux) || defined(__linux__)
 #if defined(linux) || defined(__linux__)           Removed old codes. */
   strcpy(fname,"/lib/cpp -P -lang-c++ <");  
     sfile = op->lc.str;
     cpp = getCppPath();
     if (cpp == NULL) {
           fprintf(stderr,"cpp is not found.\n"); return;
     }
     /* printf("%s\n",cpp); */
     outfile = generateTMPfileName("k0-cpp");
     if (outfile == NULL) {
           fprintf(stderr,"Failed to generate a temporary file name.\n"); return;
     }
     /* printf("%s\n",outfile); */
     if ((char *)strstr(cpp,"/asir/bin/cpp.exe") == NULL) {
   #if defined(__APPLE_CC__)
       sprintf(tmpName,"gcc -E -P %s | sed -e 's/^#.*//g' >%s",sfile,outfile);
 #else  #else
   strcpy(fname,"cpp -P -lang-c++ <");          argv[0] = cpp;
           argv[1] = "-P";
           argv[2] = "-lang-c++";
           argv[3] = sfile;
           argv[4] = outfile;
           argv[5] = NULL;
 #endif  #endif
   strcat(fname,op->lc.str);    }else{
   strcat(fname,"  >k00.cppload.tmp");          argv[0] = cpp;
   system(fname);          argv[1] = "-P";
           argv[2] = cygwinPathToWinPath(sfile);
           argv[3] = cygwinPathToWinPath(outfile);
           argv[4] = NULL;
     }
   #if defined(__APPLE_CC__)
     system(tmpName);
   #else
     n=oxForkExecBlocked(argv);
   #endif
   
   ob = newObject_d();    ob = newObject_d();
   ob->tag = Sstring;    ob->tag = Sstring;
   ob->lc.str = "k00.cppload.tmp";    ob->lc.str = outfile;
   loadFile(ob);    loadFile(ob);
   system("/bin/rm -f k00.cppload.tmp");    unlink(outfile);
 }  }
   
 void showStringBuff(objectp op)  void showStringBuff(objectp op)
Line 1114  void showStringBuff(objectp op)
Line 1149  void showStringBuff(objectp op)
 }  }
   
   
 /* Aux-functions for getLOAD_K_PATH(); */  
 static int getOStypei();  
 static char *getOStypes();  
 static char *addSlash();  
 static char *getOpenXM_HOME();  
 static char *get_k0_lib_path();  
 static void msg_get_home(int c,char *s);  
 static int getFileSize(char *s);  
   
 static int Verbose_get_home = 0;  
   
 #define nomemory(a) {fprintf(stderr,"(%d) no more memory.\n",a);exit(10);}  
   
 static int getOStypei() {  
   /*  
      0  unix  
      1  windows-cygwin  
      2  windows-cygwin-on-X  
      3  windows-native  
   */  
   int ostype;  
   char *s,*s2,*s3;  
 #if defined(__CYGWIN__)  
   ostype = 1;  
 #else  
   ostype = 0;  
 #endif  
   if (ostype == 0) return ostype;  
   /* Heuristic method */  
   s = (char *)getenv("WINDOWID");  
   if (s != NULL) {  
     return 2;  
   }  
   s = (char *)getenv("OSTYPE");  
   s2 = (char *)getenv("MACHTYPE");  
   s3 = (char *)getenv("PWD");  
   if ((s != NULL) || (s2 != NULL) || (s3 != NULL)) {  
     return 1;  
   }  
   return 3;  
 }  
   
 static char *getOStypes() {  
   int ostype;  
   ostype = getOStypei();  
   
   if (ostype == 1) {  
     return("Windows-cygwin");  
   }else if (ostype == 2) {  
     return("Windows-cygwin-on-X");  
   }else if (ostype == 3) {  
     return("Windows-native");  
   }else{  
     return("unix");  
   }  
 }  
   
 static int getFileSize(char *s) {  
    struct stat buf;  
    int m;  
    if (s == NULL) return -1;  
    m = stat(s,&buf);  
    if (m == -1) {  
      return -1;  
       /* fail */  
    }else{  
       /* success */  
      return ((int) buf.st_size);  
    }  
 }  
   
 static char *addSlash(char *p) {  
   char *p2;  
    if ((strlen(p) == 0) || (p == NULL)) return(p);  
     if (p[strlen(p)-1] == '/') return(p);  
     /* Add / */  
     p2 = (char *) GC_malloc(sizeof(char)*(strlen(p)+3));  
     if (p2 == NULL) { fprintf(stderr,"No more memory.\n"); exit(10); }  
     strcpy(p2,p); strcat(p2,"/");  
     return(p2);  
   
 }  
   
 static void msg_get_home(int t,char *s) {  
   extern int Verbose_get_home;  
   if (!Verbose_get_home) return;  
   if (t == 1) {  
     fprintf(stderr,"getOpenXM_HOME(): ");  
   }else if (t == 2) {  
     fprintf(stderr,"getServerEnv(): ");  
   }else if (t == 3) {  
     fprintf(stderr,"getOXenv(): ");  
   }else if (t == 4) {  
     fprintf(stderr,"for_cmd(): ");  
   }else{  
     fprintf(stderr,"getting path...: ");  
   }  
   if (s != NULL) {  
     fprintf(stderr,"%s\n",s);  
   }else{  
     fprintf(stderr," --NULL-- \n");  
   }  
 }  
   
 char *getOpenXM_HOME() {  
   char *p;  
   char *h;  
   p = getOStypes();  
   msg_get_home(1,p);  
   
   p = (char *) getenv("OpenXM_HOME");  
   if (getFileSize(p) != -1) return addSlash(p);  
   msg_get_home(1,"OpenXM_HOME is not found.");  
   
   p = (char *) getenv("OPENXM_HOME");  
   if (getFileSize(p) != -1) return addSlash(p);  
   msg_get_home(1,"OPENXM_HOME is not found.");  
   
   if (getOStypei() == 3) { /* cygwin-native */  
     p = (char *) getenv("OpenXM_HOME_WIN");  
     if (getFileSize(p) != -1) return addSlash(p);  
     msg_get_home(1,"OpenXM_HOME_WIN is not found.");  
   
     p = (char *) getenv("OPENXMHOMEWIN");  
     if (getFileSize(p) != -1) return addSlash(p);  
     msg_get_home(1,"OPENXMHOMEWIN is not found.");  
   }  
   
   /* Try to find default directories */  
   h = (char *)getenv("HOME");  
   if (h != NULL) {  
     p = (char *)GC_malloc(strlen(h)+100);  
     if (p == NULL) {  
       fprintf(stderr,"No more memory.\n"); exit(100);  
     }  
     strcat(h,"/OpenXM");  
     p = h;  
     if (getFileSize(p) != -1) return addSlash(p);  
     msg_get_home(1,"OpenXM is not found under the home directory.");  
   }  
   
   if (getOStypei() != 3) {  
     p = "/usr/local/OpenXM";  
   }else{  
     p = "/cygdrive/c/usr/local/OpenXM";  
   }  
   if (getFileSize(p) != -1) return addSlash(p);  
   msg_get_home(1,"OpenXM is not found under /usr/local");  
   
   if (getOStypei() != 0) {  
     p = "/cygdrive/c/OpenXM";  
     if (getFileSize(p) != -1) return addSlash(p);  
     msg_get_home(1,"OpenXM is not found under c:\\");  
   
     p = "/cygdrive/c/OpenXM-win";  
     if (getFileSize(p) != -1) return addSlash(p);  
     msg_get_home(1,"OpenXM-win is not found under c:\\");  
   
     p = "/cygdrive/c/Program Files/OpenXM";  
     if (getFileSize(p) != -1) return addSlash(p);  
     msg_get_home(1,"OpenXM is not found under c:\\Program Files");  
   
     p = "/cygdrive/c/Program Files/OpenXM-win";  
     if (getFileSize(p) != -1) return addSlash(p);  
     msg_get_home(1,"OpenXM-win is not found under c:\\Program Files");  
   
   }  
   
   msg_get_home(1,"Giving up!");  
   return NULL;  
   
 }  
   
 static char *get_k0_lib_path() {  
   char *oxhome;  
   char *p;  
   
   
   p = (char *)getenv("LOAD_K_PATH");  
   if (p != NULL) {  
     if (getFileSize(p) != -1) return addSlash(p);  
     msg_get_home(1,"LOAD_K0_PATH is not found.");  
   }  
   
   oxhome = getOpenXM_HOME();  
   if (oxhome == NULL) return (char *)NULL;  
   p = (char *) GC_malloc(strlen(oxhome)+100);  
   if (p == NULL) {fprintf(stderr,"No more memory.\n"); exit(100);}  
   
   strcpy(p,oxhome);  
   strcat(p,"lib/k097");  
   if (getFileSize(p) != -1) return addSlash(p);  
   msg_get_home(1,oxhome);  
   msg_get_home(1,"     is found, but ");  
   msg_get_home(1,p);  
   msg_get_home(1,"     is not found.");  
   
   msg_get_home(1,"Giving up!");  
   return NULL;  
 }  
   
   
 char *getLOAD_K_PATH() {  char *getLOAD_K_PATH() {
   char *p;    return getLOAD_K_PATH2();
   p = get_k0_lib_path();  
   if (p == NULL) {  
     return("/usr/local/lib/kxx97/yacc/");  
   }else{  
         return p;  
   }  
 }  }

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

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