ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/devcomm.c
(Generate patch)

Comparing ray/src/rt/devcomm.c (file contents):
Revision 2.3 by greg, Mon Apr 5 15:16:47 1993 UTC vs.
Revision 2.11 by greg, Tue Nov 11 16:24:06 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1988 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   *  devcomm.c - communication routines for separate drivers.
6   *
7 < *      10/5/88
7 > *  External symbols declared in driver.h
8   */
9  
10 < #include "standard.h"
10 > #include "copyright.h"
11  
12 < #include "color.h"
12 > #include "platform.h"
13  
14 + #include "standard.h"
15 +
16   #include "driver.h"
17  
19 #include "vfork.h"
20
18   #ifndef DEVPATH
19   #define DEVPATH         getenv("PATH")  /* device search path */
20   #endif
21  
22 < static int      comm_close(), comm_clear(), comm_paintr(),
23 <                comm_getcur(), comm_comout(), comm_comin(), comm_flush();
22 > static int      comm_getcur();
23 > static void     comm_close(), comm_clear(), comm_paintr(),
24 >                comm_comin(), comm_comout(), comm_flush();
25  
26   struct driver   comm_driver = {
27          comm_close, comm_clear, comm_paintr, comm_getcur,
28          comm_comout, comm_comin, comm_flush
29   };
30  
31 + static void     mygets(), myputs(), reply_error(), getstate();
32 +
33   FILE    *devin, *devout;
34  
35   int     devchild;
# Line 45 | Line 45 | final_connect()                                /* verify and initialize connection
45                                                  /* get driver parameters */
46          getstate();
47                                                  /* set error vectors */
48 <        cmdvec = comm_comout;
49 <        if (wrnvec != NULL)
50 <                wrnvec = comm_comout;
48 >        erract[COMMAND].pf = comm_comout;
49 >        if (erract[WARNING].pf != NULL)
50 >                erract[WARNING].pf = comm_comout;
51          return(&comm_driver);
52   }
53  
# Line 67 | Line 67 | struct driver *
67   comm_init(dname, id)                    /* set up and execute driver */
68   char    *dname, *id;
69   {
70 <        char    *devname;
70 >        char    *dvcname;
71          int     p1[2], p2[2];
72          char    pin[16], pout[16];
73                                                  /* find driver program */
74 <        if ((devname = getpath(dname, DEVPATH, X_OK)) == NULL) {
75 <                stderr_v(dname);
76 <                stderr_v(": not found\n");
74 >        if ((dvcname = getpath(dname, DEVPATH, X_OK)) == NULL) {
75 >                eputs(dname);
76 >                eputs(": not found\n");
77                  return(NULL);
78          }
79 + #ifdef RHAS_FORK_EXEC
80                                                  /* open communication pipes */
81          if (pipe(p1) == -1 || pipe(p2) == -1)
82                  goto syserr;
83 <        if ((devchild = vfork()) == 0) {        /* fork driver process */
83 >        if ((devchild = fork()) == 0) { /* fork driver process */
84                  close(p1[1]);
85                  close(p2[0]);
86                  sprintf(pin, "%d", p1[0]);
87                  sprintf(pout, "%d", p2[1]);
88 <                execl(devname, dname, pin, pout, id, 0);
89 <                perror(devname);
88 >                execl(dvcname, dname, pin, pout, id, 0);
89 >                perror(dvcname);
90                  _exit(127);
91          }
92          if (devchild == -1)
# Line 100 | Line 101 | char   *dname, *id;
101   syserr:
102          perror(dname);
103          return(NULL);
104 +
105 + #else   /* ! RHAS_FORK_EXEC */
106 +
107 +        eputs(dname);
108 +        eputs(": no fork/exec\n");
109 +        return(NULL);
110 +
111 + #endif  /* ! RHAS_FORK_EXEC */
112   }
113  
114  
115 < static
115 > static void
116   comm_close()                    /* done with driver */
117   {
118          int     pid;
119  
120 <        cmdvec = NULL;                          /* reset error vectors */
121 <        if (wrnvec != NULL)
122 <                wrnvec = stderr_v;
120 >        erract[COMMAND].pf = NULL;              /* reset error vectors */
121 >        if (erract[WARNING].pf != NULL)
122 >                erract[WARNING].pf = wputs;
123          fclose(devout);
124          fclose(devin);
125          if (devchild < 0)
# Line 120 | Line 129 | comm_close()                   /* done with driver */
129   }
130  
131  
132 < static
132 > static void
133   comm_clear(xres, yres)                          /* clear screen */
134   int     xres, yres;
135   {
# Line 131 | Line 140 | int    xres, yres;
140   }
141  
142  
143 < static
143 > static void
144   comm_paintr(col, xmin, ymin, xmax, ymax)        /* paint a rectangle */
145   COLOR   col;
146   int     xmin, ymin, xmax, ymax;
# Line 145 | Line 154 | int    xmin, ymin, xmax, ymax;
154   }
155  
156  
157 < static
157 > static void
158   comm_flush()                            /* flush output to driver */
159   {
160          putc(COM_FLUSH, devout);
# Line 173 | Line 182 | int    *xp, *yp;
182   }
183  
184  
185 < static
185 > static void
186   comm_comout(str)                        /* print string to command line */
187   char    *str;
188   {
# Line 184 | Line 193 | char   *str;
193   }
194  
195  
196 < static
196 > static void
197   comm_comin(buf, prompt)                 /* read string from command line */
198   char    *buf;
199   char    *prompt;
# Line 204 | Line 213 | char   *prompt;
213   }
214  
215  
216 < static
216 > static void
217   mygets(s, fp)                           /* get string from file (with nul) */
218   register char   *s;
219   register FILE   *fp;
# Line 218 | Line 227 | register FILE  *fp;
227   }
228  
229  
230 < static
230 > static void
231   myputs(s, fp)                           /* put string to file (with nul) */
232   register char   *s;
233   register FILE   *fp;
# Line 229 | Line 238 | register FILE  *fp;
238   }
239  
240  
241 < static
241 > static void
242   reply_error(routine)                    /* what should we do here? */
243   char    *routine;
244   {
245 <        stderr_v(routine);
246 <        stderr_v(": driver reply error\n");
245 >        eputs(routine);
246 >        eputs(": driver reply error\n");
247          quit(1);
248   }
249  
250  
251 < static
251 > static void
252   getstate()                              /* get driver state variables */
253   {
254          fread((char *)&comm_driver.pixaspect,

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines