Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

122 lines
4.6 KiB

/* common.h
*
* Common functions useful for Windows programs.
*
* InitializeDebugOutput(szAppName):
*
* Read debug level for this application (named <szAppName>) from
* win.ini's [debug] section, which should look like this:
*
* [debug]
* location=aux ; use OutputDebugString() to output
* foobar=2 ; this app has debug level 2
* blorg=0 ; this app has debug output disabled
*
* If you want debug output to go to a file instead of to the AUX
* device (or the debugger), use "location=>filename". To append to
* the file instead of rewriting the file, use "location=>>filename".
*
* If DEBUG is not #define'd, then the call to InitializeDebugOutput()
* generates no code,
*
* TerminateDebugOutput():
*
* End debug output for this application. If DEBUG is not #define'd,
* then the call to InitializeDebugOutput() generates no code.
*
* DPF((szFormat, args...))
*
* If debugging output for this applicaton is enabled (see
* InitializeDebugOutput()), print debug output specified by format
* string <szFormat>, which may contain wsprintf()-style formatting
* codes corresponding to arguments <args>. Example:
*
* DPF(("in WriteFile(): szFile='%s', dwFlags=0x%08lx\n",
* (LSPTR) szFile, dwFlags));
*
* DPF2((szFormat, args...))
* DPF3((szFormat, args...))
* DPF4((szFormat, args...))
*
* Like DPF, but only output the debug string if the debug level for
* this application is at least 2, 3, or 4, respectively.
*
* Assert(fExpr)
*
* If DEBUG is #define'd, then generate an "assertion failed" message box
* allowing the user to abort the program, enter the debugger (the "Retry"
* button), or ignore the error. If DEBUG is not #define'd then Assert()
* generates no code.
*
* AssertEval(fExpr)
*
* Like Assert(), but evaluate and return <fExpr>, even if DEBUG
* is not #define'd. (Use if you want the BOOL expression to be
* evaluated even in a retail build.)
*/
#ifdef DEBUG
/* Assert() macros */
#undef Assert
#undef AssertSz
#undef AssertEval
#define AssertSz(x,sz) ((x) ? (void)0 : (void)_Assert(sz, __FILE__, __LINE__))
#define Assert(expr) AssertSz(expr, #expr)
#define AssertEval(expr) Assert(expr)
/* debug printf macros */
#define DPF( _x_ ) if (giDebugLevel >= 1) _DebugPrintf _x_
#define DPF0( _x_ ) _DebugPrintf _x_
#define DPF1( _x_ ) if (giDebugLevel >= 1) _DebugPrintf _x_
#define DPF2( _x_ ) if (giDebugLevel >= 2) _DebugPrintf _x_
#define DPF3( _x_ ) if (giDebugLevel >= 3) _DebugPrintf _x_
#define DPF4( _x_ ) if (giDebugLevel >= 4) _DebugPrintf _x_
#define DOUT( _x_ ) if (giDebugLevel >= 1) {static char _based(_segname("_CODE")) smag[] = _x_; _DebugPrintf(smag); }
#define DOUT0( _x_ ) {static char _based(_segname("_CODE")) smag[] = _x_; _DebugPrintf(smag); }
#define DOUT1( _x_ ) if (giDebugLevel >= 1) {static char _based(_segname("_CODE")) smag[] = _x_; _DebugPrintf(smag); }
#define DOUT2( _x_ ) if (giDebugLevel >= 2) {static char _based(_segname("_CODE")) smag[] = _x_; _DebugPrintf(smag); }
#define DOUT3( _x_ ) if (giDebugLevel >= 3) {static char _based(_segname("_CODE")) smag[] = _x_; _DebugPrintf(smag); }
#define DOUT4( _x_ ) if (giDebugLevel >= 4) {static char _based(_segname("_CODE")) smag[] = _x_; _DebugPrintf(smag); }
/* prototypes */
void FAR PASCAL InitializeDebugOutput(LPSTR szAppName);
void FAR PASCAL TerminateDebugOutput(void);
void FAR PASCAL _Assert(char *szExp, char *szFile, int iLine);
void FAR CDECL _DebugPrintf(LPSTR szFormat, ...);
extern int giDebugLevel; // current debug level
#else
/* Assert() macros */
#define AssertSz(expr,x) ((void)0)
#define Assert(expr) ((void)0)
#define AssertEval(expr) (expr)
/* debug printf macros */
#define DPF( x )
#define DPF0( x )
#define DPF1( x )
#define DPF2( x )
#define DPF3( x )
#define DPF4( x )
#define DOUT( x )
#define DOUT0( x )
#define DOUT1( x )
#define DOUT2( x )
#define DOUT3( x )
#define DOUT4( x )
/* stubs for debugging function prototypes */
#define InitializeDebugOutput(szAppName) 0
#define TerminateDebugOutput() 0
#endif
/* flags for _llseek() */
#ifndef SEEK_SET
#define SEEK_SET 0 // seek relative to start of file
#define SEEK_CUR 1 // seek relative to current position
#define SEEK_END 2 // seek relative to end of file
#endif