home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1995 April / Internet Tools.iso / osi / isode / vmsisode / vmsisode80_tar.Z / vmsisode80_tar / sockit / source / popen.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-11-30  |  1.9 KB  |  96 lines

  1. #include <stdio.h>
  2. #include <ssdef.h>
  3. #include <syscall.h>
  4.  
  5. struct descriptor{
  6.   int size;
  7.   char *ptr;
  8. };
  9.  
  10. static char ptype[1];
  11. static char pcommand[256];
  12.  
  13. FILE *popen(command,type)
  14. char *command,*type;
  15. {
  16.    strcpy(pcommand,command);
  17.    strncpy(ptype,type,1);
  18.  
  19.    if (*type == 'r') {
  20.    sys(command,0,"tmp:si_12345.dat");
  21.    return(fopen("tmp:si_12345.dat","r"));
  22.    }
  23.    else {
  24.    strcpy(pcommand,command);
  25.    strncpy(ptype,type,1);
  26.    return(fopen("tmp:si_12345.dat","w"));
  27.    }
  28. }
  29.  
  30. pclose(stream)
  31. FILE *stream;
  32. {
  33.    if (*ptype == 'r') {
  34.    fclose(stream);
  35.    delete("tmp:si_12345.dat");
  36.    }
  37.    else {
  38.    fclose(stream);
  39.    printf("Executing :%s:\n",pcommand);
  40.    sys(pcommand,"tmp:si_12345.dat",0);
  41. /*   delete("tmp:si_12345.dat");*/
  42.    }
  43. }
  44.  
  45. int sys(cmd,sysinput,sysoutput)
  46. char *cmd,*sysinput,*sysoutput;
  47. {
  48.    struct descriptor d,sysi,syso,*in,*out;
  49.    d.size = strlen(cmd);
  50.    d.ptr  = cmd;
  51.    if (sysinput == 0) in = 0;
  52.    else {
  53.       in = &sysi;
  54.       sysi.size = strlen(sysinput);
  55.       sysi.ptr  = sysinput;
  56.     }
  57.    if (sysoutput == 0) out = 0;
  58.    else {
  59.       out = &syso;
  60.       syso.size = strlen(sysoutput);
  61.       syso.ptr  = sysoutput;
  62.     }
  63.    return(lib$spawn(&d,in,out,0,0,0,0,0,0,0));
  64. }
  65.  
  66. syscall(number,arg1,arg2,arg3)
  67. int number;
  68. char *arg1, *arg2, *arg3;
  69. {
  70.   switch(number) {
  71.   case SYS_open:
  72.      return(open(arg1,arg2,arg3));
  73.   case SYS_close:
  74.      return(si_close(arg1));
  75.   case SYS_link:
  76.      return(link(arg1,arg2));
  77.   case SYS_unlink:
  78.      return(unlink(arg1,arg2));
  79.   case SYS_rmdir:
  80.      return(rmdir(arg1));
  81.   case SYS_chown:
  82.      return(chown(arg1,arg2,arg3));
  83.   case SYS_fchown:
  84.      return(fchown(arg1,arg2,arg3));
  85.   case SYS_truncate:
  86.      return(truncate(arg1,arg2));
  87.   case SYS_rename:
  88.      return(rename(arg1,arg2));
  89.   case SYS_flock:
  90.      return(flock(arg1,arg2));
  91.   default:
  92.      printf("syscall called - but not handled yet :%d\n",number);
  93.      return(-1);
  94.   }
  95. }
  96.