/**************************************************************************** * * 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 #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); } // ***********************************************************************