00001 // ===================================================================== 00002 // $Id: TSignalHandler.cc,v 1.4 2004/03/07 10:30:34 goiwai Exp $ 00003 // $Name: CLDAQ-1-14-03 $ 00004 // $Log: TSignalHandler.cc,v $ 00005 // Revision 1.4 2004/03/07 10:30:34 goiwai 00006 // ROOTに組みこむためのおまじないマクロを埋めこみました。 00007 // 全てにおいて完全に動作するわけではありません。 00008 // 00009 // Revision 1.3 2003/10/06 16:38:26 goiwai 00010 // *** empty log message *** 00011 // 00012 // Revision 1.2 2003/07/30 16:21:21 goiwai 00013 // ファイルにコミットログをつけることにしました. 00014 // 00015 // ===================================================================== 00016 #include "TSignalHandler.hh" 00017 #include "TSignalClient.hh" 00018 00019 typedef Tvoid SIG_FUNC_TYP(Tint); 00020 typedef SIG_FUNC_TYP* SIG_PF; 00021 00022 TSignalHandler::TSignalHandler( Tint psignalid, TSignalClient* pclient ) 00023 { 00024 signal_id = psignalid; 00025 if ( psignalid < MAX_SIGNAL_ENTRY && psignalid >= 0 ) 00026 handler_list[ psignalid ] = this; 00027 client = pclient; 00028 } 00029 00030 Tvoid TSignalHandler::Enable() 00031 { 00032 signal( signal_id, ( SIG_PF ) TSignalHandler::signal_handler ); 00033 return; 00034 } 00035 00036 Tvoid TSignalHandler::Disable() 00037 { 00038 signal( signal_id, SIG_DFL ); 00039 return; 00040 } 00041 00042 Tvoid TSignalHandler::signal_handler( Tint sig, Tint code, struct sigcontext* scp, Tchar* addr ) 00043 { 00044 if ( handler_list[ sig ] ) { 00045 handler_list[ sig ] -> signal_ucr( sig ); 00046 } 00047 signal( sig, ( SIG_PF )signal_handler ); 00048 return; 00049 } 00050 00051 TSignalHandler* TSignalHandler::handler_list[ TSignalHandler::MAX_SIGNAL_ENTRY ]; 00052 00053 Tvoid TSignalHandler::Initialize() 00054 { 00055 for ( Tint i = 0; i < MAX_SIGNAL_ENTRY; i ++ ) 00056 handler_list[ i ] = 0; 00057 return; 00058 } 00059 00060 Tvoid TSignalHandler::signal_ucr( Tint sig ) 00061 { 00062 if ( client ) 00063 client -> CatchSignal( sig ); 00064 return; 00065 } 00066 00067 Tint TSignalHandler::Wait() 00068 { 00069 return pause(); 00070 } 00071 00072 #ifdef __CLDAQ_ROOT_DLL 00073 ClassImp(TSignalHandler) 00074 #endif