windows-nt/Source/XPSP1/NT/shell/ext/hnw/shared/util.h
2020-09-26 16:20:57 +08:00

142 lines
4.9 KiB
C

//
// Util.h
//
#ifndef __UTIL_H__
#define __UTIL_H__
#include <stdarg.h>
#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__