File indexing completed on 2026-08-19 09:10:29
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef statusMessageReporting_h_included
0011 #define statusMessageReporting_h_included
0012
0013 #include <stdio.h>
0014 #include <stdarg.h>
0015
0016 #ifdef _WIN32
0017 #define __func__ __FUNCTION__
0018 #endif
0019
0020 #if defined __cplusplus
0021 extern "C" {
0022 #endif
0023
0024 #define smr_unknownID 0
0025 #define smr_tooManyIDs 1
0026 #define smr_invalidID 2
0027 #define smr_errnoID 3
0028 #define smr_smrID 4
0029
0030 #define smr_maximumNumberOfRegisteredLibraries 128
0031 #define smr_maximumFileNameSize 1024
0032 #define smr_codeNULL 0
0033 #define smr_codeMemoryAllocating 1
0034 enum smr_status { smr_status_Ok = 0, smr_status_Info, smr_status_Warning, smr_status_Error };
0035 typedef char *(*smr_userInterface)( void *userData );
0036
0037 typedef struct statusMessageReport {
0038 struct statusMessageReport *next;
0039 enum smr_status status;
0040 int libraryID;
0041 int code;
0042 int line;
0043 char fileName[smr_maximumFileNameSize+1];
0044 char function[smr_maximumFileNameSize+1];
0045 char *message;
0046 } statusMessageReport;
0047
0048 typedef struct statusMessageReporting {
0049 enum smr_status verbosity;
0050 statusMessageReport report;
0051 } statusMessageReporting;
0052
0053 int smr_setup( void );
0054 int smr_cleanup( void );
0055
0056 int smr_registerLibrary( char const *libraryName );
0057 int smr_numberOfRegisteredLibraries( void );
0058 char const *smr_getRegisteredLibrarysName( int ID );
0059
0060 statusMessageReporting *smr_new( statusMessageReporting *smr, enum smr_status verbosity );
0061 int smr_initialize( statusMessageReporting *smr, enum smr_status verbosity );
0062 statusMessageReporting *smr_clone( statusMessageReporting const *smr );
0063 void smr_release( statusMessageReporting *smr );
0064 void *smr_free( statusMessageReporting **smr );
0065
0066 int smr_setReportInfo( statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, ... );
0067 int smr_vsetReportInfo( statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, va_list *args );
0068 int smr_setReportWarning( statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, ... );
0069 int smr_vsetReportWarning( statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, va_list *args );
0070 int smr_setReportError( statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, ... );
0071 int smr_vsetReportError( statusMessageReporting *smr, void *userInterface, char const *file, int line, char const *function, int libraryID, int code, char const *fmt, va_list *args );
0072
0073 enum smr_status smr_highestStatus( statusMessageReporting const *smr );
0074 int smr_isOk( statusMessageReporting const *smr );
0075 int smr_isInfo( statusMessageReporting const *smr );
0076 int smr_isWarning( statusMessageReporting const *smr );
0077 int smr_isError( statusMessageReporting const *smr );
0078 int smr_isWarningOrError( statusMessageReporting const *smr );
0079
0080 int smr_isReportOk( statusMessageReport const *report );
0081 int smr_isReportInfo( statusMessageReport const *report );
0082 int smr_isReportWarning( statusMessageReport const *report );
0083 int smr_isReportError( statusMessageReport const *report );
0084 int smr_isReportWarningOrError( statusMessageReport const *report );
0085
0086 int smr_numberOfReports( statusMessageReporting const *smr );
0087 statusMessageReport const *smr_firstReport( statusMessageReporting const *smr );
0088 statusMessageReport const *smr_nextReport( statusMessageReport const *report );
0089
0090 enum smr_status smr_getVerbosity( statusMessageReporting const *smr );
0091
0092 int smr_getLibraryID( statusMessageReport const *report );
0093 int smr_getCode( statusMessageReport const *report );
0094 int smr_getLine( statusMessageReport const *report );
0095 char const *smr_getFile( statusMessageReport const *report );
0096 char const *smr_getFunction( statusMessageReport const *report );
0097 char const *smr_getMessage( statusMessageReport const *report );
0098 char *smr_copyMessage( statusMessageReport const *report );
0099 char *smr_copyFullMessage( statusMessageReport const *report );
0100 void smr_print( statusMessageReporting *smr, int clear );
0101 void smr_write( statusMessageReporting *smr, FILE *f, int clear );
0102 void smr_reportPrint( statusMessageReport const *report );
0103 void smr_reportWrite( statusMessageReport const *report, FILE *f );
0104
0105 char const *smr_statusToString( enum smr_status status );
0106
0107 char *smr_allocateFormatMessage( char const *fmt, ... );
0108 char *smr_vallocateFormatMessage( char const *fmt, va_list *args );
0109
0110 void *smr_malloc( statusMessageReporting *smr, size_t size, int zero, char const *forItem, char const *file, int line, char const *function );
0111 void *smr_realloc( statusMessageReporting *smr, void *pOld, size_t size, char const *forItem, char const *file, int line, char const *function );
0112 void *smr_freeMemory( void **p );
0113 char *smr_allocateCopyString( statusMessageReporting *smr, char const *s, char const *forItem, char const *file, int line, char const *function );
0114 char *smr_allocateCopyStringN( statusMessageReporting *smr, char const *s, size_t n, char const *forItem, char const *file, int line, char const *function );
0115
0116 #define smr_malloc2( smr, size, zero, forItem ) smr_malloc( smr, size, zero, forItem, __FILE__, __LINE__, __func__ )
0117 #define smr_realloc2( smr, old, size, forItem ) smr_realloc( smr, old, size, forItem, __FILE__, __LINE__, __func__ )
0118 #define smr_freeMemory2( p ) smr_freeMemory( (void **) &p )
0119 #define smr_allocateCopyString2( smr, s, forItem ) smr_allocateCopyString( smr, s, forItem, __FILE__, __LINE__, __func__ )
0120 #define smr_allocateCopyStringN2( smr, s, n, forItem ) smr_allocateCopyStringN( smr, s, n, forItem, __FILE__, __LINE__, __func__ )
0121
0122 #define smr_setReportInfo2( smr, libraryID, code, fmt, ... ) smr_setReportInfo( smr, NULL, __FILE__, __LINE__, __func__, libraryID, code, fmt, __VA_ARGS__ )
0123 #define smr_setReportInfo2p( smr, libraryID, code, fmt ) smr_setReportInfo( smr, NULL, __FILE__, __LINE__, __func__, libraryID, code, fmt )
0124 #define smr_vsetReportInfo2( smr, libraryID, code, fmt, args ) smr_vsetReportInfo( smr, NULL, __FILE__, __LINE__, __func__, libraryID, code, fmt, args )
0125 #define smr_setReportWarning2( smr, libraryID, code, fmt, ... ) smr_setReportWarning( smr, NULL, __FILE__, __LINE__, __func__, libraryID, code, fmt, __VA_ARGS__ )
0126 #define smr_setReportWarning2p( smr, libraryID, code, fmt ) smr_setReportWarning( smr, NULL, __FILE__, __LINE__, __func__, libraryID, code, fmt )
0127 #define smr_vsetReportWarning2( smr, libraryID, code, fmt, args ) smr_vsetReportWarning( smr, NULL, __FILE__, __LINE__, __func__, libraryID, code, fmt, args )
0128 #define smr_setReportError2( smr, libraryID, code, fmt, ... ) smr_setReportError( smr, NULL, __FILE__, __LINE__, __func__, libraryID, code, fmt, __VA_ARGS__ )
0129 #define smr_setReportError2p( smr, libraryID, code, fmt ) smr_setReportError( smr, NULL, __FILE__, __LINE__, __func__, libraryID, code, fmt )
0130 #define smr_vsetReportError2( smr, libraryID, code, fmt, args ) smr_vsetReportError( smr, NULL, __FILE__, __LINE__, __func__, libraryID, code, fmt, args )
0131
0132 #define smr_setReportInfo3( smr, userInterface, libraryID, code, fmt, ... ) smr_setReportInfo( smr, userInterface, __FILE__, __LINE__, __func__, libraryID, code, fmt, __VA_ARGS__ )
0133 #define smr_setReportInfo3p( smr, userInterface, libraryID, code, fmt ) smr_setReportInfo( smr, userInterface, __FILE__, __LINE__, __func__, libraryID, code, fmt )
0134 #define smr_vsetReportInfo3( smr, userInterface, libraryID, code, fmt, args ) smr_vsetReportInfo( smr, userInterface, __FILE__, __LINE__, __func__, libraryID, code, fmt, args )
0135 #define smr_setReportWarning3( smr, userInterface, libraryID, code, fmt, ... ) smr_setReportWarning( smr, userInterface, __FILE__, __LINE__, __func__, libraryID, code, fmt, __VA_ARGS__ )
0136 #define smr_setReportWarning3p( smr, userInterface, libraryID, code, fmt ) smr_setReportWarning( smr, userInterface, __FILE__, __LINE__, __func__, libraryID, code, fmt )
0137 #define smr_vsetReportWarning3( smr, userInterface, libraryID, code, fmt, args ) smr_vsetReportWarning( smr, userInterface, __FILE__, __LINE__, __func__, libraryID, code, fmt, args )
0138 #define smr_setReportError3( smr, userInterface, libraryID, code, fmt, ... ) smr_setReportError( smr, userInterface, __FILE__, __LINE__, __func__, libraryID, code, fmt, __VA_ARGS__ )
0139 #define smr_setReportError3p( smr, userInterface, libraryID, code, fmt ) smr_setReportError( smr, userInterface, __FILE__, __LINE__, __func__, libraryID, code, fmt )
0140 #define smr_vsetReportError3( smr, userInterface, libraryID, code, fmt, args ) smr_vsetReportError( smr, userInterface, __FILE__, __LINE__, __func__, libraryID, code, fmt, args )
0141
0142 #if defined __cplusplus
0143 }
0144 #endif
0145
0146 #endif