[BACK]Return to ext.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Kan

Diff for /OpenXM/src/kan96xx/Kan/ext.c between version 1.35 and 1.49

version 1.35, 2005/06/09 05:46:57 version 1.49, 2018/09/07 00:09:32
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/kan96xx/Kan/ext.c,v 1.34 2004/12/21 03:25:04 takayama Exp $ */  /* $OpenXM: OpenXM/src/kan96xx/Kan/ext.c,v 1.48 2016/03/31 05:27:34 takayama Exp $ */
 #include <stdio.h>  #include <stdio.h>
   #include <string.h>
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/stat.h>  #include <sys/stat.h>
 #include <fcntl.h>  #include <fcntl.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <unistd.h>  #include <unistd.h>
 #include <sys/wait.h>  #include <sys/wait.h>
   #include <sys/time.h>
   #include <time.h>
 #include "datatype.h"  #include "datatype.h"
 #include "stackm.h"  #include "stackm.h"
 #include "extern.h"  #include "extern.h"
Line 17 
Line 20 
 #include <errno.h>  #include <errno.h>
 #include <regex.h>  #include <regex.h>
 #include "ox_pathfinder.h"  #include "ox_pathfinder.h"
   #include "mysig.h"
   
 extern int Quiet;  extern int Quiet;
 extern char **environ;  extern char **environ;
   extern char *MsgSourceTrace;
   
 #define MYCP_SIZE 100  #define MYCP_SIZE 100
 static int Mychildren[MYCP_SIZE];  static int Mychildren[MYCP_SIZE];
Line 29  static void mywait() {
Line 34  static void mywait() {
   int status;    int status;
   int pid;    int pid;
   int i,j;    int i,j;
   /* signal(SIGCHLD,SIG_IGN); */    /* mysignal(SIGCHLD,SIG_IGN); */
   pid = wait(&status);    pid = wait(&status);
   if ((!Quiet) && (Verbose_mywait)) fprintf(stderr,"Child process %d is exiting.\n",pid);    if ((!Quiet) && (Verbose_mywait)) fprintf(stderr,"Child process %d is exiting.\n",pid);
   for (i=0; i<Mycp; i++) {    for (i=0; i<Mycp; i++) {
Line 40  static void mywait() {
Line 45  static void mywait() {
       if (Mycp > 0) Mycp--;        if (Mycp > 0) Mycp--;
     }      }
   }    }
   signal(SIGCHLD,mywait);    mysignal(SIGCHLD,mywait);
 }  }
   
 #define SIZE_OF_ENVSTACK 5  #define SIZE_OF_ENVSTACK 5
Line 94  struct object Kextension(struct object obj)
Line 99  struct object Kextension(struct object obj)
 {  {
   char *key;    char *key;
   int size;    int size;
   struct object keyo;    struct object keyo = OINIT;
   struct object rob = NullObject;    struct object rob = NullObject;
   struct object obj1,obj2,obj3,obj4;    struct object obj1 = OINIT;
     struct object obj2 = OINIT;
     struct object obj3 = OINIT;
     struct object obj4 = OINIT;
   int m,i,pid, uid;    int m,i,pid, uid;
   int argListc, fdListc;    int argListc, fdListc;
   char *abc;    char *abc;
   char *abc2;    char *abc2;
   extern struct context *CurrentContextp;    extern struct context *CurrentContextp;
     struct timeval tm;
 #if (__CYGWIN__)  #if (__CYGWIN__)
   extern sigjmp_buf EnvOfStackMachine;    extern sigjmp_buf EnvOfStackMachine;
 #else  #else
Line 135  struct object Kextension(struct object obj)
Line 144  struct object Kextension(struct object obj)
     pushEnv(EnvOfStackMachine);      pushEnv(EnvOfStackMachine);
     m = KSexecuteString(obj1.lc.str);      m = KSexecuteString(obj1.lc.str);
     /* This is critical area. If you catch ctrl-c here, program crashes. */      /* This is critical area. If you catch ctrl-c here, program crashes. */
     oldsig = signal(SIGINT,SIG_IGN);      oldsig = mysignal(SIGINT,SIG_IGN);
     popEnv(EnvOfStackMachine);      popEnv(EnvOfStackMachine);
     /* OK! We passed the critical area. */      /* OK! We passed the critical area. */
     signal(SIGINT,oldsig);      mysignal(SIGINT,oldsig);
     rob = KpoInteger(m);      rob = KpoInteger(m);
   }else if (strcmp(key,"getpid") == 0) {    }else if (strcmp(key,"getpid") == 0) {
     rob = KpoInteger( (int) getpid() );      rob = KpoInteger( (int) getpid() );
Line 172  struct object Kextension(struct object obj)
Line 181  struct object Kextension(struct object obj)
         else {          else {
         system(KopString(getoa(obj,1))); exit(0);          system(KopString(getoa(obj,1))); exit(0);
         } */          } */
     }else if (strcmp(key,"date")==0) {
       if (size != 1) errorKan1("%s\n","[(date)] extension.");
       gettimeofday(&tm,NULL);
       rob = KpoString(ctime((time_t *)&(tm.tv_sec)));
   }else if (strcmp(key,"defaultPolyRing")==0) {    }else if (strcmp(key,"defaultPolyRing")==0) {
     if (size != 2) errorKan1("%s\n","[(defaultPolyRing) n] extension.");      if (size != 2) errorKan1("%s\n","[(defaultPolyRing) n] extension.");
     rob = KdefaultPolyRing(getoa(obj,1));      rob = KdefaultPolyRing(getoa(obj,1));
Line 243  struct object Kextension(struct object obj)
Line 256  struct object Kextension(struct object obj)
       if (m&2) {        if (m&2) {
          /* Do not call singal to turn around a trouble on cygwin. BUG. */           /* Do not call singal to turn around a trouble on cygwin. BUG. */
       }else{        }else{
          signal(SIGCHLD,mywait); /* to kill Zombie */           mysignal(SIGCHLD,mywait); /* to kill Zombie */
       }        }
       Mychildren[Mycp++] = pid;        Mychildren[Mycp++] = pid;
       if (Mycp >= MYCP_SIZE-1) {        if (Mycp >= MYCP_SIZE-1) {
Line 315  struct object Kextension(struct object obj)
Line 328  struct object Kextension(struct object obj)
   }else if (strcmp(key,"getAttributeList")==0) {    }else if (strcmp(key,"getAttributeList")==0) {
     if (size != 2) errorKan1("%s\n","[(getAttributeList) ob] extension rob");      if (size != 2) errorKan1("%s\n","[(getAttributeList) ob] extension rob");
     rob = KgetAttributeList(getoa(obj,1));      rob = KgetAttributeList(getoa(obj,1));
   }else if (strcmp(key,"putAttributeList")==0) {    }else if (strcmp(key,"setAttributeList")==0) {
     if (size != 3) errorKan1("%s\n","[(putAttributeList) ob attrlist] extension rob");      if (size != 3) errorKan1("%s\n","[(setAttributeList) ob attrlist] extension rob");
     rob = KputAttributeList(getoa(obj,1), getoa(obj,2));      rob = KsetAttributeList(getoa(obj,1), getoa(obj,2));
   }else if (strcmp(key,"getAttribute")==0) {    }else if (strcmp(key,"getAttribute")==0) {
     if (size != 3) errorKan1("%s\n","[(getAttribute) ob key] extension rob");      if (size != 3) errorKan1("%s\n","[(getAttribute) ob key] extension rob");
     rob = KgetAttribute(getoa(obj,1),getoa(obj,2));      rob = KgetAttribute(getoa(obj,1),getoa(obj,2));
   }else if (strcmp(key,"putAttribute")==0) {    }else if (strcmp(key,"setAttribute")==0) {
     if (size != 4) errorKan1("%s\n","[(putAttributeList) ob key value] extension rob");      if (size != 4) errorKan1("%s\n","[(setAttributeList) ob key value] extension rob");
     rob = KputAttribute(getoa(obj,1), getoa(obj,2),getoa(obj,3));      rob = KsetAttribute(getoa(obj,1), getoa(obj,2),getoa(obj,3));
   }else if (strcmp(key,"hilbert")==0) {    }else if (strcmp(key,"hilbert")==0) {
     if (size != 3) errorKan1("%s\n","[(hilbert) obgb obvlist] extension.");      if (size != 3) errorKan1("%s\n","[(hilbert) obgb obvlist] extension.");
     rob = hilberto(getoa(obj,1),getoa(obj,2));      rob = hilberto(getoa(obj,1),getoa(obj,2));
Line 382  struct object Kextension(struct object obj)
Line 395  struct object Kextension(struct object obj)
     if (obj1.tag != Sdollar) errorKan1("%s\n","[(getServerEnv) serverName] extension.");      if (obj1.tag != Sdollar) errorKan1("%s\n","[(getServerEnv) serverName] extension.");
     {      {
       char **se; int ii; int nn;        char **se; int ii; int nn;
             char **getServerEnv(char *);
       se = getServerEnv(KopString(obj1));        se = getServerEnv(KopString(obj1));
       if (se == NULL) {        if (se == NULL) {
         debugServerEnv(KopString(obj1));          debugServerEnv(KopString(obj1));
Line 454  struct object Kextension(struct object obj)
Line 468  struct object Kextension(struct object obj)
         obj2 = getoa(obj,2);          obj2 = getoa(obj,2);
     rob = Kjoin(obj1,obj2);      rob = Kjoin(obj1,obj2);
   }else if (strcmp(key,"ostype")==0) {    }else if (strcmp(key,"ostype")==0) {
     rob = newObjectArray(1);      /* Hard encode the OS type.  cpp -dM /dev/null */
     /* Hard encode the OS type. */  
 #if defined(__CYGWIN__)  #if defined(__CYGWIN__)
       rob = newObjectArray(1);
     putoa(rob,0,KpoString("windows"));      putoa(rob,0,KpoString("windows"));
 #else  #else
       rob = newObjectArray(2);
     putoa(rob,0,KpoString("unix"));      putoa(rob,0,KpoString("unix"));
   #if defined(__APPLE__)
       putoa(rob,1,KpoString("mac"));
   #else
       putoa(rob,1,KpoString("generic"));
 #endif  #endif
   #endif
     }else if (strcmp(key,"stringToArgv")==0) {
       if (size != 2) errorKan1("%s\n","[(stringToArgv) a ] extension b");
           obj1 = getoa(obj,1);
           if (obj1.tag != Sdollar) errorKan1("%s\n","[(stringToArgv) a ] extension b,  a must be a string.");
       rob = KstringToArgv(obj1);
     }else if (strcmp(key,"stringToArgv2")==0) {
       if (size != 3) errorKan1("%s\n","[(stringToArgv2) str separator] extension b");
           obj1 = getoa(obj,1);
           obj2 = getoa(obj,2);
       rob = KstringToArgv2(obj1,obj2);
   }else if (strcmp(key,"traceClearStack")==0) {    }else if (strcmp(key,"traceClearStack")==0) {
     traceClearStack();      traceClearStack();
     rob = NullObject;      rob = NullObject;
Line 472  struct object Kextension(struct object obj)
Line 502  struct object Kextension(struct object obj)
     }else{      }else{
       rob = NullObject;        rob = NullObject;
     }      }
     }else if (strcmp(key,"traceShowScannerBuf")==0) {
       char *ssst;
       ssst = MsgSourceTrace;
       if (ssst != NULL) {
         rob = KpoString(ssst);
       }else{
         rob = NullObject;
       }
   }else if (strcmp(key,"regexec")==0) {    }else if (strcmp(key,"regexec")==0) {
     if ((size != 3) && (size != 4)) errorKan1("%s\n","[(regexec) reg strArray flag(optional)] extension b");      if ((size != 3) && (size != 4)) errorKan1("%s\n","[(regexec) reg strArray flag(optional)] extension b");
     obj1 = getoa(obj,1);      obj1 = getoa(obj,1);
Line 486  struct object Kextension(struct object obj)
Line 524  struct object Kextension(struct object obj)
     obj1 = getoa(obj,1);      obj1 = getoa(obj,1);
     if (obj1.tag != Sdollar) errorKan1("%s\n","unlink, the first argument should be a string (filename).");      if (obj1.tag != Sdollar) errorKan1("%s\n","unlink, the first argument should be a string (filename).");
     rob = KpoInteger(oxDeleteFile(KopString(obj1)));      rob = KpoInteger(oxDeleteFile(KopString(obj1)));
     }else if (strcmp(key,"quiet")==0) {
       obj1 = getoa(obj,1);
       if (obj1.tag != Sinteger) errorKan1("%s\n","quiet, the first argument should be an integer.");
       Quiet = KopInteger(obj1);
       rob = obj1;
   }    }
 #include "plugin.hh"  #include "plugin.hh"
 #include "Kclass/tree.hh"  #include "Kclass/tree.hh"
Line 500  struct object KregionMatches(struct object sobj, struc
Line 543  struct object KregionMatches(struct object sobj, struc
   
 struct object KregionMatches(struct object sobj, struct object keyArray)  struct object KregionMatches(struct object sobj, struct object keyArray)
 {  {
   struct object rob;    struct object rob = OINIT;
   int n,i,j,m,keyn;    int n,i,j,m,keyn;
   char *s,*key;    char *s,*key;
   rob = newObjectArray(3);    rob = newObjectArray(3);
Line 534  static struct object oregexec(struct object oregex,str
Line 577  static struct object oregexec(struct object oregex,str
 }  }
   
 static struct object oregexec(struct object oregex,struct object ostrArray,struct object oflag) {  static struct object oregexec(struct object oregex,struct object ostrArray,struct object oflag) {
   struct object rob;    struct object rob = OINIT;
   struct object ob;    struct object ob = OINIT;
   int n,i,j,m,keyn,cflag,eflag,er;    int n,i,j,m,keyn,cflag,eflag,er;
   char *regex;    char *regex;
   regex_t preg;    regex_t preg;

Legend:
Removed from v.1.35  
changed lines
  Added in v.1.49

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