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

Comparing ray/src/rt/devmain.c (file contents):
Revision 1.2 by greg, Wed Oct 25 16:49:45 1989 UTC vs.
Revision 1.3 by greg, Wed Nov 1 16:12:22 1989 UTC

# Line 32 | Line 32 | int    notified = 0;                           /* notified parent of input? */
32  
33   char    *progname;                              /* driver name */
34  
35 < int     r_clear(), r_paintr(), r_getcur(), r_comout(), r_comin();
35 > int     r_clear(), r_paintr(), r_getcur(), r_comout(), r_comin(), r_mycomin();
36  
37   int     (*dev_func[NREQUESTS])() = {            /* request handlers */
38                  r_clear, r_paintr,
39                  r_getcur, r_comout, r_comin
40          };
41  
42 + char    mybuf[512] = "";
43  
44 + char    *mybufp();
45 +
46 +
47   main(argc, argv)                /* set up communications and main loop */
48   int     argc;
49   char    *argv[];
# Line 107 | Line 111 | r_paintr()                             /* paint a rectangle */
111          xmax = getw(devin); ymax = getw(devin);
112          (*dev->paintr)(col, xmin, ymin, xmax, ymax);
113                                          /* check for input */
114 <        if (dev->inpready > notified) {
114 >        if (!notified && dev->inpready > 0) {
115 >                notified = 1;
116                  kill(getppid(), SIGIO);
112                notified = dev->inpready;
117          }
118   }
119  
# Line 179 | Line 183 | register FILE  *fp;
183   }
184  
185  
186 < repaint(xmin, ymin, xmax, ymax)         /* repaint section of display */
183 < int     xmin, ymin, xmax, ymax;
186 > r_mycomin()                             /* get command from my buffer */
187   {
188 <        /* no can do! */
188 >        register char   *cp;
189 >                                                /* get next command */
190 >        for (cp = mybuf; *cp != '\n'; cp++)
191 >                ;
192 >        *cp++ = '\0';
193 >        (*dev->comout)(mybuf);                  /* echo my command */
194 >                                                /* send it as reply */
195 >        putc(COM_COMIN, devout);
196 >        myputs(mybuf, devout);
197 >        fflush(devout);
198 >                                                /* get next command */
199 >        (*dev->comout)("\n");
200 >        strcpy(mybuf, cp);
201 >        if (mybuf[0])
202 >                kill(getppid(), SIGIO);                 /* signal more */
203 >        else
204 >                dev_func[COM_COMIN] = r_comin;          /* else reset */
205   }
206  
207  
# Line 200 | Line 219 | register char  *s;
219                  fflush(stderr);
220                  inline = 0;
221          }
222 + }
223 +
224 +
225 + char *
226 + mybufp()                                /* return buffer for my command */
227 + {
228 +        if (dev_func[COM_COMIN] != r_mycomin) {
229 +                dev_func[COM_COMIN] = r_mycomin;
230 +                kill(getppid(), SIGIO);
231 +        }
232 +        return(mybuf+strlen(mybuf));
233 + }
234 +
235 +
236 + repaint(xmin, ymin, xmax, ymax)         /* repaint section of display */
237 + int     xmin, ymin, xmax, ymax;
238 + {
239 +        sprintf(mybufp(), "repaint %d %d %d %d\n",
240 +                        xmin, ymin, xmax, ymax);
241   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines