home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / libc / gen / sleep.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  506 b   |  41 lines

  1. #include <signal.h>
  2. #include <setjmp.h>
  3.  
  4. static jmp_buf jmp;
  5.  
  6. sleep(n)
  7. unsigned n;
  8. {
  9.     int sleepx();
  10.     unsigned altime;
  11.     int (*alsig)() = SIG_DFL;
  12.  
  13.     if (n==0)
  14.         return;
  15.     altime = alarm(1000);    /* time to maneuver */
  16.     if (setjmp(jmp)) {
  17.         signal(SIGALRM, alsig);
  18.         alarm(altime);
  19.         return;
  20.     }
  21.     if (altime) {
  22.         if (altime > n)
  23.             altime -= n;
  24.         else {
  25.             n = altime;
  26.             altime = 1;
  27.         }
  28.     }
  29.     alsig = signal(SIGALRM, sleepx);
  30.     alarm(n);
  31.     for(;;)
  32.         pause();
  33.     /*NOTREACHED*/
  34. }
  35.  
  36. static
  37. sleepx()
  38. {
  39.     longjmp(jmp, 1);
  40. }
  41.