mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
more windows stuff
This commit is contained in:
@@ -134,6 +134,43 @@ foreign advapi32 {
|
|||||||
cbData: DWORD,
|
cbData: DWORD,
|
||||||
) -> LSTATUS ---
|
) -> LSTATUS ---
|
||||||
|
|
||||||
|
RegQueryInfoKeyW :: proc(
|
||||||
|
hKey: HKEY,
|
||||||
|
lpClass: LPWSTR,
|
||||||
|
lpcchClass: LPDWORD,
|
||||||
|
lpReserved: LPDWORD,
|
||||||
|
lpcSubKeys: LPDWORD,
|
||||||
|
lpcbMaxSubKeyLen: LPDWORD,
|
||||||
|
lpcbMaxClassLen: LPDWORD,
|
||||||
|
lpcValues: LPDWORD,
|
||||||
|
lpcbMaxValueNameLen: LPDWORD,
|
||||||
|
lpcbMaxValueLen: LPDWORD,
|
||||||
|
lpcbSecurityDescriptor: LPDWORD,
|
||||||
|
lpftLastWriteTime: ^FILETIME,
|
||||||
|
) -> LSTATUS ---
|
||||||
|
|
||||||
|
RegEnumKeyExW :: proc(
|
||||||
|
hKey: HKEY,
|
||||||
|
dwIndex: DWORD,
|
||||||
|
lpName: LPWSTR,
|
||||||
|
lpcchName: LPDWORD,
|
||||||
|
lpReserved: LPDWORD,
|
||||||
|
lpClass: LPWSTR,
|
||||||
|
lpcchClass: LPDWORD,
|
||||||
|
lpftLastWriteTime: ^FILETIME,
|
||||||
|
) -> LSTATUS ---
|
||||||
|
|
||||||
|
RegEnumValueW :: proc(
|
||||||
|
hKey: HKEY,
|
||||||
|
dwIndex: DWORD,
|
||||||
|
lpValueName: LPWSTR,
|
||||||
|
lpcchValueName: LPDWORD,
|
||||||
|
lpReserved: LPDWORD,
|
||||||
|
lpType: LPDWORD,
|
||||||
|
lpData: LPBYTE,
|
||||||
|
lpcbData: LPDWORD,
|
||||||
|
) -> LSTATUS ---
|
||||||
|
|
||||||
GetFileSecurityW :: proc(
|
GetFileSecurityW :: proc(
|
||||||
lpFileName: LPCWSTR,
|
lpFileName: LPCWSTR,
|
||||||
RequestedInformation: SECURITY_INFORMATION,
|
RequestedInformation: SECURITY_INFORMATION,
|
||||||
|
|||||||
@@ -0,0 +1,298 @@
|
|||||||
|
// +build windows
|
||||||
|
package sys_windows
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/intl/code-page-identifiers
|
||||||
|
CODEPAGE :: enum UINT {
|
||||||
|
// Default to ANSI code page
|
||||||
|
ACP = CP_ACP,
|
||||||
|
// Default to OEM code page
|
||||||
|
OEMCP = CP_OEMCP,
|
||||||
|
// Default to MAC code page
|
||||||
|
MACCP = CP_MACCP,
|
||||||
|
// Current thread's ANSI code page
|
||||||
|
THREAD_ACP = CP_THREAD_ACP,
|
||||||
|
// Symbol translations
|
||||||
|
SYMBOL = CP_SYMBOL,
|
||||||
|
|
||||||
|
// IBM EBCDIC US-Canada
|
||||||
|
IBM037 = 037,
|
||||||
|
// OEM United States
|
||||||
|
IBM437 = 437,
|
||||||
|
// IBM EBCDIC International
|
||||||
|
IBM500 = 500,
|
||||||
|
// Arabic (ASMO 708)
|
||||||
|
ASMO_708 = 708,
|
||||||
|
// Arabic (Transparent ASMO); Arabic (DOS)
|
||||||
|
DOS_720 = 720,
|
||||||
|
// OEM Greek (formerly 437G); Greek (DOS)
|
||||||
|
IBM737 = 737,
|
||||||
|
// OEM Baltic; Baltic (DOS)
|
||||||
|
IBM775 = 775,
|
||||||
|
// OEM Multilingual Latin 1; Western European (DOS)
|
||||||
|
IBM850 = 850,
|
||||||
|
// OEM Latin 2; Central European (DOS)
|
||||||
|
IBM852 = 852,
|
||||||
|
// OEM Cyrillic (primarily Russian)
|
||||||
|
IBM855 = 855,
|
||||||
|
// OEM Turkish; Turkish (DOS)
|
||||||
|
IBM857 = 857,
|
||||||
|
// OEM Multilingual Latin 1 + Euro symbol
|
||||||
|
IBM00858 = 858,
|
||||||
|
// OEM Portuguese; Portuguese (DOS)
|
||||||
|
IBM860 = 860,
|
||||||
|
// OEM Icelandic; Icelandic (DOS)
|
||||||
|
IBM861 = 861,
|
||||||
|
// OEM Hebrew; Hebrew (DOS)
|
||||||
|
DOS_862 = 862,
|
||||||
|
// OEM French Canadian; French Canadian (DOS)
|
||||||
|
IBM863 = 863,
|
||||||
|
// OEM Arabic; Arabic (864)
|
||||||
|
IBM864 = 864,
|
||||||
|
// OEM Nordic; Nordic (DOS)
|
||||||
|
IBM865 = 865,
|
||||||
|
// OEM Russian; Cyrillic (DOS)
|
||||||
|
CP866 = 866,
|
||||||
|
// OEM Modern Greek; Greek, Modern (DOS)
|
||||||
|
IBM869 = 869,
|
||||||
|
// IBM EBCDIC Multilingual/ROECE (Latin 2); IBM EBCDIC Multilingual Latin 2
|
||||||
|
IBM870 = 870,
|
||||||
|
// Thai (Windows)
|
||||||
|
WINDOWS_874 = 874,
|
||||||
|
// IBM EBCDIC Greek Modern
|
||||||
|
CP875 = 875,
|
||||||
|
// ANSI/OEM Japanese; Japanese (Shift-JIS)
|
||||||
|
SHIFT_JIS = 932,
|
||||||
|
// ANSI/OEM Simplified Chinese (PRC, Singapore); Chinese Simplified (GB2312)
|
||||||
|
GB2312 = 936,
|
||||||
|
// ANSI/OEM Korean (Unified Hangul Code)
|
||||||
|
KS_C_5601_1987 = 949,
|
||||||
|
// ANSI/OEM Traditional Chinese (Taiwan; Hong Kong SAR, PRC); Chinese Traditional (Big5)
|
||||||
|
BIG5 = 950,
|
||||||
|
// IBM EBCDIC Turkish (Latin 5)
|
||||||
|
IBM1026 = 1026,
|
||||||
|
// IBM EBCDIC Latin 1/Open System
|
||||||
|
IBM01047 = 1047,
|
||||||
|
// IBM EBCDIC US-Canada (037 + Euro symbol); IBM EBCDIC (US-Canada-Euro)
|
||||||
|
IBM01140 = 1140,
|
||||||
|
// IBM EBCDIC Germany (20273 + Euro symbol); IBM EBCDIC (Germany-Euro)
|
||||||
|
IBM01141 = 1141,
|
||||||
|
// IBM EBCDIC Denmark-Norway (20277 + Euro symbol); IBM EBCDIC (Denmark-Norway-Euro)
|
||||||
|
IBM01142 = 1142,
|
||||||
|
// IBM EBCDIC Finland-Sweden (20278 + Euro symbol); IBM EBCDIC (Finland-Sweden-Euro)
|
||||||
|
IBM01143 = 1143,
|
||||||
|
// IBM EBCDIC Italy (20280 + Euro symbol); IBM EBCDIC (Italy-Euro)
|
||||||
|
IBM01144 = 1144,
|
||||||
|
// IBM EBCDIC Latin America-Spain (20284 + Euro symbol); IBM EBCDIC (Spain-Euro)
|
||||||
|
IBM01145 = 1145,
|
||||||
|
// IBM EBCDIC United Kingdom (20285 + Euro symbol); IBM EBCDIC (UK-Euro)
|
||||||
|
IBM01146 = 1146,
|
||||||
|
// IBM EBCDIC France (20297 + Euro symbol); IBM EBCDIC (France-Euro)
|
||||||
|
IBM01147 = 1147,
|
||||||
|
// IBM EBCDIC International (500 + Euro symbol); IBM EBCDIC (International-Euro)
|
||||||
|
IBM01148 = 1148,
|
||||||
|
// IBM EBCDIC Icelandic (20871 + Euro symbol); IBM EBCDIC (Icelandic-Euro)
|
||||||
|
IBM01149 = 1149,
|
||||||
|
// Unicode UTF-16, little endian byte order (BMP of ISO 10646); available only to managed applications
|
||||||
|
UTF16 = 1200,
|
||||||
|
// Unicode UTF-16, big endian byte order; available only to managed applications
|
||||||
|
UNICODEFFFE = 1201,
|
||||||
|
// ANSI Central European; Central European (Windows)
|
||||||
|
WINDOWS_1250 = 1250,
|
||||||
|
// ANSI Cyrillic; Cyrillic (Windows)
|
||||||
|
WINDOWS_1251 = 1251,
|
||||||
|
// ANSI Latin 1; Western European (Windows)
|
||||||
|
WINDOWS_1252 = 1252,
|
||||||
|
// ANSI Greek; Greek (Windows)
|
||||||
|
WINDOWS_1253 = 1253,
|
||||||
|
// ANSI Turkish; Turkish (Windows)
|
||||||
|
WINDOWS_1254 = 1254,
|
||||||
|
// ANSI Hebrew; Hebrew (Windows)
|
||||||
|
WINDOWS_1255 = 1255,
|
||||||
|
// ANSI Arabic; Arabic (Windows)
|
||||||
|
WINDOWS_1256 = 1256,
|
||||||
|
// ANSI Baltic; Baltic (Windows)
|
||||||
|
WINDOWS_1257 = 1257,
|
||||||
|
// ANSI/OEM Vietnamese; Vietnamese (Windows)
|
||||||
|
WINDOWS_1258 = 1258,
|
||||||
|
// Korean (Johab)
|
||||||
|
JOHAB = 1361,
|
||||||
|
// MAC Roman; Western European (Mac)
|
||||||
|
MACINTOSH = 10000,
|
||||||
|
// Japanese (Mac)
|
||||||
|
X_MAC_JAPANESE = 10001,
|
||||||
|
// MAC Traditional Chinese (Big5); Chinese Traditional (Mac)
|
||||||
|
X_MAC_CHINESETRAD = 10002,
|
||||||
|
// Korean (Mac)
|
||||||
|
X_MAC_KOREAN = 10003,
|
||||||
|
// Arabic (Mac)
|
||||||
|
X_MAC_ARABIC = 10004,
|
||||||
|
// Hebrew (Mac)
|
||||||
|
X_MAC_HEBREW = 10005,
|
||||||
|
// Greek (Mac)
|
||||||
|
X_MAC_GREEK = 10006,
|
||||||
|
// Cyrillic (Mac)
|
||||||
|
X_MAC_CYRILLIC = 10007,
|
||||||
|
// MAC Simplified Chinese (GB 2312); Chinese Simplified (Mac)
|
||||||
|
X_MAC_CHINESESIMP = 10008,
|
||||||
|
// Romanian (Mac)
|
||||||
|
X_MAC_ROMANIAN = 10010,
|
||||||
|
// Ukrainian (Mac)
|
||||||
|
X_MAC_UKRAINIAN = 10017,
|
||||||
|
// Thai (Mac)
|
||||||
|
X_MAC_THAI = 10021,
|
||||||
|
// MAC Latin 2; Central European (Mac)
|
||||||
|
X_MAC_CE = 10029,
|
||||||
|
// Icelandic (Mac)
|
||||||
|
X_MAC_ICELANDIC = 10079,
|
||||||
|
// Turkish (Mac)
|
||||||
|
X_MAC_TURKISH = 10081,
|
||||||
|
// Croatian (Mac)
|
||||||
|
X_MAC_CROATIAN = 10082,
|
||||||
|
// Unicode UTF-32, little endian byte order; available only to managed applications
|
||||||
|
UTF32 = 12000,
|
||||||
|
// Unicode UTF-32, big endian byte order; available only to managed applications
|
||||||
|
UTF32BE = 12001,
|
||||||
|
// CNS Taiwan; Chinese Traditional (CNS)
|
||||||
|
X_CHINESE_CNS = 20000,
|
||||||
|
// TCA Taiwan
|
||||||
|
X_CP20001 = 20001,
|
||||||
|
// Eten Taiwan; Chinese Traditional (Eten)
|
||||||
|
X_CHINESE_ETEN = 20002,
|
||||||
|
// IBM5550 Taiwan
|
||||||
|
X_CP20003 = 20003,
|
||||||
|
// TeleText Taiwan
|
||||||
|
X_CP20004 = 20004,
|
||||||
|
// Wang Taiwan
|
||||||
|
X_CP20005 = 20005,
|
||||||
|
// IA5 (IRV International Alphabet No. 5, 7-bit); Western European (IA5)
|
||||||
|
X_IA5 = 20105,
|
||||||
|
// IA5 German (7-bit)
|
||||||
|
X_IA5_GERMAN = 20106,
|
||||||
|
// IA5 Swedish (7-bit)
|
||||||
|
X_IA5_SWEDISH = 20107,
|
||||||
|
// IA5 Norwegian (7-bit)
|
||||||
|
X_IA5_NORWEGIAN = 20108,
|
||||||
|
// US-ASCII (7-bit)
|
||||||
|
US_ASCII = 20127,
|
||||||
|
// T.61
|
||||||
|
X_CP20261 = 20261,
|
||||||
|
// ISO 6937 Non-Spacing Accent
|
||||||
|
X_CP20269 = 20269,
|
||||||
|
// IBM EBCDIC Germany
|
||||||
|
IBM273 = 20273,
|
||||||
|
// IBM EBCDIC Denmark-Norway
|
||||||
|
IBM277 = 20277,
|
||||||
|
// IBM EBCDIC Finland-Sweden
|
||||||
|
IBM278 = 20278,
|
||||||
|
// IBM EBCDIC Italy
|
||||||
|
IBM280 = 20280,
|
||||||
|
// IBM EBCDIC Latin America-Spain
|
||||||
|
IBM284 = 20284,
|
||||||
|
// IBM EBCDIC United Kingdom
|
||||||
|
IBM285 = 20285,
|
||||||
|
// IBM EBCDIC Japanese Katakana Extended
|
||||||
|
IBM290 = 20290,
|
||||||
|
// IBM EBCDIC France
|
||||||
|
IBM297 = 20297,
|
||||||
|
// IBM EBCDIC Arabic
|
||||||
|
IBM420 = 20420,
|
||||||
|
// IBM EBCDIC Greek
|
||||||
|
IBM423 = 20423,
|
||||||
|
// IBM EBCDIC Hebrew
|
||||||
|
IBM424 = 20424,
|
||||||
|
// IBM EBCDIC Korean Extended
|
||||||
|
X_EBCDIC_KOREANEXTENDED = 20833,
|
||||||
|
// IBM EBCDIC Thai
|
||||||
|
IBM_THAI = 20838,
|
||||||
|
// Russian (KOI8-R); Cyrillic (KOI8-R)
|
||||||
|
KOI8_R = 20866,
|
||||||
|
// IBM EBCDIC Icelandic
|
||||||
|
IBM871 = 20871,
|
||||||
|
// IBM EBCDIC Cyrillic Russian
|
||||||
|
IBM880 = 20880,
|
||||||
|
// IBM EBCDIC Turkish
|
||||||
|
IBM905 = 20905,
|
||||||
|
// IBM EBCDIC Latin 1/Open System (1047 + Euro symbol)
|
||||||
|
IBM00924 = 20924,
|
||||||
|
// Japanese (JIS 0208-1990 and 0212-1990)
|
||||||
|
EUC_JP = 20932,
|
||||||
|
// Simplified Chinese (GB2312); Chinese Simplified (GB2312-80)
|
||||||
|
X_CP20936 = 20936,
|
||||||
|
// Korean Wansung
|
||||||
|
X_CP20949 = 20949,
|
||||||
|
// IBM EBCDIC Cyrillic Serbian-Bulgarian
|
||||||
|
CP1025 = 21025,
|
||||||
|
// Ukrainian (KOI8-U); Cyrillic (KOI8-U)
|
||||||
|
KOI8_U = 21866,
|
||||||
|
// ISO 8859-1 Latin 1; Western European (ISO)
|
||||||
|
ISO_8859_1 = 28591,
|
||||||
|
// ISO 8859-2 Central European; Central European (ISO)
|
||||||
|
ISO_8859_2 = 28592,
|
||||||
|
// ISO 8859-3 Latin 3
|
||||||
|
ISO_8859_3 = 28593,
|
||||||
|
// ISO 8859-4 Baltic
|
||||||
|
ISO_8859_4 = 28594,
|
||||||
|
// ISO 8859-5 Cyrillic
|
||||||
|
ISO_8859_5 = 28595,
|
||||||
|
// ISO 8859-6 Arabic
|
||||||
|
ISO_8859_6 = 28596,
|
||||||
|
// ISO 8859-7 Greek
|
||||||
|
ISO_8859_7 = 28597,
|
||||||
|
// ISO 8859-8 Hebrew; Hebrew (ISO-Visual)
|
||||||
|
ISO_8859_8 = 28598,
|
||||||
|
// ISO 8859-9 Turkish
|
||||||
|
ISO_8859_9 = 28599,
|
||||||
|
// ISO 8859-13 Estonian
|
||||||
|
ISO_8859_13 = 28603,
|
||||||
|
// ISO 8859-15 Latin 9
|
||||||
|
ISO_8859_15 = 28605,
|
||||||
|
// Europa 3
|
||||||
|
X_EUROPA = 29001,
|
||||||
|
// ISO 8859-8 Hebrew; Hebrew (ISO-Logical)
|
||||||
|
ISO_8859_8_I = 38598,
|
||||||
|
// ISO 2022 Japanese with no halfwidth Katakana; Japanese (JIS)
|
||||||
|
ISO_2022_JP = 50220,
|
||||||
|
// ISO 2022 Japanese with halfwidth Katakana; Japanese (JIS-Allow 1 byte Kana)
|
||||||
|
CSISO2022JP = 50221,
|
||||||
|
// ISO 2022 Japanese JIS X 0201-1989; Japanese (JIS-Allow 1 byte Kana - SO/SI)
|
||||||
|
ISO_2022_2_JP = 50222,
|
||||||
|
// ISO 2022 Korean
|
||||||
|
ISO_2022_KR = 50225,
|
||||||
|
// ISO 2022 Simplified Chinese; Chinese Simplified (ISO 2022)
|
||||||
|
X_CP50227 = 50227,
|
||||||
|
// EUC Japanese
|
||||||
|
EUC_JP_2 = 51932,
|
||||||
|
// EUC Simplified Chinese; Chinese Simplified (EUC)
|
||||||
|
EUC_CN = 51936,
|
||||||
|
// EUC Korean
|
||||||
|
EUC_KR = 51949,
|
||||||
|
// HZ-GB2312 Simplified Chinese; Chinese Simplified (HZ)
|
||||||
|
HZ_GB_2312 = 52936,
|
||||||
|
// **Windows XP and later:** GB18030 Simplified Chinese (4 byte); Chinese Simplified (GB18030)
|
||||||
|
GB18030 = 54936,
|
||||||
|
// ISCII Devanagari
|
||||||
|
X_ISCII_DE = 57002,
|
||||||
|
// ISCII Bangla
|
||||||
|
X_ISCII_BE = 57003,
|
||||||
|
// ISCII Tamil
|
||||||
|
X_ISCII_TA = 57004,
|
||||||
|
// ISCII Telugu
|
||||||
|
X_ISCII_TE = 57005,
|
||||||
|
// ISCII Assamese
|
||||||
|
X_ISCII_AS = 57006,
|
||||||
|
// ISCII Odia
|
||||||
|
X_ISCII_OR = 57007,
|
||||||
|
// ISCII Kannada
|
||||||
|
X_ISCII_KA = 57008,
|
||||||
|
// ISCII Malayalam
|
||||||
|
X_ISCII_MA = 57009,
|
||||||
|
// ISCII Gujarati
|
||||||
|
X_ISCII_GU = 57010,
|
||||||
|
// ISCII Punjabi
|
||||||
|
X_ISCII_PA = 57011,
|
||||||
|
|
||||||
|
// Unicode (UTF-7)
|
||||||
|
UTF7 = CP_UTF7, /*65000*/
|
||||||
|
// Unicode (UTF-8)
|
||||||
|
UTF8 = CP_UTF8, /*65001*/
|
||||||
|
}
|
||||||
+288
-75
@@ -7,108 +7,97 @@ foreign import gdi32 "system:Gdi32.lib"
|
|||||||
|
|
||||||
@(default_calling_convention="system")
|
@(default_calling_convention="system")
|
||||||
foreign gdi32 {
|
foreign gdi32 {
|
||||||
GetStockObject :: proc(i: c_int) -> HGDIOBJ ---
|
GetDeviceCaps :: proc(hdc: HDC, index: INT) -> INT ---
|
||||||
|
GetStockObject :: proc(i: INT) -> HGDIOBJ ---
|
||||||
SelectObject :: proc(hdc: HDC, h: HGDIOBJ) -> HGDIOBJ ---
|
SelectObject :: proc(hdc: HDC, h: HGDIOBJ) -> HGDIOBJ ---
|
||||||
DeleteObject :: proc(ho: HGDIOBJ) -> BOOL ---
|
DeleteObject :: proc(ho: HGDIOBJ) -> BOOL ---
|
||||||
SetBkColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF ---
|
SetBkColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF ---
|
||||||
|
SetBkMode :: proc(hdc: HDC, mode: BKMODE) -> INT ---
|
||||||
|
|
||||||
CreateCompatibleDC :: proc(hdc: HDC) -> HDC ---
|
CreateCompatibleDC :: proc(hdc: HDC) -> HDC ---
|
||||||
DeleteDC :: proc(hdc: HDC) -> BOOL ---
|
DeleteDC :: proc(hdc: HDC) -> BOOL ---
|
||||||
|
CancelDC :: proc(hdc: HDC) -> BOOL ---
|
||||||
|
SaveDC :: proc(hdc: HDC) -> INT ---
|
||||||
|
RestoreDC :: proc(hdc: HDC, nSavedDC: INT) -> BOOL ---
|
||||||
|
|
||||||
CreateDIBPatternBrush :: proc(h: HGLOBAL, iUsage: UINT) -> HBRUSH ---
|
CreateDIBPatternBrush :: proc(h: HGLOBAL, iUsage: UINT) -> HBRUSH ---
|
||||||
|
CreateDIBitmap :: proc(hdc: HDC, pbmih: ^BITMAPINFOHEADER, flInit: DWORD, pjBits: VOID, pbmi: ^BITMAPINFO, iUsage: UINT) -> HBITMAP ---
|
||||||
|
CreateDIBSection :: proc(hdc: HDC, pbmi: ^BITMAPINFO, usage: UINT, ppvBits: VOID, hSection: HANDLE, offset: DWORD) -> HBITMAP ---
|
||||||
|
StretchDIBits :: proc(hdc: HDC, xDest: INT, yDest: INT, DestWidth: INT, DestHeight: INT, xSrc: INT, ySrc: INT, SrcWidth: INT, SrcHeight: INT, lpBits: VOID, lpbmi: ^BITMAPINFO, iUsage: UINT, rop: DWORD) -> INT ---
|
||||||
|
StretchBlt :: proc(hdcDest: HDC, xDest: INT, yDest: INT, wDest: INT, hDest: INT, hdcSrc: HDC, xSrc: INT, ySrc: INT, wSrc: INT, hSrc: INT, rop: DWORD) -> BOOL ---
|
||||||
|
|
||||||
CreateDIBitmap :: proc(
|
SetPixelFormat :: proc(hdc: HDC, format: INT, ppfd: ^PIXELFORMATDESCRIPTOR) -> BOOL ---
|
||||||
hdc: HDC,
|
ChoosePixelFormat :: proc(hdc: HDC, ppfd: ^PIXELFORMATDESCRIPTOR) -> INT ---
|
||||||
pbmih: ^BITMAPINFOHEADER,
|
DescribePixelFormat :: proc(hdc: HDC, iPixelFormat: INT, nBytes: UINT, ppfd: ^PIXELFORMATDESCRIPTOR) -> INT ---
|
||||||
flInit: DWORD,
|
SwapBuffers :: proc(hdc: HDC) -> BOOL ---
|
||||||
pjBits: VOID,
|
|
||||||
pbmi: ^BITMAPINFO,
|
|
||||||
iUsage: UINT,
|
|
||||||
) -> HBITMAP ---
|
|
||||||
|
|
||||||
CreateDIBSection :: proc(
|
|
||||||
hdc: HDC,
|
|
||||||
pbmi: ^BITMAPINFO,
|
|
||||||
usage: UINT,
|
|
||||||
ppvBits: VOID,
|
|
||||||
hSection: HANDLE,
|
|
||||||
offset: DWORD,
|
|
||||||
) -> HBITMAP ---
|
|
||||||
|
|
||||||
StretchDIBits :: proc(
|
|
||||||
hdc: HDC,
|
|
||||||
xDest: c_int,
|
|
||||||
yDest: c_int,
|
|
||||||
DestWidth: c_int,
|
|
||||||
DestHeight: c_int,
|
|
||||||
xSrc: c_int,
|
|
||||||
ySrc: c_int,
|
|
||||||
SrcWidth: c_int,
|
|
||||||
SrcHeight: c_int,
|
|
||||||
lpBits: VOID,
|
|
||||||
lpbmi: ^BITMAPINFO,
|
|
||||||
iUsage: UINT,
|
|
||||||
rop: DWORD,
|
|
||||||
) -> c_int ---
|
|
||||||
|
|
||||||
StretchBlt :: proc(
|
|
||||||
hdcDest: HDC,
|
|
||||||
xDest: c_int,
|
|
||||||
yDest: c_int,
|
|
||||||
wDest: c_int,
|
|
||||||
hDest: c_int,
|
|
||||||
hdcSrc: HDC,
|
|
||||||
xSrc: c_int,
|
|
||||||
ySrc: c_int,
|
|
||||||
wSrc: c_int,
|
|
||||||
hSrc: c_int,
|
|
||||||
rop: DWORD,
|
|
||||||
) -> BOOL ---
|
|
||||||
|
|
||||||
SetPixelFormat :: proc(hdc: HDC, format: c_int, ppfd: ^PIXELFORMATDESCRIPTOR) -> BOOL ---
|
|
||||||
ChoosePixelFormat :: proc(hdc: HDC, ppfd: ^PIXELFORMATDESCRIPTOR) -> c_int ---
|
|
||||||
DescribePixelFormat :: proc(hdc: HDC, iPixelFormat: c_int, nBytes: UINT, ppfd: ^PIXELFORMATDESCRIPTOR) -> c_int ---
|
|
||||||
SwapBuffers :: proc(HDC) -> BOOL ---
|
|
||||||
|
|
||||||
SetDCBrushColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF ---
|
SetDCBrushColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF ---
|
||||||
GetDCBrushColor :: proc(hdc: HDC) -> COLORREF ---
|
GetDCBrushColor :: proc(hdc: HDC) -> COLORREF ---
|
||||||
PatBlt :: proc(hdc: HDC, x, y, w, h: c_int, rop: DWORD) -> BOOL ---
|
PatBlt :: proc(hdc: HDC, x, y, w, h: INT, rop: DWORD) -> BOOL ---
|
||||||
Rectangle :: proc(hdc: HDC, left, top, right, bottom: c_int) -> BOOL ---
|
Rectangle :: proc(hdc: HDC, left, top, right, bottom: INT) -> BOOL ---
|
||||||
|
|
||||||
CreateFontW :: proc(
|
CreateFontW :: proc(cHeight, cWidth, cEscapement, cOrientation, cWeight: INT, bItalic, bUnderline, bStrikeOut, iCharSet, iOutPrecision: DWORD, iClipPrecision, iQuality, iPitchAndFamily: DWORD, pszFaceName: LPCWSTR) -> HFONT ---
|
||||||
cHeight, cWidth, cEscapement, cOrientation, cWeight: c_int,
|
CreateFontIndirectW :: proc(lplf: ^LOGFONTW) -> HFONT ---
|
||||||
bItalic, bUnderline, bStrikeOut, iCharSet, iOutPrecision: DWORD,
|
CreateFontIndirectExW :: proc(unnamedParam1: ^ENUMLOGFONTEXDVW) -> HFONT ---
|
||||||
iClipPrecision, iQuality, iPitchAndFamily: DWORD,
|
AddFontResourceW :: proc(unnamedParam1: LPCWSTR) -> INT ---
|
||||||
pszFaceName: LPCWSTR,
|
AddFontResourceExW :: proc(name: LPCWSTR, fl: DWORD, res: PVOID) -> INT ---
|
||||||
) -> HFONT ---
|
AddFontMemResourceEx :: proc(pFileView: PVOID, cjSize: DWORD, pvResrved: PVOID, pNumFonts: ^DWORD) -> HANDLE ---
|
||||||
TextOutW :: proc(hdc: HDC, x, y: c_int, lpString: LPCWSTR, c: c_int) -> BOOL ---
|
EnumFontsW :: proc(hdc: HDC, lpLogfont: LPCWSTR, lpProc: FONTENUMPROCW, lParam: LPARAM) -> INT ---
|
||||||
GetTextExtentPoint32W :: proc(hdc: HDC, lpString: LPCWSTR, c: c_int, psizl: LPSIZE) -> BOOL ---
|
EnumFontFamiliesW :: proc(hdc: HDC, lpLogfont: LPCWSTR, lpProc: FONTENUMPROCW, lParam: LPARAM) -> INT ---
|
||||||
|
EnumFontFamiliesExW :: proc(hdc: HDC, lpLogfont: LPLOGFONTW, lpProc: FONTENUMPROCW, lParam: LPARAM, dwFlags: DWORD) -> INT ---
|
||||||
|
|
||||||
|
TextOutW :: proc(hdc: HDC, x, y: INT, lpString: LPCWSTR, c: INT) -> BOOL ---
|
||||||
|
GetTextExtentPoint32W :: proc(hdc: HDC, lpString: LPCWSTR, c: INT, psizl: LPSIZE) -> BOOL ---
|
||||||
GetTextMetricsW :: proc(hdc: HDC, lptm: LPTEXTMETRICW) -> BOOL ---
|
GetTextMetricsW :: proc(hdc: HDC, lptm: LPTEXTMETRICW) -> BOOL ---
|
||||||
|
|
||||||
CreateSolidBrush :: proc(color: COLORREF) -> HBRUSH ---
|
CreateSolidBrush :: proc(color: COLORREF) -> HBRUSH ---
|
||||||
|
|
||||||
GetObjectW :: proc(h: HANDLE, c: c_int, pv: LPVOID) -> int ---
|
GetObjectW :: proc(h: HANDLE, c: INT, pv: LPVOID) -> int ---
|
||||||
CreateCompatibleBitmap :: proc(hdc: HDC, cx, cy: c_int) -> HBITMAP ---
|
CreateCompatibleBitmap :: proc(hdc: HDC, cx, cy: INT) -> HBITMAP ---
|
||||||
BitBlt :: proc(hdc: HDC, x, y, cx, cy: c_int, hdcSrc: HDC, x1, y1: c_int, rop: DWORD) -> BOOL ---
|
BitBlt :: proc(hdc: HDC, x, y, cx, cy: INT, hdcSrc: HDC, x1, y1: INT, rop: DWORD) -> BOOL ---
|
||||||
GetDIBits :: proc(hdc: HDC, hbm: HBITMAP, start, cLines: UINT, lpvBits: LPVOID, lpbmi: ^BITMAPINFO, usage: UINT) -> int ---
|
GetDIBits :: proc(hdc: HDC, hbm: HBITMAP, start, cLines: UINT, lpvBits: LPVOID, lpbmi: ^BITMAPINFO, usage: UINT) -> INT ---
|
||||||
|
SetDIBits :: proc(hdc: HDC, hbm: HBITMAP, start: UINT, cLines: UINT, lpBits: VOID, lpbmi: ^BITMAPINFO, ColorUse: UINT) -> INT ---
|
||||||
|
SetDIBColorTable :: proc(hdc: HDC, iStart: UINT, cEntries: UINT, prgbq: ^RGBQUAD) -> UINT ---
|
||||||
|
GetDIBColorTable :: proc(hdc: HDC, iStart: UINT, cEntries: UINT, prgbq: ^RGBQUAD) -> UINT ---
|
||||||
|
|
||||||
|
CreatePen :: proc(iStyle, cWidth: INT, color: COLORREF) -> HPEN ---
|
||||||
|
ExtCreatePen :: proc(iPenStyle, cWidth: DWORD, plbrush: ^LOGBRUSH, cStyle: DWORD, pstyle: ^DWORD) -> HPEN ---
|
||||||
|
SetDCPenColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF ---
|
||||||
|
GetDCPenColor :: proc(hdc: HDC) -> COLORREF ---
|
||||||
|
|
||||||
|
CreatePalette :: proc(plpal: ^LOGPALETTE) -> HPALETTE ---
|
||||||
|
SelectPalette :: proc(hdc: HDC, hPal: HPALETTE, bForceBkgd: BOOL) -> HPALETTE ---
|
||||||
|
RealizePalette :: proc(hdc: HDC) -> UINT ---
|
||||||
|
|
||||||
|
SetTextColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF ---
|
||||||
|
RoundRect :: proc(hdc: HDC, left: INT, top: INT, right: INT, bottom: INT, width: INT, height: INT) -> BOOL ---
|
||||||
|
SetPixel :: proc(hdc: HDC, x: INT, y: INT, color: COLORREF) -> COLORREF ---
|
||||||
|
|
||||||
|
GdiTransparentBlt :: proc(hdcDest: HDC, xoriginDest, yoriginDest, wDest, hDest: INT, hdcSrc: HDC, xoriginSrc, yoriginSrc, wSrc, hSrc: INT, crTransparent: UINT) -> BOOL ---
|
||||||
|
GdiGradientFill :: proc(hdc: HDC, pVertex: PTRIVERTEX, nVertex: ULONG, pMesh: PVOID, nCount: ULONG, ulMode: ULONG) -> BOOL ---
|
||||||
|
GdiAlphaBlend :: proc(hdcDest: HDC, xoriginDest, yoriginDest, wDest, hDest: INT, hdcSrc: HDC, xoriginSrc, yoriginSrc, wSrc, hSrc: INT, ftn: BLENDFUNCTION) -> BOOL ---
|
||||||
}
|
}
|
||||||
|
|
||||||
RGB :: #force_inline proc "contextless" (r, g, b: u8) -> COLORREF {
|
RGB :: #force_inline proc "contextless" (#any_int r, g, b: int) -> COLORREF {
|
||||||
return transmute(COLORREF)[4]u8{r, g, b, 0}
|
return COLORREF(DWORD(BYTE(r)) | (DWORD(BYTE(g)) << 8) | (DWORD(BYTE(b)) << 16))
|
||||||
|
}
|
||||||
|
|
||||||
|
PALETTERGB :: #force_inline proc "contextless" (#any_int r, g, b: int) -> COLORREF {
|
||||||
|
return 0x02000000 | RGB(r, g, b)
|
||||||
|
}
|
||||||
|
|
||||||
|
PALETTEINDEX :: #force_inline proc "contextless" (#any_int i: int) -> COLORREF {
|
||||||
|
return COLORREF(DWORD(0x01000000) | DWORD(WORD(i)))
|
||||||
}
|
}
|
||||||
|
|
||||||
FXPT2DOT30 :: distinct fixed.Fixed(i32, 30)
|
FXPT2DOT30 :: distinct fixed.Fixed(i32, 30)
|
||||||
|
|
||||||
CIEXYZ :: struct {
|
CIEXYZ :: struct {
|
||||||
ciexyzX: FXPT2DOT30,
|
ciexyzX, ciexyzY, ciexyzZ: FXPT2DOT30,
|
||||||
ciexyzY: FXPT2DOT30,
|
|
||||||
ciexyzZ: FXPT2DOT30,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CIEXYZTRIPLE :: struct {
|
CIEXYZTRIPLE :: struct {
|
||||||
ciexyzRed: CIEXYZ,
|
ciexyzRed, ciexyzGreen, ciexyzBlue: CIEXYZ,
|
||||||
ciexyzGreen: CIEXYZ,
|
|
||||||
ciexyzBlue: CIEXYZ,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapv5header
|
// https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapv5header
|
||||||
@@ -138,3 +127,227 @@ BITMAPV5HEADER :: struct {
|
|||||||
bV5ProfileSize: DWORD,
|
bV5ProfileSize: DWORD,
|
||||||
bV5Reserved: DWORD,
|
bV5Reserved: DWORD,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PALETTEENTRY :: struct {
|
||||||
|
peRed, peGreen, peBlue, peFlags: BYTE,
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGPALETTE :: struct {
|
||||||
|
palVersion: WORD,
|
||||||
|
palNumEntries: WORD,
|
||||||
|
palPalEntry: []PALETTEENTRY,
|
||||||
|
}
|
||||||
|
|
||||||
|
BKMODE :: enum {
|
||||||
|
TRANSPARENT = 1,
|
||||||
|
OPAQUE = 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
ICONINFOEXW :: struct {
|
||||||
|
cbSize: DWORD,
|
||||||
|
fIcon: BOOL,
|
||||||
|
xHotspot, yHotspot: DWORD,
|
||||||
|
hbmMask, hbmColor: HBITMAP,
|
||||||
|
wResID: WORD,
|
||||||
|
szModName: [MAX_PATH]WCHAR,
|
||||||
|
szResName: [MAX_PATH]WCHAR,
|
||||||
|
}
|
||||||
|
PICONINFOEXW :: ^ICONINFOEXW
|
||||||
|
|
||||||
|
AC_SRC_OVER :: 0x00
|
||||||
|
AC_SRC_ALPHA :: 0x01
|
||||||
|
|
||||||
|
TransparentBlt :: GdiTransparentBlt
|
||||||
|
GradientFill :: GdiGradientFill
|
||||||
|
AlphaBlend :: GdiAlphaBlend
|
||||||
|
|
||||||
|
COLOR16 :: USHORT
|
||||||
|
TRIVERTEX :: struct {
|
||||||
|
x, y: LONG,
|
||||||
|
Red, Green, Blue, Alpha: COLOR16,
|
||||||
|
}
|
||||||
|
PTRIVERTEX :: ^TRIVERTEX
|
||||||
|
|
||||||
|
GRADIENT_TRIANGLE :: struct {
|
||||||
|
Vertex1, Vertex2, Vertex3: ULONG,
|
||||||
|
}
|
||||||
|
PGRADIENT_TRIANGLE :: ^GRADIENT_TRIANGLE
|
||||||
|
|
||||||
|
GRADIENT_RECT :: struct {
|
||||||
|
UpperLeft, LowerRight: ULONG,
|
||||||
|
}
|
||||||
|
PGRADIENT_RECT :: ^GRADIENT_RECT
|
||||||
|
|
||||||
|
BLENDFUNCTION :: struct {
|
||||||
|
BlendOp, BlendFlags, SourceConstantAlpha, AlphaFormat: BYTE,
|
||||||
|
}
|
||||||
|
|
||||||
|
GRADIENT_FILL_RECT_H : ULONG : 0x00000000
|
||||||
|
GRADIENT_FILL_RECT_V : ULONG : 0x00000001
|
||||||
|
GRADIENT_FILL_TRIANGLE : ULONG : 0x00000002
|
||||||
|
GRADIENT_FILL_OP_FLAG : ULONG : 0x000000ff
|
||||||
|
|
||||||
|
/* Brush Styles */
|
||||||
|
BS_SOLID :: 0
|
||||||
|
BS_NULL :: 1
|
||||||
|
BS_HOLLOW :: BS_NULL
|
||||||
|
BS_HATCHED :: 2
|
||||||
|
BS_PATTERN :: 3
|
||||||
|
BS_INDEXED :: 4
|
||||||
|
BS_DIBPATTERN :: 5
|
||||||
|
BS_DIBPATTERNPT :: 6
|
||||||
|
BS_PATTERN8X8 :: 7
|
||||||
|
BS_DIBPATTERN8X8 :: 8
|
||||||
|
BS_MONOPATTERN :: 9
|
||||||
|
|
||||||
|
/* Hatch Styles */
|
||||||
|
HS_HORIZONTAL :: 0 /* ----- */
|
||||||
|
HS_VERTICAL :: 1 /* ||||| */
|
||||||
|
HS_FDIAGONAL :: 2 /* \\\\\ */
|
||||||
|
HS_BDIAGONAL :: 3 /* ///// */
|
||||||
|
HS_CROSS :: 4 /* +++++ */
|
||||||
|
HS_DIAGCROSS :: 5 /* xxxxx */
|
||||||
|
HS_API_MAX :: 12
|
||||||
|
|
||||||
|
/* Pen Styles */
|
||||||
|
PS_SOLID :: 0
|
||||||
|
PS_DASH :: 1 /* ------- */
|
||||||
|
PS_DOT :: 2 /* ....... */
|
||||||
|
PS_DASHDOT :: 3 /* _._._._ */
|
||||||
|
PS_DASHDOTDOT :: 4 /* _.._.._ */
|
||||||
|
PS_NULL :: 5
|
||||||
|
PS_INSIDEFRAME :: 6
|
||||||
|
PS_USERSTYLE :: 7
|
||||||
|
PS_ALTERNATE :: 8
|
||||||
|
PS_STYLE_MASK :: 0x0000000F
|
||||||
|
PS_ENDCAP_ROUND :: 0x00000000
|
||||||
|
PS_ENDCAP_SQUARE :: 0x00000100
|
||||||
|
PS_ENDCAP_FLAT :: 0x00000200
|
||||||
|
PS_ENDCAP_MASK :: 0x00000F00
|
||||||
|
PS_JOIN_ROUND :: 0x00000000
|
||||||
|
PS_JOIN_BEVEL :: 0x00001000
|
||||||
|
PS_JOIN_MITER :: 0x00002000
|
||||||
|
PS_JOIN_MASK :: 0x0000F000
|
||||||
|
PS_COSMETIC :: 0x00000000
|
||||||
|
PS_GEOMETRIC :: 0x00010000
|
||||||
|
PS_TYPE_MASK :: 0x000F0000
|
||||||
|
|
||||||
|
LOGBRUSH :: struct {
|
||||||
|
lbStyle: UINT,
|
||||||
|
lbColor: COLORREF,
|
||||||
|
lbHatch: ULONG_PTR,
|
||||||
|
}
|
||||||
|
PLOGBRUSH :: ^LOGBRUSH
|
||||||
|
|
||||||
|
/* CombineRgn() Styles */
|
||||||
|
RGN_AND :: 1
|
||||||
|
RGN_OR :: 2
|
||||||
|
RGN_XOR :: 3
|
||||||
|
RGN_DIFF :: 4
|
||||||
|
RGN_COPY :: 5
|
||||||
|
|
||||||
|
/* StretchBlt() Modes */
|
||||||
|
// BLACKONWHITE :: 1
|
||||||
|
// WHITEONBLACK :: 2
|
||||||
|
// COLORONCOLOR :: 3
|
||||||
|
// HALFTONE :: 4
|
||||||
|
|
||||||
|
/* PolyFill() Modes */
|
||||||
|
ALTERNATE :: 1
|
||||||
|
WINDING :: 2
|
||||||
|
|
||||||
|
/* Layout Orientation Options */
|
||||||
|
LAYOUT_RTL :: 0x00000001 // Right to left
|
||||||
|
LAYOUT_BTT :: 0x00000002 // Bottom to top
|
||||||
|
LAYOUT_VBH :: 0x00000004 // Vertical before horizontal
|
||||||
|
LAYOUT_ORIENTATIONMASK :: (LAYOUT_RTL | LAYOUT_BTT | LAYOUT_VBH)
|
||||||
|
|
||||||
|
/* Text Alignment Options */
|
||||||
|
TA_NOUPDATECP :: 0
|
||||||
|
TA_UPDATECP :: 1
|
||||||
|
|
||||||
|
TA_LEFT :: 0
|
||||||
|
TA_RIGHT :: 2
|
||||||
|
TA_CENTER :: 6
|
||||||
|
|
||||||
|
TA_TOP :: 0
|
||||||
|
TA_BOTTOM :: 8
|
||||||
|
TA_BASELINE :: 24
|
||||||
|
TA_RTLREADING :: 256
|
||||||
|
TA_MASK :: (TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING)
|
||||||
|
|
||||||
|
MM_MAX_NUMAXES :: 16
|
||||||
|
DESIGNVECTOR :: struct {
|
||||||
|
dvReserved: DWORD,
|
||||||
|
dvNumAxes: DWORD,
|
||||||
|
dvValues: [MM_MAX_NUMAXES]LONG,
|
||||||
|
}
|
||||||
|
|
||||||
|
LF_FACESIZE :: 32
|
||||||
|
LF_FULLFACESIZE :: 64
|
||||||
|
|
||||||
|
LOGFONTW :: struct {
|
||||||
|
lfHeight: LONG,
|
||||||
|
lfWidth: LONG,
|
||||||
|
lfEscapement: LONG,
|
||||||
|
lfOrientation: LONG,
|
||||||
|
lfWeight: LONG,
|
||||||
|
lfItalic: BYTE,
|
||||||
|
lfUnderline: BYTE,
|
||||||
|
lfStrikeOut: BYTE,
|
||||||
|
lfCharSet: BYTE,
|
||||||
|
lfOutPrecision: BYTE,
|
||||||
|
lfClipPrecision: BYTE,
|
||||||
|
lfQuality: BYTE,
|
||||||
|
lfPitchAndFamily: BYTE,
|
||||||
|
lfFaceName: [LF_FACESIZE]WCHAR,
|
||||||
|
}
|
||||||
|
LPLOGFONTW :: ^LOGFONTW
|
||||||
|
|
||||||
|
ENUMLOGFONTW :: struct {
|
||||||
|
elfLogFont: LOGFONTW,
|
||||||
|
elfFullName: [LF_FULLFACESIZE]WCHAR,
|
||||||
|
elfStyle: [LF_FACESIZE]WCHAR,
|
||||||
|
}
|
||||||
|
LPENUMLOGFONTW :: ^ENUMLOGFONTW
|
||||||
|
|
||||||
|
ENUMLOGFONTEXW :: struct {
|
||||||
|
elfLogFont: LOGFONTW,
|
||||||
|
elfFullName: [LF_FULLFACESIZE]WCHAR,
|
||||||
|
elfStyle: [LF_FACESIZE]WCHAR,
|
||||||
|
elfScript: [LF_FACESIZE]WCHAR,
|
||||||
|
}
|
||||||
|
|
||||||
|
ENUMLOGFONTEXDVW :: struct {
|
||||||
|
elfEnumLogfontEx: ENUMLOGFONTEXW,
|
||||||
|
elfDesignVector: DESIGNVECTOR,
|
||||||
|
}
|
||||||
|
|
||||||
|
NEWTEXTMETRICW :: struct {
|
||||||
|
tmHeight: LONG,
|
||||||
|
tmAscent: LONG,
|
||||||
|
tmDescent: LONG,
|
||||||
|
tmInternalLeading: LONG,
|
||||||
|
tmExternalLeading: LONG,
|
||||||
|
tmAveCharWidth: LONG,
|
||||||
|
tmMaxCharWidth: LONG,
|
||||||
|
tmWeight: LONG,
|
||||||
|
tmOverhang: LONG,
|
||||||
|
tmDigitizedAspectX: LONG,
|
||||||
|
tmDigitizedAspectY: LONG,
|
||||||
|
tmFirstChar: WCHAR,
|
||||||
|
tmLastChar: WCHAR,
|
||||||
|
tmDefaultChar: WCHAR,
|
||||||
|
tmBreakChar: WCHAR,
|
||||||
|
tmItalic: BYTE,
|
||||||
|
tmUnderlined: BYTE,
|
||||||
|
tmStruckOut: BYTE,
|
||||||
|
tmPitchAndFamily: BYTE,
|
||||||
|
tmCharSet: BYTE,
|
||||||
|
ntmFlags: DWORD,
|
||||||
|
ntmSizeEM: UINT,
|
||||||
|
ntmCellHeight: UINT,
|
||||||
|
ntmAvgWidth: UINT,
|
||||||
|
}
|
||||||
|
|
||||||
|
FONTENUMPROCW :: #type proc(lpelf: ^ENUMLOGFONTW, lpntm: ^NEWTEXTMETRICW, FontType: DWORD, lParam: LPARAM) -> INT
|
||||||
|
|||||||
@@ -46,8 +46,11 @@ foreign kernel32 {
|
|||||||
dwCursorPosition: COORD) -> BOOL ---
|
dwCursorPosition: COORD) -> BOOL ---
|
||||||
SetConsoleTextAttribute :: proc(hConsoleOutput: HANDLE,
|
SetConsoleTextAttribute :: proc(hConsoleOutput: HANDLE,
|
||||||
wAttributes: WORD) -> BOOL ---
|
wAttributes: WORD) -> BOOL ---
|
||||||
SetConsoleOutputCP :: proc(wCodePageID: UINT) -> BOOL ---
|
GetConsoleCP :: proc() -> CODEPAGE ---
|
||||||
|
SetConsoleCP :: proc(wCodePageID: CODEPAGE) -> BOOL ---
|
||||||
|
GetConsoleOutputCP :: proc() -> CODEPAGE ---
|
||||||
|
SetConsoleOutputCP :: proc(wCodePageID: CODEPAGE) -> BOOL ---
|
||||||
|
|
||||||
GetFileInformationByHandle :: proc(hFile: HANDLE, lpFileInformation: LPBY_HANDLE_FILE_INFORMATION) -> BOOL ---
|
GetFileInformationByHandle :: proc(hFile: HANDLE, lpFileInformation: LPBY_HANDLE_FILE_INFORMATION) -> BOOL ---
|
||||||
SetHandleInformation :: proc(hObject: HANDLE,
|
SetHandleInformation :: proc(hObject: HANDLE,
|
||||||
dwMask: DWORD,
|
dwMask: DWORD,
|
||||||
@@ -224,6 +227,7 @@ foreign kernel32 {
|
|||||||
SetEnvironmentVariableW :: proc(n: LPCWSTR, v: LPCWSTR) -> BOOL ---
|
SetEnvironmentVariableW :: proc(n: LPCWSTR, v: LPCWSTR) -> BOOL ---
|
||||||
GetEnvironmentStringsW :: proc() -> LPWCH ---
|
GetEnvironmentStringsW :: proc() -> LPWCH ---
|
||||||
FreeEnvironmentStringsW :: proc(env_ptr: LPWCH) -> BOOL ---
|
FreeEnvironmentStringsW :: proc(env_ptr: LPWCH) -> BOOL ---
|
||||||
|
ExpandEnvironmentStringsW :: proc(lpSrc: LPCWSTR, lpDst: LPWSTR, nSize: DWORD) -> DWORD ---
|
||||||
GetModuleFileNameW :: proc(hModule: HMODULE, lpFilename: LPWSTR, nSize: DWORD) -> DWORD ---
|
GetModuleFileNameW :: proc(hModule: HMODULE, lpFilename: LPWSTR, nSize: DWORD) -> DWORD ---
|
||||||
CreateDirectoryW :: proc(
|
CreateDirectoryW :: proc(
|
||||||
lpPathName: LPCWSTR,
|
lpPathName: LPCWSTR,
|
||||||
@@ -408,11 +412,34 @@ foreign kernel32 {
|
|||||||
GetFileAttributesExW :: proc(lpFileName: LPCWSTR, fInfoLevelId: GET_FILEEX_INFO_LEVELS, lpFileInformation: LPVOID) -> BOOL ---
|
GetFileAttributesExW :: proc(lpFileName: LPCWSTR, fInfoLevelId: GET_FILEEX_INFO_LEVELS, lpFileInformation: LPVOID) -> BOOL ---
|
||||||
GetSystemInfo :: proc(system_info: ^SYSTEM_INFO) ---
|
GetSystemInfo :: proc(system_info: ^SYSTEM_INFO) ---
|
||||||
GetVersionExW :: proc(osvi: ^OSVERSIONINFOEXW) ---
|
GetVersionExW :: proc(osvi: ^OSVERSIONINFOEXW) ---
|
||||||
|
GetSystemDirectoryW :: proc(lpBuffer: LPWSTR, uSize: UINT) -> UINT ---
|
||||||
|
GetWindowsDirectoryW :: proc(lpBuffer: LPWSTR, uSize: UINT) -> UINT ---
|
||||||
|
GetSystemDefaultLangID :: proc() -> LANGID ---
|
||||||
|
GetSystemDefaultLCID :: proc() -> LCID ---
|
||||||
|
GetSystemDefaultLocaleName :: proc(lpLocaleName: LPWSTR, cchLocaleName: INT) -> INT ---
|
||||||
|
LCIDToLocaleName :: proc(Locale: LCID, lpName: LPWSTR, cchName: INT, dwFlags: DWORD) -> INT ---
|
||||||
|
LocaleNameToLCID :: proc(lpName: LPCWSTR, dwFlags: DWORD) -> LCID ---
|
||||||
|
SetDllDirectoryW :: proc(lpPathName: LPCWSTR) -> BOOL ---
|
||||||
|
AddDllDirectory :: proc(NewDirectory: PCWSTR) -> rawptr ---
|
||||||
|
RemoveDllDirectory :: proc(Cookie: rawptr) -> BOOL ---
|
||||||
LoadLibraryW :: proc(c_str: LPCWSTR) -> HMODULE ---
|
LoadLibraryW :: proc(c_str: LPCWSTR) -> HMODULE ---
|
||||||
|
LoadLibraryExW :: proc(c_str: LPCWSTR, hFile: HANDLE, dwFlags: LOAD_LIBRARY_FLAGS) -> HMODULE ---
|
||||||
FreeLibrary :: proc(h: HMODULE) -> BOOL ---
|
FreeLibrary :: proc(h: HMODULE) -> BOOL ---
|
||||||
GetProcAddress :: proc(h: HMODULE, c_str: LPCSTR) -> rawptr ---
|
GetProcAddress :: proc(h: HMODULE, c_str: LPCSTR) -> rawptr ---
|
||||||
|
|
||||||
|
LoadResource :: proc(hModule: HMODULE, hResInfo: HRSRC) -> HGLOBAL ---
|
||||||
|
FreeResource :: proc(hResData: HGLOBAL) -> BOOL ---
|
||||||
|
LockResource :: proc(hResData: HGLOBAL) -> LPVOID ---
|
||||||
|
SizeofResource :: proc(hModule: HMODULE, hResInfo: HRSRC) -> DWORD ---
|
||||||
|
FindResourceW :: proc(hModule: HMODULE, lpName: LPCWSTR, lpType: LPCWSTR) -> HRSRC ---
|
||||||
|
FindResourceExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpName: LPCWSTR, wLanguage: LANGID) -> HRSRC ---
|
||||||
|
EnumResourceNamesW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpEnumFunc: ENUMRESNAMEPROCW, lParam: LONG_PTR) -> BOOL ---
|
||||||
|
EnumResourceNamesExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpEnumFunc: ENUMRESNAMEPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL ---
|
||||||
|
EnumResourceTypesExW :: proc(hModule: HMODULE, lpEnumFunc: ENUMRESTYPEPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL ---
|
||||||
|
EnumResourceLanguagesExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpName: LPCWSTR, lpEnumFunc: ENUMRESLANGPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL ---
|
||||||
|
LookupIconIdFromDirectory :: proc(presbits: PBYTE, fIcon: BOOL) -> INT ---
|
||||||
|
LookupIconIdFromDirectoryEx :: proc(presbits: PBYTE, fIcon: BOOL, cxDesired: INT, cyDesired: INT, Flags: UINT) -> INT ---
|
||||||
|
CreateIconFromResourceEx :: proc(presbits: PBYTE, dwResSize: DWORD, fIcon: BOOL, dwVer: DWORD, cxDesired: INT, cyDesired: INT, Flags: UINT) -> HICON ---
|
||||||
|
|
||||||
GetFullPathNameW :: proc(filename: LPCWSTR, buffer_length: DWORD, buffer: LPCWSTR, file_part: ^LPCWSTR) -> DWORD ---
|
GetFullPathNameW :: proc(filename: LPCWSTR, buffer_length: DWORD, buffer: LPCWSTR, file_part: ^LPCWSTR) -> DWORD ---
|
||||||
GetLongPathNameW :: proc(short, long: LPCWSTR, len: DWORD) -> DWORD ---
|
GetLongPathNameW :: proc(short, long: LPCWSTR, len: DWORD) -> DWORD ---
|
||||||
@@ -1228,3 +1255,19 @@ GMEM_INVALID_HANDLE :: 0x8000
|
|||||||
|
|
||||||
GHND :: (GMEM_MOVEABLE | GMEM_ZEROINIT)
|
GHND :: (GMEM_MOVEABLE | GMEM_ZEROINIT)
|
||||||
GPTR :: (GMEM_FIXED | GMEM_ZEROINIT)
|
GPTR :: (GMEM_FIXED | GMEM_ZEROINIT)
|
||||||
|
|
||||||
|
LOAD_LIBRARY_FLAGS :: enum DWORD {
|
||||||
|
DONT_RESOLVE_DLL_REFERENCES = 0x00000001,
|
||||||
|
LOAD_LIBRARY_AS_DATAFILE = 0x00000002,
|
||||||
|
// reserved for internal LOAD_PACKAGED_LIBRARY = 0x00000004,
|
||||||
|
LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008,
|
||||||
|
LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010,
|
||||||
|
LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x00000020,
|
||||||
|
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040,
|
||||||
|
LOAD_LIBRARY_REQUIRE_SIGNED_TARGET = 0x00000080,
|
||||||
|
LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR = 0x00000100,
|
||||||
|
LOAD_LIBRARY_SEARCH_APPLICATION_DIR = 0x00000200,
|
||||||
|
LOAD_LIBRARY_SEARCH_USER_DIRS = 0x00000400,
|
||||||
|
LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800,
|
||||||
|
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS = 0x00001000,
|
||||||
|
}
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ LPUNKNOWN :: ^IUnknown
|
|||||||
|
|
||||||
@(default_calling_convention="system")
|
@(default_calling_convention="system")
|
||||||
foreign Ole32 {
|
foreign Ole32 {
|
||||||
CoInitializeEx :: proc(reserved: rawptr, co_init: COINIT) -> HRESULT ---
|
CoInitialize :: proc(reserved: rawptr = nil) -> HRESULT ---
|
||||||
|
CoInitializeEx :: proc(reserved: rawptr = nil, co_init: COINIT = .APARTMENTTHREADED) -> HRESULT ---
|
||||||
CoUninitialize :: proc() ---
|
CoUninitialize :: proc() ---
|
||||||
|
|
||||||
CoCreateInstance :: proc(
|
CoCreateInstance :: proc(
|
||||||
@@ -50,4 +51,17 @@ foreign Ole32 {
|
|||||||
) -> HRESULT ---
|
) -> HRESULT ---
|
||||||
|
|
||||||
CoTaskMemFree :: proc(pv: rawptr) ---
|
CoTaskMemFree :: proc(pv: rawptr) ---
|
||||||
|
|
||||||
|
CLSIDFromProgID :: proc(lpszProgID: LPCOLESTR, lpclsid: LPCLSID) -> HRESULT ---
|
||||||
|
CLSIDFromProgIDEx :: proc(lpszProgID, LPCOLESTR, lpclsid: LPCLSID) -> HRESULT ---
|
||||||
|
CLSIDFromString :: proc(lpsz: LPOLESTR, pclsid: LPCLSID) -> HRESULT ---
|
||||||
|
IIDFromString :: proc(lpsz: LPOLESTR, lpiid: LPIID) -> HRESULT ---
|
||||||
|
ProgIDFromCLSID :: proc(clsid: REFCLSID, lplpszProgID: ^LPOLESTR) -> HRESULT ---
|
||||||
|
StringFromCLSID :: proc(rclsid: REFCLSID, lplpsz: ^LPOLESTR) -> HRESULT ---
|
||||||
|
StringFromGUID2 :: proc(rclsid: REFCLSID, lplpsz: LPOLESTR, cchMax: INT) -> INT ---
|
||||||
|
StringFromIID :: proc(rclsid: REFIID, lplpsz: ^LPOLESTR) -> HRESULT ---
|
||||||
|
|
||||||
|
PropVariantClear :: proc(pvar: ^PROPVARIANT) -> HRESULT ---
|
||||||
|
PropVariantCopy :: proc(pvarDest: ^PROPVARIANT, pvarSrc: ^PROPVARIANT) -> HRESULT ---
|
||||||
|
FreePropVariantArray :: proc(cVariants: ULONG, rgvars: ^PROPVARIANT) -> HRESULT ---
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
// +build windows
|
||||||
|
|
||||||
|
package sys_windows
|
||||||
|
|
||||||
|
foreign import shcore "system:Shcore.lib"
|
||||||
|
|
||||||
|
@(default_calling_convention="system")
|
||||||
|
foreign shcore {
|
||||||
|
GetProcessDpiAwareness :: proc(hprocess: HANDLE, value: ^PROCESS_DPI_AWARENESS) -> HRESULT ---
|
||||||
|
SetProcessDpiAwareness :: proc(value: PROCESS_DPI_AWARENESS) -> HRESULT ---
|
||||||
|
GetDpiForMonitor :: proc(hmonitor: HMONITOR, dpiType: MONITOR_DPI_TYPE, dpiX: ^UINT, dpiY: ^UINT) -> HRESULT ---
|
||||||
|
}
|
||||||
|
|
||||||
|
PROCESS_DPI_AWARENESS :: enum DWORD {
|
||||||
|
PROCESS_DPI_UNAWARE = 0,
|
||||||
|
PROCESS_SYSTEM_DPI_AWARE = 1,
|
||||||
|
PROCESS_PER_MONITOR_DPI_AWARE = 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
MONITOR_DPI_TYPE :: enum DWORD {
|
||||||
|
MDT_EFFECTIVE_DPI = 0,
|
||||||
|
MDT_ANGULAR_DPI = 1,
|
||||||
|
MDT_RAW_DPI = 2,
|
||||||
|
MDT_DEFAULT,
|
||||||
|
}
|
||||||
@@ -30,6 +30,8 @@ foreign shell32 {
|
|||||||
SHGetKnownFolderIDList :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, ppidl: rawptr) -> HRESULT ---
|
SHGetKnownFolderIDList :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, ppidl: rawptr) -> HRESULT ---
|
||||||
SHSetKnownFolderPath :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, pszPath: PCWSTR ) -> HRESULT ---
|
SHSetKnownFolderPath :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, pszPath: PCWSTR ) -> HRESULT ---
|
||||||
SHGetKnownFolderPath :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, ppszPath: ^LPWSTR) -> HRESULT ---
|
SHGetKnownFolderPath :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, ppszPath: ^LPWSTR) -> HRESULT ---
|
||||||
|
|
||||||
|
ExtractIconExW :: proc(pszFile: LPCWSTR, nIconIndex: INT, phiconLarge: ^HICON, phiconSmall: ^HICON, nIcons: UINT) -> UINT ---
|
||||||
}
|
}
|
||||||
|
|
||||||
APPBARDATA :: struct {
|
APPBARDATA :: struct {
|
||||||
|
|||||||
+119
-1
@@ -30,14 +30,19 @@ HICON :: distinct HANDLE
|
|||||||
HCURSOR :: distinct HANDLE
|
HCURSOR :: distinct HANDLE
|
||||||
HMENU :: distinct HANDLE
|
HMENU :: distinct HANDLE
|
||||||
HBRUSH :: distinct HANDLE
|
HBRUSH :: distinct HANDLE
|
||||||
|
HPEN :: distinct HANDLE
|
||||||
HGDIOBJ :: distinct HANDLE
|
HGDIOBJ :: distinct HANDLE
|
||||||
HBITMAP :: distinct HANDLE
|
HBITMAP :: distinct HANDLE
|
||||||
|
HPALETTE :: distinct HANDLE
|
||||||
HGLOBAL :: distinct HANDLE
|
HGLOBAL :: distinct HANDLE
|
||||||
HHOOK :: distinct HANDLE
|
HHOOK :: distinct HANDLE
|
||||||
HKEY :: distinct HANDLE
|
HKEY :: distinct HANDLE
|
||||||
HDESK :: distinct HANDLE
|
HDESK :: distinct HANDLE
|
||||||
HFONT :: distinct HANDLE
|
HFONT :: distinct HANDLE
|
||||||
HRGN :: distinct HANDLE
|
HRGN :: distinct HANDLE
|
||||||
|
HRSRC :: distinct HANDLE
|
||||||
|
HWINSTA :: distinct HANDLE
|
||||||
|
HACCEL :: distinct HANDLE
|
||||||
BOOL :: distinct b32
|
BOOL :: distinct b32
|
||||||
BYTE :: distinct u8
|
BYTE :: distinct u8
|
||||||
BOOLEAN :: distinct b8
|
BOOLEAN :: distinct b8
|
||||||
@@ -137,11 +142,14 @@ LPSTR :: ^CHAR
|
|||||||
LPWSTR :: ^WCHAR
|
LPWSTR :: ^WCHAR
|
||||||
OLECHAR :: WCHAR
|
OLECHAR :: WCHAR
|
||||||
LPOLESTR :: ^OLECHAR
|
LPOLESTR :: ^OLECHAR
|
||||||
|
LPCOLESTR :: LPCSTR
|
||||||
LPFILETIME :: ^FILETIME
|
LPFILETIME :: ^FILETIME
|
||||||
LPWSABUF :: ^WSABUF
|
LPWSABUF :: ^WSABUF
|
||||||
LPWSAOVERLAPPED :: distinct rawptr
|
LPWSAOVERLAPPED :: distinct rawptr
|
||||||
LPWSAOVERLAPPED_COMPLETION_ROUTINE :: distinct rawptr
|
LPWSAOVERLAPPED_COMPLETION_ROUTINE :: distinct rawptr
|
||||||
LPCVOID :: rawptr
|
LPCVOID :: rawptr
|
||||||
|
SCODE :: LONG
|
||||||
|
PSCODE :: ^SCODE
|
||||||
|
|
||||||
PACCESS_TOKEN :: PVOID
|
PACCESS_TOKEN :: PVOID
|
||||||
PSECURITY_DESCRIPTOR :: PVOID
|
PSECURITY_DESCRIPTOR :: PVOID
|
||||||
@@ -697,6 +705,92 @@ FW_BLACK :: FW_HEAVY
|
|||||||
|
|
||||||
PTIMERAPCROUTINE :: #type proc "system" (lpArgToCompletionRoutine: LPVOID, dwTimerLowValue, dwTimerHighValue: DWORD)
|
PTIMERAPCROUTINE :: #type proc "system" (lpArgToCompletionRoutine: LPVOID, dwTimerLowValue, dwTimerHighValue: DWORD)
|
||||||
|
|
||||||
|
// Character Sets
|
||||||
|
ANSI_CHARSET :: 0
|
||||||
|
DEFAULT_CHARSET :: 1
|
||||||
|
SYMBOL_CHARSET :: 2
|
||||||
|
SHIFTJIS_CHARSET :: 128
|
||||||
|
HANGEUL_CHARSET :: 129
|
||||||
|
HANGUL_CHARSET :: 129
|
||||||
|
GB2312_CHARSET :: 134
|
||||||
|
CHINESEBIG5_CHARSET :: 136
|
||||||
|
OEM_CHARSET :: 255
|
||||||
|
JOHAB_CHARSET :: 130
|
||||||
|
HEBREW_CHARSET :: 177
|
||||||
|
ARABIC_CHARSET :: 178
|
||||||
|
GREEK_CHARSET :: 161
|
||||||
|
TURKISH_CHARSET :: 162
|
||||||
|
VIETNAMESE_CHARSET :: 163
|
||||||
|
THAI_CHARSET :: 222
|
||||||
|
EASTEUROPE_CHARSET :: 238
|
||||||
|
RUSSIAN_CHARSET :: 204
|
||||||
|
MAC_CHARSET :: 77
|
||||||
|
BALTIC_CHARSET :: 186
|
||||||
|
|
||||||
|
// Font Signature Bitmaps
|
||||||
|
FS_LATIN1 :: 0x00000001
|
||||||
|
FS_LATIN2 :: 0x00000002
|
||||||
|
FS_CYRILLIC :: 0x00000004
|
||||||
|
FS_GREEK :: 0x00000008
|
||||||
|
FS_TURKISH :: 0x00000010
|
||||||
|
FS_HEBREW :: 0x00000020
|
||||||
|
FS_ARABIC :: 0x00000040
|
||||||
|
FS_BALTIC :: 0x00000080
|
||||||
|
FS_VIETNAMESE :: 0x00000100
|
||||||
|
FS_THAI :: 0x00010000
|
||||||
|
FS_JISJAPAN :: 0x00020000
|
||||||
|
FS_CHINESESIMP :: 0x00040000
|
||||||
|
FS_WANSUNG :: 0x00080000
|
||||||
|
FS_CHINESETRAD :: 0x00100000
|
||||||
|
FS_JOHAB :: 0x00200000
|
||||||
|
FS_SYMBOL :: 0x80000000
|
||||||
|
|
||||||
|
// Output Precisions
|
||||||
|
OUT_DEFAULT_PRECIS :: 0
|
||||||
|
OUT_STRING_PRECIS :: 1
|
||||||
|
OUT_CHARACTER_PRECIS :: 2
|
||||||
|
OUT_STROKE_PRECIS :: 3
|
||||||
|
OUT_TT_PRECIS :: 4
|
||||||
|
OUT_DEVICE_PRECIS :: 5
|
||||||
|
OUT_RASTER_PRECIS :: 6
|
||||||
|
OUT_TT_ONLY_PRECIS :: 7
|
||||||
|
OUT_OUTLINE_PRECIS :: 8
|
||||||
|
OUT_SCREEN_OUTLINE_PRECIS :: 9
|
||||||
|
OUT_PS_ONLY_PRECIS :: 10
|
||||||
|
|
||||||
|
// Clipping Precisions
|
||||||
|
CLIP_DEFAULT_PRECIS :: 0
|
||||||
|
CLIP_CHARACTER_PRECIS :: 1
|
||||||
|
CLIP_STROKE_PRECIS :: 2
|
||||||
|
CLIP_MASK :: 0xf
|
||||||
|
CLIP_LH_ANGLES :: 1 << 4
|
||||||
|
CLIP_TT_ALWAYS :: 2 << 4
|
||||||
|
CLIP_DFA_DISABLE :: 4 << 4
|
||||||
|
CLIP_EMBEDDED :: 8 << 4
|
||||||
|
|
||||||
|
// Output Qualities
|
||||||
|
DEFAULT_QUALITY :: 0
|
||||||
|
DRAFT_QUALITY :: 1
|
||||||
|
PROOF_QUALITY :: 2
|
||||||
|
NONANTIALIASED_QUALITY :: 3
|
||||||
|
ANTIALIASED_QUALITY :: 4
|
||||||
|
CLEARTYPE_QUALITY :: 5
|
||||||
|
CLEARTYPE_NATURAL_QUALITY :: 6
|
||||||
|
|
||||||
|
// Font Pitches
|
||||||
|
DEFAULT_PITCH :: 0
|
||||||
|
FIXED_PITCH :: 1
|
||||||
|
VARIABLE_PITCH :: 2
|
||||||
|
MONO_FONT :: 8
|
||||||
|
|
||||||
|
// Font Families
|
||||||
|
FF_DONTCARE :: 0 << 4
|
||||||
|
FF_ROMAN :: 1 << 4
|
||||||
|
FF_SWISS :: 2 << 4
|
||||||
|
FF_MODERN :: 3 << 4
|
||||||
|
FF_SCRIPT :: 4 << 4
|
||||||
|
FF_DECORATIVE :: 5 << 4
|
||||||
|
|
||||||
TIMERPROC :: #type proc "system" (HWND, UINT, UINT_PTR, DWORD)
|
TIMERPROC :: #type proc "system" (HWND, UINT, UINT_PTR, DWORD)
|
||||||
|
|
||||||
WNDPROC :: #type proc "system" (HWND, UINT, WPARAM, LPARAM) -> LRESULT
|
WNDPROC :: #type proc "system" (HWND, UINT, WPARAM, LPARAM) -> LRESULT
|
||||||
@@ -922,6 +1016,16 @@ MF_RIGHTJUSTIFY :: 0x00004000
|
|||||||
MF_MOUSESELECT :: 0x00008000
|
MF_MOUSESELECT :: 0x00008000
|
||||||
MF_END :: 0x00000080 // Obsolete -- only used by old RES files
|
MF_END :: 0x00000080 // Obsolete -- only used by old RES files
|
||||||
|
|
||||||
|
// Menu flags for Add/Check/EnableMenuItem()
|
||||||
|
MFS_GRAYED :: 0x00000003
|
||||||
|
MFS_DISABLED :: MFS_GRAYED
|
||||||
|
MFS_CHECKED :: MF_CHECKED
|
||||||
|
MFS_HILITE :: MF_HILITE
|
||||||
|
MFS_ENABLED :: MF_ENABLED
|
||||||
|
MFS_UNCHECKED :: MF_UNCHECKED
|
||||||
|
MFS_UNHILITE :: MF_UNHILITE
|
||||||
|
MFS_DEFAULT :: MF_DEFAULT
|
||||||
|
|
||||||
// Flags for TrackPopupMenu
|
// Flags for TrackPopupMenu
|
||||||
TPM_LEFTBUTTON :: 0x0000
|
TPM_LEFTBUTTON :: 0x0000
|
||||||
TPM_RIGHTBUTTON :: 0x0002
|
TPM_RIGHTBUTTON :: 0x0002
|
||||||
@@ -2179,6 +2283,14 @@ CP_SYMBOL :: 42 // SYMBOL translations
|
|||||||
CP_UTF7 :: 65000 // UTF-7 translation
|
CP_UTF7 :: 65000 // UTF-7 translation
|
||||||
CP_UTF8 :: 65001 // UTF-8 translation
|
CP_UTF8 :: 65001 // UTF-8 translation
|
||||||
|
|
||||||
|
LCID :: DWORD
|
||||||
|
LANGID :: WORD
|
||||||
|
|
||||||
|
LANG_NEUTRAL :: 0x00
|
||||||
|
LANG_INVARIANT :: 0x7f
|
||||||
|
SUBLANG_NEUTRAL :: 0x00 // language neutral
|
||||||
|
SUBLANG_DEFAULT :: 0x01 // user default
|
||||||
|
|
||||||
MB_ERR_INVALID_CHARS :: 8
|
MB_ERR_INVALID_CHARS :: 8
|
||||||
WC_ERR_INVALID_CHARS :: 128
|
WC_ERR_INVALID_CHARS :: 128
|
||||||
|
|
||||||
@@ -2393,8 +2505,10 @@ REFIID :: ^GUID
|
|||||||
|
|
||||||
REFGUID :: GUID
|
REFGUID :: GUID
|
||||||
IID :: GUID
|
IID :: GUID
|
||||||
|
LPIID :: ^IID
|
||||||
CLSID :: GUID
|
CLSID :: GUID
|
||||||
REFCLSID :: ^CLSID
|
REFCLSID :: ^CLSID
|
||||||
|
LPCLSID :: ^CLSID
|
||||||
|
|
||||||
CLSCTX_INPROC_SERVER :: 0x1
|
CLSCTX_INPROC_SERVER :: 0x1
|
||||||
CLSCTX_INPROC_HANDLER :: 0x2
|
CLSCTX_INPROC_HANDLER :: 0x2
|
||||||
@@ -4165,7 +4279,7 @@ DNS_STATUS :: distinct DWORD // zero is success
|
|||||||
DNS_INFO_NO_RECORDS :: 9501
|
DNS_INFO_NO_RECORDS :: 9501
|
||||||
DNS_QUERY_NO_RECURSION :: 0x00000004
|
DNS_QUERY_NO_RECURSION :: 0x00000004
|
||||||
|
|
||||||
DNS_RECORD :: struct {
|
DNS_RECORD :: struct { // aka DNS_RECORDA
|
||||||
pNext: ^DNS_RECORD,
|
pNext: ^DNS_RECORD,
|
||||||
pName: cstring,
|
pName: cstring,
|
||||||
wType: WORD,
|
wType: WORD,
|
||||||
@@ -4208,3 +4322,7 @@ SOCKADDR :: struct {
|
|||||||
sa_family: ADDRESS_FAMILY,
|
sa_family: ADDRESS_FAMILY,
|
||||||
sa_data: [14]CHAR,
|
sa_data: [14]CHAR,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ENUMRESNAMEPROCW :: #type proc (hModule: HMODULE, lpType: LPCWSTR, lpName: LPWSTR, lParam: LONG_PTR)-> BOOL
|
||||||
|
ENUMRESTYPEPROCW :: #type proc (hModule: HMODULE, lpType: LPCWSTR, lParam: LONG_PTR)-> BOOL
|
||||||
|
ENUMRESLANGPROCW :: #type proc (hModule: HMODULE, lpType: LPCWSTR, lpName: LPWSTR, wIDLanguage: LANGID, lParam: LONG_PTR)-> BOOL
|
||||||
|
|||||||
+202
-67
@@ -6,16 +6,16 @@ foreign import user32 "system:User32.lib"
|
|||||||
|
|
||||||
@(default_calling_convention="system")
|
@(default_calling_convention="system")
|
||||||
foreign user32 {
|
foreign user32 {
|
||||||
GetClassInfoW :: proc(hInstance: HINSTANCE, lpClassNAme: LPCWSTR, lpWndClass: ^WNDCLASSW) -> BOOL ---
|
GetClassInfoW :: proc(hInstance: HINSTANCE, lpClassName: LPCWSTR, lpWndClass: ^WNDCLASSW) -> BOOL ---
|
||||||
GetClassInfoExW :: proc(hInsatnce: HINSTANCE, lpszClass: LPCWSTR, lpwcx: ^WNDCLASSEXW) -> BOOL ---
|
GetClassInfoExW :: proc(hInstance: HINSTANCE, lpszClass: LPCWSTR, lpwcx: ^WNDCLASSEXW) -> BOOL ---
|
||||||
|
|
||||||
GetClassLongW :: proc(hWnd: HWND, nIndex: c_int) -> DWORD ---
|
GetClassLongW :: proc(hWnd: HWND, nIndex: INT) -> DWORD ---
|
||||||
SetClassLongW :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG) -> DWORD ---
|
SetClassLongW :: proc(hWnd: HWND, nIndex: INT, dwNewLong: LONG) -> DWORD ---
|
||||||
|
|
||||||
GetWindowLongW :: proc(hWnd: HWND, nIndex: c_int) -> LONG ---
|
GetWindowLongW :: proc(hWnd: HWND, nIndex: INT) -> LONG ---
|
||||||
SetWindowLongW :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG) -> LONG ---
|
SetWindowLongW :: proc(hWnd: HWND, nIndex: INT, dwNewLong: LONG) -> LONG ---
|
||||||
|
|
||||||
GetClassNameW :: proc(hWnd: HWND, lpClassName: LPWSTR, nMaxCount: c_int) -> c_int ---
|
GetClassNameW :: proc(hWnd: HWND, lpClassName: LPWSTR, nMaxCount: INT) -> INT ---
|
||||||
|
|
||||||
RegisterClassW :: proc(lpWndClass: ^WNDCLASSW) -> ATOM ---
|
RegisterClassW :: proc(lpWndClass: ^WNDCLASSW) -> ATOM ---
|
||||||
RegisterClassExW :: proc(^WNDCLASSEXW) -> ATOM ---
|
RegisterClassExW :: proc(^WNDCLASSEXW) -> ATOM ---
|
||||||
@@ -26,10 +26,10 @@ foreign user32 {
|
|||||||
lpClassName: LPCWSTR,
|
lpClassName: LPCWSTR,
|
||||||
lpWindowName: LPCWSTR,
|
lpWindowName: LPCWSTR,
|
||||||
dwStyle: DWORD,
|
dwStyle: DWORD,
|
||||||
X: c_int,
|
X: INT,
|
||||||
Y: c_int,
|
Y: INT,
|
||||||
nWidth: c_int,
|
nWidth: INT,
|
||||||
nHeight: c_int,
|
nHeight: INT,
|
||||||
hWndParent: HWND,
|
hWndParent: HWND,
|
||||||
hMenu: HMENU,
|
hMenu: HMENU,
|
||||||
hInstance: HINSTANCE,
|
hInstance: HINSTANCE,
|
||||||
@@ -38,24 +38,33 @@ foreign user32 {
|
|||||||
|
|
||||||
DestroyWindow :: proc(hWnd: HWND) -> BOOL ---
|
DestroyWindow :: proc(hWnd: HWND) -> BOOL ---
|
||||||
|
|
||||||
ShowWindow :: proc(hWnd: HWND, nCmdShow: c_int) -> BOOL ---
|
ShowWindow :: proc(hWnd: HWND, nCmdShow: INT) -> BOOL ---
|
||||||
IsWindow :: proc(hWnd: HWND) -> BOOL ---
|
IsWindow :: proc(hWnd: HWND) -> BOOL ---
|
||||||
|
IsWindowVisible :: proc(hwnd: HWND) -> BOOL ---
|
||||||
|
IsWindowEnabled :: proc(hwnd: HWND) -> BOOL ---
|
||||||
|
IsIconic :: proc(hwnd: HWND) -> BOOL ---
|
||||||
BringWindowToTop :: proc(hWnd: HWND) -> BOOL ---
|
BringWindowToTop :: proc(hWnd: HWND) -> BOOL ---
|
||||||
GetTopWindow :: proc(hWnd: HWND) -> HWND ---
|
GetTopWindow :: proc(hWnd: HWND) -> HWND ---
|
||||||
SetForegroundWindow :: proc(hWnd: HWND) -> BOOL ---
|
SetForegroundWindow :: proc(hWnd: HWND) -> BOOL ---
|
||||||
GetForegroundWindow :: proc() -> HWND ---
|
GetForegroundWindow :: proc() -> HWND ---
|
||||||
|
GetDesktopWindow :: proc() -> HWND ---
|
||||||
UpdateWindow :: proc(hWnd: HWND) -> BOOL ---
|
UpdateWindow :: proc(hWnd: HWND) -> BOOL ---
|
||||||
SetActiveWindow :: proc(hWnd: HWND) -> HWND ---
|
SetActiveWindow :: proc(hWnd: HWND) -> HWND ---
|
||||||
GetActiveWindow :: proc() -> HWND ---
|
GetActiveWindow :: proc() -> HWND ---
|
||||||
RedrawWindow :: proc(hwnd: HWND, lprcUpdate: LPRECT, hrgnUpdate: HRGN, flags: RedrawWindowFlags) -> BOOL ---
|
RedrawWindow :: proc(hwnd: HWND, lprcUpdate: LPRECT, hrgnUpdate: HRGN, flags: RedrawWindowFlags) -> BOOL ---
|
||||||
|
SetParent :: proc(hWndChild: HWND, hWndNewParent: HWND) -> HWND ---
|
||||||
|
SetPropW :: proc(hWnd: HWND, lpString: LPCWSTR, hData: HANDLE) -> BOOL ---
|
||||||
|
GetPropW :: proc(hWnd: HWND, lpString: LPCWSTR) -> HANDLE ---
|
||||||
|
RemovePropW :: proc(hWnd: HWND, lpString: LPCWSTR) -> HANDLE ---
|
||||||
|
EnumPropsW :: proc(hWnd: HWND, lpEnumFunc: PROPENUMPROCW) -> INT ---
|
||||||
|
EnumPropsExW :: proc(hWnd: HWND, lpEnumFunc: PROPENUMPROCW, lParam: LPARAM) -> INT ---
|
||||||
GetMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT) -> BOOL ---
|
GetMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT) -> BOOL ---
|
||||||
|
|
||||||
TranslateMessage :: proc(lpMsg: ^MSG) -> BOOL ---
|
TranslateMessage :: proc(lpMsg: ^MSG) -> BOOL ---
|
||||||
DispatchMessageW :: proc(lpMsg: ^MSG) -> LRESULT ---
|
DispatchMessageW :: proc(lpMsg: ^MSG) -> LRESULT ---
|
||||||
|
|
||||||
WaitMessage :: proc() -> BOOL ---
|
WaitMessage :: proc() -> BOOL ---
|
||||||
MsgWaitForMultipleObjects :: proc(nCount: DWORD, pHandles: ^HANDLE, fWaitAll: bool, dwMilliseconds: DWORD, dwWakeMask: DWORD) -> DWORD ---
|
MsgWaitForMultipleObjects :: proc(nCount: DWORD, pHandles: ^HANDLE, fWaitAll: BOOL, dwMilliseconds: DWORD, dwWakeMask: DWORD) -> DWORD ---
|
||||||
|
|
||||||
PeekMessageA :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL ---
|
PeekMessageA :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL ---
|
||||||
PeekMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL ---
|
PeekMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL ---
|
||||||
@@ -68,7 +77,7 @@ foreign user32 {
|
|||||||
PostThreadMessageA :: proc(idThread: DWORD, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
|
PostThreadMessageA :: proc(idThread: DWORD, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
|
||||||
PostThreadMessageW :: proc(idThread: DWORD, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
|
PostThreadMessageW :: proc(idThread: DWORD, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> BOOL ---
|
||||||
|
|
||||||
PostQuitMessage :: proc(nExitCode: c_int) ---
|
PostQuitMessage :: proc(nExitCode: INT) ---
|
||||||
|
|
||||||
GetQueueStatus :: proc(flags: UINT) -> DWORD ---
|
GetQueueStatus :: proc(flags: UINT) -> DWORD ---
|
||||||
|
|
||||||
@@ -82,33 +91,26 @@ foreign user32 {
|
|||||||
|
|
||||||
LoadIconA :: proc(hInstance: HINSTANCE, lpIconName: LPCSTR) -> HICON ---
|
LoadIconA :: proc(hInstance: HINSTANCE, lpIconName: LPCSTR) -> HICON ---
|
||||||
LoadIconW :: proc(hInstance: HINSTANCE, lpIconName: LPCWSTR) -> HICON ---
|
LoadIconW :: proc(hInstance: HINSTANCE, lpIconName: LPCWSTR) -> HICON ---
|
||||||
|
GetIconInfoExW :: proc(hIcon: HICON, piconinfo: PICONINFOEXW) -> BOOL ---
|
||||||
LoadCursorA :: proc(hInstance: HINSTANCE, lpCursorName: LPCSTR) -> HCURSOR ---
|
LoadCursorA :: proc(hInstance: HINSTANCE, lpCursorName: LPCSTR) -> HCURSOR ---
|
||||||
LoadCursorW :: proc(hInstance: HINSTANCE, lpCursorName: LPCWSTR) -> HCURSOR ---
|
LoadCursorW :: proc(hInstance: HINSTANCE, lpCursorName: LPCWSTR) -> HCURSOR ---
|
||||||
LoadImageW :: proc(hInst: HINSTANCE, name: LPCWSTR, type: UINT, cx: c_int, cy: c_int, fuLoad: UINT) -> HANDLE ---
|
LoadImageW :: proc(hInst: HINSTANCE, name: LPCWSTR, type: UINT, cx, cy: INT, fuLoad: UINT) -> HANDLE ---
|
||||||
|
|
||||||
CreateIcon :: proc(hInstance: HINSTANCE, nWidth: c_int, nHeight: c_int, cPlanes: BYTE, cBitsPixel: BYTE, lpbANDbits: PBYTE, lpbXORbits: PBYTE) -> HICON ---
|
CreateIcon :: proc(hInstance: HINSTANCE, nWidth, nHeight: INT, cPlanes: BYTE, cBitsPixel: BYTE, lpbANDbits: PBYTE, lpbXORbits: PBYTE) -> HICON ---
|
||||||
CreateIconFromResource :: proc(presbits: PBYTE, dwResSize: DWORD, fIcon: BOOL, dwVer: DWORD) -> HICON ---
|
CreateIconFromResource :: proc(presbits: PBYTE, dwResSize: DWORD, fIcon: BOOL, dwVer: DWORD) -> HICON ---
|
||||||
DestroyIcon :: proc(hIcon: HICON) -> BOOL ---
|
DestroyIcon :: proc(hIcon: HICON) -> BOOL ---
|
||||||
DrawIcon :: proc(hDC: HDC, X: c_int, Y: c_int, hIcon: HICON) -> BOOL ---
|
DrawIcon :: proc(hDC: HDC, X, Y: INT, hIcon: HICON) -> BOOL ---
|
||||||
|
|
||||||
CreateCursor :: proc(hInst: HINSTANCE, xHotSpot: c_int, yHotSpot: c_int, nWidth: c_int, nHeight: c_int, pvANDPlane: PVOID, pvXORPlane: PVOID) -> HCURSOR ---
|
CreateCursor :: proc(hInst: HINSTANCE, xHotSpot, yHotSpot, nWidth, nHeight: INT, pvANDPlane: PVOID, pvXORPlane: PVOID) -> HCURSOR ---
|
||||||
DestroyCursor :: proc(hCursor: HCURSOR) -> BOOL ---
|
DestroyCursor :: proc(hCursor: HCURSOR) -> BOOL ---
|
||||||
|
|
||||||
GetWindowRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL ---
|
GetWindowRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL ---
|
||||||
GetClientRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL ---
|
GetClientRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL ---
|
||||||
ClientToScreen :: proc(hWnd: HWND, lpPoint: LPPOINT) -> BOOL ---
|
ClientToScreen :: proc(hWnd: HWND, lpPoint: LPPOINT) -> BOOL ---
|
||||||
ScreenToClient :: proc(hWnd: HWND, lpPoint: LPPOINT) -> BOOL ---
|
ScreenToClient :: proc(hWnd: HWND, lpPoint: LPPOINT) -> BOOL ---
|
||||||
SetWindowPos :: proc(
|
SetWindowPos :: proc(hWnd: HWND, hWndInsertAfter: HWND, X, Y, cx, cy: INT, uFlags: UINT) -> BOOL ---
|
||||||
hWnd: HWND,
|
MoveWindow :: proc(hWnd: HWND, X, Y, hWidth, hHeight: INT, bRepaint: BOOL) -> BOOL ---
|
||||||
hWndInsertAfter: HWND,
|
GetSystemMetrics :: proc(nIndex: INT) -> INT ---
|
||||||
X: c_int,
|
|
||||||
Y: c_int,
|
|
||||||
cx: c_int,
|
|
||||||
cy: c_int,
|
|
||||||
uFlags: UINT,
|
|
||||||
) -> BOOL ---
|
|
||||||
MoveWindow :: proc(hWnd: HWND, X, Y, hWidth, hHeight: c_int, bRepaint: BOOL) -> BOOL ---
|
|
||||||
GetSystemMetrics :: proc(nIndex: c_int) -> c_int ---
|
|
||||||
AdjustWindowRect :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL) -> BOOL ---
|
AdjustWindowRect :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL) -> BOOL ---
|
||||||
AdjustWindowRectEx :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL, dwExStyle: DWORD) -> BOOL ---
|
AdjustWindowRectEx :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL, dwExStyle: DWORD) -> BOOL ---
|
||||||
AdjustWindowRectExForDpi :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL, dwExStyle: DWORD, dpi: UINT) -> BOOL ---
|
AdjustWindowRectExForDpi :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL, dwExStyle: DWORD, dpi: UINT) -> BOOL ---
|
||||||
@@ -118,18 +120,36 @@ foreign user32 {
|
|||||||
|
|
||||||
GetWindowDC :: proc(hWnd: HWND) -> HDC ---
|
GetWindowDC :: proc(hWnd: HWND) -> HDC ---
|
||||||
GetDC :: proc(hWnd: HWND) -> HDC ---
|
GetDC :: proc(hWnd: HWND) -> HDC ---
|
||||||
ReleaseDC :: proc(hWnd: HWND, hDC: HDC) -> c_int ---
|
GetDCEx :: proc(hWnd: HWND, hrgnClip: HRGN, flags: DWORD) -> HDC ---
|
||||||
|
ReleaseDC :: proc(hWnd: HWND, hDC: HDC) -> INT ---
|
||||||
|
|
||||||
GetDlgCtrlID :: proc(hWnd: HWND) -> c_int ---
|
GetDlgCtrlID :: proc(hWnd: HWND) -> INT ---
|
||||||
GetDlgItem :: proc(hDlg: HWND, nIDDlgItem: c_int) -> HWND ---
|
GetDlgItem :: proc(hDlg: HWND, nIDDlgItem: INT) -> HWND ---
|
||||||
|
|
||||||
|
CreateMenu :: proc() -> HMENU ---
|
||||||
CreatePopupMenu :: proc() -> HMENU ---
|
CreatePopupMenu :: proc() -> HMENU ---
|
||||||
|
DeleteMenu :: proc(hMenu: HMENU, uPosition: UINT, uFlags: UINT) -> BOOL ---
|
||||||
DestroyMenu :: proc(hMenu: HMENU) -> BOOL ---
|
DestroyMenu :: proc(hMenu: HMENU) -> BOOL ---
|
||||||
|
InsertMenuW :: proc(hMenu: HMENU, uPosition: UINT, uFlags: UINT, uIDNewItem: UINT_PTR, lpNewItem: LPCWSTR) -> BOOL ---
|
||||||
AppendMenuW :: proc(hMenu: HMENU, uFlags: UINT, uIDNewItem: UINT_PTR, lpNewItem: LPCWSTR) -> BOOL ---
|
AppendMenuW :: proc(hMenu: HMENU, uFlags: UINT, uIDNewItem: UINT_PTR, lpNewItem: LPCWSTR) -> BOOL ---
|
||||||
|
GetMenu :: proc(hWnd: HWND) -> HMENU ---
|
||||||
SetMenu :: proc(hWnd: HWND, hMenu: HMENU) -> BOOL ---
|
SetMenu :: proc(hWnd: HWND, hMenu: HMENU) -> BOOL ---
|
||||||
TrackPopupMenu :: proc(hMenu: HMENU, uFlags: UINT, x: int, y: int, nReserved: int, hWnd: HWND, prcRect: ^RECT) -> i32 ---
|
TrackPopupMenu :: proc(hMenu: HMENU, uFlags: UINT, x, y: INT, nReserved: INT, hWnd: HWND, prcRect: ^RECT) -> BOOL ---
|
||||||
RegisterWindowMessageW :: proc(lpString: LPCWSTR) -> UINT ---
|
RegisterWindowMessageW :: proc(lpString: LPCWSTR) -> UINT ---
|
||||||
|
|
||||||
|
CreateAcceleratorTableW :: proc(paccel: LPACCEL, cAccel: INT) -> HACCEL ---
|
||||||
|
DestroyAcceleratorTable :: proc(hAccel: HACCEL) -> BOOL ---
|
||||||
|
LoadAcceleratorsW :: proc(hInstance: HINSTANCE, lpTableName: LPCWSTR) -> HACCEL ---
|
||||||
|
TranslateAcceleratorW :: proc(hWnd: HWND, hAccTable: HACCEL, lpMsg: LPMSG) -> INT ---
|
||||||
|
CopyAcceleratorTableW :: proc(hAccelSrc: HACCEL, lpAccelDst: LPACCEL, cAccelEntries: INT) -> INT ---
|
||||||
|
|
||||||
|
InsertMenuItemW :: proc(hmenu: HMENU, item: UINT, fByPosition: BOOL, lpmi: LPMENUITEMINFOW) -> BOOL ---
|
||||||
|
GetMenuItemInfoW :: proc(hmenu: HMENU, item: UINT, fByPosition: BOOL, lpmii: LPMENUITEMINFOW) -> BOOL ---
|
||||||
|
SetMenuItemInfoW :: proc(hmenu: HMENU, item: UINT, fByPositon: BOOL, lpmii: LPMENUITEMINFOW) -> BOOL ---
|
||||||
|
GetMenuDefaultItem :: proc(hMenu: HMENU, fByPos: UINT, gmdiFlags: UINT) -> UINT ---
|
||||||
|
SetMenuDefaultItem :: proc(hMenu: HMENU, uItem: UINT, fByPos: UINT) -> BOOL ---
|
||||||
|
GetMenuItemRect :: proc(hWnd: HWND, hMenu: HMENU, uItem: UINT, lprcItem: LPRECT) -> c_int ---
|
||||||
|
|
||||||
GetUpdateRect :: proc(hWnd: HWND, lpRect: LPRECT, bErase: BOOL) -> BOOL ---
|
GetUpdateRect :: proc(hWnd: HWND, lpRect: LPRECT, bErase: BOOL) -> BOOL ---
|
||||||
ValidateRect :: proc(hWnd: HWND, lpRect: ^RECT) -> BOOL ---
|
ValidateRect :: proc(hWnd: HWND, lpRect: ^RECT) -> BOOL ---
|
||||||
InvalidateRect :: proc(hWnd: HWND, lpRect: ^RECT, bErase: BOOL) -> BOOL ---
|
InvalidateRect :: proc(hWnd: HWND, lpRect: ^RECT, bErase: BOOL) -> BOOL ---
|
||||||
@@ -142,34 +162,35 @@ foreign user32 {
|
|||||||
ReleaseCapture :: proc() -> BOOL ---
|
ReleaseCapture :: proc() -> BOOL ---
|
||||||
TrackMouseEvent :: proc(lpEventTrack: LPTRACKMOUSEEVENT) -> BOOL ---
|
TrackMouseEvent :: proc(lpEventTrack: LPTRACKMOUSEEVENT) -> BOOL ---
|
||||||
|
|
||||||
GetKeyState :: proc(nVirtKey: c_int) -> SHORT ---
|
GetKeyState :: proc(nVirtKey: INT) -> SHORT ---
|
||||||
GetAsyncKeyState :: proc(vKey: c_int) -> SHORT ---
|
GetAsyncKeyState :: proc(vKey: INT) -> SHORT ---
|
||||||
|
|
||||||
GetKeyboardState :: proc(lpKeyState: PBYTE) -> BOOL ---
|
GetKeyboardState :: proc(lpKeyState: PBYTE) -> BOOL ---
|
||||||
|
|
||||||
MapVirtualKeyW :: proc(uCode: UINT, uMapType: UINT) -> UINT ---
|
MapVirtualKeyW :: proc(uCode: UINT, uMapType: UINT) -> UINT ---
|
||||||
ToUnicode :: proc(nVirtKey: UINT, wScanCode: UINT, lpKeyState: ^BYTE, pwszBuff: LPWSTR, cchBuff: c_int, wFlags: UINT) -> c_int ---
|
ToUnicode :: proc(nVirtKey: UINT, wScanCode: UINT, lpKeyState: ^BYTE, pwszBuff: LPWSTR, cchBuff: INT, wFlags: UINT) -> INT ---
|
||||||
|
|
||||||
SetWindowsHookExW :: proc(idHook: c_int, lpfn: HOOKPROC, hmod: HINSTANCE, dwThreadId: DWORD) -> HHOOK ---
|
SetWindowsHookExW :: proc(idHook: INT, lpfn: HOOKPROC, hmod: HINSTANCE, dwThreadId: DWORD) -> HHOOK ---
|
||||||
UnhookWindowsHookEx :: proc(hhk: HHOOK) -> BOOL ---
|
UnhookWindowsHookEx :: proc(hhk: HHOOK) -> BOOL ---
|
||||||
CallNextHookEx :: proc(hhk: HHOOK, nCode: c_int, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
|
CallNextHookEx :: proc(hhk: HHOOK, nCode: INT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
|
||||||
|
|
||||||
SetTimer :: proc(hWnd: HWND, nIDEvent: UINT_PTR, uElapse: UINT, lpTimerFunc: TIMERPROC) -> UINT_PTR ---
|
SetTimer :: proc(hWnd: HWND, nIDEvent: UINT_PTR, uElapse: UINT, lpTimerFunc: TIMERPROC) -> UINT_PTR ---
|
||||||
KillTimer :: proc(hWnd: HWND, uIDEvent: UINT_PTR) -> BOOL ---
|
KillTimer :: proc(hWnd: HWND, uIDEvent: UINT_PTR) -> BOOL ---
|
||||||
|
|
||||||
// MessageBoxA :: proc(hWnd: HWND, lpText: LPCSTR, lpCaption: LPCSTR, uType: UINT) -> c_int ---
|
// MessageBoxA :: proc(hWnd: HWND, lpText: LPCSTR, lpCaption: LPCSTR, uType: UINT) -> INT ---
|
||||||
MessageBoxW :: proc(hWnd: HWND, lpText: LPCWSTR, lpCaption: LPCWSTR, uType: UINT) -> c_int ---
|
MessageBoxW :: proc(hWnd: HWND, lpText: LPCWSTR, lpCaption: LPCWSTR, uType: UINT) -> INT ---
|
||||||
// MessageBoxExA :: proc(hWnd: HWND, lpText: LPCSTR, lpCaption: LPCSTR, uType: UINT, wLanguageId: WORD) -> c_int ---
|
// MessageBoxExA :: proc(hWnd: HWND, lpText: LPCSTR, lpCaption: LPCSTR, uType: UINT, wLanguageId: WORD) -> INT ---
|
||||||
MessageBoxExW :: proc(hWnd: HWND, lpText: LPCWSTR, lpCaption: LPCWSTR, uType: UINT, wLanguageId: WORD) -> c_int ---
|
MessageBoxExW :: proc(hWnd: HWND, lpText: LPCWSTR, lpCaption: LPCWSTR, uType: UINT, wLanguageId: WORD) -> INT ---
|
||||||
|
|
||||||
ClipCursor :: proc(lpRect: LPRECT) -> BOOL ---
|
ClipCursor :: proc(lpRect: LPRECT) -> BOOL ---
|
||||||
GetCursorPos :: proc(lpPoint: LPPOINT) -> BOOL ---
|
GetCursorPos :: proc(lpPoint: LPPOINT) -> BOOL ---
|
||||||
SetCursorPos :: proc(X: c_int, Y: c_int) -> BOOL ---
|
SetCursorPos :: proc(X, Y: INT) -> BOOL ---
|
||||||
SetCursor :: proc(hCursor: HCURSOR) -> HCURSOR ---
|
SetCursor :: proc(hCursor: HCURSOR) -> HCURSOR ---
|
||||||
when !intrinsics.is_package_imported("raylib") {
|
when !intrinsics.is_package_imported("raylib") {
|
||||||
ShowCursor :: proc(bShow: BOOL) -> INT ---
|
ShowCursor :: proc(bShow: BOOL) -> INT ---
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EnumDisplayDevicesW :: proc (lpDevice: LPCWSTR, iDevNum: DWORD, lpDisplayDevice: PDISPLAY_DEVICEW, dwFlags: DWORD) -> BOOL ---
|
||||||
EnumDisplaySettingsW :: proc(lpszDeviceName: LPCWSTR, iModeNum: DWORD, lpDevMode: ^DEVMODEW) -> BOOL ---
|
EnumDisplaySettingsW :: proc(lpszDeviceName: LPCWSTR, iModeNum: DWORD, lpDevMode: ^DEVMODEW) -> BOOL ---
|
||||||
|
|
||||||
MonitorFromPoint :: proc(pt: POINT, dwFlags: Monitor_From_Flags) -> HMONITOR ---
|
MonitorFromPoint :: proc(pt: POINT, dwFlags: Monitor_From_Flags) -> HMONITOR ---
|
||||||
@@ -179,6 +200,9 @@ foreign user32 {
|
|||||||
|
|
||||||
EnumWindows :: proc(lpEnumFunc: Window_Enum_Proc, lParam: LPARAM) -> BOOL ---
|
EnumWindows :: proc(lpEnumFunc: Window_Enum_Proc, lParam: LPARAM) -> BOOL ---
|
||||||
|
|
||||||
|
IsProcessDPIAware :: proc() -> BOOL ---
|
||||||
|
SetProcessDPIAware :: proc() -> BOOL ---
|
||||||
|
|
||||||
SetThreadDpiAwarenessContext :: proc(dpiContext: DPI_AWARENESS_CONTEXT) -> DPI_AWARENESS_CONTEXT ---
|
SetThreadDpiAwarenessContext :: proc(dpiContext: DPI_AWARENESS_CONTEXT) -> DPI_AWARENESS_CONTEXT ---
|
||||||
GetThreadDpiAwarenessContext :: proc() -> DPI_AWARENESS_CONTEXT ---
|
GetThreadDpiAwarenessContext :: proc() -> DPI_AWARENESS_CONTEXT ---
|
||||||
GetWindowDpiAwarenessContext :: proc(hwnd: HWND) -> DPI_AWARENESS_CONTEXT ---
|
GetWindowDpiAwarenessContext :: proc(hwnd: HWND) -> DPI_AWARENESS_CONTEXT ---
|
||||||
@@ -213,14 +237,14 @@ foreign user32 {
|
|||||||
lpdwResult: PDWORD_PTR,
|
lpdwResult: PDWORD_PTR,
|
||||||
) -> LRESULT ---
|
) -> LRESULT ---
|
||||||
|
|
||||||
GetSysColor :: proc(nIndex: c_int) -> DWORD ---
|
GetSysColor :: proc(nIndex: INT) -> DWORD ---
|
||||||
GetSysColorBrush :: proc(nIndex: c_int) -> HBRUSH ---
|
GetSysColorBrush :: proc(nIndex: INT) -> HBRUSH ---
|
||||||
SetSysColors :: proc(cElements: c_int, lpaElements: ^INT, lpaRgbValues: ^COLORREF) -> BOOL ---
|
SetSysColors :: proc(cElements: INT, lpaElements: ^INT, lpaRgbValues: ^COLORREF) -> BOOL ---
|
||||||
MessageBeep :: proc(uType: UINT) -> BOOL ---
|
MessageBeep :: proc(uType: UINT) -> BOOL ---
|
||||||
|
|
||||||
IsDialogMessageW :: proc(hDlg: HWND, lpMsg: LPMSG) -> BOOL ---
|
IsDialogMessageW :: proc(hDlg: HWND, lpMsg: LPMSG) -> BOOL ---
|
||||||
GetWindowTextLengthW :: proc(hWnd: HWND) -> c_int ---
|
GetWindowTextLengthW :: proc(hWnd: HWND) -> INT ---
|
||||||
GetWindowTextW :: proc(hWnd: HWND, lpString: LPWSTR, nMaxCount: c_int) -> c_int ---
|
GetWindowTextW :: proc(hWnd: HWND, lpString: LPWSTR, nMaxCount: INT) -> INT ---
|
||||||
SetWindowTextW :: proc(hWnd: HWND, lpString: LPCWSTR) -> BOOL ---
|
SetWindowTextW :: proc(hWnd: HWND, lpString: LPCWSTR) -> BOOL ---
|
||||||
CallWindowProcW :: proc(lpPrevWndFunc: WNDPROC, hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
|
CallWindowProcW :: proc(lpPrevWndFunc: WNDPROC, hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
|
||||||
EnableWindow :: proc(hWnd: HWND, bEnable: BOOL) -> BOOL ---
|
EnableWindow :: proc(hWnd: HWND, bEnable: BOOL) -> BOOL ---
|
||||||
@@ -233,12 +257,20 @@ foreign user32 {
|
|||||||
GetRegisteredRawInputDevices :: proc(pRawInputDevices: PRAWINPUTDEVICE, puiNumDevices: PUINT, cbSize: UINT) -> UINT ---
|
GetRegisteredRawInputDevices :: proc(pRawInputDevices: PRAWINPUTDEVICE, puiNumDevices: PUINT, cbSize: UINT) -> UINT ---
|
||||||
RegisterRawInputDevices :: proc(pRawInputDevices: PCRAWINPUTDEVICE, uiNumDevices: UINT, cbSize: UINT) -> BOOL ---
|
RegisterRawInputDevices :: proc(pRawInputDevices: PCRAWINPUTDEVICE, uiNumDevices: UINT, cbSize: UINT) -> BOOL ---
|
||||||
|
|
||||||
SendInput :: proc(cInputs: UINT, pInputs: [^]INPUT, cbSize: c_int) -> UINT ---
|
SendInput :: proc(cInputs: UINT, pInputs: [^]INPUT, cbSize: INT) -> UINT ---
|
||||||
|
|
||||||
SetLayeredWindowAttributes :: proc(hWnd: HWND, crKey: COLORREF, bAlpha: BYTE, dwFlags: DWORD) -> BOOL ---
|
SetLayeredWindowAttributes :: proc(hWnd: HWND, crKey: COLORREF, bAlpha: BYTE, dwFlags: DWORD) -> BOOL ---
|
||||||
|
|
||||||
FillRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> int ---
|
FillRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> int ---
|
||||||
EqualRect :: proc(lprc1: ^RECT, lprc2: ^RECT) -> BOOL ---
|
EqualRect :: proc(lprc1, lprc2: ^RECT) -> BOOL ---
|
||||||
|
OffsetRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL ---
|
||||||
|
InflateRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL ---
|
||||||
|
IntersectRect :: proc(lprcDst, lprcSrc1, lprcSrc2: ^RECT) -> BOOL ---
|
||||||
|
SubtractRect :: proc(lprcDst, lprcSrc1, lprcSrc2: ^RECT) -> BOOL ---
|
||||||
|
UnionRect :: proc(lprcDst, lprcSrc1, lprcSrc2: ^RECT) -> BOOL ---
|
||||||
|
IsRectEmpty :: proc(lprc: ^RECT) -> BOOL ---
|
||||||
|
SetRectEmpty :: proc(lprc: ^RECT) -> BOOL ---
|
||||||
|
CopyRect :: proc(lprcDst, lprcSrc: ^RECT) -> BOOL ---
|
||||||
|
|
||||||
GetWindowInfo :: proc(hwnd: HWND, pwi: PWINDOWINFO) -> BOOL ---
|
GetWindowInfo :: proc(hwnd: HWND, pwi: PWINDOWINFO) -> BOOL ---
|
||||||
GetWindowPlacement :: proc(hWnd: HWND, lpwndpl: ^WINDOWPLACEMENT) -> BOOL ---
|
GetWindowPlacement :: proc(hWnd: HWND, lpwndpl: ^WINDOWPLACEMENT) -> BOOL ---
|
||||||
@@ -249,19 +281,30 @@ foreign user32 {
|
|||||||
|
|
||||||
GetSystemMenu :: proc(hWnd: HWND, bRevert: BOOL) -> HMENU ---
|
GetSystemMenu :: proc(hWnd: HWND, bRevert: BOOL) -> HMENU ---
|
||||||
EnableMenuItem :: proc(hMenu: HMENU, uIDEnableItem: UINT, uEnable: UINT) -> BOOL ---
|
EnableMenuItem :: proc(hMenu: HMENU, uIDEnableItem: UINT, uEnable: UINT) -> BOOL ---
|
||||||
|
MenuItemFromPoint :: proc(hWnd: HWND, hMenu: HMENU, ptScreen: POINT) -> INT ---
|
||||||
|
|
||||||
DrawTextW :: proc(hdc: HDC, lpchText: LPCWSTR, cchText: INT, lprc: LPRECT, format: DrawTextFormat) -> INT ---
|
DrawTextW :: proc(hdc: HDC, lpchText: LPCWSTR, cchText: INT, lprc: LPRECT, format: DrawTextFormat) -> INT ---
|
||||||
DrawTextExW :: proc(hdc: HDC, lpchText: LPCWSTR, cchText: INT, lprc: LPRECT, format: DrawTextFormat, lpdtp: PDRAWTEXTPARAMS) -> INT ---
|
DrawTextExW :: proc(hdc: HDC, lpchText: LPCWSTR, cchText: INT, lprc: LPRECT, format: DrawTextFormat, lpdtp: PDRAWTEXTPARAMS) -> INT ---
|
||||||
|
|
||||||
|
GetLocaleInfoEx :: proc(lpLocaleName: LPCWSTR, LCType: LCTYPE, lpLCData: LPWSTR, cchData: INT) -> INT ---
|
||||||
|
IsValidLocaleName :: proc(lpLocaleName: LPCWSTR) -> BOOL ---
|
||||||
|
ResolveLocaleName :: proc(lpNameToResolve: LPCWSTR, lpLocaleName: LPWSTR, cchLocaleName: INT) -> INT ---
|
||||||
|
IsValidCodePage :: proc(CodePage: UINT) -> BOOL ---
|
||||||
|
GetACP :: proc() -> CODEPAGE ---
|
||||||
|
GetCPInfoExW :: proc(CodePage: CODEPAGE, dwFlags: DWORD, lpCPInfoEx: LPCPINFOEXW) -> BOOL ---
|
||||||
|
|
||||||
|
GetProcessWindowStation :: proc() -> HWINSTA ---
|
||||||
|
GetUserObjectInformationW :: proc(hObj: HANDLE, nIndex: GetUserObjectInformationFlags, pvInfo: PVOID, nLength: DWORD, lpnLengthNeeded: LPDWORD) -> BOOL ---
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateWindowW :: #force_inline proc "system" (
|
CreateWindowW :: #force_inline proc "system" (
|
||||||
lpClassName: LPCTSTR,
|
lpClassName: LPCTSTR,
|
||||||
lpWindowName: LPCTSTR,
|
lpWindowName: LPCTSTR,
|
||||||
dwStyle: DWORD,
|
dwStyle: DWORD,
|
||||||
X: c_int,
|
X: INT,
|
||||||
Y: c_int,
|
Y: INT,
|
||||||
nWidth: c_int,
|
nWidth: INT,
|
||||||
nHeight: c_int,
|
nHeight: INT,
|
||||||
hWndParent: HWND,
|
hWndParent: HWND,
|
||||||
hMenu: HMENU,
|
hMenu: HMENU,
|
||||||
hInstance: HINSTANCE,
|
hInstance: HINSTANCE,
|
||||||
@@ -286,11 +329,11 @@ CreateWindowW :: #force_inline proc "system" (
|
|||||||
when ODIN_ARCH == .amd64 {
|
when ODIN_ARCH == .amd64 {
|
||||||
@(default_calling_convention="system")
|
@(default_calling_convention="system")
|
||||||
foreign user32 {
|
foreign user32 {
|
||||||
GetClassLongPtrW :: proc(hWnd: HWND, nIndex: c_int) -> ULONG_PTR ---
|
GetClassLongPtrW :: proc(hWnd: HWND, nIndex: INT) -> ULONG_PTR ---
|
||||||
SetClassLongPtrW :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG_PTR) -> ULONG_PTR ---
|
SetClassLongPtrW :: proc(hWnd: HWND, nIndex: INT, dwNewLong: LONG_PTR) -> ULONG_PTR ---
|
||||||
|
|
||||||
GetWindowLongPtrW :: proc(hWnd: HWND, nIndex: c_int) -> LONG_PTR ---
|
GetWindowLongPtrW :: proc(hWnd: HWND, nIndex: INT) -> LONG_PTR ---
|
||||||
SetWindowLongPtrW :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG_PTR) -> LONG_PTR ---
|
SetWindowLongPtrW :: proc(hWnd: HWND, nIndex: INT, dwNewLong: LONG_PTR) -> LONG_PTR ---
|
||||||
}
|
}
|
||||||
} else when ODIN_ARCH == .i386 {
|
} else when ODIN_ARCH == .i386 {
|
||||||
GetClassLongPtrW :: GetClassLongW
|
GetClassLongPtrW :: GetClassLongW
|
||||||
@@ -300,8 +343,8 @@ when ODIN_ARCH == .amd64 {
|
|||||||
SetWindowLongPtrW :: SetWindowLongW
|
SetWindowLongPtrW :: SetWindowLongW
|
||||||
}
|
}
|
||||||
|
|
||||||
GET_SC_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> c_int {
|
GET_SC_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> INT {
|
||||||
return c_int(wParam) & 0xFFF0
|
return INT(wParam) & 0xFFF0
|
||||||
}
|
}
|
||||||
|
|
||||||
GET_WHEEL_DELTA_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> c_short {
|
GET_WHEEL_DELTA_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> c_short {
|
||||||
@@ -500,8 +543,8 @@ WINDOWPLACEMENT :: struct {
|
|||||||
flags: UINT,
|
flags: UINT,
|
||||||
showCmd: UINT,
|
showCmd: UINT,
|
||||||
ptMinPosition: POINT,
|
ptMinPosition: POINT,
|
||||||
ptMaxPosition: POINT,
|
ptMaxPosition: POINT,
|
||||||
rcNormalPosition: RECT,
|
rcNormalPosition: RECT,
|
||||||
}
|
}
|
||||||
|
|
||||||
WINDOWINFO :: struct {
|
WINDOWINFO :: struct {
|
||||||
@@ -519,10 +562,10 @@ WINDOWINFO :: struct {
|
|||||||
PWINDOWINFO :: ^WINDOWINFO
|
PWINDOWINFO :: ^WINDOWINFO
|
||||||
|
|
||||||
DRAWTEXTPARAMS :: struct {
|
DRAWTEXTPARAMS :: struct {
|
||||||
cbSize: UINT,
|
cbSize : UINT,
|
||||||
iTabLength: int,
|
iTabLength: INT,
|
||||||
iLeftMargin: int,
|
iLeftMargin: INT,
|
||||||
iRightMargin: int,
|
iRightMargin: INT,
|
||||||
uiLengthDrawn: UINT,
|
uiLengthDrawn: UINT,
|
||||||
}
|
}
|
||||||
PDRAWTEXTPARAMS :: ^DRAWTEXTPARAMS
|
PDRAWTEXTPARAMS :: ^DRAWTEXTPARAMS
|
||||||
@@ -568,3 +611,95 @@ RedrawWindowFlags :: enum UINT {
|
|||||||
RDW_FRAME = 0x0400,
|
RDW_FRAME = 0x0400,
|
||||||
RDW_NOFRAME = 0x0800,
|
RDW_NOFRAME = 0x0800,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GetUserObjectInformationFlags :: enum INT {
|
||||||
|
UOI_FLAGS = 1,
|
||||||
|
UOI_NAME = 2,
|
||||||
|
UOI_TYPE = 3,
|
||||||
|
UOI_USER_SID = 4,
|
||||||
|
UOI_HEAPSIZE = 5,
|
||||||
|
UOI_IO = 6,
|
||||||
|
UOI_TIMERPROC_EXCEPTION_SUPPRESSION = 7,
|
||||||
|
}
|
||||||
|
|
||||||
|
USEROBJECTFLAGS :: struct {
|
||||||
|
fInherit: BOOL,
|
||||||
|
fReserved: BOOL,
|
||||||
|
dwFlags: DWORD,
|
||||||
|
}
|
||||||
|
|
||||||
|
PROPENUMPROCW :: #type proc(unnamedParam1: HWND, unnamedParam2: LPCWSTR, unnamedParam3: HANDLE) -> BOOL
|
||||||
|
PROPENUMPROCEXW :: #type proc(unnamedParam1: HWND, unnamedParam2: LPCWSTR, unnamedParam3: HANDLE, unnamedParam4: ULONG_PTR) -> BOOL
|
||||||
|
|
||||||
|
RT_CURSOR :: LPWSTR(uintptr(0x00000001))
|
||||||
|
RT_BITMAP :: LPWSTR(uintptr(0x00000002))
|
||||||
|
RT_ICON :: LPWSTR(uintptr(0x00000003))
|
||||||
|
RT_MENU :: LPWSTR(uintptr(0x00000004))
|
||||||
|
RT_DIALOG :: LPWSTR(uintptr(0x00000005))
|
||||||
|
RT_STRING :: LPWSTR(uintptr(0x00000006))
|
||||||
|
RT_FONTDIR :: LPWSTR(uintptr(0x00000007))
|
||||||
|
RT_FONT :: LPWSTR(uintptr(0x00000008))
|
||||||
|
RT_ACCELERATOR :: LPWSTR(uintptr(0x00000009))
|
||||||
|
RT_RCDATA :: LPWSTR(uintptr(0x0000000A))
|
||||||
|
RT_MESSAGETABLE :: LPWSTR(uintptr(0x0000000B))
|
||||||
|
RT_GROUP_CURSOR :: LPWSTR(uintptr(0x0000000C))
|
||||||
|
RT_GROUP_ICON :: LPWSTR(uintptr(0x0000000E))
|
||||||
|
RT_VERSION :: LPWSTR(uintptr(0x00000010))
|
||||||
|
RT_DLGINCLUDE :: LPWSTR(uintptr(0x00000011))
|
||||||
|
RT_PLUGPLAY :: LPWSTR(uintptr(0x00000013))
|
||||||
|
RT_VXD :: LPWSTR(uintptr(0x00000014))
|
||||||
|
RT_ANICURSOR :: LPWSTR(uintptr(0x00000015))
|
||||||
|
RT_ANIICON :: LPWSTR(uintptr(0x00000016))
|
||||||
|
RT_MANIFEST :: LPWSTR(uintptr(0x00000018))
|
||||||
|
|
||||||
|
CREATEPROCESS_MANIFEST_RESOURCE_ID :: LPWSTR(uintptr(0x00000001))
|
||||||
|
ISOLATIONAWARE_MANIFEST_RESOURCE_ID :: LPWSTR(uintptr(0x00000002))
|
||||||
|
ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID :: LPWSTR(uintptr(0x00000003))
|
||||||
|
ISOLATIONPOLICY_MANIFEST_RESOURCE_ID :: LPWSTR(uintptr(0x00000004))
|
||||||
|
ISOLATIONPOLICY_BROWSER_MANIFEST_RESOURCE_ID :: LPWSTR(uintptr(0x00000005))
|
||||||
|
MINIMUM_RESERVED_MANIFEST_RESOURCE_ID :: LPWSTR(uintptr(0x00000001))
|
||||||
|
MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID :: LPWSTR(uintptr(0x00000010))
|
||||||
|
|
||||||
|
ACCEL :: struct {
|
||||||
|
/* Also called the flags field */
|
||||||
|
fVirt: BYTE,
|
||||||
|
key: WORD,
|
||||||
|
cmd: WORD,
|
||||||
|
}
|
||||||
|
LPACCEL :: ^ACCEL
|
||||||
|
|
||||||
|
MIIM_STATE :: 0x00000001
|
||||||
|
MIIM_ID :: 0x00000002
|
||||||
|
MIIM_SUBMENU :: 0x00000004
|
||||||
|
MIIM_CHECKMARKS :: 0x00000008
|
||||||
|
MIIM_TYPE :: 0x00000010
|
||||||
|
MIIM_DATA :: 0x00000020
|
||||||
|
|
||||||
|
MIIM_STRING :: 0x00000040
|
||||||
|
MIIM_BITMAP :: 0x00000080
|
||||||
|
MIIM_FTYPE :: 0x00000100
|
||||||
|
|
||||||
|
MENUITEMINFOW :: struct {
|
||||||
|
cbSize: UINT,
|
||||||
|
fMask: UINT,
|
||||||
|
fType: UINT, // used if MIIM_TYPE (4.0) or MIIM_FTYPE (>4.0)
|
||||||
|
fState: UINT, // used if MIIM_STATE
|
||||||
|
wID: UINT, // used if MIIM_ID
|
||||||
|
hSubMenu: HMENU, // used if MIIM_SUBMENU
|
||||||
|
hbmpChecked: HBITMAP, // used if MIIM_CHECKMARKS
|
||||||
|
hbmpUnchecked: HBITMAP, // used if MIIM_CHECKMARKS
|
||||||
|
dwItemData: ULONG_PTR, // used if MIIM_DATA
|
||||||
|
dwTypeData: LPWSTR, // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0)
|
||||||
|
cch: UINT, // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0)
|
||||||
|
hbmpItem: HBITMAP, // used if MIIM_BITMAP
|
||||||
|
}
|
||||||
|
LPMENUITEMINFOW :: ^MENUITEMINFOW
|
||||||
|
DISPLAY_DEVICEW :: struct {
|
||||||
|
cb: DWORD,
|
||||||
|
DeviceName: [32]WCHAR,
|
||||||
|
DeviceString: [128]WCHAR,
|
||||||
|
StateFlags: DWORD,
|
||||||
|
DeviceID: [128]WCHAR,
|
||||||
|
DeviceKey: [128]WCHAR,
|
||||||
|
}
|
||||||
|
PDISPLAY_DEVICEW :: ^DISPLAY_DEVICEW
|
||||||
|
|||||||
@@ -6,22 +6,79 @@ import "base:intrinsics"
|
|||||||
|
|
||||||
L :: intrinsics.constant_utf16_cstring
|
L :: intrinsics.constant_utf16_cstring
|
||||||
|
|
||||||
LOWORD :: #force_inline proc "contextless" (x: DWORD) -> WORD {
|
// https://learn.microsoft.com/en-us/windows/win32/winmsg/makeword
|
||||||
|
MAKEWORD :: #force_inline proc "contextless" (#any_int a, b: int) -> WORD {
|
||||||
|
return WORD(BYTE(DWORD_PTR(a) & 0xff)) | (WORD(BYTE(DWORD_PTR(b) & 0xff)) << 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/winmsg/makelong
|
||||||
|
MAKELONG :: #force_inline proc "contextless" (#any_int a, b: int) -> LONG {
|
||||||
|
return LONG(WORD(DWORD_PTR(a) & 0xffff)) | (LONG(WORD(DWORD_PTR(b) & 0xffff)) << 16)
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/winmsg/loword
|
||||||
|
LOWORD :: #force_inline proc "contextless" (#any_int x: int) -> WORD {
|
||||||
return WORD(x & 0xffff)
|
return WORD(x & 0xffff)
|
||||||
}
|
}
|
||||||
|
|
||||||
HIWORD :: #force_inline proc "contextless" (x: DWORD) -> WORD {
|
// https://learn.microsoft.com/en-us/windows/win32/winmsg/hiword
|
||||||
|
HIWORD :: #force_inline proc "contextless" (#any_int x: int) -> WORD {
|
||||||
return WORD(x >> 16)
|
return WORD(x >> 16)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/winmsg/lobyte
|
||||||
|
LOBYTE :: #force_inline proc "contextless" (w: WORD) -> BYTE {
|
||||||
|
return BYTE((DWORD_PTR(w)) & 0xff)
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/winmsg/hibyte
|
||||||
|
HIBYTE :: #force_inline proc "contextless" (w: WORD) -> BYTE {
|
||||||
|
return BYTE(((DWORD_PTR(w)) >> 8) & 0xff)
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-makewparam
|
||||||
|
MAKEWPARAM :: #force_inline proc "contextless" (#any_int l, h: int) -> WPARAM {
|
||||||
|
return WPARAM(MAKELONG(l, h))
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-makelparam
|
||||||
|
MAKELPARAM :: #force_inline proc "contextless" (#any_int l, h: int) -> LPARAM {
|
||||||
|
return LPARAM(MAKELONG(l, h))
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-makelresult
|
||||||
|
MAKELRESULT :: #force_inline proc "contextless" (#any_int l, h: int) -> LRESULT {
|
||||||
|
return LRESULT(MAKELONG(l, h))
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/windowsx/nf-windowsx-get_x_lparam
|
||||||
GET_X_LPARAM :: #force_inline proc "contextless" (lp: LPARAM) -> c_int {
|
GET_X_LPARAM :: #force_inline proc "contextless" (lp: LPARAM) -> c_int {
|
||||||
return cast(c_int)cast(c_short)LOWORD(cast(DWORD)lp)
|
return cast(c_int)cast(c_short)LOWORD(cast(DWORD)lp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/windowsx/nf-windowsx-get_y_lparam
|
||||||
GET_Y_LPARAM :: #force_inline proc "contextless" (lp: LPARAM) -> c_int {
|
GET_Y_LPARAM :: #force_inline proc "contextless" (lp: LPARAM) -> c_int {
|
||||||
return cast(c_int)cast(c_short)HIWORD(cast(DWORD)lp)
|
return cast(c_int)cast(c_short)HIWORD(cast(DWORD)lp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-makelcid
|
||||||
|
MAKELCID :: #force_inline proc "contextless" (lgid, srtid: WORD) -> LCID {
|
||||||
|
return (DWORD(WORD(srtid)) << 16) | DWORD(WORD(lgid))
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-makelangid
|
||||||
|
MAKELANGID :: #force_inline proc "contextless" (p, s: WORD) -> DWORD {
|
||||||
|
return DWORD(WORD(s)) << 10 | DWORD(WORD(p))
|
||||||
|
}
|
||||||
|
|
||||||
|
LANGIDFROMLCID :: #force_inline proc "contextless" (lcid: LCID) -> LANGID {
|
||||||
|
return LANGID(lcid)
|
||||||
|
}
|
||||||
|
|
||||||
|
// this one gave me trouble as it do not mask the values.
|
||||||
|
// the _ in the name is also off comparing to the c code
|
||||||
|
// i can't find any usage in the odin repo
|
||||||
|
@(deprecated = "use MAKEWORD")
|
||||||
MAKE_WORD :: #force_inline proc "contextless" (x, y: WORD) -> WORD {
|
MAKE_WORD :: #force_inline proc "contextless" (x, y: WORD) -> WORD {
|
||||||
return x << 8 | y
|
return x << 8 | y
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,189 @@
|
|||||||
// +build windows
|
// +build windows
|
||||||
package sys_windows
|
package sys_windows
|
||||||
|
|
||||||
|
// https://learn.microsoft.com/en-us/windows/win32/api/winerror/
|
||||||
|
|
||||||
|
// Values are 32 bit values laid out as follows:
|
||||||
|
//
|
||||||
|
// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
|
||||||
|
// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
|
||||||
|
// +---+-+-+-----------------------+-------------------------------+
|
||||||
|
// |Sev|C|R| Facility | Code |
|
||||||
|
// +---+-+-+-----------------------+-------------------------------+
|
||||||
|
//
|
||||||
|
// where
|
||||||
|
//
|
||||||
|
// Sev - is the severity code
|
||||||
|
//
|
||||||
|
// 00 - Success
|
||||||
|
// 01 - Informational
|
||||||
|
// 10 - Warning
|
||||||
|
// 11 - Error
|
||||||
|
//
|
||||||
|
// C - is the Customer code flag
|
||||||
|
//
|
||||||
|
// R - is a reserved bit
|
||||||
|
//
|
||||||
|
// Facility - is the facility code
|
||||||
|
//
|
||||||
|
// Code - is the facility's status code
|
||||||
|
|
||||||
|
// Define the facility codes
|
||||||
|
FACILITY :: enum DWORD {
|
||||||
|
NULL = 0,
|
||||||
|
RPC = 1,
|
||||||
|
DISPATCH = 2,
|
||||||
|
STORAGE = 3,
|
||||||
|
ITF = 4,
|
||||||
|
WIN32 = 7,
|
||||||
|
WINDOWS = 8,
|
||||||
|
SSPI = 9,
|
||||||
|
SECURITY = 9,
|
||||||
|
CONTROL = 10,
|
||||||
|
CERT = 11,
|
||||||
|
INTERNET = 12,
|
||||||
|
MEDIASERVER = 13,
|
||||||
|
MSMQ = 14,
|
||||||
|
SETUPAPI = 15,
|
||||||
|
SCARD = 16,
|
||||||
|
COMPLUS = 17,
|
||||||
|
AAF = 18,
|
||||||
|
URT = 19,
|
||||||
|
ACS = 20,
|
||||||
|
DPLAY = 21,
|
||||||
|
UMI = 22,
|
||||||
|
SXS = 23,
|
||||||
|
WINDOWS_CE = 24,
|
||||||
|
HTTP = 25,
|
||||||
|
USERMODE_COMMONLOG = 26,
|
||||||
|
WER = 27,
|
||||||
|
USERMODE_FILTER_MANAGER = 31,
|
||||||
|
BACKGROUNDCOPY = 32,
|
||||||
|
CONFIGURATION = 33,
|
||||||
|
WIA = 33,
|
||||||
|
STATE_MANAGEMENT = 34,
|
||||||
|
METADIRECTORY = 35,
|
||||||
|
WINDOWSUPDATE = 36,
|
||||||
|
DIRECTORYSERVICE = 37,
|
||||||
|
GRAPHICS = 38,
|
||||||
|
SHELL = 39,
|
||||||
|
NAP = 39,
|
||||||
|
TPM_SERVICES = 40,
|
||||||
|
TPM_SOFTWARE = 41,
|
||||||
|
UI = 42,
|
||||||
|
XAML = 43,
|
||||||
|
ACTION_QUEUE = 44,
|
||||||
|
PLA = 48,
|
||||||
|
WINDOWS_SETUP = 48,
|
||||||
|
FVE = 49,
|
||||||
|
FWP = 50,
|
||||||
|
WINRM = 51,
|
||||||
|
NDIS = 52,
|
||||||
|
USERMODE_HYPERVISOR = 53,
|
||||||
|
CMI = 54,
|
||||||
|
USERMODE_VIRTUALIZATION = 55,
|
||||||
|
USERMODE_VOLMGR = 56,
|
||||||
|
BCD = 57,
|
||||||
|
USERMODE_VHD = 58,
|
||||||
|
USERMODE_HNS = 59,
|
||||||
|
SDIAG = 60,
|
||||||
|
WEBSERVICES = 61,
|
||||||
|
WINPE = 61,
|
||||||
|
WPN = 62,
|
||||||
|
WINDOWS_STORE = 63,
|
||||||
|
INPUT = 64,
|
||||||
|
QUIC = 65,
|
||||||
|
EAP = 66,
|
||||||
|
IORING = 70,
|
||||||
|
WINDOWS_DEFENDER = 80,
|
||||||
|
OPC = 81,
|
||||||
|
XPS = 82,
|
||||||
|
MBN = 84,
|
||||||
|
POWERSHELL = 84,
|
||||||
|
RAS = 83,
|
||||||
|
P2P_INT = 98,
|
||||||
|
P2P = 99,
|
||||||
|
DAF = 100,
|
||||||
|
BLUETOOTH_ATT = 101,
|
||||||
|
AUDIO = 102,
|
||||||
|
STATEREPOSITORY = 103,
|
||||||
|
VISUALCPP = 109,
|
||||||
|
SCRIPT = 112,
|
||||||
|
PARSE = 113,
|
||||||
|
BLB = 120,
|
||||||
|
BLB_CLI = 121,
|
||||||
|
WSBAPP = 122,
|
||||||
|
BLBUI = 128,
|
||||||
|
USN = 129,
|
||||||
|
USERMODE_VOLSNAP = 130,
|
||||||
|
TIERING = 131,
|
||||||
|
WSB_ONLINE = 133,
|
||||||
|
ONLINE_ID = 134,
|
||||||
|
DEVICE_UPDATE_AGENT = 135,
|
||||||
|
DRVSERVICING = 136,
|
||||||
|
DLS = 153,
|
||||||
|
DELIVERY_OPTIMIZATION = 208,
|
||||||
|
USERMODE_SPACES = 231,
|
||||||
|
USER_MODE_SECURITY_CORE = 232,
|
||||||
|
USERMODE_LICENSING = 234,
|
||||||
|
SOS = 160,
|
||||||
|
OCP_UPDATE_AGENT = 173,
|
||||||
|
DEBUGGERS = 176,
|
||||||
|
SPP = 256,
|
||||||
|
RESTORE = 256,
|
||||||
|
DMSERVER = 256,
|
||||||
|
DEPLOYMENT_SERVICES_SERVER = 257,
|
||||||
|
DEPLOYMENT_SERVICES_IMAGING = 258,
|
||||||
|
DEPLOYMENT_SERVICES_MANAGEMENT = 259,
|
||||||
|
DEPLOYMENT_SERVICES_UTIL = 260,
|
||||||
|
DEPLOYMENT_SERVICES_BINLSVC = 261,
|
||||||
|
DEPLOYMENT_SERVICES_PXE = 263,
|
||||||
|
DEPLOYMENT_SERVICES_TFTP = 264,
|
||||||
|
DEPLOYMENT_SERVICES_TRANSPORT_MANAGEMENT = 272,
|
||||||
|
DEPLOYMENT_SERVICES_DRIVER_PROVISIONING = 278,
|
||||||
|
DEPLOYMENT_SERVICES_MULTICAST_SERVER = 289,
|
||||||
|
DEPLOYMENT_SERVICES_MULTICAST_CLIENT = 290,
|
||||||
|
DEPLOYMENT_SERVICES_CONTENT_PROVIDER = 293,
|
||||||
|
HSP_SERVICES = 296,
|
||||||
|
HSP_SOFTWARE = 297,
|
||||||
|
LINGUISTIC_SERVICES = 305,
|
||||||
|
AUDIOSTREAMING = 1094,
|
||||||
|
TTD = 1490,
|
||||||
|
ACCELERATOR = 1536,
|
||||||
|
WMAAECMA = 1996,
|
||||||
|
DIRECTMUSIC = 2168,
|
||||||
|
DIRECT3D10 = 2169,
|
||||||
|
DXGI = 2170,
|
||||||
|
DXGI_DDI = 2171,
|
||||||
|
DIRECT3D11 = 2172,
|
||||||
|
DIRECT3D11_DEBUG = 2173,
|
||||||
|
DIRECT3D12 = 2174,
|
||||||
|
DIRECT3D12_DEBUG = 2175,
|
||||||
|
DXCORE = 2176,
|
||||||
|
PRESENTATION = 2177,
|
||||||
|
LEAP = 2184,
|
||||||
|
AUDCLNT = 2185,
|
||||||
|
WINCODEC_DWRITE_DWM = 2200,
|
||||||
|
WINML = 2192,
|
||||||
|
DIRECT2D = 2201,
|
||||||
|
DEFRAG = 2304,
|
||||||
|
USERMODE_SDBUS = 2305,
|
||||||
|
JSCRIPT = 2306,
|
||||||
|
PIDGENX = 2561,
|
||||||
|
EAS = 85,
|
||||||
|
WEB = 885,
|
||||||
|
WEB_SOCKET = 886,
|
||||||
|
MOBILE = 1793,
|
||||||
|
SQLITE = 1967,
|
||||||
|
SERVICE_FABRIC = 1968,
|
||||||
|
UTC = 1989,
|
||||||
|
WEP = 2049,
|
||||||
|
SYNCENGINE = 2050,
|
||||||
|
XBOX = 2339,
|
||||||
|
GAME = 2340,
|
||||||
|
PIX = 2748,
|
||||||
|
}
|
||||||
|
|
||||||
ERROR_SUCCESS : DWORD : 0
|
ERROR_SUCCESS : DWORD : 0
|
||||||
NO_ERROR :: 0
|
NO_ERROR :: 0
|
||||||
SEC_E_OK : HRESULT : 0x00000000
|
SEC_E_OK : HRESULT : 0x00000000
|
||||||
@@ -42,14 +225,55 @@ ERROR_TIMEOUT : DWORD : 1460
|
|||||||
ERROR_DATATYPE_MISMATCH : DWORD : 1629
|
ERROR_DATATYPE_MISMATCH : DWORD : 1629
|
||||||
ERROR_UNSUPPORTED_TYPE : DWORD : 1630
|
ERROR_UNSUPPORTED_TYPE : DWORD : 1630
|
||||||
ERROR_NOT_SAME_OBJECT : DWORD : 1656
|
ERROR_NOT_SAME_OBJECT : DWORD : 1656
|
||||||
ERROR_PIPE_CONNECTED : DWORD : 0x80070217
|
ERROR_PIPE_CONNECTED : DWORD : 535
|
||||||
ERROR_PIPE_BUSY : DWORD : 231
|
ERROR_PIPE_BUSY : DWORD : 231
|
||||||
|
|
||||||
E_NOTIMPL :: HRESULT(-0x7fff_bfff) // 0x8000_4001
|
// https://learn.microsoft.com/en-us/windows/win32/seccrypto/common-hresult-values
|
||||||
|
S_OK :: 0x00000000 // Operation successful
|
||||||
|
E_NOTIMPL :: 0x80004001 // Not implemented
|
||||||
|
E_NOINTERFACE :: 0x80004002 // No such interface supported
|
||||||
|
E_POINTER :: 0x80004003 // Pointer that is not valid
|
||||||
|
E_ABORT :: 0x80004004 // Operation aborted
|
||||||
|
E_FAIL :: 0x80004005 // Unspecified failure
|
||||||
|
E_UNEXPECTED :: 0x8000FFFF // Unexpected failure
|
||||||
|
E_ACCESSDENIED :: 0x80070005 // General access denied error
|
||||||
|
E_HANDLE :: 0x80070006 // Handle that is not valid
|
||||||
|
E_OUTOFMEMORY :: 0x8007000E // Failed to allocate necessary memory
|
||||||
|
E_INVALIDARG :: 0x80070057 // One or more arguments are not valid
|
||||||
|
|
||||||
SUCCEEDED :: #force_inline proc(#any_int result: int) -> bool { return result >= 0 }
|
// Severity values
|
||||||
|
SEVERITY :: enum DWORD {
|
||||||
|
SUCCESS = 0,
|
||||||
|
ERROR = 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generic test for success on any status value (non-negative numbers indicate success).
|
||||||
|
SUCCEEDED :: #force_inline proc(#any_int result: int) -> bool { return result >= S_OK }
|
||||||
|
// and the inverse
|
||||||
|
FAILED :: #force_inline proc(#any_int result: int) -> bool { return result < S_OK }
|
||||||
|
|
||||||
|
// Generic test for error on any status value.
|
||||||
|
IS_ERROR :: #force_inline proc(#any_int status: int) -> bool { return u32(status) >> 31 == u32(SEVERITY.ERROR) }
|
||||||
|
|
||||||
|
// Return the code
|
||||||
|
HRESULT_CODE :: #force_inline proc(#any_int hr: int) -> int { return int(u32(hr) & 0xFFFF) }
|
||||||
|
|
||||||
|
// Return the facility
|
||||||
|
HRESULT_FACILITY :: #force_inline proc(#any_int hr: int) -> FACILITY { return FACILITY((u32(hr) >> 16) & 0x1FFF) }
|
||||||
|
|
||||||
|
// Return the severity
|
||||||
|
HRESULT_SEVERITY :: #force_inline proc(#any_int hr: int) -> SEVERITY { return SEVERITY((u32(hr) >> 31) & 0x1) }
|
||||||
|
|
||||||
|
// Create an HRESULT value from component pieces
|
||||||
|
MAKE_HRESULT :: #force_inline proc(#any_int sev: int, #any_int fac: int, #any_int code: int) -> HRESULT {
|
||||||
|
return HRESULT((uint(sev)<<31) | (uint(fac)<<16) | (uint(code)))
|
||||||
|
}
|
||||||
|
|
||||||
|
DECODE_HRESULT :: #force_inline proc(#any_int hr: int) -> (SEVERITY, FACILITY, int) {
|
||||||
|
return HRESULT_SEVERITY(hr), HRESULT_FACILITY(hr), HRESULT_CODE(hr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// aka ERROR or WIN32_ERROR to hint the WIN32 facility
|
||||||
System_Error :: enum DWORD {
|
System_Error :: enum DWORD {
|
||||||
// The operation completed successfully.
|
// The operation completed successfully.
|
||||||
SUCCESS = 0x0,
|
SUCCESS = 0x0,
|
||||||
|
|||||||
@@ -270,7 +270,7 @@ LPHWAVEOUT :: ^HWAVEOUT
|
|||||||
|
|
||||||
// https://learn.microsoft.com/en-us/windows/win32/multimedia/multimedia-timer-structures
|
// https://learn.microsoft.com/en-us/windows/win32/multimedia/multimedia-timer-structures
|
||||||
MMTIME :: struct {
|
MMTIME :: struct {
|
||||||
wType: UINT,
|
wType: MMTIME_TYPE,
|
||||||
u: struct #raw_union {
|
u: struct #raw_union {
|
||||||
ms: DWORD,
|
ms: DWORD,
|
||||||
sample: DWORD,
|
sample: DWORD,
|
||||||
@@ -292,6 +292,21 @@ MMTIME :: struct {
|
|||||||
}
|
}
|
||||||
LPMMTIME :: ^MMTIME
|
LPMMTIME :: ^MMTIME
|
||||||
|
|
||||||
|
MMTIME_TYPE :: enum UINT {
|
||||||
|
/* time in milliseconds */
|
||||||
|
TIME_MS = 0x0001,
|
||||||
|
/* number of wave samples */
|
||||||
|
TIME_SAMPLES = 0x0002,
|
||||||
|
/* current byte offset */
|
||||||
|
TIME_BYTES = 0x0004,
|
||||||
|
/* SMPTE time */
|
||||||
|
TIME_SMPTE = 0x0008,
|
||||||
|
/* MIDI time */
|
||||||
|
TIME_MIDI = 0x0010,
|
||||||
|
/* Ticks within MIDI stream */
|
||||||
|
TIME_TICKS = 0x0020,
|
||||||
|
}
|
||||||
|
|
||||||
MAXPNAMELEN :: 32
|
MAXPNAMELEN :: 32
|
||||||
MAXERRORLENGTH :: 256
|
MAXERRORLENGTH :: 256
|
||||||
MMVERSION :: UINT
|
MMVERSION :: UINT
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
// +build windows
|
||||||
|
package sys_windows
|
||||||
|
|
||||||
|
LCTYPE :: distinct DWORD
|
||||||
|
|
||||||
|
LOCALE_NAME_MAX_LENGTH :: 85
|
||||||
|
LOCALE_NAME_USER_DEFAULT :: 0
|
||||||
|
LOCALE_NAME_INVARIANT : wstring = L("")
|
||||||
|
LOCALE_NAME_SYSTEM_DEFAULT : wstring = L("!x-sys-default-locale")
|
||||||
|
|
||||||
|
// String Length Maximums.
|
||||||
|
// 5 ranges, 2 bytes ea., 0 term.
|
||||||
|
MAX_LEADBYTES :: 12
|
||||||
|
// single or double byte
|
||||||
|
MAX_DEFAULTCHAR :: 2
|
||||||
|
|
||||||
|
CPINFOEXW :: struct{
|
||||||
|
// Maximum length, in bytes, of a character in the code page.
|
||||||
|
MaxCharSize: UINT,
|
||||||
|
// The default is usually the "?" character for the code page.
|
||||||
|
DefaultChar: [MAX_DEFAULTCHAR]BYTE,
|
||||||
|
// A fixed-length array of lead byte ranges, for which the number of lead byte ranges is variable.
|
||||||
|
LeadByte: [MAX_LEADBYTES]BYTE,
|
||||||
|
// The default is usually the "?" character or the katakana middle dot character.
|
||||||
|
UnicodeDefaultChar: WCHAR,
|
||||||
|
// Code page value. This value reflects the code page passed to the GetCPInfoEx function.
|
||||||
|
CodePage: CODEPAGE,
|
||||||
|
// Full name of the code page.
|
||||||
|
CodePageName: [MAX_PATH]WCHAR,
|
||||||
|
}
|
||||||
|
LPCPINFOEXW :: ^CPINFOEXW
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
// +build windows
|
||||||
|
package sys_windows
|
||||||
|
|
||||||
|
foreign import version "system:version.lib"
|
||||||
|
|
||||||
|
@(default_calling_convention = "system")
|
||||||
|
foreign version {
|
||||||
|
GetFileVersionInfoSizeW :: proc(lpwstrFilename: LPCWSTR, lpdwHandle: LPDWORD) -> DWORD ---
|
||||||
|
GetFileVersionInfoW :: proc(lptstrFilename: LPCWSTR, dwHandle: DWORD, dwLen: DWORD, lpData: LPVOID) -> BOOL ---
|
||||||
|
|
||||||
|
GetFileVersionInfoSizeExW :: proc(dwFlags: FILE_VER_GET_FLAGS, lpwstrFilename: LPCWSTR, lpdwHandle: LPDWORD) -> DWORD ---
|
||||||
|
GetFileVersionInfoExW :: proc(dwFlags: FILE_VER_GET_FLAGS, lpwstrFilename: LPCWSTR, dwHandle, dwLen: DWORD, lpData: LPVOID) -> DWORD ---
|
||||||
|
|
||||||
|
VerLanguageNameW :: proc(wLang: DWORD, szLang: LPWSTR, cchLang: DWORD) -> DWORD ---
|
||||||
|
VerQueryValueW :: proc(pBlock: LPCVOID, lpSubBlock: LPCWSTR, lplpBuffer: ^LPVOID, puLen: PUINT) -> BOOL ---
|
||||||
|
}
|
||||||
|
|
||||||
|
FILE_VER_GET :: enum DWORD {LOCALISED, NEUTRAL, PREFETCHED}
|
||||||
|
FILE_VER_GET_FLAGS :: bit_set[FILE_VER_GET; DWORD]
|
||||||
|
|
||||||
|
/* ----- Symbols ----- */
|
||||||
|
VS_FILE_INFO :: RT_VERSION
|
||||||
|
VS_VERSION_INFO :: 1
|
||||||
|
VS_USER_DEFINED :: 100
|
||||||
|
|
||||||
|
VS_FFI_SIGNATURE : DWORD : 0xFEEF04BD
|
||||||
|
|
||||||
|
VS_FFI_STRUCVERSION :: 0x00010000
|
||||||
|
VS_FFI_FILEFLAGSMASK :: 0x0000003F
|
||||||
|
|
||||||
|
/* ----- VS_VERSION.dwFileFlags ----- */
|
||||||
|
VS_FILEFLAG :: enum DWORD {
|
||||||
|
DEBUG,
|
||||||
|
PRERELEASE,
|
||||||
|
PATCHED,
|
||||||
|
PRIVATEBUILD,
|
||||||
|
INFOINFERRED,
|
||||||
|
SPECIALBUILD,
|
||||||
|
}
|
||||||
|
VS_FILEFLAGS :: bit_set[VS_FILEFLAG;DWORD]
|
||||||
|
|
||||||
|
/* ----- VS_VERSION.dwFileOS ----- */
|
||||||
|
VOS :: enum WORD {
|
||||||
|
UNKNOWN = 0x0000,
|
||||||
|
DOS = 0x0001,
|
||||||
|
OS216 = 0x0002,
|
||||||
|
OS232 = 0x0003,
|
||||||
|
NT = 0x0004,
|
||||||
|
WINCE = 0x0005,
|
||||||
|
}
|
||||||
|
VOS2 :: enum WORD {
|
||||||
|
BASE = 0x0000,
|
||||||
|
WINDOWS16 = 0x0001,
|
||||||
|
PM16 = 0x0002,
|
||||||
|
PM32 = 0x0003,
|
||||||
|
WINDOWS32 = 0x0004,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----- VS_VERSION.dwFileType ----- */
|
||||||
|
VFT :: enum DWORD {
|
||||||
|
UNKNOWN = 0x00000000,
|
||||||
|
APP = 0x00000001,
|
||||||
|
DLL = 0x00000002,
|
||||||
|
DRV = 0x00000003,
|
||||||
|
FONT = 0x00000004,
|
||||||
|
VXD = 0x00000005,
|
||||||
|
STATIC_LIB = 0x00000007,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV ----- */
|
||||||
|
VFT2_WINDOWS_DRV :: enum DWORD {
|
||||||
|
UNKNOWN = 0x00000000,
|
||||||
|
DRV_PRINTER = 0x00000001,
|
||||||
|
DRV_KEYBOARD = 0x00000002,
|
||||||
|
DRV_LANGUAGE = 0x00000003,
|
||||||
|
DRV_DISPLAY = 0x00000004,
|
||||||
|
DRV_MOUSE = 0x00000005,
|
||||||
|
DRV_NETWORK = 0x00000006,
|
||||||
|
DRV_SYSTEM = 0x00000007,
|
||||||
|
DRV_INSTALLABLE = 0x00000008,
|
||||||
|
DRV_SOUND = 0x00000009,
|
||||||
|
DRV_COMM = 0x0000000A,
|
||||||
|
DRV_INPUTMETHOD = 0x0000000B,
|
||||||
|
DRV_VERSIONED_PRINTER = 0x0000000C,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_FONT ----- */
|
||||||
|
VFT2_WINDOWS_FONT :: enum DWORD {
|
||||||
|
FONT_RASTER = 0x00000001,
|
||||||
|
FONT_VECTOR = 0x00000002,
|
||||||
|
FONT_TRUETYPE = 0x00000003,
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user