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

Comparing ray/src/hd/rhdisp.c (file contents):
Revision 3.1 by gregl, Wed Nov 19 18:01:03 1997 UTC vs.
Revision 3.4 by gregl, Fri Nov 21 16:10:17 1997 UTC

# Line 21 | Line 21 | VIEW   dvw;                    /* our current display view */
21  
22   char    *progname;              /* global argv[0] */
23  
24 < #define SERV_READY      01
25 < #define DEV_READY       02
24 > #define RDY_SRV 01
25 > #define RDY_DEV 02
26  
27  
28   main(argc, argv)
29   int     argc;
30   char    *argv[];
31   {
32 <        int     rdy, inp, res = 0;
32 >        int     rdy, inp, res = 0, pause = 0;
33  
34          progname = argv[0];
35          if (argc != 2)
# Line 39 | Line 39 | char   *argv[];
39                                          /* enter main loop */
40          do {
41                  rdy = disp_wait();
42 <                if (rdy & DEV_READY) {
43 <                        inp = dev_input();      /* take residual action here */
42 >                if (rdy & RDY_DEV) {            /* get user input */
43 >                        inp = dev_input();
44 >                        if (inp & DEV_NEWVIEW)
45 >                                new_view(&odev.v);
46                          if (inp & DEV_SHUTDOWN)
47                                  serv_request(DR_SHUTDOWN, 0, NULL);
48 <                        else if (inp & DEV_NEWVIEW)
49 <                                new_view(&odev.v);
48 >                        if (inp & DEV_REDRAW) {
49 >                                beam_sync();
50 >                                imm_mode = 1;   /* preempt updates */
51 >                        }
52 >                        if (inp & DEV_WAIT)
53 >                                pause = 1;
54 >                        if (inp & DEV_RESUME) {
55 >                                serv_request(DR_NOOP, 0, NULL);
56 >                                pause = 0;
57 >                        }
58                  }
59 <                if (rdy & SERV_READY)
60 <                        res = serv_result();    /* processes result, also */
59 >                if (rdy & RDY_SRV) {            /* get server result */
60 >                        res = serv_result();
61 >                        if (pause && res != DS_SHUTDOWN) {
62 >                                serv_request(DR_ATTEN, 0, NULL);
63 >                                while ((res = serv_result()) != DS_ACKNOW &&
64 >                                                res != DS_SHUTDOWN)
65 >                                        ;
66 >                        }
67 >                }
68          } while (res != DS_SHUTDOWN);
69                                          /* all done */
70          quit(0);
# Line 63 | Line 80 | disp_wait()                    /* wait for more input */
80          register int    i;
81                                  /* see if we can avoid select call */
82          if (imm_mode || stdin->_cnt > 0)
83 <                return(SERV_READY);
83 >                return(RDY_SRV);
84          if (dev_flush())
85 <                return(DEV_READY);
85 >                return(RDY_DEV);
86                                  /* make the call */
87          FD_ZERO(&readset); FD_ZERO(&errset);
88          FD_SET(0, &readset);
# Line 81 | Line 98 | disp_wait()                    /* wait for more input */
98          }
99          flgs = 0;               /* flag what's ready */
100          if (FD_ISSET(0, &readset) || FD_ISSET(0, &errset))
101 <                flgs |= SERV_READY;
101 >                flgs |= RDY_SRV;
102          if (FD_ISSET(odev.ifd, &readset) || FD_ISSET(odev.ifd, &errset))
103 <                flgs |= DEV_READY;
103 >                flgs |= RDY_DEV;
104          return(flgs);
105   }
106  
# Line 229 | Line 246 | char   *p;
246                  fwrite(p, 1, nbytes, stdout);
247          if (fflush(stdout) < 0)
248                  error(SYSTEM, "write error in serv_request");
249 + }
250 +
251 +
252 + eputs(s)                        /* put error message to stderr */
253 + register char  *s;
254 + {
255 +        static int  midline = 0;
256 +
257 +        if (!*s)
258 +                return;
259 +        if (!midline++) {       /* prepend line with program name */
260 +                fputs(progname, stderr);
261 +                fputs(": ", stderr);
262 +        }
263 +        fputs(s, stderr);
264 +        if (s[strlen(s)-1] == '\n') {
265 +                fflush(stderr);
266 +                midline = 0;
267 +        }
268   }
269  
270  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines