246 lines
5.4 KiB
C++
246 lines
5.4 KiB
C++
|
/*++
|
||
|
|
||
|
Copyright (c) 1994-1995 Microsoft Corporation
|
||
|
All rights reserved.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
Common.hxx
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Standard macros/typedefs for include files.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Albert Ting (AlbertT)
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _COMMON_HXX
|
||
|
#define _COMMON_HXX
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
typedef
|
||
|
HANDLE (WINAPI *pfCreateThread)(
|
||
|
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to thread security attributes
|
||
|
SIZE_T dwStackSize, // initial thread stack size, in bytes
|
||
|
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
|
||
|
LPVOID lpParameter, // argument for new thread
|
||
|
DWORD dwCreationFlags, // creation flags
|
||
|
LPDWORD lpThreadId // pointer to returned thread identifier
|
||
|
);
|
||
|
|
||
|
BOOL
|
||
|
bSplLibInit(
|
||
|
#ifdef __cplusplus
|
||
|
pfCreateThread pfSafeCreateThread = NULL
|
||
|
#else
|
||
|
pfCreateThread pfSafeCreateThread
|
||
|
#endif
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
vSplLibFree(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EXTERN_C
|
||
|
DWORD
|
||
|
WINAPIV
|
||
|
StrCatAlloc(
|
||
|
IN OUT PCTSTR *ppszString,
|
||
|
...
|
||
|
);
|
||
|
|
||
|
EXTERN_C
|
||
|
DWORD
|
||
|
WINAPIV
|
||
|
StrNCatBuff(
|
||
|
IN PTSTR pszBuffer,
|
||
|
IN UINT cchBuffer,
|
||
|
...
|
||
|
);
|
||
|
|
||
|
typedef enum {
|
||
|
kWindowsDir,
|
||
|
kSystemWindowsDir,
|
||
|
kSystemDir,
|
||
|
kCurrentDir
|
||
|
} EStrCatDir;
|
||
|
|
||
|
EXTERN_C
|
||
|
DWORD
|
||
|
WINAPI
|
||
|
StrCatSystemPath(
|
||
|
IN LPCTSTR pszFile,
|
||
|
IN EStrCatDir eDir,
|
||
|
OUT LPTSTR *ppszFullPath
|
||
|
);
|
||
|
|
||
|
EXTERN_C
|
||
|
PTSTR
|
||
|
SubChar(
|
||
|
IN PCTSTR pszIn,
|
||
|
IN TCHAR cIn,
|
||
|
IN TCHAR cOut
|
||
|
);
|
||
|
|
||
|
EXTERN_C
|
||
|
HRESULT
|
||
|
GetLastErrorAsHResult(
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EXTERN_C
|
||
|
HRESULT
|
||
|
HResultFromWin32(
|
||
|
IN DWORD dwError
|
||
|
);
|
||
|
|
||
|
EXTERN_C
|
||
|
HRESULT
|
||
|
GetLastErrorAsHResultAndFail(
|
||
|
void
|
||
|
);
|
||
|
|
||
|
EXTERN_C
|
||
|
HRESULT
|
||
|
GetFileNamePart(
|
||
|
IN PCWSTR pszFullPath,
|
||
|
OUT PCWSTR *ppszFileName
|
||
|
);
|
||
|
|
||
|
EXTERN_C
|
||
|
BOOL
|
||
|
BoolFromHResult(
|
||
|
IN HRESULT hr
|
||
|
);
|
||
|
|
||
|
EXTERN_C
|
||
|
DWORD
|
||
|
StatusFromHResult(
|
||
|
IN HRESULT hr
|
||
|
);
|
||
|
|
||
|
EXTERN_C
|
||
|
BOOL
|
||
|
BoolFromStatus(
|
||
|
IN DWORD Status
|
||
|
);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#include "dbgmsg.h"
|
||
|
|
||
|
//
|
||
|
// This reverses a DWORD so that the bytes can be easily read
|
||
|
// as characters ('prnt' can be read from debugger forward).
|
||
|
//
|
||
|
#define BYTE_SWAP_DWORD( val ) \
|
||
|
( (val & 0xff) << 24 | \
|
||
|
(val & 0xff00) << 8 | \
|
||
|
(val & 0xff0000) >> 8 | \
|
||
|
(val & 0xff000000) >> 24 )
|
||
|
|
||
|
|
||
|
#define COUNTOF(x) (sizeof(x)/sizeof(*x))
|
||
|
#define BITCOUNTOF(x) (sizeof(x)*8)
|
||
|
#define COUNT2BYTES(x) ((x)*sizeof(TCHAR))
|
||
|
|
||
|
#define OFFSETOF(type, id) ((DWORD)(ULONG_PTR)(&(((type*)0)->id)))
|
||
|
#define OFFSETOF_BASE(type, baseclass) ((DWORD)(ULONG_PTR)((baseclass*)((type*)0x10))-0x10)
|
||
|
|
||
|
#define ERRORP(Status) (Status != ERROR_SUCCESS)
|
||
|
#define SUCCESSP(Status) (Status == ERROR_SUCCESS)
|
||
|
|
||
|
//
|
||
|
// COUNT and COUNT BYTES
|
||
|
//
|
||
|
typedef UINT COUNT, *PCOUNT;
|
||
|
typedef UINT COUNTB, *PCOUNTB;
|
||
|
typedef DWORD STATUS;
|
||
|
|
||
|
//
|
||
|
// Conversion between PPM (Page per minute), LPM (Line per minute)
|
||
|
// and CPS (Character per second)
|
||
|
//
|
||
|
#define CPS2PPM(x) ((x)/48)
|
||
|
#define LPM2PPM(x) ((x)/48)
|
||
|
|
||
|
//
|
||
|
// C++ specific functionality.
|
||
|
//
|
||
|
#ifdef __cplusplus
|
||
|
|
||
|
const DWORD kStrMax = MAX_PATH;
|
||
|
|
||
|
#if defined( CHECKMEM ) || DBG
|
||
|
#define SAFE_NEW \
|
||
|
public: \
|
||
|
PVOID operator new(size_t size) { return ::SafeNew(size); } \
|
||
|
VOID operator delete(PVOID p, size_t) { ::SafeDelete(p); } \
|
||
|
private:
|
||
|
#define DBG_SAFE_NEW \
|
||
|
public: \
|
||
|
PVOID operator new(size_t size) { return ::DbgAllocMem(size); } \
|
||
|
VOID operator delete(PVOID p, size_t) { ::DbgFreeMem(p); } \
|
||
|
private:
|
||
|
#else
|
||
|
#define SAFE_NEW
|
||
|
#define DBG_SAFE_NEW
|
||
|
#endif
|
||
|
|
||
|
#define SIGNATURE( sig ) \
|
||
|
public: \
|
||
|
class TSignature { \
|
||
|
public: \
|
||
|
DWORD _Signature; \
|
||
|
TSignature() : _Signature( BYTE_SWAP_DWORD( sig )) { } \
|
||
|
}; \
|
||
|
TSignature _Signature; \
|
||
|
\
|
||
|
BOOL bSigCheck() const \
|
||
|
{ return _Signature._Signature == BYTE_SWAP_DWORD( sig ); } \
|
||
|
private:
|
||
|
|
||
|
|
||
|
#define ALWAYS_VALID \
|
||
|
public: \
|
||
|
BOOL bValid() const \
|
||
|
{ return TRUE; } \
|
||
|
private:
|
||
|
|
||
|
#define VAR(type,var) \
|
||
|
inline type& var() \
|
||
|
{ return _##var; } \
|
||
|
inline type const & var() const \
|
||
|
{ return _##var; } \
|
||
|
type _##var
|
||
|
|
||
|
#define SVAR(type,var) \
|
||
|
static inline type& var() \
|
||
|
{ return _##var; } \
|
||
|
static type _##var
|
||
|
|
||
|
//
|
||
|
// Allow debug extensions to be friends of all classes so that
|
||
|
// they can dump private fields. Forward class definition here.
|
||
|
//
|
||
|
class TDebugExt;
|
||
|
|
||
|
//
|
||
|
// Include any common inlines.
|
||
|
//
|
||
|
#include "commonil.hxx"
|
||
|
#endif // def __cplusplus
|
||
|
|
||
|
#endif // _COMMON_HXX
|