1: #if !defined(lint) && defined(DOSCCS)
   2: static char *sccsid = "@(#)glue3.c	4.1.1 (2.11BSD) 1996/10/23";
   3: #endif
   4: 
   5: #include "refer..c"
   6: #define move(x, y) close(y); dup(x); close(x);
   7: 
   8: corout(in, out, rprog, arg, outlen)
   9: char *in, *out, *rprog;
  10: {
  11:     int pipev[2], fr1, fr2, fw1, fw2, n;
  12: 
  13:     if (strcmp (rprog, "hunt") ==0)
  14:         return(callhunt(in, out, arg, outlen));
  15:     if (strcmp (rprog, "deliv")==0)
  16:         return(dodeliv(in, out, arg, outlen));
  17:     pipe (pipev);
  18:     fr1= pipev[0];
  19:     fw1 = pipev[1];
  20:     pipe (pipev);
  21:     fr2= pipev[0];
  22:     fw2 = pipev[1];
  23:     if (fork()==0)
  24:     {
  25:         close (fw1);
  26:         close (fr2);
  27:         move (fr1, 0);
  28:         move (fw2, 1);
  29:         if (rprog[0]!= '/')
  30:             chdir("/usr/libexec/refer");
  31:         execl(rprog, "deliv", arg, 0);
  32:         err ("Can't run %s", rprog);
  33:     }
  34:     close(fw2);
  35:     close(fr1);
  36:     write (fw1, in , strlen(in));
  37:     close(fw1);
  38:     wait(0);
  39:     n = read (fr2, out, outlen);
  40:     out[n]=0;
  41:     close(fr2);
  42: }
  43: 
  44: # define ALEN 50
  45: 
  46: callhunt(in, out, arg, outlen)
  47: char *in, *out, *arg;
  48: {
  49:     char *argv[20], abuff[ALEN];
  50:     extern int typeindex;
  51:     int argc;
  52:     extern char one[];
  53:     extern int onelen;
  54:     argv[0] = "hunt";
  55:     argv[1] = "-i";
  56:     argv[2] = in;
  57:     argv[3] = "-t";
  58:     argv[4] = out;
  59:     argv[5] = outlen;
  60:     argv[6] = "-T";
  61:     argv[7] = "-F1";
  62:     argv[8] = "-o";
  63:     argv[9] = one;
  64:     argv[10] = onelen;
  65:     argv[11] = abuff;
  66:     strcpy (abuff,arg);
  67:     if (strlen(abuff) > ALEN)
  68:         err("abuff not big enough %d", strlen(abuff));
  69:     argc = 6;
  70:     huntmain (argc,argv);
  71:     return(0);
  72: }
  73: 
  74: dodeliv(in, out, arg, outlen)
  75: char *in, *out, *arg;
  76: {
  77: # if D1
  78:     fprintf(stderr, "in dodeliv, arg /%s/\n", arg?arg:"");
  79: # endif
  80:     if (arg && arg[0])
  81:         chdir(arg);
  82:     findline(in, out, outlen, 0L);
  83:     restodir();
  84: }

Defined functions

callhunt defined in line 46; used 1 times
  • in line 14
corout defined in line 8; never used
dodeliv defined in line 74; used 1 times
  • in line 16

Defined variables

sccsid defined in line 2; never used

Defined macros

ALEN defined in line 44; used 2 times
move defined in line 6; used 2 times
Last modified: 1996-10-24
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 170
Valid CSS Valid XHTML 1.0 Strict