Blame qtools/qglobal.cpp

Packit 1c1d7e
/****************************************************************************
Packit 1c1d7e
** 
Packit 1c1d7e
**
Packit 1c1d7e
** Global functions
Packit 1c1d7e
**
Packit 1c1d7e
** Created : 920604
Packit 1c1d7e
**
Packit 1c1d7e
** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
Packit 1c1d7e
**
Packit 1c1d7e
** This file is part of the tools module of the Qt GUI Toolkit.
Packit 1c1d7e
**
Packit 1c1d7e
** This file may be distributed under the terms of the Q Public License
Packit 1c1d7e
** as defined by Trolltech AS of Norway and appearing in the file
Packit 1c1d7e
** LICENSE.QPL included in the packaging of this file.
Packit 1c1d7e
**
Packit 1c1d7e
** This file may be distributed and/or modified under the terms of the
Packit 1c1d7e
** GNU General Public License version 2 as published by the Free Software
Packit 1c1d7e
** Foundation and appearing in the file LICENSE.GPL included in the
Packit 1c1d7e
** packaging of this file.
Packit 1c1d7e
**
Packit 1c1d7e
** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
Packit 1c1d7e
** licenses may use this file in accordance with the Qt Commercial License
Packit 1c1d7e
** Agreement provided with the Software.
Packit 1c1d7e
**
Packit 1c1d7e
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
Packit 1c1d7e
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Packit 1c1d7e
**
Packit 1c1d7e
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
Packit 1c1d7e
**   information about Qt Commercial License Agreements.
Packit 1c1d7e
** See http://www.trolltech.com/qpl/ for QPL licensing information.
Packit 1c1d7e
** See http://www.trolltech.com/gpl/ for GPL licensing information.
Packit 1c1d7e
**
Packit 1c1d7e
** Contact info@trolltech.com if any conditions of this licensing are
Packit 1c1d7e
** not clear to you.
Packit 1c1d7e
**
Packit 1c1d7e
**********************************************************************/
Packit 1c1d7e
Packit 1c1d7e
#include "qglobal.h"
Packit 1c1d7e
#include "qasciidict.h"
Packit 1c1d7e
#include "qstring.h"
Packit 1c1d7e
#include <stdio.h>
Packit 1c1d7e
#include <stdarg.h>
Packit 1c1d7e
#include <stdlib.h>
Packit 1c1d7e
Packit 1c1d7e
// NOT REVISED
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
  \relates QApplication
Packit 1c1d7e
  Returns the Qt version number for the library, typically "1.30"
Packit 1c1d7e
  or "2.1.0".
Packit 1c1d7e
*/
Packit 1c1d7e
Packit 1c1d7e
const char *qVersion()
Packit 1c1d7e
{
Packit 1c1d7e
    return QT_VERSION_STR;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
/*****************************************************************************
Packit 1c1d7e
  System detection routines
Packit 1c1d7e
 *****************************************************************************/
Packit 1c1d7e
Packit 1c1d7e
static bool si_alreadyDone = FALSE;
Packit 1c1d7e
static int  si_wordSize;
Packit 1c1d7e
static bool si_bigEndian;
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
  \relates QApplication
Packit 1c1d7e
  Obtains information about the system.
Packit 1c1d7e
Packit 1c1d7e
  The system's word size in bits (typically 32) is returned in \e *wordSize.
Packit 1c1d7e
  The \e *bigEndian is set to TRUE if this is a big-endian machine,
Packit 1c1d7e
  or to FALSE if this is a little-endian machine.
Packit 1c1d7e
Packit 1c1d7e
  This function calls qFatal() with a message if the computer is truly weird
Packit 1c1d7e
  (i.e. different endianness for 16 bit and 32 bit integers).
Packit 1c1d7e
*/
Packit 1c1d7e
Packit 1c1d7e
bool qSysInfo( int *wordSize, bool *bigEndian )
Packit 1c1d7e
{
Packit 1c1d7e
#if defined(CHECK_NULL)
Packit 1c1d7e
    ASSERT( wordSize != 0 );
Packit 1c1d7e
    ASSERT( bigEndian != 0 );
Packit 1c1d7e
#endif
Packit 1c1d7e
Packit 1c1d7e
    if ( si_alreadyDone ) {			// run it only once
Packit 1c1d7e
	*wordSize  = si_wordSize;
Packit 1c1d7e
	*bigEndian = si_bigEndian;
Packit 1c1d7e
	return TRUE;
Packit 1c1d7e
    }
Packit 1c1d7e
    si_alreadyDone = TRUE;
Packit 1c1d7e
Packit 1c1d7e
    si_wordSize = 0;
Packit 1c1d7e
    uint n = (uint)(~0);
Packit 1c1d7e
    while ( n ) {				// detect word size
Packit 1c1d7e
	si_wordSize++;
Packit 1c1d7e
	n /= 2;
Packit 1c1d7e
    }
Packit 1c1d7e
    *wordSize = si_wordSize;
Packit 1c1d7e
Packit 1c1d7e
    if ( *wordSize != 64 &&
Packit 1c1d7e
	 *wordSize != 32 &&
Packit 1c1d7e
	 *wordSize != 16 ) {			// word size: 16, 32 or 64
Packit 1c1d7e
#if defined(CHECK_RANGE)
Packit 1c1d7e
	qFatal( "qSysInfo: Unsupported system word size %d", *wordSize );
Packit 1c1d7e
#endif
Packit 1c1d7e
	return FALSE;
Packit 1c1d7e
    }
Packit 1c1d7e
    if ( sizeof(Q_INT8) != 1 || sizeof(Q_INT16) != 2 || sizeof(Q_INT32) != 4 ||
Packit 1c1d7e
	 sizeof(float) != 4 || sizeof(double) != 8 ) {
Packit 1c1d7e
#if defined(CHECK_RANGE)
Packit 1c1d7e
	qFatal( "qSysInfo: Unsupported system data type size" );
Packit 1c1d7e
#endif
Packit 1c1d7e
	return FALSE;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    bool  be16, be32;				// determine byte ordering
Packit 1c1d7e
    short ns = 0x1234;
Packit 1c1d7e
    int	  nl = 0x12345678;
Packit 1c1d7e
Packit 1c1d7e
    unsigned char *p = (unsigned char *)(&ns);	// 16-bit integer
Packit 1c1d7e
    be16 = *p == 0x12;
Packit 1c1d7e
Packit 1c1d7e
    p = (unsigned char *)(&nl);			// 32-bit integer
Packit 1c1d7e
    if ( p[0] == 0x12 && p[1] == 0x34 && p[2] == 0x56 && p[3] == 0x78 )
Packit 1c1d7e
	be32 = TRUE;
Packit 1c1d7e
    else
Packit 1c1d7e
    if ( p[0] == 0x78 && p[1] == 0x56 && p[2] == 0x34 && p[3] == 0x12 )
Packit 1c1d7e
	be32 = FALSE;
Packit 1c1d7e
    else
Packit 1c1d7e
	be32 = !be16;
Packit 1c1d7e
Packit 1c1d7e
    if ( be16 != be32 ) {			// strange machine!
Packit 1c1d7e
#if defined(CHECK_RANGE)
Packit 1c1d7e
	qFatal( "qSysInfo: Inconsistent system byte order" );
Packit 1c1d7e
#endif
Packit 1c1d7e
	return FALSE;
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    *bigEndian = si_bigEndian = be32;
Packit 1c1d7e
    return TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
/*****************************************************************************
Packit 1c1d7e
  Debug output routines
Packit 1c1d7e
 *****************************************************************************/
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
  \fn void qDebug( const char *msg, ... )
Packit 1c1d7e
Packit 1c1d7e
  \relates QApplication
Packit 1c1d7e
  Prints a debug message, or calls the message handler (if it has been
Packit 1c1d7e
  installed).
Packit 1c1d7e
Packit 1c1d7e
  This function takes a format string and a list of arguments, similar to
Packit 1c1d7e
  the C printf() function.
Packit 1c1d7e
Packit 1c1d7e
  Example:
Packit 1c1d7e
  \code
Packit 1c1d7e
    qDebug( "my window handle = %x", myWidget->id() );
Packit 1c1d7e
  \endcode
Packit 1c1d7e
Packit 1c1d7e
  Under X11, the text is printed to stderr.  Under Windows, the text is
Packit 1c1d7e
  sent to the debugger.
Packit 1c1d7e
Packit 1c1d7e
  \warning The internal buffer is limited to 8196 bytes (including the
Packit 1c1d7e
  0-terminator).
Packit 1c1d7e
Packit 1c1d7e
  \sa qWarning(), qFatal(), qInstallMsgHandler(),
Packit 1c1d7e
  \link debug.html Debugging\endlink
Packit 1c1d7e
*/
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
  \fn void qWarning( const char *msg, ... )
Packit 1c1d7e
Packit 1c1d7e
  \relates QApplication
Packit 1c1d7e
  Prints a warning message, or calls the message handler (if it has been
Packit 1c1d7e
  installed).
Packit 1c1d7e
Packit 1c1d7e
  This function takes a format string and a list of arguments, similar to
Packit 1c1d7e
  the C printf() function.
Packit 1c1d7e
Packit 1c1d7e
  Example:
Packit 1c1d7e
  \code
Packit 1c1d7e
    void f( int c )
Packit 1c1d7e
    {
Packit 1c1d7e
	if ( c > 200 )
Packit 1c1d7e
	    qWarning( "f: bad argument, c == %d", c );
Packit 1c1d7e
    }
Packit 1c1d7e
  \endcode
Packit 1c1d7e
Packit 1c1d7e
  Under X11, the text is printed to stderr.  Under Windows, the text is
Packit 1c1d7e
  sent to the debugger.
Packit 1c1d7e
Packit 1c1d7e
  \warning The internal buffer is limited to 8196 bytes (including the
Packit 1c1d7e
  0-terminator).
Packit 1c1d7e
Packit 1c1d7e
  \sa qDebug(), qFatal(), qInstallMsgHandler(),
Packit 1c1d7e
  \link debug.html Debugging\endlink
Packit 1c1d7e
*/
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
  \fn void qFatal( const char *msg, ... )
Packit 1c1d7e
Packit 1c1d7e
  \relates QApplication
Packit 1c1d7e
  Prints a fatal error message and exits, or calls the message handler (if it
Packit 1c1d7e
  has been installed).
Packit 1c1d7e
Packit 1c1d7e
  This function takes a format string and a list of arguments, similar to
Packit 1c1d7e
  the C printf() function.
Packit 1c1d7e
Packit 1c1d7e
  Example:
Packit 1c1d7e
  \code
Packit 1c1d7e
    int divide( int a, int b )
Packit 1c1d7e
    {
Packit 1c1d7e
	if ( b == 0 )				// program error
Packit 1c1d7e
	    qFatal( "divide: cannot divide by zero" );
Packit 1c1d7e
	return a/b;
Packit 1c1d7e
    }
Packit 1c1d7e
  \endcode
Packit 1c1d7e
Packit 1c1d7e
  Under X11, the text is printed to stderr.  Under Windows, the text is
Packit 1c1d7e
  sent to the debugger.
Packit 1c1d7e
Packit 1c1d7e
  \warning The internal buffer is limited to 8196 bytes (including the
Packit 1c1d7e
  0-terminator).
Packit 1c1d7e
Packit 1c1d7e
  \sa qDebug(), qWarning(), qInstallMsgHandler(),
Packit 1c1d7e
  \link debug.html Debugging\endlink
Packit 1c1d7e
*/
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
static msg_handler handler = 0;			// pointer to debug handler
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
#ifdef _OS_MAC_
Packit 1c1d7e
Packit 1c1d7e
static FILE * mac_debug=0;
Packit 1c1d7e
Packit 1c1d7e
void qDebug( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    mac_debug=fopen( "debug.txt", "a+" );
Packit 1c1d7e
    if(mac_debug) {
Packit 1c1d7e
	char buf[8196];
Packit 1c1d7e
	va_list ap;
Packit 1c1d7e
	va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
	if ( handler ) {
Packit 1c1d7e
	    vsprintf( buf, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    (*handler)( QtDebugMsg, buf );
Packit 1c1d7e
	} else {
Packit 1c1d7e
	    vfprintf( mac_debug, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    fprintf( mac_debug, "\n" );		// add newline
Packit 1c1d7e
	    fflush( mac_debug );
Packit 1c1d7e
	}
Packit 1c1d7e
	fclose(mac_debug);
Packit 1c1d7e
    } else {
Packit 1c1d7e
	exit(0);
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
// copied... this looks really bad.
Packit 1c1d7e
void debug( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    mac_debug=fopen( "debug.txt", "a+" );
Packit 1c1d7e
    if(mac_debug) {
Packit 1c1d7e
	char buf[8196];
Packit 1c1d7e
	va_list ap;
Packit 1c1d7e
	va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
	if ( handler ) {
Packit 1c1d7e
	    vsprintf( buf, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    (*handler)( QtDebugMsg, buf );
Packit 1c1d7e
	} else {
Packit 1c1d7e
	    vfprintf( mac_debug, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    fprintf( mac_debug, "\n" );		// add newline
Packit 1c1d7e
	    fflush( mac_debug );
Packit 1c1d7e
	}
Packit 1c1d7e
	fclose(mac_debug);
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void qWarning( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    mac_debug=fopen( "debug.txt", "a+" );
Packit 1c1d7e
    if(mac_debug) {
Packit 1c1d7e
	char buf[8196];
Packit 1c1d7e
	va_list ap;
Packit 1c1d7e
	va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
	if ( handler ) {
Packit 1c1d7e
	    vsprintf( buf, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    (*handler)( QtDebugMsg, buf );
Packit 1c1d7e
	} else {
Packit 1c1d7e
	    vfprintf( mac_debug, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    fprintf( mac_debug, "\n" );		// add newline
Packit 1c1d7e
	    fflush( mac_debug );
Packit 1c1d7e
	}
Packit 1c1d7e
	fclose(mac_debug);
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
// copied... this looks really bad.
Packit 1c1d7e
void warning( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    mac_debug=fopen( "debug.txt", "a+" );
Packit 1c1d7e
    if(mac_debug) {
Packit 1c1d7e
	char buf[8196];
Packit 1c1d7e
	va_list ap;
Packit 1c1d7e
	va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
	if ( handler ) {
Packit 1c1d7e
	    vsprintf( buf, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    (*handler)( QtDebugMsg, buf );
Packit 1c1d7e
	} else {
Packit 1c1d7e
	    vfprintf( mac_debug, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    fprintf( mac_debug, "\n" );		// add newline
Packit 1c1d7e
	    fflush( mac_debug );
Packit 1c1d7e
	}
Packit 1c1d7e
	fclose(mac_debug);
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void qFatal( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    mac_debug=fopen( "debug.txt", "a+");
Packit 1c1d7e
    if(mac_debug) {
Packit 1c1d7e
	char buf[8196];
Packit 1c1d7e
	va_list ap;
Packit 1c1d7e
	va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
	if ( handler ) {
Packit 1c1d7e
	    vsprintf( buf, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    (*handler)( QtDebugMsg, buf );
Packit 1c1d7e
	} else {
Packit 1c1d7e
	    vfprintf( mac_debug, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    fprintf( mac_debug, "\n" );		// add newline
Packit 1c1d7e
	    fflush( mac_debug );
Packit 1c1d7e
	}
Packit 1c1d7e
	fclose(mac_debug);
Packit 1c1d7e
    }
Packit 1c1d7e
    exit(0);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
// copied... this looks really bad.
Packit 1c1d7e
void fatal( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    mac_debug=fopen( "debug.txt", "a+" );
Packit 1c1d7e
    if(mac_debug) {
Packit 1c1d7e
	char buf[8196];
Packit 1c1d7e
	va_list ap;
Packit 1c1d7e
	va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
	if ( handler ) {
Packit 1c1d7e
	    vsprintf( buf, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    (*handler)( QtDebugMsg, buf );
Packit 1c1d7e
	} else {
Packit 1c1d7e
	    vfprintf( mac_debug, msg, ap );
Packit 1c1d7e
	    va_end( ap );
Packit 1c1d7e
	    fprintf( mac_debug, "\n" );		// add newline
Packit 1c1d7e
	    fflush( mac_debug );
Packit 1c1d7e
	}
Packit 1c1d7e
	fclose(mac_debug);
Packit 1c1d7e
    }
Packit 1c1d7e
    exit(0);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
#else
Packit 1c1d7e
Packit 1c1d7e
void qDebug( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    char buf[8196];
Packit 1c1d7e
    va_list ap;
Packit 1c1d7e
    va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
    if ( handler ) {
Packit 1c1d7e
	vsprintf( buf, msg, ap );		// ### vsnprintf would be great here
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	(*handler)( QtDebugMsg, buf );
Packit 1c1d7e
    } else {
Packit 1c1d7e
	vfprintf( stderr, msg, ap );
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	fprintf( stderr, "\n" );		// add newline
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
// copied... this looks really bad.
Packit 1c1d7e
void debug( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    char buf[8196];
Packit 1c1d7e
    va_list ap;
Packit 1c1d7e
    va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
    if ( handler ) {
Packit 1c1d7e
	vsprintf( buf, msg, ap );
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	(*handler)( QtDebugMsg, buf );
Packit 1c1d7e
    } else {
Packit 1c1d7e
	vfprintf( stderr, msg, ap );
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	fprintf( stderr, "\n" );		// add newline
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void qWarning( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    char buf[8196];
Packit 1c1d7e
    va_list ap;
Packit 1c1d7e
    va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
    if ( handler ) {
Packit 1c1d7e
	vsprintf( buf, msg, ap );
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	(*handler)( QtWarningMsg, buf );
Packit 1c1d7e
    } else {
Packit 1c1d7e
	vfprintf( stderr, msg, ap );
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	fprintf( stderr, "\n" );		// add newline
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
// again, copied
Packit 1c1d7e
void warning( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    char buf[8196];
Packit 1c1d7e
    va_list ap;
Packit 1c1d7e
    va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
    if ( handler ) {
Packit 1c1d7e
	vsprintf( buf, msg, ap );
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	(*handler)( QtWarningMsg, buf );
Packit 1c1d7e
    } else {
Packit 1c1d7e
	vfprintf( stderr, msg, ap );
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	fprintf( stderr, "\n" );		// add newline
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void qFatal( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    char buf[8196];
Packit 1c1d7e
    va_list ap;
Packit 1c1d7e
    va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
    if ( handler ) {
Packit 1c1d7e
	vsprintf( buf, msg, ap );
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	(*handler)( QtFatalMsg, buf );
Packit 1c1d7e
    } else {
Packit 1c1d7e
	vfprintf( stderr, msg, ap );
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	fprintf( stderr, "\n" );		// add newline
Packit 1c1d7e
#if defined(_OS_UNIX_) && defined(DEBUG)
Packit 1c1d7e
	abort();				// trap; generates core dump
Packit 1c1d7e
#else
Packit 1c1d7e
	exit( 1 );				// goodbye cruel world
Packit 1c1d7e
#endif
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
// yet again, copied
Packit 1c1d7e
void fatal( const char *msg, ... )
Packit 1c1d7e
{
Packit 1c1d7e
    char buf[8196];
Packit 1c1d7e
    va_list ap;
Packit 1c1d7e
    va_start( ap, msg );			// use variable arg list
Packit 1c1d7e
    if ( handler ) {
Packit 1c1d7e
	vsprintf( buf, msg, ap );
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	(*handler)( QtFatalMsg, buf );
Packit 1c1d7e
    } else {
Packit 1c1d7e
	vfprintf( stderr, msg, ap );
Packit 1c1d7e
	va_end( ap );
Packit 1c1d7e
	fprintf( stderr, "\n" );		// add newline
Packit 1c1d7e
#if defined(_OS_UNIX_) && defined(DEBUG)
Packit 1c1d7e
	abort();				// trap; generates core dump
Packit 1c1d7e
#else
Packit 1c1d7e
	exit( 1 );				// goodbye cruel world
Packit 1c1d7e
#endif
Packit 1c1d7e
    }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
#endif
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
  \fn void ASSERT( bool test )
Packit 1c1d7e
  \relates QApplication
Packit 1c1d7e
  Prints a warning message containing the source code file name and line number
Packit 1c1d7e
  if \e test is FALSE.
Packit 1c1d7e
Packit 1c1d7e
  This is really a macro defined in qglobal.h.
Packit 1c1d7e
Packit 1c1d7e
  ASSERT is useful for testing required conditions in your program.
Packit 1c1d7e
Packit 1c1d7e
  Example:
Packit 1c1d7e
  \code
Packit 1c1d7e
    //
Packit 1c1d7e
    // File: div.cpp
Packit 1c1d7e
    //
Packit 1c1d7e
Packit 1c1d7e
    #include <qglobal.h>
Packit 1c1d7e
Packit 1c1d7e
    int divide( int a, int b )
Packit 1c1d7e
    {
Packit 1c1d7e
	ASSERT( b != 0 );			// this is line 9
Packit 1c1d7e
	return a/b;
Packit 1c1d7e
    }
Packit 1c1d7e
  \endcode
Packit 1c1d7e
Packit 1c1d7e
  If \c b is zero, the ASSERT statement will output the following message
Packit 1c1d7e
  using the qWarning() function:
Packit 1c1d7e
  \code
Packit 1c1d7e
    ASSERT: "b == 0" in div.cpp (9)
Packit 1c1d7e
  \endcode
Packit 1c1d7e
Packit 1c1d7e
  \sa qWarning(), \link debug.html Debugging\endlink
Packit 1c1d7e
*/
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
  \fn void CHECK_PTR( void *p )
Packit 1c1d7e
  \relates QApplication
Packit 1c1d7e
  If \e p is null, a fatal messages says that the program ran out of memory
Packit 1c1d7e
  and exits.  If \e p is not null, nothing happens.
Packit 1c1d7e
Packit 1c1d7e
  This is really a macro defined in qglobal.h.
Packit 1c1d7e
Packit 1c1d7e
  Example:
Packit 1c1d7e
  \code
Packit 1c1d7e
    int *a;
Packit 1c1d7e
    CHECK_PTR( a = new int[80] );	// never do this!
Packit 1c1d7e
      // do this instead:
Packit 1c1d7e
    a = new int[80];
Packit 1c1d7e
    CHECK_PTR( a );			// this is fine
Packit 1c1d7e
  \endcode
Packit 1c1d7e
Packit 1c1d7e
  \sa qFatal(), \link debug.html Debugging\endlink
Packit 1c1d7e
*/
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
//
Packit 1c1d7e
// The CHECK_PTR macro calls this function to check if an allocation went ok.
Packit 1c1d7e
//
Packit 1c1d7e
Packit 1c1d7e
bool qt_check_pointer( bool c, const char *n, int l )
Packit 1c1d7e
{
Packit 1c1d7e
    if ( c )
Packit 1c1d7e
	qFatal( "In file %s, line %d: Out of memory", n, l );
Packit 1c1d7e
    return TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
static bool firstObsoleteWarning(const char *obj, const char *oldfunc )
Packit 1c1d7e
{
Packit 1c1d7e
    static QAsciiDict<int> *obsoleteDict = 0;
Packit 1c1d7e
    if ( !obsoleteDict ) {			// first time func is called
Packit 1c1d7e
	obsoleteDict = new QAsciiDict<int>;
Packit 1c1d7e
#if defined(DEBUG)
Packit 1c1d7e
	qDebug(
Packit 1c1d7e
      "You are using obsolete functions in the Qt library. Call the function\n"
Packit 1c1d7e
      "qSuppressObsoleteWarnings() to suppress obsolete warnings.\n"
Packit 1c1d7e
	     );
Packit 1c1d7e
#endif
Packit 1c1d7e
    }
Packit 1c1d7e
    QCString s( obj );
Packit 1c1d7e
    s += "::";
Packit 1c1d7e
    s += oldfunc;
Packit 1c1d7e
    if ( obsoleteDict->find(s.data()) == 0 ) {
Packit 1c1d7e
	obsoleteDict->insert( s.data(), (int*)1 );	// anything different from 0
Packit 1c1d7e
	return TRUE;
Packit 1c1d7e
    }
Packit 1c1d7e
    return FALSE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
static bool suppressObsolete = FALSE;
Packit 1c1d7e
Packit 1c1d7e
void qSuppressObsoleteWarnings( bool suppress )
Packit 1c1d7e
{
Packit 1c1d7e
    suppressObsolete = suppress;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void qObsolete(	 const char *obj, const char *oldfunc, const char *newfunc )
Packit 1c1d7e
{
Packit 1c1d7e
    if ( suppressObsolete )
Packit 1c1d7e
	return;
Packit 1c1d7e
    if ( !firstObsoleteWarning(obj, oldfunc) )
Packit 1c1d7e
	return;
Packit 1c1d7e
    if ( obj )
Packit 1c1d7e
	qDebug( "%s::%s: This function is obsolete, use %s instead.",
Packit 1c1d7e
	       obj, oldfunc, newfunc );
Packit 1c1d7e
    else
Packit 1c1d7e
	qDebug( "%s: This function is obsolete, use %s instead.",
Packit 1c1d7e
	       oldfunc, newfunc );
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void qObsolete(	 const char *obj, const char *oldfunc )
Packit 1c1d7e
{
Packit 1c1d7e
    if ( suppressObsolete )
Packit 1c1d7e
	return;
Packit 1c1d7e
    if ( !firstObsoleteWarning(obj, oldfunc) )
Packit 1c1d7e
	return;
Packit 1c1d7e
    if ( obj )
Packit 1c1d7e
	qDebug( "%s::%s: This function is obsolete.", obj, oldfunc );
Packit 1c1d7e
    else
Packit 1c1d7e
	qDebug( "%s: This function is obsolete.", oldfunc );
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void qObsolete(	 const char *message )
Packit 1c1d7e
{
Packit 1c1d7e
    if ( suppressObsolete )
Packit 1c1d7e
	return;
Packit 1c1d7e
    if ( !firstObsoleteWarning( "Qt", message) )
Packit 1c1d7e
	return;
Packit 1c1d7e
    qDebug( "%s", message );
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
/*!
Packit 1c1d7e
  \relates QApplication
Packit 1c1d7e
  Installs a Qt message handler.  Returns a pointer to the message handler
Packit 1c1d7e
  previously defined.
Packit 1c1d7e
Packit 1c1d7e
  The message handler is a function that prints out debug messages,
Packit 1c1d7e
  warnings and fatal error messages.  The Qt library (debug version)
Packit 1c1d7e
  contains hundreds of warning messages that are printed when internal
Packit 1c1d7e
  errors (usually invalid function arguments) occur.  If you implement
Packit 1c1d7e
  your own message handler, you get total control of these messages.
Packit 1c1d7e
Packit 1c1d7e
  The default message handler prints the message to the standard output
Packit 1c1d7e
  under X11 or to the debugger under Windows.  If it is a fatal message,
Packit 1c1d7e
  the application aborts immediately.
Packit 1c1d7e
Packit 1c1d7e
  Only one message handler can be defined, since this is usually done on
Packit 1c1d7e
  an application-wide basis to control debug output.
Packit 1c1d7e
Packit 1c1d7e
  To restore the message handler, call \c qInstallMsgHandler(0).
Packit 1c1d7e
Packit 1c1d7e
  Example:
Packit 1c1d7e
  \code
Packit 1c1d7e
    #include <qapplication.h>
Packit 1c1d7e
    #include <stdio.h>
Packit 1c1d7e
    #include <stdlib.h>
Packit 1c1d7e
Packit 1c1d7e
    void myMessageOutput( QtMsgType type, const char *msg )
Packit 1c1d7e
    {
Packit 1c1d7e
	switch ( type ) {
Packit 1c1d7e
	    case QtDebugMsg:
Packit 1c1d7e
		fprintf( stderr, "Debug: %s\n", msg );
Packit 1c1d7e
		break;
Packit 1c1d7e
	    case QtWarningMsg:
Packit 1c1d7e
		fprintf( stderr, "Warning: %s\n", msg );
Packit 1c1d7e
		break;
Packit 1c1d7e
	    case QtFatalMsg:
Packit 1c1d7e
		fprintf( stderr, "Fatal: %s\n", msg );
Packit 1c1d7e
		abort();			// dump core on purpose
Packit 1c1d7e
	}
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    int main( int argc, char **argv )
Packit 1c1d7e
    {
Packit 1c1d7e
	qInstallMsgHandler( myMessageOutput );
Packit 1c1d7e
	QApplication a( argc, argv );
Packit 1c1d7e
	...
Packit 1c1d7e
	return a.exec();
Packit 1c1d7e
    }
Packit 1c1d7e
  \endcode
Packit 1c1d7e
Packit 1c1d7e
  \sa qDebug(), qWarning(), qFatal(), \link debug.html Debugging\endlink
Packit 1c1d7e
*/
Packit 1c1d7e
Packit 1c1d7e
msg_handler qInstallMsgHandler( msg_handler h )
Packit 1c1d7e
{
Packit 1c1d7e
    msg_handler old = handler;
Packit 1c1d7e
    handler = h;
Packit 1c1d7e
    return old;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
#ifdef _WS_WIN_
Packit 1c1d7e
bool qt_winunicode=FALSE;
Packit 1c1d7e
#endif