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

Diff for /OpenXM/src/oxc/sm_ext.c between version 1.8 and 1.9

version 1.8, 2000/12/03 14:32:40 version 1.9, 2000/12/14 01:35:58
Line 1 
Line 1 
 /* -*- mode: C; coding: euc-japan -*- */  /* -*- mode: C; coding: euc-japan -*- */
 /* $OpenXM: OpenXM/src/oxc/sm_ext.c,v 1.7 2000/12/01 01:53:34 ohara Exp $ */  /* $OpenXM: OpenXM/src/oxc/sm_ext.c,v 1.8 2000/12/03 14:32:40 ohara Exp $ */
   
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
Line 196  cmo_error2 *type_checker(cmo *ob, int type)
Line 196  cmo_error2 *type_checker(cmo *ob, int type)
     return NULL;      return NULL;
 }  }
   
 static int sm_control_spawn_main(int argc, cmo *argv[])  int lf_oxc_open()
 {  {
     char *cmd = ((cmo_string *)argv[0])->s;      cmo_int32 *argc = pop();
     int  port = ((cmo_int32 *)argv[1])->i;          if (argc->tag == CMO_INT32 && argc->i == 1) {
     pid_t pid = lf_oxc_open_main(cmd, port);                  return sm_control_spawn();
     if (pid > 0) {          }
         push(new_cmo_int32(pid));          push_error(-1, argc);
         pid_regist(pid);          return -1;
     }  
     return pid;  
 }  }
   
 int lf_oxc_open()  int sm_control_spawn_typecheck(cmo_list *args, cmo_list *ports, cmo_int32 *port, cmo_string *sname)
 {  {
     cmo **argv;          char *cmd = sname->s;
     if (getargs(&argv) != 2 ||  
         type_checker(argv[0], CMO_STRING) != NULL          return args->tag == CMO_LIST
         || type_checker(argv[0], CMO_INT32) != NULL) {                  && list_length(args) > 1
         fprintf(stderr, "oxc: invalid arguments\n");                  && ports->tag == CMO_LIST
         return -1;                  && list_length(ports) > 0
     }                  && port->tag == CMO_INT32
     return sm_control_spawn_main(2, argv);                  && sname->tag == CMO_STRING
                   && cmd != NULL
                   && which(cmd, getenv("PATH")) != NULL;
 }  }
   
 static int sm_control_spawn()  static int sm_control_spawn()
 {  {
     cmo *argv[2];          cmo_list *args    = pop();
     argv[0] = pop();          cmo_list *ports   = list_first_cmo(args);
     argv[1] = pop();          cmo_int32 *port   = list_first_cmo(ports);
           cmo_string *sname = list_nth(args, 1);
           pid_t pid;
   
     if (type_checker(argv[0], CMO_STRING) != NULL          if (sm_control_spawn_typecheck(args, ports, port, sname)) {
         || type_checker(argv[0], CMO_INT32) != NULL) {                  pid = lf_oxc_open_main(sname->s, port->i);
         fprintf(stderr, "oxc: invalid arguments\n");                  if (pid > 0) {
         return -1;                          push(new_cmo_int32(pid));
     }                          pid_regist(pid);
     return sm_control_spawn_main(2, argv);                          fprintf(stderr, "oxc: spawns %s\n", sname->s);
                           return pid;
                   }
           }
           push_error(-1, args);
           return 0;
   
 }  }
   
 void sm_mathcap()  void sm_mathcap()

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

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