00001 #ifndef __J2K__JErrorController_CPP__
00002 #define __J2K__JErrorController_CPP__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <j2k/Fred/Error/JErrorController.hpp>
00017
00018
00019 JErrorController::JErrorController()
00020 {
00021 array = new JErrorHandler*[ __J2K__MAX_ERROR ];
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 register int i = 0;
00032 defaultHandler = new JErrorHandler();
00033
00034 for( ; i < __J2K__MAX_ERROR; i++ ) {
00035 array[ i ] = defaultHandler;
00036 }
00037 }
00038
00039 JErrorController::~JErrorController()
00040 {
00041
00042 register int i = 0;
00043 for( ; i < __J2K__MAX_ERROR; i++ ) {
00044 if ( array[i] != defaultHandler ) {
00045 delete array[ i ];
00046 }
00047 }
00048 delete defaultHandler;
00049 delete[] array;
00050 }
00051
00052
00053
00054
00055
00056 void JErrorController::call(
00057 JErrorLevel level, int no, const char* errmsg,
00058 int line, const char* file )
00059 {
00060 register int n = (int)no;
00061
00062 if ( n < 0 ) { n += __J2K__QB_OFFSET; }
00063 if ( EAGAIN == 35 && n == 35 ) { n = 11; }
00064 if ( ENAMETOOLONG == 63 && n == 63 ) { n = 78; }
00065
00066 #ifndef _WIN32
00067 if ( EWOULDBLOCK == 35 && n == 35 ) { n = 11; }
00068 if ( EALREADY == 37 && n == 37 ) { n = 149; }
00069 if ( EALREADY == EBUSY && n == EBUSY ) { n = 16; }
00070 if ( ELOOP == 62 && n == 62 ) { n = 90; }
00071 if ( ESTALE == 70 && n == 70 ) { n = 151; }
00072 if ( EREMOTE == 71 && n == 71 ) { n = 66; }
00073 if ( EOPNOTSUPP == 103 && n == 103 ) { n = 122; }
00074 if ( ESTALE == 122 && n == 122 ) { n = 151; }
00075 #endif
00076
00077 array[ n ]->elem( level, (JErrorNo)n, errmsg, line, file );
00078 }
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 void JErrorController::add(
00089 JErrorNo no, void (*fn)( MC_JErrorHandlerArg ), short id
00090 )
00091 {
00092
00093 register int n = (int)no;
00094 JErrorHandler* newHandler = new JErrorHandler( fn, array[ n ], id );
00095 array[ n ] = newHandler;
00096 }
00097
00098
00099
00100
00101
00102
00103
00104 void JErrorController::remove( JErrorNo no )
00105 {
00106
00107 register int n = (int)no;
00108 JErrorHandler* temp = array[n]->next;
00109
00110
00111 array[n]->next = NULL;
00112
00113 if ( array[n] != defaultHandler ) {
00114 delete array[n];
00115 }
00116 array[n] = temp;
00117 }
00118
00119 short JErrorController::getID( JErrorNo no )
00120 {
00121 register int n = (int)no;
00122 JErrorHandler* temp = array[n];
00123
00124 if ( temp == NULL ) return -1;
00125
00126 return temp->id;
00127 }
00128
00129 #endif