home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC7.DMS / in.adf / classsource.lha / ClassSource / DOS / Notify / Notify.c
Encoding:
C/C++ Source or Header  |  1995-02-12  |  2.6 KB  |  124 lines

  1. #include <classes/DOS/Notify.h>
  2.  
  3. #include <exec/memory.h>
  4. #include <string.h>
  5.  
  6. #pragma -
  7. #include <pragma/dos_lib.h>
  8. #include <pragma/exec_lib.h>
  9. #pragma +
  10.  
  11. NotifyC::NotifyC()
  12. {
  13.     memset(&nreq,0,sizeof(struct NotifyRequest));
  14.     outstanding = FALSE;
  15.     inited = FALSE;
  16. }
  17.  
  18. NotifyC::NotifyC(const NotifyC &s)
  19. {
  20.     memset(&nreq,0,sizeof(struct NotifyRequest));
  21.     nreq.nr_Name = s.nreq.nr_Name;
  22.     nreq.nr_UserData = s.nreq.nr_UserData;
  23.     nreq.nr_Flags = s.nreq.nr_Flags & 0x01b;
  24.     if (nreq.nr_Flags & NRF_SEND_MESSAGE)
  25.     {
  26.         nreq.nr_stuff.nr_Msg.nr_Port = s.nreq.nr_stuff.nr_Msg.nr_Port;
  27.     };
  28.     if (nreq.nr_Flags & NRF_SEND_SIGNAL)
  29.     {
  30.         nreq.nr_stuff.nr_Signal.nr_Task = s.nreq.nr_stuff.nr_Signal.nr_Task;
  31.         nreq.nr_stuff.nr_Signal.nr_SignalNum =
  32.             s.nreq.nr_stuff.nr_Signal.nr_SignalNum;
  33.     };
  34.     inited = TRUE;
  35.     outstanding = FALSE;
  36. }
  37.  
  38. NotifyC::~NotifyC()
  39. {
  40.     end();
  41. }
  42.  
  43. NotifyC &NotifyC::operator= (const NotifyC &s)
  44. {
  45.     if (this != &s)
  46.     {
  47.         end();
  48.         memset(&nreq,0,sizeof(struct NotifyRequest));
  49.         nreq.nr_Name = s.nreq.nr_Name;
  50.         nreq.nr_UserData = s.nreq.nr_UserData;
  51.         nreq.nr_Flags = s.nreq.nr_Flags & 0x01b;
  52.         if (nreq.nr_Flags & NRF_SEND_MESSAGE)
  53.         {
  54.             nreq.nr_stuff.nr_Msg.nr_Port = s.nreq.nr_stuff.nr_Msg.nr_Port;
  55.         };
  56.         if (nreq.nr_Flags & NRF_SEND_SIGNAL)
  57.         {
  58.             nreq.nr_stuff.nr_Signal.nr_Task = s.nreq.nr_stuff.nr_Signal.nr_Task;
  59.             nreq.nr_stuff.nr_Signal.nr_SignalNum =
  60.                 s.nreq.nr_stuff.nr_Signal.nr_SignalNum;
  61.         };
  62.         inited = TRUE;
  63.         outstanding = FALSE;
  64.     };
  65.     return *this;
  66. }
  67.  
  68. BOOL NotifyC::start(STRPTR name, PortC &port, APTR userData,
  69.     BOOL wait, BOOL initial)
  70. {
  71.     if (!outstanding)
  72.     {
  73.         memset(&nreq,0,sizeof(struct NotifyRequest));
  74.         nreq.nr_Name = name;
  75.         nreq.nr_UserData = (ULONG) userData;
  76.         nreq.nr_Flags = NRF_SEND_MESSAGE;
  77.         if (wait)
  78.             nreq.nr_Flags |= NRF_WAIT_REPLY;
  79.         if (initial)
  80.             nreq.nr_Flags |= NRF_NOTIFY_INITIAL;
  81.         nreq.nr_stuff.nr_Msg.nr_Port = port.port();
  82.         inited = TRUE;
  83.         return (outstanding = (BOOL) StartNotify(&nreq));
  84.     };
  85.     return FALSE;
  86. }
  87.  
  88. BOOL NotifyC::start(STRPTR name, struct Task *task, UBYTE signal,
  89.         APTR userData, BOOL initial)
  90. {
  91.     if (task && !outstanding)
  92.     {
  93.         memset(&nreq,0,sizeof(struct NotifyRequest));
  94.         nreq.nr_Name = name;
  95.         nreq.nr_UserData = (ULONG) userData;
  96.         nreq.nr_Flags = NRF_SEND_SIGNAL;
  97.         if (initial)
  98.             nreq.nr_Flags |= NRF_NOTIFY_INITIAL;
  99.         nreq.nr_stuff.nr_Signal.nr_Task = task;
  100.         nreq.nr_stuff.nr_Signal.nr_SignalNum = signal;
  101.         inited = TRUE;
  102.         return (outstanding = (BOOL) StartNotify(&nreq));
  103.     };
  104.     return FALSE;
  105. }
  106.  
  107. BOOL NotifyC::restart()
  108. {
  109.     if (inited && !outstanding)
  110.     {
  111.         return (outstanding = (BOOL) StartNotify(&nreq));
  112.     };
  113.     return FALSE;
  114. }
  115.  
  116. VOID NotifyC::end()
  117. {
  118.     if (outstanding)
  119.     {
  120.         EndNotify(&nreq);
  121.         outstanding = FALSE;
  122.     };
  123. }
  124.