home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / LIBSRC.ZOO / libsrc / local / alarm.c < prev    next >
Text File  |  1992-04-11  |  972b  |  52 lines

  1. #include <os2.h>
  2. #include <signal.h>
  3.  
  4. unsigned long Dos32Exit() asm ("Dos32Exit");
  5. unsigned long Dos32Sleep() asm ("Dos32Sleep");
  6. unsigned long Dos32CreateThread() asm ("Dos32CreateThread");
  7.  
  8. static int alarm_active = 0;
  9. static int kill_alarm = 0;
  10. static int seconds_remaining = 0;
  11.  
  12. static alarmthread()
  13. {
  14.    while (seconds_remaining) {
  15.       if (kill_alarm)
  16.          Dos32Exit (0, 0);
  17.       Dos32Sleep (1000);
  18.       --seconds_remaining;
  19.    }
  20.  
  21.    if (kill_alarm)
  22.       Dos32Exit (0, 0);
  23.  
  24.    alarm_active = 0;
  25.    kill_alarm = 0;
  26.    raise (SIGALRM);
  27.    Dos32Exit (0, 0);
  28. }
  29.  
  30.  
  31. int alarm (unsigned int seconds)
  32. {
  33.    TID tid;
  34.  
  35.    if (seconds == 0 && alarm_active) {
  36.       kill_alarm = 1;
  37.       return;
  38.    }
  39.  
  40.    if (alarm_active) {
  41.       seconds_remaining = seconds;
  42.       return;
  43.    }
  44.  
  45.    kill_alarm = 0;
  46.    alarm_active = 1;
  47.    seconds_remaining = seconds;
  48.    Dos32CreateThread (&tid, alarmthread, 0, 0, 1000);
  49.    return;
  50. }
  51.  
  52.