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