1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sw.hxx" 26 27 #ifdef DBG_UTIL 28 29 #define _ERRHDL_CXX 30 31 32 #include "stdlib.h" 33 #include <tools/debug.hxx> 34 #include <vcl/svapp.hxx> 35 #include <vcl/sound.hxx> 36 #include <errhdl.hxx> 37 #include <error.h> // fuer die defines von ERR_SW6MSG_ ... 38 39 #ifndef CVBREAK 40 #define CVBREAK 41 #endif 42 43 sal_Bool bAssertFail = sal_False; // ist gerade eine Assertbox oben ? 44 sal_Bool bAssert = sal_False; // sal_True, wenn mal ein ASSERT kam. 45 46 /*------------------------------------------------------------------------ 47 Ausgabe einer Fehlermeldung inkl. Bedingung, Dateiname und Zeilennummer 48 wo der Fehler auftrat. 49 Die Funktion wird durch das ASSERT Makro gerufen! 50 Parameter: 51 char *pError Fehlermeldung 52 char *pFileName Filename in dem der Fehler auftrat 53 sal_uInt16 nLine Zeilennummer in dem der Fehler auftrat 54 ------------------------------------------------------------------------*/ 55 56 void AssertFail( const sal_Char* pError, const sal_Char* pFileName, sal_uInt16 nLine ) 57 { 58 CVBREAK; 59 // NOTE4("ASSERT: %s at %d: %s\n", pFileName, nLine, pError); 60 bAssert = sal_True; 61 62 if( !bAssertFail && GetpApp() && GetpApp()->IsInMain() ) 63 { 64 bAssertFail = sal_True; 65 ByteString aErr; 66 aErr = "Assertion failed\n==================\nFILE : "; 67 aErr += pFileName; 68 aErr += " at line "; 69 aErr += ByteString::CreateFromInt32( nLine ); 70 aErr += "\nERROR : "; 71 aErr += pError; 72 73 ByteString aTmp( getenv( "SW_NOBEEP" ) ); 74 if ( aTmp != "sal_True" ) 75 Sound::Beep(SOUND_ERROR); 76 77 #if defined( UNX ) && !defined( DBG_UTIL ) 78 DBG_ERROR( aErr.GetBuffer() ); // DbgErr ist in UNIX-nicht Produkt-Versionen nicht definiert 79 #else 80 DbgError( aErr.GetBuffer() ); 81 #endif 82 bAssertFail = sal_False; 83 } 84 else 85 { 86 Sound::Beep(SOUND_ERROR); 87 Sound::Beep(SOUND_ERROR); 88 Sound::Beep(SOUND_ERROR); 89 if( !bAssertFail ) 90 *(short *)0 = 4711; // UAE ausloesen 91 } 92 } 93 94 /*------------------------------------------------------------------------ 95 Ausgabe einer Fehlermeldung inkl. Bedingung, Dateiname und Zeilennummer 96 wo der Fehler auftrat. 97 Die Funktion wird durch das ASSERT Makro gerufen! 98 Parameter: 99 sal_uInt16 nErrorId Id fuer Fehlermeldung 100 char *pFileName Filename in dem der Fehler auftrat 101 sal_uInt16 nLine Zeilennummer in dem der Fehler auftrat 102 ------------------------------------------------------------------------*/ 103 104 void AssertFail( sal_uInt16 nErrorId, const sal_Char* pFileName, sal_uInt16 nLine ) 105 { 106 // Umsetzung der ErrorId in eine Fehlermeldung 107 static const sal_Char 108 /* Error Fehlermeldungen zugriffe ausserhalb eines Bereiches */ 109 sERR_VAR_IDX[] = "Op[]", 110 sERR_OUTOFSCOPE[] = "Zugriff ausserhalb des Bereiches", 111 /* Error Codes fuer Numerierungsregeln */ 112 sERR_NUMLEVEL[] = "Falscher Num-Level", 113 /* Error Codes fuer TxtNode */ 114 sERR_NOHINTS[] = "Zugriff auf ungueltiges HintsArray", 115 sERR_UNKNOWN[] = "???"; 116 117 static const sal_Char* aErrStrTab[ ERR_SWGMSG_END - ERR_SWGMSG_START +1 ] = 118 { 119 sERR_VAR_IDX, sERR_OUTOFSCOPE, sERR_NUMLEVEL, sERR_NOHINTS 120 }; 121 122 const sal_Char* pMsg; 123 if( nErrorId >= ERR_SWGMSG_START && nErrorId < ERR_SWGMSG_END ) 124 pMsg = aErrStrTab[ nErrorId - ERR_SWGMSG_START ]; 125 else 126 pMsg = sERR_UNKNOWN; 127 128 AssertFail( pMsg, pFileName, nLine ); 129 } 130 131 #endif // DBG_UTIL 132 133