home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / OTL-MC7.DMS / in.adf / classes.lha / Classes / Exec / Signals.h < prev   
Encoding:
C/C++ Source or Header  |  1995-01-31  |  2.0 KB  |  101 lines

  1. #ifndef CPP_EXEC_SIGNALS_H
  2. #define CPP_EXEC_SIGNALS_H
  3.  
  4. // Klassen für Signals und Signalhandler
  5. //
  6. // Autor: Jochen Becher
  7. //
  8. // Historie:
  9. // Version 1.0 am 30. Juni 94
  10.  
  11. #ifndef EXEC_TYPES_H
  12. #include <exec/types.h>
  13. #endif
  14.  
  15. #ifndef DOS_DOS_H
  16. #include <dos/dos.h>
  17. #endif
  18.  
  19. #ifndef CPP_EXEC_SHARE_H
  20. #include <classes/exec/share.h>
  21. #endif
  22.  
  23. #ifndef CPP_EXEC_LISTS_H
  24. #include <classes/exec/lists.h>
  25. #endif
  26.  
  27. #ifndef CPP_EXCEPTIONS_EXCEPTIONS_H
  28. #include <classes/exceptions/exceptions.h>
  29. #endif
  30.  
  31. class SignalC : private ShareC {
  32. public:
  33.     SignalC(LONG signalNum = -1) throw (SignalX, MemoryX);
  34.     ~SignalC();
  35.     SignalC &operator= (const SignalC &);
  36.     LONG number() const { return sigNum; };
  37. private:
  38.     LONG sigNum;
  39. };
  40.  
  41. class SignalHandlerC : public NodeC {
  42. friend class SignalsC;
  43. public:
  44.     SignalHandlerC(LONG signalNum = -1);
  45.     SignalHandlerC(SignalC &signal);
  46.     SignalHandlerC(const SignalHandlerC &);
  47.     virtual ~SignalHandlerC();
  48.     SignalHandlerC &operator= (const SignalHandlerC &);
  49.     virtual ULONG signals() { return mask; };
  50.     virtual BOOL forMe(ULONG signals)
  51.         { return (signals & mask) ? TRUE : FALSE; };
  52.     virtual BOOL handle(ULONG signals)
  53.         { return FALSE; };
  54. protected:
  55.     ULONG mask;
  56. };
  57.  
  58. class SignalsC : protected ListC {
  59. public:
  60.     SignalsC();
  61.     ~SignalsC();
  62.     VOID add(SignalHandlerC &);
  63.     ULONG wait();
  64.     BOOL handle(ULONG signals);
  65.     VOID loop();
  66. private:
  67.     VOID buildMask();
  68.     ULONG mask;
  69. };
  70.  
  71. class BreakHandlerC : public SignalHandlerC {
  72. public:
  73.     BreakHandlerC(LONG signum) : SignalHandlerC(signum) { };
  74.     BOOL handle(ULONG signals)
  75.         { return forMe(signals) ? pressed() : FALSE };
  76. protected:
  77.     virtual BOOL pressed() { return TRUE; };
  78. };
  79.  
  80. class CtrlCHandlerC : public BreakHandlerC {
  81. public:
  82.     CtrlCHandlerC() : BreakHandlerC(SIGBREAKB_CTRL_C) { };
  83. };
  84.  
  85. class CtrlDHandlerC : public BreakHandlerC {
  86. public:
  87.     CtrlDHandlerC() : BreakHandlerC(SIGBREAKB_CTRL_D) { };
  88. };
  89.  
  90. class CtrlEHandlerC : public BreakHandlerC {
  91. public:
  92.     CtrlEHandlerC() : BreakHandlerC(SIGBREAKB_CTRL_E) { };
  93. };
  94.  
  95. class CtrlFHandlerC : public BreakHandlerC {
  96. public:
  97.     CtrlFHandlerC() : BreakHandlerC(SIGBREAKB_CTRL_F) { };
  98. };
  99.  
  100. #endif
  101.