261 lines
7.3 KiB
C++
261 lines
7.3 KiB
C++
/*
|
|
* NOTICE and LICENSE for Tecplot Input/Output Library (TecIO) - OpenFOAM
|
|
*
|
|
* Copyright (C) 1988-2009 Tecplot, Inc. All rights reserved worldwide.
|
|
*
|
|
* Tecplot hereby grants OpenCFD limited authority to distribute without
|
|
* alteration the source code to the Tecplot Input/Output library, known
|
|
* as TecIO, as part of its distribution of OpenFOAM and the
|
|
* OpenFOAM_to_Tecplot converter. Users of this converter are also hereby
|
|
* granted access to the TecIO source code, and may redistribute it for the
|
|
* purpose of maintaining the converter. However, no authority is granted
|
|
* to alter the TecIO source code in any form or manner.
|
|
*
|
|
* This limited grant of distribution does not supersede Tecplot, Inc.'s
|
|
* copyright in TecIO. Contact Tecplot, Inc. for further information.
|
|
*
|
|
* Tecplot, Inc.
|
|
* 3535 Factoria Blvd, Ste. 550
|
|
* Bellevue, WA 98006, USA
|
|
* Phone: +1 425 653 1200
|
|
* http://www.tecplot.com/
|
|
*
|
|
*/
|
|
#include "stdafx.h"
|
|
#include "MASTER.h"
|
|
#define TECPLOTENGINEMODULE
|
|
|
|
/*
|
|
*****************************************************************
|
|
*****************************************************************
|
|
******* ********
|
|
****** Copyright (C) 1988-2008 Tecplot, Inc. *******
|
|
******* ********
|
|
*****************************************************************
|
|
*****************************************************************
|
|
*/
|
|
|
|
#define TASSERTMODULE
|
|
#include "GLOBAL.h"
|
|
#include "TASSERT.h"
|
|
#include "Q_UNICODE.h"
|
|
#if defined TECPLOTKERNEL
|
|
/* CORE SOURCE CODE REMOVED */
|
|
#if defined (MSWIN)
|
|
#endif
|
|
#endif
|
|
|
|
#include "STRUTIL.h"
|
|
|
|
using namespace tecplot::strutil;
|
|
using namespace std;
|
|
|
|
#define MAX_ERRMSG_LENGTH 2096
|
|
|
|
/* the mopup from assert and the writing out of crash.lay are */
|
|
/* used by TUASSERT and thus are needed even if NO_ASSERTS */
|
|
/* is set */
|
|
#if !defined NO_TU_ASSERTS || !defined NO_ASSERTS
|
|
|
|
#if defined TECPLOTKERNEL
|
|
/* CORE SOURCE CODE REMOVED */
|
|
#if defined MSWIN /* ...Unix/Linux calls this via signal handlers */
|
|
#endif
|
|
#endif /* TECPLOTKERNEL */
|
|
|
|
#endif /* Mopup function needed ... */
|
|
|
|
|
|
|
|
#if !defined STD_ASSERTS
|
|
/*
|
|
* Define the final assertion notification function.
|
|
*/
|
|
#if defined UNIXX && !defined NO_ASSERTS
|
|
/*******************************************************************
|
|
* *
|
|
* UNIX *
|
|
* *
|
|
*******************************************************************/
|
|
|
|
|
|
# if defined NDEBUG
|
|
/*
|
|
* if NDEBUG is defined __assert is NOT defined so we must supply
|
|
* our own assertion notification function.....
|
|
*/
|
|
# define ASSERT assert
|
|
static void UnixAssert(const char *expression,
|
|
const char *file_name,
|
|
int line)
|
|
{
|
|
fprintf(stderr, "Assertion: %s\n"
|
|
"Tecplot version: %s\n"
|
|
"File Name: %s\n"
|
|
"Line Number: %d\n",
|
|
expression, TecVersionId, file_name, line);
|
|
exit(ExitCode_AssertionFailure);
|
|
}
|
|
static TAssertFailureNotifyFunc assert_failure_notify = UnixAssert;
|
|
# else
|
|
/*
|
|
* NDEBUG is not defined so __assert is available....
|
|
*/
|
|
# if defined LINUX
|
|
# define LOWLEVELASSERTFUNCTION __linuxassertproxy
|
|
/*
|
|
* In linux, __assert does not exist but rather
|
|
* __assert_fail which has a differnt API. Thus
|
|
* a proxy is provided
|
|
*/
|
|
static void __linuxassertproxy(const char *__assertion,
|
|
const char *__file,
|
|
int __line)
|
|
{
|
|
__assert_fail(__assertion, __file, __line, __ASSERT_FUNCTION);
|
|
}
|
|
# elif defined DARWIN
|
|
# define LOWLEVELASSERTFUNCTION __darwinassertproxy
|
|
/*
|
|
* In Darwin (Mac OS X), __assert is #defined to a call to __eprintf,
|
|
* which also has a different API. Another proxy...
|
|
*/
|
|
static void __darwinassertproxy(const char *__assertion,
|
|
const char *__file,
|
|
int __line)
|
|
{
|
|
__eprintf("Assertion: %s\n"
|
|
"Tecplot version: %s\n"
|
|
"File Name: %s\n"
|
|
"Line Number: %d\n",
|
|
__assertion, TecVersionId, __file, (unsigned)__line);
|
|
}
|
|
# else
|
|
# define LOWLEVELASSERTFUNCTION __assert
|
|
# endif
|
|
|
|
static TAssertFailureNotifyFunc assert_failure_notify = (TAssertFailureNotifyFunc) LOWLEVELASSERTFUNCTION;
|
|
|
|
# endif
|
|
#endif /* UNIXX */
|
|
|
|
#if defined UNIXX && !defined NO_ASSERTS
|
|
/*
|
|
* Replace the current assert failure notification function and
|
|
* return the current one.
|
|
*
|
|
* Assumptions:
|
|
* new function points to valid function (not null) that
|
|
* conforms to the specified prototype
|
|
*
|
|
* Guarantees:
|
|
* result is a pointer to the previously installed
|
|
* function (not null)
|
|
*/
|
|
TAssertFailureNotifyFunc InstallTAssertFailureNotify(
|
|
TAssertFailureNotifyFunc new_function) /* new notification function */
|
|
{
|
|
TAssertFailureNotifyFunc result = 0; /* old function address */
|
|
|
|
ASSERT(new_function != 0);
|
|
|
|
result = assert_failure_notify;
|
|
assert_failure_notify = new_function;
|
|
|
|
ASSERT(result != 0);
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* Perform the installed assert failure notification action.
|
|
*/
|
|
void TAssert(const char *expression, /* text representation of the assertion */
|
|
const char *file_name, /* name of the file containing the assertion */
|
|
int line) /* line number in the file of the assertion */
|
|
{
|
|
static Boolean_t InTAssert = FALSE;
|
|
#if defined TECPLOTKERNEL
|
|
/* CORE SOURCE CODE REMOVED */
|
|
#endif
|
|
char Message[MAX_ERRMSG_LENGTH+1];
|
|
ASSERT(expression != 0 && strlen(expression) != 0);
|
|
ASSERT(file_name != 0 && strlen(file_name) != 0);
|
|
ASSERT(line >= 1);
|
|
|
|
/* check for recursion */
|
|
if (InTAssert)
|
|
{
|
|
fprintf(stderr, "Already in assert!\n");
|
|
fprintf(stderr, "Assertion: %s\n"
|
|
"Tecplot version: %s\n"
|
|
"File Name: %s\n"
|
|
"Line Number: %d\n",
|
|
expression, TecVersionId, file_name, line);
|
|
PrintCurBacktrace(stderr, 100);
|
|
ASSERT(FALSE); /*... really exit */
|
|
}
|
|
|
|
InTAssert = TRUE;
|
|
|
|
sprintf(Message, "Assertion: %s\n"
|
|
"Tecplot version: %s\n"
|
|
"File Name: %s\n"
|
|
"Line Number: %d\n",
|
|
expression, TecVersionId, file_name, line);
|
|
|
|
#if defined TECPLOTKERNEL
|
|
/* CORE SOURCE CODE REMOVED */
|
|
#endif
|
|
|
|
# if defined TECPLOTKERNEL
|
|
/* CORE SOURCE CODE REMOVED */
|
|
# else
|
|
fprintf(stderr, "%s", Message);
|
|
# endif
|
|
|
|
#if defined TECPLOTKERNEL
|
|
/* CORE SOURCE CODE REMOVED */
|
|
#endif
|
|
|
|
(*assert_failure_notify)(expression, file_name, line);
|
|
#if defined TECPLOTKERNEL
|
|
/* CORE SOURCE CODE REMOVED */
|
|
#endif
|
|
|
|
#if defined TECPLOTKERNEL
|
|
/* CORE SOURCE CODE REMOVED */
|
|
#endif
|
|
|
|
InTAssert = FALSE; /* just in case assert_failure_notify has an ignore */
|
|
}
|
|
#endif /* defined UNIXX && !defined NO_ASSERTS */
|
|
#endif /* STD_ASSERTS */
|
|
|
|
|
|
#if defined MSWIN && defined TECPLOTKERNEL
|
|
/* CORE SOURCE CODE REMOVED */
|
|
#if defined CHECKED_BUILD
|
|
#endif
|
|
#if !defined ENGINE
|
|
# if defined CHECKED_BUILD
|
|
# endif // CHECKED_BUILD
|
|
#endif //!ENGINE
|
|
#endif /* MSWIN */
|
|
|
|
|
|
#if defined NICE_NOT_IMPLEMENTED
|
|
static Boolean_t NotImplementedCalled = FALSE;
|
|
void NiceNotImplemented(void)
|
|
{
|
|
if (!NotImplementedCalled)
|
|
{
|
|
Warning("Not Implemented!");
|
|
NotImplementedCalled = TRUE;
|
|
}
|
|
}
|
|
#endif
|