/*++ Copyright (c) 1998-1999 Microsoft Corporation Module Name: minidrv.h Abstract: Common header file for Plug-in minidrivers. Environment: Windows NT printer drivers Revision History: --*/ #ifndef _MINIDRV_H_ #define _MINIDRV_H_ #include #include #include #include #include #include #include #include #include #include #include // // defined(KERNEL_MODE) Rendering module DLL in either kernel mode or user mode. // defined(KERNEL_MODE) & defined(USERMODE_DRIVER) User mode rendering DLL // !defined(KERNEL_MODE) UI module // #if defined(KERNEL_MODE) && !defined(USERMODE_DRIVER) // Kernel mode rendering DLL #include "winsplkm.h" #else // User mode DLL #include #endif #if !defined(KERNEL_MODE) // UI DLL #include #include #include #endif #if defined(USERMODE_DRIVER) || !defined(KERNEL_MODE) // UI DLL or User mode rendering DLL #include #endif #ifdef __cplusplus extern "C" { #endif #ifdef WINNT_40 // // The LONG_PTR is guaranteed to be the same size as a pointer. Its // size with change with pointer size (32/64). It should be used // anywhere that a pointer is cast to an integer type. ULONG_PTR is // typedef long LONG_PTR, *PLONG_PTR; typedef unsigned long ULONG_PTR, *PULONG_PTR; typedef int INT_PTR, *PINT_PTR; typedef unsigned int UINT_PTR, *PUINT_PTR; typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR; #define HandleToUlong( h ) ((ULONG) (h) ) #define PtrToUlong( p ) ((ULONG) (p) ) #define PtrToLong( p ) ((LONG) (p) ) #define PtrToUshort( p ) ((unsigned short) (p) ) #define PtrToShort( p ) ((short) (p) ) #define GWLP_USERDATA GWL_USERDATA #define DWLP_USER DWL_USER #define DWLP_MSGRESULT 0 #define SetWindowLongPtr SetWindowLong #define GetWindowLongPtr GetWindowLong #endif // WINNT_40 #include #include // // These macros are used for debugging purposes. They expand // to white spaces on a free build. Here is a brief description // of what they do and how they are used: // // giDebugLevel // Global variable which set the current debug level to control // the amount of debug messages emitted. // // VERBOSE(msg) // Display a message if the current debug level is <= DBG_VERBOSE. // // TERSE(msg) // Display a message if the current debug level is <= DBG_TERSE. // // WARNING(msg) // Display a message if the current debug level is <= DBG_WARNING. // The message format is: WRN filename (linenumber): message // // ERR(msg) // Similiar to WARNING macro above - displays a message // if the current debug level is <= DBG_ERROR. // // ASSERT(cond) // Verify a condition is true. If not, force a breakpoint. // // ASSERTMSG(cond, msg) // Verify a condition is true. If not, display a message and // force a breakpoint. // // RIP(msg) // Display a message and force a breakpoint. // // Usage: // These macros require extra parantheses for the msg argument // example, ASSERTMSG(x > 0, ("x is less than 0\n")); // WARNING(("App passed NULL pointer, ignoring...\n")); // #define DBG_VERBOSE 1 #define DBG_TERSE 2 #define DBG_WARNING 3 #define DBG_ERROR 4 #define DBG_RIP 5 #if DBG extern INT giDebugLevel; #if defined(KERNEL_MODE) && !defined(USERMODE_DRIVER) extern VOID DbgPrint(PCSTR, ...); #define DbgBreakPoint EngDebugBreak #else extern ULONG _cdecl DbgPrint(PCSTR, ...); extern VOID DbgBreakPoint(VOID); #endif #define DBGMSG(level, prefix, msg) { \ if (giDebugLevel <= (level)) { \ DbgPrint("%s %s (%d): ", prefix, __FILE__, __LINE__); \ DbgPrint msg; \ } \ } #define DBGPRINT(level, msg) { \ if (giDebugLevel <= (level)) { \ DbgPrint msg; \ } \ } #define VERBOSE(msg) DBGPRINT(DBG_VERBOSE, msg) #define TERSE(msg) DBGPRINT(DBG_TERSE, msg) #define WARNING(msg) DBGMSG(DBG_WARNING, "WRN", msg) #define ERR(msg) DBGMSG(DBG_ERROR, "ERR", msg) #ifndef __MDT__ // Don't redefine ASSERT when included in MINIDEV.EXE. #define ASSERT(cond) { \ if (! (cond)) { \ RIP(("\n")); \ } \ } #endif #define ASSERTMSG(cond, msg) { \ if (! (cond)) { \ RIP(msg); \ } \ } #define RIP(msg) { \ DBGMSG(DBG_RIP, "RIP", msg); \ DbgBreakPoint(); \ } #else // !DBG #define VERBOSE(msg) #define TERSE(msg) #define WARNING(msg) #define ERR(msg) #ifndef __MDT__ // Don't redefine ASSERT when included in MINIDEV.EXE. #define ASSERT(cond) #endif #define ASSERTMSG(cond, msg) #define RIP(msg) #define DBGMSG(level, prefix, msg) #define DBGPRINT(level, msg) #endif // // The following macros let you enable tracing on per-file and per-function level. // To use these macros in a file, here is what you should do: // // At the beginning of the file (after header includes): // // Define a bit constant for each function you want to trace // Add the following line // DEFINE_FUNCTION_TRACE_FLAGS(flags); // where flags is a bit-wise OR of the functions you want to trace, e.g. // TRACE_FLAG_FUNC1 | TRACE_FLAG_FUNC2 | ... // // To generate trace inside each function you want to trace, use: // FUNCTION_TRACE(FunctionTraceFlag, (args)); // #if DBG #define DEFINE_FUNCTION_TRACE_FLAGS(flags) \ static DWORD gdwFunctionTraceFlags = (flags) #define FUNCTION_TRACE(flag, args) { \ if (gdwFunctionTraceFlags & (flag)) { \ DbgPrint args; \ } \ } #else // !DBG #define DEFINE_FUNCTION_TRACE_FLAGS(flags) #define FUNCTION_TRACE(flag, args) #endif // !DBG // // Memory allocation function macros // #define MemAlloc(size) ((PVOID) LocalAlloc(LMEM_FIXED, (size))) #define MemAllocZ(size) ((PVOID) LocalAlloc(LPTR, (size))) #define MemFree(p) { if (p) LocalFree((HLOCAL) (p)); } // // DBCS CharSet handling macros // // // 128: SHIFTJIS_CHARSET // 129: HANGEUL_CHARSET // 130: JOHAB_CHARSET (defined if WINVER >= 0x0400) // 134: GB2312_CHARSET // 136: CHINESEBIG5_CHARSET #define IS_DBCSCHARSET(j) \ (((j) == SHIFTJIS_CHARSET) || \ ((j) == HANGEUL_CHARSET) || \ ((j) == JOHAB_CHARSET) || \ ((j) == GB2312_CHARSET) || \ ((j) == CHINESEBIG5_CHARSET)) // 932: Japan // 936: Chinese (PRC, Singapore) // 949: Korean // 950: Chinese (China, Hong Kong SAR, Taiwan) // 1361: Korean (Johab) #define IS_DBCSCODEPAGE(j) \ (((j) == 932) || \ ((j) == 936) || \ ((j) == 949) || \ ((j) == 950) || \ ((j) == 1361)) // // The following are the resource types used in minidrivers and // used in the .rc file. // #define RC_TABLES 257 #define RC_FONT 258 #define RC_TRANSTAB 259 // // 5.0 resource types // #define RC_UFM 260 #define RC_GTT 261 #define RC_HTPATTERN 264 // // Internal resource type // #define RC_FD_GLYPHSET 262 #ifdef __cplusplus } #endif #endif //_MINIDRV_H_