[comp.graphics] glx.c modifications

spencer@eecs.umich.edu (Spencer W. Thomas) (02/20/91)

The recently posted 'glx.c' file presumably works great on a Sun, but
won't compile on my DEC 3100.  Below is a diff listing of the
changes I had to make to get it to run.

(The problems were: needs to include sys/types.h, no usleep or strdup
functions.)

I'm thinking about modifying it to work better on an 8-bit display
(blob looks pretty stupid at the moment).

=Spencer W. Thomas 		EECS Dept, U of Michigan, Ann Arbor, MI 48109
spencer@eecs.umich.edu		313-936-2616 (8-6 E[SD]T M-F)


*** glx.c~      Tue Feb 19 17:02:28 1991
--- glx.c       Tue Feb 19 16:23:46 1991
***************
*** 27,32 ****
--- 27,33 ----
   */

  #include <stdio.h>
+ #include <sys/types.h>
  #include <sys/times.h>
  #include <string.h>
  #include <strings.h>
***************
*** 37,42 ****
--- 38,45 ----
  #include <X11/bitmaps/gray1>
  #include "gl.h"

+ extern char *strdup();
+
  #define POLYBATCH 40
  #define FONTNAME "bembo-bold-24"

***************
*** 325,330 ****
--- 328,335 ----
  sginap(len)
      int         len;
  {
+     extern void usleep();
+
      usleep(len);
  }

***************
*** 603,606 ****
--- 608,674 ----
      int         mask;
  {
  /* NOP */
+ }
+
+ #include <signal.h>
+ #include <sys/time.h>
+
+ #define USPS    1000000         /* number of microseconds in a second */
+ #define TICK    10000           /* system clock resolution in microseconds */
+
+ static int ringring;
+ static void (*ofunc)();
+
+ static void
+ sleepx()
+ {
+         ringring = 1;
+ }
+
+ void
+ set_timer(n)
+ unsigned n;
+ {
+     struct itimerval itv;
+     register struct itimerval *itp = &itv;
+     if (n == 0)
+     {
+       ringring = 1;
+       return;
+     }
+     timerclear(&itp->it_interval);
+     itp->it_value.tv_sec = n / USPS;
+     itp->it_value.tv_usec = n % USPS;
+     ofunc = (void (*)())signal(SIGALRM, sleepx);
+
+     ringring = 0;
+     (void) setitimer(ITIMER_REAL, itp, (struct itimerval *)0);
+ }
+
+ #ifndef sigmask
+ #define sigmask(m)    (1 << ((m)-1))
+ #endif
+
+ void
+ wait_timer()
+ {
+     while (!ringring)
+       sigpause( ~sigmask(SIGALRM));
+     signal(SIGALRM, ofunc);
+ }
+
+ void
+ usleep(usex)
+ {
+     set_timer( usex );
+     wait_timer();
+ }
+
+ char *strdup(s)
+ char *s;
+ {
+     char *s1 = (char *)malloc(1 + strlen(s));
+     if ( s1 )
+       strcpy( s1, s );
+     return s1;
  }
--
=Spencer W. Thomas 		EECS Dept, U of Michigan, Ann Arbor, MI 48109
spencer@eecs.umich.edu		313-936-2616 (8-6 E[SD]T M-F)