blob: 4ae79e2fdacf751dc26c759d66ee330e198cc846 [file] [log] [blame]
/****************************************************************************
*
* Mesa 3-D graphics library
* Direct3D Driver Interface
*
* ========================================================================
*
* Copyright (C) 1991-2004 SciTech Software, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* SCITECH SOFTWARE INC BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* ======================================================================
*
* Language: ANSI C
* Environment: Windows 9x (Win32)
*
* Description: Logging functions.
*
****************************************************************************/
#define STRICT
#include <windows.h>
#include "ddlog.h"
#include "gld_driver.h"
// ***********************************************************************
static char ddlogbuf[256];
static FILE* fpDDLog = NULL; // Log file pointer
static char szDDLogName[_MAX_PATH] = {"gldirect.log"}; // Filename of the log
static DDLOG_loggingMethodType ddlogLoggingMethod = DDLOG_NONE; // Default to No Logging
static DDLOG_severityType ddlogDebugLevel;
static BOOL bUIWarning = FALSE; // MessageBox warning ?
// ***********************************************************************
void ddlogOpen(
DDLOG_loggingMethodType LoggingMethod,
DDLOG_severityType Severity)
{
if (fpDDLog != NULL) {
// Tried to re-open the log
ddlogMessage(DDLOG_WARN, "Tried to re-open the log file\n");
return;
}
ddlogLoggingMethod = LoggingMethod;
ddlogDebugLevel = Severity;
if (ddlogLoggingMethod == DDLOG_NORMAL) {
fpDDLog = fopen(szDDLogName, "wt");
if (fpDDLog == NULL)
return;
}
ddlogMessage(DDLOG_SYSTEM, "\n");
ddlogMessage(DDLOG_SYSTEM, "-> Logging Started\n");
}
// ***********************************************************************
void ddlogClose()
{
// Determine whether the log is already closed
if (fpDDLog == NULL && ddlogLoggingMethod == DDLOG_NORMAL)
return; // Nothing to do.
ddlogMessage(DDLOG_SYSTEM, "<- Logging Ended\n");
if (ddlogLoggingMethod == DDLOG_NORMAL) {
fclose(fpDDLog);
fpDDLog = NULL;
}
}
// ***********************************************************************
void ddlogMessage(
DDLOG_severityType severity,
LPSTR message)
{
char buf[256];
// Bail if logging is disabled
if (ddlogLoggingMethod == DDLOG_NONE)
return;
if (ddlogLoggingMethod == DDLOG_CRASHPROOF)
fpDDLog = fopen(szDDLogName, "at");
if (fpDDLog == NULL)
return;
if (severity >= ddlogDebugLevel) {
sprintf(buf, "DDLog: (%s) %s", ddlogSeverityMessages[severity], message);
fputs(buf, fpDDLog); // Write string to file
OutputDebugString(buf); // Echo to debugger
}
if (ddlogLoggingMethod == DDLOG_CRASHPROOF) {
fflush(fpDDLog); // Write info to disk
fclose(fpDDLog);
fpDDLog = NULL;
}
// Popup message box if critical error
if (bUIWarning && severity == DDLOG_CRITICAL) {
MessageBox(NULL, buf, "GLDirect", MB_OK | MB_ICONWARNING | MB_TASKMODAL);
}
}
// ***********************************************************************
// Write a string value to the log file
void ddlogError(
DDLOG_severityType severity,
LPSTR message,
HRESULT hResult)
{
#ifdef _USE_GLD3_WGL
char dxErrStr[1024];
_gldDriver.GetDXErrorString(hResult, &dxErrStr[0], sizeof(dxErrStr));
if (FAILED(hResult)) {
sprintf(ddlogbuf, "DDLog: %s %8x:[ %s ]\n", message, hResult, dxErrStr);
} else
sprintf(ddlogbuf, "DDLog: %s\n", message);
#else
if (FAILED(hResult)) {
sprintf(ddlogbuf, "DDLog: %s %8x:[ %s ]\n", message, hResult, DDErrorToString(hResult));
} else
sprintf(ddlogbuf, "DDLog: %s\n", message);
#endif
ddlogMessage(severity, ddlogbuf);
}
// ***********************************************************************
void ddlogPrintf(
DDLOG_severityType severity,
LPSTR message,
...)
{
va_list args;
va_start(args, message);
vsprintf(ddlogbuf, message, args);
va_end(args);
lstrcat(ddlogbuf, "\n");
ddlogMessage(severity, ddlogbuf);
}
// ***********************************************************************
void ddlogWarnOption(
BOOL bWarnOption)
{
bUIWarning = bWarnOption;
}
// ***********************************************************************
void ddlogPathOption(
LPSTR szPath)
{
char szPathName[_MAX_PATH];
strcpy(szPathName, szPath);
strcat(szPathName, "\\");
strcat(szPathName, szDDLogName);
strcpy(szDDLogName, szPathName);
}
// ***********************************************************************