// // Util.h // #ifndef __UTIL_H__ #define __UTIL_H__ #include #ifdef __cplusplus #define EXTERN_C extern "C" #else #define EXTERN_C #endif #ifndef _countof #define _countof(ar) (sizeof(ar) / sizeof((ar)[0])) #endif #ifndef _lengthof #define _lengthof(sz) (_countof(sz) - 1) #endif #ifndef ROUND_UP #define ROUND_UP(val, quantum) ((val) + (((quantum) - ((val) % (quantum))) % (quantum))) #endif #ifdef __cplusplus inline BOOL IsWindows9x() { return (GetVersion() >= 0x80000000) ? TRUE : FALSE; } #else #define IsWindows9x() ((GetVersion() >= 0x80000000) ? TRUE : FALSE) #endif #define RECTWIDTH(rc) ((rc).right - (rc).left) #define RECTHEIGHT(rc) ((rc).bottom - (rc).top) #define HARDWAREADDRESSBUFLEN 64 #ifndef STATUS_SUCCESS #define STATUS_SUCCESS 0x0 #endif #ifndef GUID_LENGTH #define GUID_LENGTH 42 #endif EXTERN_C LPTSTR lstrchr(LPCTSTR pszString, TCHAR ch); EXTERN_C LPTSTR lstrdup(LPCTSTR psz); EXTERN_C BOOL MyIsDigit(TCHAR ch); EXTERN_C int MyAtoi(LPCTSTR psz); EXTERN_C int CountChars(LPCTSTR psz, TCHAR ch); EXTERN_C BOOL LoadDllFunctions(LPCTSTR pszDll, LPCSTR pszFunctionNames, FARPROC* prgFunctions); EXTERN_C int MakePath(LPTSTR pszBuf, LPCTSTR pszFolder, LPCTSTR pszFileTitle); EXTERN_C HRESULT MakeLnkFile(CLSID clsid, LPCTSTR pszLinkTarget, LPCTSTR pszDescription, LPCTSTR pszFolderPath, LPCTSTR pszFileName); EXTERN_C LPTSTR FindPartialPath(LPCTSTR pszFullPath, int nDepth); EXTERN_C LPTSTR FindFileTitle(LPCTSTR pszFullPath); EXTERN_C LPTSTR FindExtension(LPCTSTR pszFileName); EXTERN_C BOOL IsFullPath(LPCTSTR pszPath); EXTERN_C void ShowDlgItem(HWND hwndDlg, int nCtrlID, int nCmdShow); EXTERN_C HWND GetDlgItemRect(HWND hwndDlg, int nCtrlID, RECT* pRect); EXTERN_C void GetRelativeRect(HWND hwndCtrl, RECT* pRect); EXTERN_C void SetDlgItemRect(HWND hwndDlg, int nCtrlID, CONST RECT* pRect); EXTERN_C BOOL __cdecl FormatDlgItemText(HWND hwnd, int nCtrlID, LPCTSTR pszFormat, ...); EXTERN_C void FormatWindowTextV(HWND hwnd, LPCTSTR pszFormat, va_list argList); EXTERN_C LPTSTR __cdecl LoadStringFormat(HINSTANCE hInstance, UINT nStringID, ...); EXTERN_C int EstimateFormatLength(LPCTSTR pszFormat, va_list argList); EXTERN_C void CenterWindow(HWND hwnd); EXTERN_C LPCWSTR FindResourceString(HINSTANCE hInstance, UINT nStringID, int* pcchString, WORD wLangID); EXTERN_C int GetResourceStringLength(HINSTANCE hInstance, UINT nStringID, WORD wLangID); EXTERN_C LPTSTR LoadStringAllocEx(HINSTANCE hInstance, UINT nID, WORD wLangID); EXTERN_C void TrimLeft(LPTSTR pszText); EXTERN_C void TrimRight(LPTSTR pszText); EXTERN_C DWORD RegDeleteKeyAndSubKeys(HKEY hkey, LPCTSTR pszSubKey); EXTERN_C void DrawHollowRect(HDC hdc, const RECT* pRect, int cxLeft, int cyTop, int cxRight, int cyBottom); EXTERN_C void DrawFastRect(HDC hdc, const RECT* pRect); EXTERN_C int GetFontHeight(HFONT hFont); EXTERN_C HRESULT MyGetSpecialFolderPath(int nFolder, LPTSTR pszPath); EXTERN_C BOOL GetLinkTarget(LPCTSTR pszLinkPath, LPTSTR pszLinkTarget); #ifdef __cplusplus EXTERN_C LPBYTE LoadFile(LPCTSTR pszFileName, DWORD* pdwFileSize = NULL); #else EXTERN_C LPBYTE LoadFile(LPCTSTR pszFileName, DWORD* pdwFileSize); #endif #ifdef __cplusplus BOOL GetFirstToken(LPCSTR& pszList, TCHAR chSeparator, LPSTR pszBuf, int cchBuf); inline LPTSTR LoadStringAlloc(HINSTANCE hInst, UINT nStringID) { return LoadStringAllocEx(hInst, nStringID, 0); } void ReplaceString(LPTSTR& pszTarget, LPCTSTR pszSource); #else #define LoadStringAlloc(hInst, nStringID) LoadStringAllocEx(hInst, nStringID, 0) #endif #define DoesFileExist(szFile) (GetFileAttributes(szFile) != 0xFFFFFFFF) #define INT16_CCH_MAX 6 // -32768 #define INT32_CCH_MAX 11 // -2147483648 #define INT64_CCH_MAX 20 // -9223372036854775808 #define INT128_CCH_MAX 40 // -170141183460469231731687303715884105728 #define INT16X_CCH_MAX 4 // FFFF #define INT32X_CCH_MAX 8 // FFFFFFFF #define INT64X_CCH_MAX 16 // FFFFFFFFFFFFFFFF #define INT128X_CCH_MAX 32 // FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF #if defined(WIN64) // REVIEW: I don't know if these values are correct for Win64 #define INT_CCH_MAX INT32_CCH_MAX #define INTX_CCH_MAX INT32X_CCH_MAX #define LONG_CCH_MAX INT32_CCH_MAX #define LONGX_CCH_MAX INT32X_CCH_MAX #define SHORT_CCH_MAX INT16_CCH_MAX #define SHORTX_CCH_MAX INT16X_CCH_MAX #elif defined(WIN32) // Win32 #define INT_CCH_MAX INT32_CCH_MAX #define INTX_CCH_MAX INT32X_CCH_MAX #define LONG_CCH_MAX INT32_CCH_MAX #define LONGX_CCH_MAX INT32X_CCH_MAX #define SHORT_CCH_MAX INT16_CCH_MAX #define SHORTX_CCH_MAX INT16X_CCH_MAX #else // Win16 #define INT_CCH_MAX INT16_CCH_MAX #define INTX_CCH_MAX INT16X_CCH_MAX #define LONG_CCH_MAX INT32_CCH_MAX #define LONGX_CCH_MAX INT32X_CCH_MAX #define SHORT_CCH_MAX INT16_CCH_MAX #define SHORTX_CCH_MAX INT16X_CCH_MAX #endif inline HRESULT HrFromWin32Error(DWORD dwErr) { return HRESULT_FROM_WIN32(dwErr); } #endif // !__UTIL_H__