/* .+ .identifier : $Id: ChfPriv.h,v 2.2 2001/01/25 11:57:57 cibrario Exp $ .context : CHF, Condition Handling Facility .title : $RCSfile: ChfPriv.h,v $, main header .kind : C header .author : Ivan Cibrario B. .site : CSTV-CNR .creation : 2-May-1996 .keywords : * .description : This is the private header of the Condition Handling Facility .include : * .notes : $Log: ChfPriv.h,v $ Revision 2.2 2001/01/25 11:57:57 cibrario Added partial Win32 support (Windows CE only). Revision 2.1 2000/05/26 14:14:36 cibrario - Defined new abort codes: CHF_ABORT_GET_CONTEXT, CHF_ABORT_PTHREAD - Redefined .unwind_context field of ChfHandlerDescriptor - Conditional retarget of chf_context for multithreading support - Declared new private function: _ChfGetContext() (mt support only) Revision 1.6 1997/01/15 13:38:24 cibrario Added the new field .handler_context to struct ChfHandlerDescriptor_S, to store, for each condition handler, the private handler context pointer. Revision 1.5 1996/10/04 09:43:51 cibrario Updated the condition message format to improve internationalization Revision 1.1 1996/05/28 12:56:37 cibrario Initial revision .- */ /* ------------------------------------------------------------------------- Macros ------------------------------------------------------------------------- */ #define CHF_MODULE_ID CHF_SET #define CHF_TMP_MESSAGE_LENGTH ( 2 * CHF_MAX_MESSAGE_LENGTH ) #define CHF_DEF_MESSAGE_LENGTH 40 #define CHF_DEF_PARTIAL_MSG_FMT ChfText( "Code <%d>d" ) #define CHF_DEF_MID_MSG_FMT ChfText( "Mid <%d>d" ) #define CHF_EXTENDED_INFO_FMT ChfText( "(%s,%d)" ) #define CHF_SEVERITY_NAMES { ChfText( "S" ), ChfText( "I" ), ChfText( "W" ), ChfText( "E" ), ChfText( "F" ) } #define CHF_UNKNOWN_SEVERITY ChfText( "?" ) #define CHF_MESSAGE_SEPARATOR ChfText( "-" ) #define CHF_MESSAGE_TERMINATOR ChfText( "\n" ) #define CHF_ABORT_HEADER ChfText( "ChfAbort-F-" ) #define CHF_ABORT_BAD_CODE_FMT ChfText( "Bad abort code <%d>d\n" ) #define CHF_ABORT_GOOD_CODE_FMT ChfText( "%s\n" ) /* ------------------------------------------------------------------------- Abort codes used with ChfAbort() ------------------------------------------------------------------------- */ #define CHF_ABORT_SILENT 0 #define CHF_ABORT_INIT 1 #define CHF_ABORT_MSG_OVF 2 #define CHF_ABORT_INVALID_ACTION 3 #define CHF_ABORT_DUP_INIT 4 #define CHF_ABORT_ALREADY_UNWINDING 5 #define CHF_ABORT_IMPROPERLY_HANDLED 6 #define CHF_ABORT_FATAL_UNWINDING 7 #define CHF_ABORT_COND_STACK_OVF 8 #define CHF_ABORT_GET_CONTEXT 9 #define CHF_ABORT_PTHREAD 10 /* ------------------------------------------------------------------------- Type definitions ------------------------------------------------------------------------- */ typedef struct ChfHandlerDescriptor_S { ChfHandler handler; void* unwind_context; ChfPointer handler_context; } ChfHandlerDescriptor; typedef struct ChfContext_S /* CHF Context */ { ChfState state; /* Current CHF state */ const ChfChar* app_name; /* Application's name */ ChfOptions options; /* Options */ void* mrs_data; /* Message retrieval private data */ ChfMrsGet mrs_get; /* 'GetMessage' function */ ChfMrsExit mrs_exit; /* 'Exit' function */ int condition_stack_size; /* Size of the condition stack */ int handler_stack_size; /* Size of the handler stack */ int exit_code; /* Abnormal exit code */ ChfDescriptor* condition_stack; /* Condition stack */ ChfDescriptor* condition_base; /* Current condition stack base */ ChfDescriptor* condition_sp; /* Current condition stack pointer */ ChfHandlerDescriptor* handler_stack; /* Handler stack */ ChfHandlerDescriptor* handler_sp; /* Current handler stack pointer */ ChfChar* message_buffer; /* Message buffer */ } ChfContext; /* ------------------------------------------------------------------------- Multithreading support ------------------------------------------------------------------------- */ #ifdef _REENTRANT # define chf_context ( *_ChfGetContext() ) #else # define chf_context _chf_context #endif /* ------------------------------------------------------------------------- Global variables ------------------------------------------------------------------------- */ extern ChfContext _chf_context; /* CHF Context */ /* ------------------------------------------------------------------------- Private function prototypes ------------------------------------------------------------------------- */ #ifdef _REENTRANT ChfContext* _ChfGetContext( void ); #endif /* ------------------------------------------------------------------------- Private redirection of stdlib functions needed by Win32 ------------------------------------------------------------------------- */ #ifdef _WIN32 # define ChfStrlen _tcslen # define ChfStrcpy _tcscpy # define ChfStrcat _tcscat # define ChfStrncpy _tcsncpy # define ChfSprintf _stprintf # define ChfVsprintf _vstprintf #else # define ChfStrlen strlen # define ChfStrcpy strcpy # define ChfStrcat strcat # define ChfStrncpy strncpy # define ChfSprintf sprintf # define ChfVsprintf vsprintf #endif