/* * $Id$ */ #include #include #include #include extern HB_ITEM errorBlock; extern STACK stack; extern SYMBOL symEval; PHB_ITEM hb_errNew( void ) { PHB_ITEM pReturn = hb_itemNew( NULL ); PushSymbol( GetDynSym( "ERRORNEW" )->pSymbol ); PushNil(); Do( 0 ); ItemCopy( pReturn, &stack.Return ); return pReturn; } WORD hb_errLaunch( PHB_ITEM pError ) { PushSymbol( &symEval ); Push( &errorBlock ); Push( pError ); Do( 1 ); return stack.Return.item.asInteger.value; /* TODO: hb_parnl( -1 ) */ } void hb_errRelease( PHB_ITEM pError ) { hb_itemRelease( pError ); } char * hb_errGetDescription( PHB_ITEM pError ) { PushSymbol( GetDynSym( "DESCRIPTION" )->pSymbol ); Push( pError ); Do( 0 ); return stack.Return.item.asString.value; } PHB_ITEM hb_errPutDescription( PHB_ITEM pError, char * szDescription ) { PushSymbol( GetDynSym( "_DESCRIPTION" )->pSymbol ); Push( pError ); PushString( szDescription, strlen( szDescription ) ); Do( 1 ); return pError; } char * hb_errGetFileName( PHB_ITEM pError ) { PushSymbol( GetDynSym( "FILENAME" )->pSymbol ); Push( pError ); Do( 0 ); return stack.Return.item.asString.value; } PHB_ITEM hb_errPutFileName( PHB_ITEM pError, char * szFileName ) { PushSymbol( GetDynSym( "_FILENAME" )->pSymbol ); Push( pError ); PushString( szFileName, strlen( szFileName ) ); Do( 1 ); return pError; } USHORT hb_errGetGenCode( PHB_ITEM pError ) { PushSymbol( GetDynSym( "GENCODE" )->pSymbol ); Push( pError ); Do( 0 ); return stack.Return.item.asInteger.value; } PHB_ITEM hb_errPutGenCode( PHB_ITEM pError, USHORT uiGenCode ) { PushSymbol( GetDynSym( "_GENCODE" )->pSymbol ); Push( pError ); PushInteger( uiGenCode ); Do( 1 ); return pError; } char * hb_errGetOperation( PHB_ITEM pError ) { PushSymbol( GetDynSym( "OPERATION" )->pSymbol ); Push( pError ); Do( 0 ); return stack.Return.item.asString.value; } PHB_ITEM hb_errPutOperation( PHB_ITEM pError, char * szOperation ) { PushSymbol( GetDynSym( "_OPERATION" )->pSymbol ); Push( pError ); PushString( szOperation, strlen( szOperation ) ); Do( 1 ); return pError; } USHORT hb_errGetOsCode( PHB_ITEM pError ) { PushSymbol( GetDynSym( "OSCODE" )->pSymbol ); Push( pError ); Do( 0 ); return stack.Return.item.asInteger.value; } PHB_ITEM hb_errPutOsCode( PHB_ITEM pError, USHORT uiOsCode ) { PushSymbol( GetDynSym( "_OSCODE" )->pSymbol ); Push( pError ); PushInteger( uiOsCode ); Do( 1 ); return pError; } USHORT hb_errGetSeverity( PHB_ITEM pError ) { PushSymbol( GetDynSym( "SEVERITY" )->pSymbol ); Push( pError ); Do( 0 ); return stack.Return.item.asInteger.value; } PHB_ITEM hb_errPutSeverity( PHB_ITEM pError, USHORT uiSeverity ) { PushSymbol( GetDynSym( "_SEVERITY" )->pSymbol ); Push( pError ); PushInteger( uiSeverity ); Do( 1 ); return pError; } USHORT hb_errGetSubCode( PHB_ITEM pError ) { PushSymbol( GetDynSym( "SUBCODE" )->pSymbol ); Push( pError ); Do( 0 ); return stack.Return.item.asInteger.value; } PHB_ITEM hb_errPutSubCode( PHB_ITEM pError, USHORT uiSubCode ) { PushSymbol( GetDynSym( "_SUBCODE" )->pSymbol ); Push( pError ); PushInteger( uiSubCode ); Do( 1 ); return pError; } char * hb_errGetSubSystem( PHB_ITEM pError ) { PushSymbol( GetDynSym( "SUBSYSTEM" )->pSymbol ); Push( pError ); Do( 0 ); return stack.Return.item.asString.value; } PHB_ITEM hb_errPutSubSystem( PHB_ITEM pError, char * szSubSystem ) { PushSymbol( GetDynSym( "_SUBSYSTEM" )->pSymbol ); Push( pError ); PushString( szSubSystem, strlen( szSubSystem ) ); Do( 1 ); return pError; } USHORT hb_errGetTries( PHB_ITEM pError ) { PushSymbol( GetDynSym( "TRIES" )->pSymbol ); Push( pError ); Do( 0 ); return stack.Return.item.asInteger.value; } PHB_ITEM hb_errPutTries( PHB_ITEM pError, USHORT uiTries ) { PushSymbol( GetDynSym( "_TRIES" )->pSymbol ); Push( pError ); PushInteger( uiTries ); Do( 1 ); return pError; } USHORT hb_errGetFlags( PHB_ITEM pError ) { USHORT uiFlags = EF_NONE; /* ; */ PushSymbol( GetDynSym( "CANRETRY" )->pSymbol ); Push( pError ); Do( 0 ); if (stack.Return.item.asLogical.value) uiFlags |= EF_CANRETRY; /* ; */ PushSymbol( GetDynSym( "CANSUBSTITUTE" )->pSymbol ); Push( pError ); Do( 0 ); if (stack.Return.item.asLogical.value) uiFlags |= EF_CANSUBSTITUTE; /* ; */ PushSymbol( GetDynSym( "CANDEFAULT" )->pSymbol ); Push( pError ); Do( 0 ); if (stack.Return.item.asLogical.value) uiFlags |= EF_CANDEFAULT; /* ; */ return uiFlags; } PHB_ITEM hb_errPutFlags( PHB_ITEM pError, USHORT uiFlags ) { PushSymbol( GetDynSym( "_CANRETRY" )->pSymbol ); Push( pError ); PushLogical( uiFlags & EF_CANRETRY ); Do( 1 ); /* ; */ PushSymbol( GetDynSym( "_CANSUBSTITUTE" )->pSymbol ); Push( pError ); PushLogical( uiFlags & EF_CANSUBSTITUTE ); Do( 1 ); /* ; */ PushSymbol( GetDynSym( "_CANDEFAULT" )->pSymbol ); Push( pError ); PushLogical( uiFlags & EF_CANDEFAULT ); Do( 1 ); /* ; */ return pError; } /* Wrappers for hb_errLaunch() */ WORD hb_errorRT_BASE( ULONG ulGenCode, ULONG ulSubCode, char* szDescription, char* szOperation ) { PHB_ITEM pError = hb_errNew(); WORD wRetVal; hb_errPutSeverity( pError, ES_ERROR ); hb_errPutSubSystem( pError, HB_ERR_SS_BASE ); hb_errPutGenCode( pError, ulGenCode ); hb_errPutSubCode( pError, ulSubCode ); hb_errPutDescription( pError, szDescription ); hb_errPutOperation( pError, szOperation ); wRetVal = hb_errLaunch( pError ); hb_errRelease( pError ); return wRetVal; }