diff options
Diffstat (limited to 'private/unimodem/inc/rovcomm.h')
-rw-r--r-- | private/unimodem/inc/rovcomm.h | 1087 |
1 files changed, 1087 insertions, 0 deletions
diff --git a/private/unimodem/inc/rovcomm.h b/private/unimodem/inc/rovcomm.h new file mode 100644 index 000000000..b925e37bd --- /dev/null +++ b/private/unimodem/inc/rovcomm.h @@ -0,0 +1,1087 @@ +// +// Copyright (c) Microsoft Corporation 1993-1995 +// +// rovcomm.h +// +// Declares common and useful data structures, macros and functions. +// These items are broken down into the following sections. Defining +// the associated flags will inhibit definition of the indicated +// items. +// +// NORTL - run-time library functions +// NOBASICS - basic macros +// NOMEM - memory management, dynamic array functions +// NODA - dynamic array functions +// NOSHAREDHEAP - shared heap functions +// NOFILEINFO - FileInfo functions +// NOCOLORHELP - helper macros to derive COLOR_ values from state +// NODRAWTEXT - enhanced version of DrawText +// NODIALOGHELPER - dialog helper functions +// NOMESSAGESTRING - construct message string functions +// NOSTRING - string functions +// NOPATH - path whacking functions +// NODEBUGHELP - debug routines +// NOSYNC - synchronization (critical sections, etc.) +// NOPROFILE - profile (.ini) support functions +// NODI - setup API Device Installer wrappers +// +// Optional defines are: +// +// WANT_SHELL_SUPPORT - include SH* function support +// SZ_MODULEA - debug string prepended to debug spew +// SZ_MODULEW - (wide-char) debug string prepended to debug spew +// SHARED_DLL - DLL is in shared memory (may require +// per-instance data) +// SZ_DEBUGSECTION - .ini section name for debug options +// SZ_DEBUGINI - .ini name for debug options +// +// This is the "master" header. The associated files are: +// +// rovcomm.c +// rovpath.c +// rovmem.c, rovmem.h +// rovini.c +// +// If you want debug macros, be sure to include rovdbg.h in one (and +// only one) of your project source files. This contains the three function +// helpers. +// +// History: +// 04-26-95 ScottH Transferred from Briefcase code +// Added controlling defines +// + +#ifndef __ROVCOMM_H__ +#define __ROVCOMM_H__ + +#ifdef RC_INVOKED +// Turn off a bunch of stuff to ensure that RC files compile OK +#define NOMEM +#define NODA +#define NOSHAREDHEAP +#define NOFILEINFO +#define NOCOLORHELP +#define NODRAWTEXT +#define NODIALOGHELPER +#define NOMESSAGESTRING +#define NOSTRING +#define NOPATH +#define NODEBUGHELP +#define NOSYNC +#define NOPROFILE +#define NODI +#endif // RC_INVOKED + +#ifdef JUSTDEBUGSTUFF +#define NORTL +#define NOMEM +#define NODA +#define NOSHAREDHEAP +#define NOFILEINFO +#define NOCOLORHELP +#define NODRAWTEXT +#define NODIALOGHELPER +#define NOMESSAGESTRING +#define NOPROFILE +#define NOSTRING +#define NOPATH +#define NOSYNC +#define NODI +#endif // JUSTDEBUGSTUFF + +#ifdef _INC_OLE +#define WANT_OLE_SUPPORT +#endif + +// Check for any conflicting defines... + +#if !defined(WANT_SHELL_SUPPORT) && !defined(NOFILEINFO) +#pragma message("FileInfo routines need WANT_SHELL_SUPPORT. Not providing FileInfo routines.") +#define NOFILEINFO +#endif + +#if !defined(NOFILEINFO) && defined(NOMEM) +#pragma message("FileInfo routines need NOMEM undefined. Overriding.") +#undef NOMEM +#endif + +#if !defined(NOFILEINFO) && defined(NOMESSAGESTRING) +#pragma message("FileInfo routines need NOMESSAGESTRING undefined. Overriding.") +#undef NOMESSAGESTRING +#endif + +#if !defined(NOFILEINFO) && defined(NOSTRING) +#pragma message("FileInfo routines need NOSTRING undefined. Overriding.") +#undef NOSTRING +#endif + +#if !defined(NOMESSAGESTRING) && defined(NOMEM) +#pragma message("ConstructMessage routines need NOMEM undefined. Overriding.") +#undef NOMEM +#endif + +#if !defined(NOPATH) && defined(NOSTRING) +#pragma message("Path routines need NOSTRING undefined. Overriding.") +#undef NOSTRING +#endif + +#if !defined(NODA) && defined(NOMEM) +#pragma message("Dynamic Array routines need NOMEM undefined. Overriding.") +#undef NOMEM +#endif + +#if !defined(NOSHAREDHEAP) && defined(NOMEM) +#pragma message("Shared memory routines need NOMEM undefined. Overriding.") +#undef NOMEM +#endif + +#if !defined(NOPROFILE) && defined(NODEBUGHELP) +#pragma message("Debug profiling routines need NODEBUGHELP undefined. Overriding.") +#undef NODEBUGHELP +#endif + +#if !defined(NOPROFILE) && defined(NOSTRING) +#pragma message("Private profile needs NOSTRING undefined. Overriding.") +#undef NOSTRING +#endif + +#if DBG > 0 && !defined(DEBUG) +#define DEBUG +#endif +#if DBG > 0 && !defined(FULL_DEBUG) +#define FULL_DEBUG +#endif + + +// Other include files... + +#if !defined(NOFILEINFO) && !defined(_SHLOBJ_H_) +#include <shlobj.h> +#endif + +#if !defined(NODEBUGHELP) && !defined(_VA_LIST_DEFINED) +#include <stdarg.h> +#endif + +#if !defined(WINNT) +#define WIN95 +#else +#undef WIN95 +#endif + + +// +// Basics +// +#ifndef NOBASICS + +#define Unref(x) x + +#ifdef DEBUG +#define INLINE +#define DEBUG_CODE(x) x +#else +#define INLINE __inline +#define DEBUG_CODE(x) +#endif + +#ifdef UNICODE +#define SZ_MODULE SZ_MODULEW +#else +#define SZ_MODULE SZ_MODULEA +#endif // UNICODE + +#ifndef OPTIONAL +#define OPTIONAL +#endif +#ifndef IN +#define IN +#endif +#ifndef OUT +#define OUT +#endif + +// General flag macros +// +#define SetFlag(obj, f) do {obj |= (f);} while (0) +#define ToggleFlag(obj, f) do {obj ^= (f);} while (0) +#define ClearFlag(obj, f) do {obj &= ~(f);} while (0) +#define IsFlagSet(obj, f) (BOOL)(((obj) & (f)) == (f)) +#define IsFlagClear(obj, f) (BOOL)(((obj) & (f)) != (f)) + +#define InRange(id, idFirst, idLast) ((UINT)(id-idFirst) <= (UINT)(idLast-idFirst)) + +// Standard buffer lengths +// +#define MAX_BUF 260 +#define MAX_BUF_MSG 520 +#define MAX_BUF_MED 64 +#define MAX_BUF_SHORT 32 +#define MAX_BUF_REG 128 // Should be same as MAX_REG_KEY_LEN + +#define NULL_CHAR '\0' +#define ARRAYSIZE(rg) (sizeof(rg) / sizeof((rg)[0])) +#define ARRAY_ELEMENTS(rg) ARRAYSIZE(rg) +#define SIZECHARS(rg) ARRAYSIZE(rg) + +// Comparison return values +// +#define CMP_GREATER 1 +#define CMP_LESSER (-1) +#define CMP_EQUAL 0 + +// Count of characters to count of bytes +// +#define CbFromCchW(cch) ((cch)*sizeof(WCHAR)) +#define CbFromCchA(cch) ((cch)*sizeof(CHAR)) +#ifdef UNICODE +#define CbFromCch CbFromCchW +#else // UNICODE +#define CbFromCch CbFromCchA +#endif // UNICODE + +// 64-bit macros +// +#define HIDWORD(_qw) (DWORD)((_qw)>>32) +#define LODWORD(_qw) (DWORD)(_qw) + +// Calling declarations +// +#define PUBLIC FAR PASCAL +#define CPUBLIC FAR CDECL +#define PRIVATE NEAR PASCAL + +// Range of resource ID indexes are 0x000 - 0x7ff +#define IDS_BASE 0x1000 +#define IDS_ERR_BASE (IDS_BASE + 0x0000) +#define IDS_OOM_BASE (IDS_BASE + 0x0800) +#define IDS_MSG_BASE (IDS_BASE + 0x1000) +#define IDS_RANDO_BASE (IDS_BASE + 0x1800) +#define IDS_COMMON_BASE (IDS_BASE + 0x2000) + +// Resource string IDs for FileInfo +#define IDS_BYTES (IDS_COMMON_BASE + 0x000) +#define IDS_ORDERKB (IDS_COMMON_BASE + 0x001) +#define IDS_ORDERMB (IDS_COMMON_BASE + 0x002) +#define IDS_ORDERGB (IDS_COMMON_BASE + 0x003) +#define IDS_ORDERTB (IDS_COMMON_BASE + 0x004) +#define IDS_DATESIZELINE (IDS_COMMON_BASE + 0x005) + + +#ifndef DECLARE_STANDARD_TYPES +// For a type "FOO", define the standard derived types PFOO, CFOO, and PCFOO. +// +#define DECLARE_STANDARD_TYPES(type) typedef type FAR *P##type; \ + typedef const type C##type; \ + typedef const type FAR *PC##type; +#endif + +// Zero-initialize data-item +// +#define ZeroInitSize(pobj, cb) MyZeroMemory(pobj, cb) +#define ZeroInit(pobj) MyZeroMemory(pobj, sizeof(*(pobj))) + +// Copy chunk of memory +// +#define BltByte(pdest, psrc, cb) MyMoveMemory(pdest, psrc, cb) + +// Porting macros +// +#ifdef WIN32 + +#define ISVALIDHINSTANCE(hinst) ((BOOL)hinst) +#define LOCALOF(lp) (lp) +#define OFFSETOF(lp) (lp) +#define FIELDOFFSET(type, field) ((int)(&((type NEAR*)1)->field)-1) + +#define DATASEG_READONLY ".text" +#define DATASEG_PERINSTANCE ".instanc" +#define DATASEG_SHARED ".data" + +#else // WIN32 + +#define ISVALIDHINSTANCE(hinst) ((UINT)hinst >= (UINT)HINSTANCE_ERROR) +#define LOCALOF(lp) ((HLOCAL)OFFSETOF(lp)) + +#define DATASEG_READONLY "_TEXT" +#define DATASEG_PERINSTANCE +#define DATASEG_SHARED + +typedef LPCSTR LPCTSTR; +typedef LPSTR LPTSTR; +typedef char TCHAR; + +#endif // WIN32 + +#define LocalFreePtr(p) LocalFree((HLOCAL)OFFSETOF(p)) + +typedef UINT FAR *LPUINT; + +#endif // NOBASICS + + +// +// Run-time library replacements +// +#ifdef NORTL + +// (implemented privately) +LPWSTR +PUBLIC +lmemmoveW( + LPWSTR dst, + LPCWSTR src, + DWORD count); +LPSTR +PUBLIC +lmemmoveA( + LPSTR dst, + LPCSTR src, + DWORD count); +#ifdef UNICODE +#define lmemmove lmemmoveW +#else +#define lmemmove lmemmoveA +#endif // UNICODE + +LPWSTR +PUBLIC +lmemsetW( + LPWSTR dst, + WCHAR val, + DWORD count); +LPSTR +PUBLIC +lmemsetA( + LPSTR dst, + CHAR val, + DWORD count); +#ifdef UNICODE +#define lmemset lmemsetW +#else +#define lmemset lmemsetA +#endif // UNICODE + +#define MyZeroMemory(p, cb) lmemset((LPTSTR)(p), 0, cb) +#define MyMoveMemory(pdest, psrc, cb) lmemmove((LPTSTR)(pdest), (LPCTSTR)(psrc), cb) + +#else // NORTL + +#define MyZeroMemory ZeroMemory +#define MyMoveMemory MoveMemory + +#endif // NORTL + + +// +// Memory and dynamic array functions +// +#ifndef NOMEM +#include "rovmem.h" +#endif // NOMEM + + +// +// Message string helpers +// +#ifndef NOMESSAGESTRING + +#if !defined(WIN32) && !defined(LANG_NEUTRAL) +#define LANG_NEUTRAL 0x00 +#endif + +LPWSTR +PUBLIC +ConstructVMessageStringW( + HINSTANCE hinst, + LPCWSTR pwszMsg, + va_list FAR * ArgList); +LPSTR +PUBLIC +ConstructVMessageStringA( + HINSTANCE hinst, + LPCSTR pszMsg, + va_list FAR * ArgList); +#ifdef UNICODE +#define ConstructVMessageString ConstructVMessageStringW +#else // UNICODE +#define ConstructVMessageString ConstructVMessageStringA +#endif // UNICODE + +BOOL +CPUBLIC +ConstructMessageW( + LPWSTR FAR * ppwsz, + HINSTANCE hinst, + LPCWSTR pwszMsg, ...); +BOOL +CPUBLIC +ConstructMessageA( + LPSTR FAR * ppsz, + HINSTANCE hinst, + LPCSTR pszMsg, ...); +#ifdef UNICODE +#define ConstructMessage ConstructMessageW +#else // UNICODE +#define ConstructMessage ConstructMessageA +#endif // UNICODE + +#define SzFromIDSW(hinst, ids, pwszBuf, cchBuf) (LoadStringW(hinst, ids, pwszBuf, cchBuf), pwszBuf) +#define SzFromIDSA(hinst, ids, pszBuf, cchBuf) (LoadStringA(hinst, ids, pszBuf, cchBuf), pszBuf) + +#ifdef UNICODE +#define SzFromIDS SzFromIDSW +#else // UNICODE +#define SzFromIDS SzFromIDSA +#endif // UNICODE + +int +CPUBLIC +MsgBoxW( + HINSTANCE hinst, + HWND hwndOwner, + LPCWSTR pwszText, + LPCWSTR pwszCaption, + HICON hicon, + DWORD dwStyle, ...); +int +CPUBLIC +MsgBoxA( + HINSTANCE hinst, + HWND hwndOwner, + LPCSTR pszText, + LPCSTR pszCaption, + HICON hicon, + DWORD dwStyle, ...); +#ifdef UNICODE +#define MsgBox MsgBoxW +#else // UNICODE +#define MsgBox MsgBoxA +#endif // UNICODE + +// Additional MB_ flags +#define MB_WARNING (MB_OK | MB_ICONWARNING) +#define MB_INFO (MB_OK | MB_ICONINFORMATION) +#define MB_ERROR (MB_OK | MB_ICONERROR) +#define MB_QUESTION (MB_YESNO | MB_ICONQUESTION) + +#endif // NOMESSAGESTRING + + +// +// String functions +// +#ifndef NOSTRING + +BOOL +PUBLIC +AnsiToIntW( + LPCWSTR pszString, + int FAR * piRet); +BOOL +PUBLIC +AnsiToIntA( + LPCSTR pszString, + int FAR * piRet); +#ifdef UNICODE +#define AnsiToInt AnsiToIntW +#else +#define AnsiToInt AnsiToIntA +#endif // UNICODE + +LPWSTR +PUBLIC +AnsiChrW( + LPCWSTR psz, + WORD wMatch); +LPSTR +PUBLIC +AnsiChrA( + LPCSTR psz, + WORD wMatch); +#ifdef UNICODE +#define AnsiChr AnsiChrW +#else +#define AnsiChr AnsiChrA +#endif // UNICODE + +LPWSTR +PUBLIC +AnsiRChrW( + LPCWSTR psz, + WORD wMatch); +#ifdef UNICODE +#define AnsiRChr AnsiRChrW +#else +#define AnsiRChr +#endif // UNICODE + +#define IsSzEqual(sz1, sz2) (BOOL)(lstrcmpi(sz1, sz2) == 0) +#define IsSzEqualC(sz1, sz2) (BOOL)(lstrcmp(sz1, sz2) == 0) + +#ifdef WIN32 +#define lstrnicmp(sz1, sz2, cch) (CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE, sz1, cch, sz2, cch) - 2) +#define lstrncmp(sz1, sz2, cch) (CompareString(LOCALE_USER_DEFAULT, 0, sz1, cch, sz2, cch) - 2) +#else +int PUBLIC lstrnicmp(LPCSTR psz1, LPCSTR psz2, UINT count); +int PUBLIC lstrncmp(LPCSTR psz1, LPCSTR psz2, UINT count); +#endif // WIN32 + +#define IsSzEqualN(sz1, sz2, cch) (BOOL)(0 == lstrnicmp(sz1, sz2, cch)) +#define IsSzEqualNC(sz1, sz2, cch) (BOOL)(0 == lstrncmp(sz1, sz2, cch)) + +#endif // NOSTRING + + +// +// FileInfo functions +// +#if !defined(NOFILEINFO) && defined(WIN95) + +// FileInfo struct that contains file time/size info +// +typedef struct _FileInfo + { + HICON hicon; + FILETIME ftMod; + DWORD dwSize; // size of the file + DWORD dwAttributes; // attributes + LPARAM lParam; + LPSTR pszDisplayName; // points to the display name + CHAR szPath[1]; + } FileInfo; + +#define FIGetSize(pfi) ((pfi)->dwSize) +#define FIGetPath(pfi) ((pfi)->szPath) +#define FIGetDisplayName(pfi) ((pfi)->pszDisplayName) +#define FIGetAttributes(pfi) ((pfi)->dwAttributes) +#define FIIsFolder(pfi) (IsFlagSet((pfi)->dwAttributes, SFGAO_FOLDER)) + +// Flags for FICreate +#define FIF_DEFAULT 0x0000 +#define FIF_ICON 0x0001 +#define FIF_DONTTOUCH 0x0002 +#define FIF_FOLDER 0x0004 + +HRESULT PUBLIC FICreate(LPCSTR pszPath, FileInfo ** ppfi, UINT uFlags); +BOOL PUBLIC FISetPath(FileInfo ** ppfi, LPCSTR pszPathNew, UINT uFlags); +BOOL PUBLIC FIGetInfoString(FileInfo * pfi, LPSTR pszBuf, int cchBuf); +void PUBLIC FIFree(FileInfo * pfi); + +void PUBLIC FileTimeToDateTimeString(LPFILETIME pft, LPSTR pszBuf, int cchBuf); + +#endif // NOFILEINFO + + +// +// Color-from-owner-draw-state macros +// +#ifndef NOCOLORHELP + +#define ColorText(nState) (((nState) & ODS_SELECTED) ? COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT) +#define ColorBk(nState) (((nState) & ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_WINDOW) +#define ColorMenuText(nState) (((nState) & ODS_SELECTED) ? COLOR_HIGHLIGHTTEXT : COLOR_MENUTEXT) +#define ColorMenuBk(nState) (((nState) & ODS_SELECTED) ? COLOR_HIGHLIGHT : COLOR_MENU) +#define GetImageDrawStyle(nState) (((nState) & ODS_SELECTED) ? ILD_SELECTED : ILD_NORMAL) + +#endif // NOCOLORHELP + + +// +// Dialog helper functions +// +#ifndef NODIALOGHELPER + +// Sets the dialog handle in the given data struct on first +// message that the dialog gets (WM_SETFONT). +// +#define SetDlgHandle(hwnd, msg, lp) if((msg)==WM_SETFONT) (lp)->hdlg=(hwnd); + +#define DoModal DialogBoxParam + +VOID +PUBLIC +SetRectFromExtentW( + HDC hdc, + LPRECT lprc, + LPCWSTR lpcwsz); +VOID +PUBLIC +SetRectFromExtentA( + HDC hdc, + LPRECT lprc, + LPCSTR lpcsz); +#ifdef UNICODE +#define SetRectFromExtent SetRectFromExtentW +#else +#define SetRectFromExtent SetRectFromExtentA +#endif // UNICODE + +#endif // NODIALOGHELPER + + +// +// Enhanced form of DrawText() +// +#ifndef NODRAWTEXT + +// Flags for MyDrawText() +#define MDT_DRAWTEXT 0x00000001 +#define MDT_ELLIPSES 0x00000002 +#define MDT_LINK 0x00000004 +#define MDT_SELECTED 0x00000008 +#define MDT_DESELECTED 0x00000010 +#define MDT_DEPRESSED 0x00000020 +#define MDT_EXTRAMARGIN 0x00000040 +#define MDT_TRANSPARENT 0x00000080 +#define MDT_LEFT 0x00000100 +#define MDT_RIGHT 0x00000200 +#define MDT_CENTER 0x00000400 +#define MDT_VCENTER 0x00000800 +#define MDT_CLIPPED 0x00001000 + +#ifndef CLR_DEFAULT // (usually defined in commctrl.h) +#define CLR_DEFAULT 0xFF000000L +#endif + +void +PUBLIC +MyDrawTextW( + HDC hdc, + LPCWSTR pwszText, + RECT FAR* prc, + UINT flags, + int cyChar, + int cxEllipses, + COLORREF clrText, + COLORREF clrTextBk); +void +PUBLIC +MyDrawTextA( + HDC hdc, + LPCSTR pszText, + RECT FAR* prc, + UINT flags, + int cyChar, + int cxEllipses, + COLORREF clrText, + COLORREF clrTextBk); +#ifdef UNICODE +#define MyDrawText MyDrawTextW +#else +#define MyDrawText MyDrawTextA +#endif // UNICODE + + +void PUBLIC GetCommonMetrics(WPARAM wParam); + +extern int g_cxLabelMargin; +extern int g_cxBorder; +extern int g_cyBorder; + +extern COLORREF g_clrHighlightText; +extern COLORREF g_clrHighlight; +extern COLORREF g_clrWindowText; +extern COLORREF g_clrWindow; + +extern HBRUSH g_hbrHighlight; +extern HBRUSH g_hbrWindow; + +#endif // NODRAWTEXT + +// +// Synchronization +// +#ifndef NOSYNC + +#if defined(WIN95) + +#define INIT_EXCLUSIVE() Common_InitExclusive(); +#define ENTER_EXCLUSIVE() Common_EnterExclusive(); +#define LEAVE_EXCLUSIVE() Common_LeaveExclusive(); +#define ASSERT_EXCLUSIVE() ASSERT(0 < g_cRefCommonCS) +#define ASSERT_NOT_EXCLUSIVE() ASSERT(0 == g_cRefCommonCS) + +extern UINT g_cRefCommonCS; + +void PUBLIC Common_InitExclusive(void); +void PUBLIC Common_EnterExclusive(void); +void PUBLIC Common_LeaveExclusive(void); + +#endif // WIN95 + +// Safe version of MsgWaitMultipleObjects() +// +DWORD PUBLIC MsgWaitObjectsSendMessage(DWORD cObjects, LPHANDLE phObjects, DWORD dwTimeout); + +#else // NOSYNC + +#if defined(WIN95) + +#define INIT_EXCLUSIVE() +#define ENTER_EXCLUSIVE() +#define LEAVE_EXCLUSIVE() +#define ASSERT_EXCLUSIVE() +#define ASSERT_NOT_EXCLUSIVE() + +#endif + +#endif // NOSYNC + + +// +// Path whacking functions +// +#if !defined(NOPATH) && defined(WIN95) + +BOOL PUBLIC WPPathIsRoot(LPCSTR pszPath); +BOOL PUBLIC WPPathIsUNC(LPCSTR pszPath); +LPSTR PUBLIC WPRemoveBackslash(LPSTR lpszPath); +LPSTR PUBLIC WPRemoveExt(LPCSTR pszPath, LPSTR pszBuf); +LPSTR PUBLIC WPFindNextComponentI(LPCSTR lpszPath); +void PUBLIC WPMakePresentable(LPSTR pszPath); +BOOL PUBLIC WPPathsTooLong(LPCSTR pszFolder, LPCSTR pszName); +void PUBLIC WPCanonicalize(LPCSTR pszPath, LPSTR pszBuf); +LPSTR PUBLIC WPFindFileName(LPCSTR pPath); +BOOL PUBLIC WPPathExists(LPCSTR pszPath); +LPCSTR PUBLIC WPFindEndOfRoot(LPCSTR pszPath); +BOOL PUBLIC WPPathIsPrefix(LPCSTR lpcszPath1, LPCSTR lpcszPath2); + +#ifdef WANT_SHELL_SUPPORT +LPSTR PUBLIC WPGetDisplayName(LPCSTR pszPath, LPSTR pszBuf); + +// Events for WPNotifyShell +typedef enum _notifyshellevent + { + NSE_CREATE = 0, + NSE_MKDIR, + NSE_UPDATEITEM, + NSE_UPDATEDIR + } NOTIFYSHELLEVENT; + +void PUBLIC WPNotifyShell(LPCSTR pszPath, NOTIFYSHELLEVENT nse, BOOL bDoNow); +#endif // WANT_SHELL_SUPPORT + +#endif // !defined(NOPATH) && defined(WIN95) + + +// +// Profile (.ini) support functions +// +// (Currently all profile functions are for DEBUG use only +#ifndef DEBUG +#define NOPROFILE +#endif +#ifndef NOPROFILE + +#ifndef SZ_DEBUGINI +#pragma message("SZ_DEBUGINI is not #defined. Assuming \"rover.ini\".") +#define SZ_DEBUGINI "rover.ini" +#endif +#ifndef SZ_DEBUGSECTION +#pragma message("SZ_DEBUGSECTION is not #defined. Assuming [Debug].") +#define SZ_DEBUGSECTION "Debug" +#endif + +BOOL PUBLIC RovComm_ProcessIniFile(void); + +#else // NOPROFILE + +#define RovComm_ProcessIniFile() 1 ? (BOOL)TRUE : (void)0 + +#endif // NOPROFILE + + +// +// Debug helper functions +// + + +// Break flags +#define BF_ONVALIDATE 0x00000001 +#define BF_ONOPEN 0x00000002 +#define BF_ONCLOSE 0x00000004 +#define BF_ONRUNONCE 0x00000008 +#define BF_ONTHREADATT 0x00000010 +#define BF_ONTHREADDET 0x00000020 +#define BF_ONPROCESSATT 0x00000040 +#define BF_ONPROCESSDET 0x00000080 +#define BF_ONAPIENTER 0x00000100 + +// Trace flags +#define TF_ALWAYS 0x00000000 +#define TF_WARNING 0x00000001 +#define TF_ERROR 0x00000002 +#define TF_GENERAL 0x00000004 // Standard messages +#define TF_FUNC 0x00000008 // Trace function calls +// (Upper 16 bits reserved for user) + +#if defined(NODEBUGHELP) || !defined(DEBUG) + +#define DEBUG_BREAK 1 ? (void)0 : (void) +#define ASSERT(f) +#define EVAL(f) (f) +#define ASSERT_MSG 1 ? (void)0 : (void) +#define DEBUG_MSG 1 ? (void)0 : (void) +#define TRACE_MSGA 1 ? (void)0 : (void) +#define TRACE_MSGW 1 ? (void)0 : (void) +#ifdef UNICODE +#define TRACE_MSG TRACE_MSGW +#else +#define TRACE_MSG TRACE_MSGA +#endif + +#define VERIFY_SZ(f, szFmt, x) (f) +#define VERIFY_SZ2(f, szFmt, x1, x2) (f) + +#define DBG_ENTER(fn) +#define DBG_ENTER_SZ(fn, sz) +#define DBG_ENTER_DTOBJ(fn, pdtobj, sz) +#define DBG_ENTER_RIID(fn, riid) +#define DBG_ENTER_UL(fn, ul) + +#define DBG_EXIT(fn) +#define DBG_EXIT_TYPE(fn, dw, pfnStrFromType) +#define DBG_EXIT_INT(fn, n) +#define DBG_EXIT_BOOL(fn, b) +#define DBG_EXIT_US(fn, us) +#define DBG_EXIT_UL(fn, ul) +#define DBG_EXIT_DWORD DBG_EXIT_UL +#define DBG_EXIT_PTR(fn, ptr) +#define DBG_EXIT_HRES(fn, hres) + +#else // defined(NODEBUGHELP) || !defined(DEBUG) + +extern DWORD g_dwDumpFlags; +extern DWORD g_dwBreakFlags; +extern DWORD g_dwTraceFlags; + +// Debugging macros +// +#ifndef SZ_MODULEA +#error SZ_MODULEA is not #defined +#endif +#if defined(UNICODE) && !defined(SZ_MODULEW) +#error SZ_MODULEW is not #defined +#endif + +#define DEBUG_CASE_STRING(x) case x: return #x + +#define DEBUG_STRING_MAPW(x) { x, TEXT(#x) } +#define DEBUG_STRING_MAPA(x) { x, #x } +#ifdef UNICODE +#define DEBUG_STRING_MAP DEBUG_STRING_MAPW +#else // UNICODE +#define DEBUG_STRING_MAP DEBUG_STRING_MAPA +#endif // UNICODE + +#define ASSERTSEG + +// Use this macro to declare message text that will be placed +// in the CODE segment (useful if DS is getting full) +// +// Ex: DEBUGTEXT(szMsg, "Invalid whatever: %d"); +// +#define DEBUGTEXT(sz, msg) \ + static const CHAR ASSERTSEG sz[] = msg; + +void PUBLIC CommonDebugBreak(DWORD flag); +void PUBLIC CommonAssertFailed(LPCSTR szFile, int line); + +void +CPUBLIC +CommonAssertMsgW( + BOOL f, + LPCWSTR pwszMsg, ...); +void +CPUBLIC +CommonAssertMsgA( + BOOL f, + LPCSTR pszMsg, ...); +#ifdef UNICODE +#define CommonAssertMsg CommonAssertMsgW +#else +#define CommonAssertMsg CommonAssertMsgA +#endif // UNICODE + +BOOL WINAPI +DisplayDebug( + DWORD flag + ); + + +void +CPUBLIC +CommonDebugMsgW( + DWORD mask, + LPCSTR pszMsg, ...); +void +CPUBLIC +CommonDebugMsgA( + DWORD mask, + LPCSTR pszMsg, ...); +#ifdef UNICODE +#define CommonDebugMsg CommonDebugMsgW +#else +#define CommonDebugMsg CommonDebugMsgA +#endif // UNICODE + +LPCWSTR +PUBLIC +Dbg_SafeStrW( + LPCWSTR pwsz); +LPCSTR +PUBLIC +Dbg_SafeStrA( + LPCSTR psz); +#ifdef UNICODE +#define Dbg_SafeStr Dbg_SafeStrW +#else +#define Dbg_SafeStr Dbg_SafeStrA +#endif // UNICODE + +#define DEBUG_BREAK CommonDebugBreak + +// ASSERT(f) -- Generate "assertion failed in line x of file.c" +// message if f is NOT true. +// +#define ASSERT(f) \ + { \ + DEBUGTEXT(szFile, __FILE__); \ + if (!(f)) \ + CommonAssertFailed(szFile, __LINE__); \ + } +#define EVAL ASSERT + +// ASSERT_MSG(f, msg, args...) -- Generate wsprintf-formatted +// messsage w/params if f is NOT true. +// +#define ASSERT_MSG CommonAssertMsg + +// TRACE_MSG(mask, msg, args...) - Generate wsprintf-formatted msg using +// specified debug mask. System debug mask +// governs whether message is output. +// +#define TRACE_MSGW CommonDebugMsgW +#define TRACE_MSGA CommonDebugMsgA +#define TRACE_MSG CommonDebugMsg + +// VERIFY_SZ(f, msg, arg) -- Generate wsprintf-formatted msg w/ 1 param +// if f is NOT true +// +#define VERIFY_SZ(f, szFmt, x) ASSERT_MSG(f, szFmt, x) + + +// VERIFY_SZ2(f, msg, arg1, arg2) -- Generate wsprintf-formatted msg w/ 2 +// param if f is NOT true +// +#define VERIFY_SZ2(f, szFmt, x1, x2) ASSERT_MSG(f, szFmt, x1, x2) + + + +// DBG_ENTER(fn) -- Generates a function entry debug spew for +// a function +// +#define DBG_ENTER(fn) \ + TRACE_MSG(TF_FUNC, " > " #fn "()") + + +// DBG_ENTER_SZ(fn, sz) -- Generates a function entry debug spew for +// a function that accepts a string as one of its +// parameters. +// +#define DBG_ENTER_SZ(fn, sz) \ + TRACE_MSG(TF_FUNC, " > " #fn "(..., \"%s\",...)", Dbg_SafeStr(sz)) + + +// DBG_ENTER_UL(fn, ul) -- Generates a function entry debug spew for +// a function that accepts a DWORD as one of its +// parameters. +// +#define DBG_ENTER_UL(fn, ul) \ + TRACE_MSG(TF_FUNC, " > " #fn "(..., %#08lx,...)", (ULONG)(ul)) + + +#ifdef WANT_OLE_SUPPORT +// DBG_ENTER_RIID(fn, riid) -- Generates a function entry debug spew for +// a function that accepts an riid as one of its +// parameters. +// +#define DBG_ENTER_RIID(fn, riid) \ + TRACE_MSG(TF_FUNC, " > " #fn "(..., %s,...)", Dbg_GetRiidName(riid)) +#endif + + +// DBG_EXIT(fn) -- Generates a function exit debug spew +// +#define DBG_EXIT(fn) \ + TRACE_MSG(TF_FUNC, " < " #fn "()") + +// DBG_EXIT_TYPE(fn, dw, pfnStrFromType) -- Generates a function exit debug +// spew for functions that return <type>. +// +#define DBG_EXIT_TYPE(fn, dw, pfnStrFromType) \ + TRACE_MSG(TF_FUNC, " < " #fn "() with %s", (LPCTSTR)pfnStrFromType(dw)) + +// DBG_EXIT_INT(fn, us) -- Generates a function exit debug spew for +// functions that return an INT. +// +#define DBG_EXIT_INT(fn, n) \ + TRACE_MSG(TF_FUNC, " < " #fn "() with %d", (int)(n)) + +// DBG_EXIT_BOOL(fn, b) -- Generates a function exit debug spew for +// functions that return a boolean. +// +#define DBG_EXIT_BOOL(fn, b) \ + TRACE_MSG(TF_FUNC, " < " #fn "() with %s", (b) ? (LPTSTR)TEXT("TRUE") : (LPTSTR)TEXT("FALSE")) + +// DBG_EXIT_US(fn, us) -- Generates a function exit debug spew for +// functions that return a USHORT. +// +#define DBG_EXIT_US(fn, us) \ + TRACE_MSG(TF_FUNC, " < " #fn "() with %#x", (USHORT)(us)) + +// DBG_EXIT_UL(fn, ul) -- Generates a function exit debug spew for +// functions that return a ULONG. +// +#define DBG_EXIT_UL(fn, ul) \ + TRACE_MSG(TF_FUNC, " < " #fn "() with %#08lx", (ULONG)(ul)) +#define DBG_EXIT_DWORD DBG_EXIT_UL + +// DBG_EXIT_PTR(fn, pv) -- Generates a function exit debug spew for +// functions that return a pointer. +// +#define DBG_EXIT_PTR(fn, pv) \ + TRACE_MSG(TF_FUNC, " < " #fn "() with %#lx", (LPVOID)(pv)) + +// DBG_EXIT_HRES(fn, hres) -- Generates a function exit debug spew for +// functions that return an HRESULT. +// +#define DBG_EXIT_HRES(fn, hres) DBG_EXIT_TYPE(fn, hres, Dbg_GetScode) + +#endif // defined(NODEBUGHELP) || !defined(DEBUG) + + +// +// Standard functions +// + +BOOL PUBLIC RovComm_Init(HINSTANCE hinst); +BOOL PUBLIC RovComm_Terminate(HINSTANCE hinst); + + +// Admin related +BOOL PUBLIC IsAdminUser(void); + +// +// Device Installer wrappers and helper functions +// + +#ifndef NODI + +#include <rovdi.h> + +#endif // NODI + + +#endif // __ROVCOMM_H__ |