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

Comparing ray/src/rt/x11.c (file contents):
Revision 2.18 by greg, Tue Sep 20 15:46:34 1994 UTC vs.
Revision 2.19 by greg, Mon Oct 3 11:01:23 1994 UTC

# Line 13 | Line 13 | static char SCCSid[] = "$SunId$ LBL";
13   #include  <stdio.h>
14   #include  <math.h>
15   #include  <sys/ioctl.h>
16 + #include  <fcntl.h>
17  
18   #include  <X11/Xlib.h>
19   #include  <X11/cursorfont.h>
# Line 69 | Line 70 | static GC  ourgc = 0;                  /* our graphics context for dr
70  
71   static Colormap ourmap = 0;             /* our color map */
72  
73 + #define IC_X11          0
74 + #define IC_IOCTL        1
75 + #define IC_READ         2
76 +
77 + static int  inpcheck;                   /* whence to check input */
78 +
79   extern char  *malloc(), *getcombuf();
80  
81   static int  x11_close(), x11_clear(), x11_paintr(), x11_errout(),
# Line 182 | Line 189 | char  *name, *id;
189                  cmdvec = x11_comout;
190                  if (wrnvec != NULL)
191                          wrnvec = x11_errout;
192 +                inpcheck = IC_X11;
193          } else {
194                  x11_driver.comin = std_comin;
195                  x11_driver.comout = std_comout;
196                  cmdvec = std_comout;
197 +                inpcheck = IC_IOCTL;
198          }
199          return(&x11_driver);
200   }
# Line 282 | Line 291 | int  xmin, ymin, xmax, ymax;
291   static
292   x11_flush()                     /* flush output */
293   {
294 +        char    buf[256];
295          int     n;
296                                                  /* check for input */
297          XNoOp(ourdisplay);
298          n = XPending(ourdisplay);                       /* from X server */
299          while (n-- > 0)
300                  getevent();
301 <        if (x11_driver.comin == std_comin) {            /* from stdin */
301 >        if (inpcheck == IC_IOCTL) {                     /* from stdin */
302                  if (ioctl(fileno(stdin), FIONREAD, &n) < 0) {
303 <                        stderr_v("ioctl error on stdin\n");
304 <                        quit(1);
303 >                        if (fcntl(fileno(stdin), F_SETFL, FNDELAY) < 0) {
304 >                                stderr_v("Cannot change input mode\n");
305 >                                quit(1);
306 >                        }
307 >                        inpcheck = IC_READ;
308 >                } else
309 >                        x11_driver.inpready += n;
310 >        }
311 >        if (inpcheck == IC_READ) {
312 >                n = read(fileno(stdin), buf, sizeof(buf)-1);
313 >                if (n > 0) {
314 >                        buf[n] = '\0';
315 >                        strcpy(getcombuf(&x11_driver), buf);
316                  }
296                x11_driver.inpready += n;
317          }
318   }
319  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines