# HG changeset patch # User Jordan Miner # Date 1280122402 18000 # Node ID 0d6778fea6247f02e6abf5560a01f98a1279efd6 # Parent f149c868a34f7817c53ed7a633a2d0a76840e12d Add some Windows error constants and related functions. diff -r f149c868a34f -r 0d6778fea624 dynamin/c/uniscribe.d --- a/dynamin/c/uniscribe.d Mon Jul 26 00:31:17 2010 -0500 +++ b/dynamin/c/uniscribe.d Mon Jul 26 00:33:22 2010 -0500 @@ -34,7 +34,7 @@ SCRIPT_UNDEFINED = 0 } -//#define USP_E_SCRIPT_NOT_IN_FONT MAKE_HRESULT(SEVERITY_ERROR,FACILITY_ITF,0x200) +const HRESULT USP_E_SCRIPT_NOT_IN_FONT = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0x200); alias void* SCRIPT_CACHE; diff -r f149c868a34f -r 0d6778fea624 dynamin/c/windows.d --- a/dynamin/c/windows.d Mon Jul 26 00:31:17 2010 -0500 +++ b/dynamin/c/windows.d Mon Jul 26 00:33:22 2010 -0500 @@ -120,6 +120,36 @@ DWORD GetLastError(); +enum : HRESULT { + E_NOTIMPL = 0x80004001, + E_OUTOFMEMORY = 0x8007000E, + E_INVALIDARG = 0x80070057, + E_NOINTERFACE = 0x80004002, + E_POINTER = 0x80004003, + E_HANDLE = 0x80070006, + E_ABORT = 0x80004004, + E_FAIL = 0x80004005, + E_ACCESSDENIED = 0x80070005 +} + +// COM error codes +enum { + SEVERITY_SUCCESS = 0, + SEVERITY_ERROR = 1, +} +enum { + FACILITY_WIN32 = 7, + FACILITY_ITF = 4, +} + +bool SUCCEEDED(HRESULT hr) { return hr >= 0; } +bool FAILED(HRESULT hr) { return hr < 0; } +bool IS_ERROR(HRESULT hr) { return (hr >> 31) == SEVERITY_ERROR; } +uint HRESULT_CODE(HRESULT hr) { return hr & 0xFFFF; } +uint HRESULT_FACILITY(HRESULT hr) { return (hr >> 16) & 0x1FFF; } +uint HRESULT_SEVERITY(HRESULT hr) { return (hr >> 31) & 0x1; } +HRESULT MAKE_HRESULT(uint sev, uint fac, uint code) { return (sev << 31) | (fac << 16) | code; } + int MultiByteToWideChar( UINT CodePage, DWORD dwFlags,