saturnng/libChf/ChfPriv.h
Gwenhael Le Moine bc89ce11a2
pretty
2024-08-25 11:40:24 +02:00

143 lines
5.3 KiB
C

/* .+
.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