/* * CENA C++ Utilities * * by Stephane Chatty * * Copyright 1992 * Centre d'Etudes de la Navigation Aerienne (CENA) * * Signal handling * * $Id$ * $CurLog$ */ #ifndef Signal_H_ #define Signal_H_ #include "cplus_bugs.h" class CcuList; #ifdef CPLUS_BUG21 #ifdef sun #define NSIG 32 #else #include #endif #endif class CcuBaseSignalHandler { private: static CcuList* HandlerStacks; static void ClassInit (); void Install (); static void InstallNone (int); static void DoHandle (int); protected: int Signal; public: CcuBaseSignalHandler (int); virtual ~CcuBaseSignalHandler (); inline int GetSignal () const { return Signal; } protected: /*?public?*/ virtual void Handle (); }; extern const int AllSigs, SigHup, SigInt, SigQuit, SigIll, SigTrap, SigAbrt, SigEmt, SigFpe, SigKill, SigBus, SigSegv, SigSys, SigPipe, SigAlrm, SigTerm, SigUsr1, SigUsr2, SigChld, SigVtalrm, SigIo, SigStop, SigTstp, SigCont, SigTtin, SigTtou, SigUrg, SigLost; class CcuSignalHandler : public CcuBaseSignalHandler { protected: void (*Handler) (int); void Handle (); public: CcuSignalHandler (int, void (*) (int)); ~CcuSignalHandler (); }; class CcuSignalBlocker { private: #ifndef CPLUS_BUG21 static int BlockCounts []; #else static int BlockCounts [NSIG-1]; #endif protected: int Signal:6; public: CcuSignalBlocker (int); ~CcuSignalBlocker (); }; #endif /* Signal_H_ */