home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / TELECOM / stg_v4.lzh / signal.c < prev    next >
C/C++ Source or Header  |  1994-11-11  |  1KB  |  77 lines

  1. /*
  2.  * unix compatible signal() - OS-9 version
  3. */
  4.  
  5. #include "stglib.h"
  6.  
  7. #ifdef _OS9
  8.  
  9. #include <signal.h>
  10.  
  11. /* #include "stglib.h" */
  12.  
  13. struct sSignal
  14. {
  15.     struct sSignal *psNext;
  16.     int iSignal;
  17.     void (*pfHandler)();
  18. };
  19.  
  20. struct sSignal *_sig_list=0;
  21.  
  22. _signal_(iSignal)
  23. int iSignal;
  24. {
  25.     struct sSignal *psSignal;
  26.  
  27.     psSignal=_sig_list;
  28.     while (psSignal)
  29.     {
  30.         if (iSignal==psSignal->iSignal)
  31.         {
  32.             if (!psSignal->pfHandler)
  33.                 exit(iSignal);
  34.             if ((int)psSignal->pfHandler==SIG_IGN)
  35.                 return(0);
  36.  
  37.             (*psSignal->pfHandler)();
  38.             return(0);
  39.         }
  40.         psSignal=psSignal->psNext;
  41.     }
  42.     return(0);
  43. }
  44.  
  45. signal(iSignal,pfHandler)
  46. int iSignal;
  47. void (*pfHandler)();
  48. {
  49.     struct sSignal *psSignal;
  50.  
  51.     psSignal = _sig_list;
  52.     while (psSignal)
  53.     {
  54.         if (iSignal==psSignal->iSignal)
  55.         {
  56.             psSignal->pfHandler=pfHandler;
  57.             return(0);
  58.         }
  59.         psSignal=psSignal->psNext;
  60.     }
  61.  
  62.     if (!_sig_list)
  63.         intercept(_signal_);
  64.  
  65.     psSignal=_sig_list;
  66.  
  67.     _sig_list=(struct sSignal *)malloc(sizeof(*_sig_list));
  68.  
  69.     _sig_list->psNext=psSignal;
  70.     _sig_list->iSignal=iSignal;
  71.     _sig_list->pfHandler=pfHandler;
  72.  
  73.     return(0);
  74. }
  75.  
  76. #endif
  77.