📄 ddlog.c
字号:
/****************************************************************************** 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 pointerstatic char szDDLogName[_MAX_PATH] = {"gldirect.log"}; // Filename of the logstatic DDLOG_loggingMethodType ddlogLoggingMethod = DDLOG_NONE; // Default to No Loggingstatic 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 filevoid 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);}// ***********************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -