mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-01 20:28:15 +00:00
merge commit
This commit is contained in:
@@ -29,3 +29,7 @@ OpenPanel_setResolvesAliases :: proc "c" (self: ^OpenPanel, setting: BOOL) {
|
||||
OpenPanel_setAllowsMultipleSelection :: proc "c" (self: ^OpenPanel, setting: BOOL) {
|
||||
msgSend(nil, self, "setAllowsMultipleSelection:", setting)
|
||||
}
|
||||
@(objc_type=OpenPanel, objc_name="setAllowedFileTypes")
|
||||
OpenPanel_setAllowedFileTypes :: proc "c" (self: ^OpenPanel, types: ^Array) {
|
||||
msgSend(nil, self, "setAllowedFileTypes:", types)
|
||||
}
|
||||
|
||||
@@ -399,7 +399,7 @@ cpu_topology_node_info :: struct {
|
||||
},
|
||||
_package: struct {
|
||||
vendor: cpu_vendor,
|
||||
cache_line_size: u32
|
||||
cache_line_size: u32,
|
||||
},
|
||||
_core: struct {
|
||||
model: u32,
|
||||
|
||||
@@ -16,6 +16,7 @@ CLOCK_REALTIME :: clockid_t(2)
|
||||
CLOCK_THREAD_CPUTIME_ID :: clockid_t(3)
|
||||
|
||||
errno_t :: enum u16 {
|
||||
NONE = 0,
|
||||
// No error occurred. System call completed successfully.
|
||||
SUCCESS = 0,
|
||||
// Argument list too long.
|
||||
|
||||
@@ -152,6 +152,43 @@ foreign advapi32 {
|
||||
cbData: DWORD,
|
||||
) -> 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(
|
||||
lpFileName: LPCWSTR,
|
||||
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")
|
||||
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 ---
|
||||
DeleteObject :: proc(ho: HGDIOBJ) -> BOOL ---
|
||||
SetBkColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF ---
|
||||
SetBkMode :: proc(hdc: HDC, mode: BKMODE) -> INT ---
|
||||
|
||||
CreateCompatibleDC :: proc(hdc: HDC) -> HDC ---
|
||||
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 ---
|
||||
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, yDest, DestWidth, DestHeight, xSrc, ySrc, SrcWidth, SrcHeight: INT, lpBits: VOID, lpbmi: ^BITMAPINFO, iUsage: UINT, rop: DWORD) -> INT ---
|
||||
StretchBlt :: proc(hdcDest: HDC, xDest, yDest, wDest, hDest: INT, hdcSrc: HDC, xSrc, ySrc, wSrc, hSrc: INT, rop: DWORD) -> BOOL ---
|
||||
|
||||
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: 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 ---
|
||||
SetPixelFormat :: proc(hdc: HDC, format: INT, ppfd: ^PIXELFORMATDESCRIPTOR) -> BOOL ---
|
||||
ChoosePixelFormat :: proc(hdc: HDC, ppfd: ^PIXELFORMATDESCRIPTOR) -> INT ---
|
||||
DescribePixelFormat :: proc(hdc: HDC, iPixelFormat: INT, nBytes: UINT, ppfd: ^PIXELFORMATDESCRIPTOR) -> INT ---
|
||||
SwapBuffers :: proc(hdc: HDC) -> BOOL ---
|
||||
|
||||
SetDCBrushColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF ---
|
||||
GetDCBrushColor :: proc(hdc: HDC) -> COLORREF ---
|
||||
PatBlt :: proc(hdc: HDC, x, y, w, h: c_int, rop: DWORD) -> BOOL ---
|
||||
Rectangle :: proc(hdc: HDC, left, top, right, bottom: c_int) -> BOOL ---
|
||||
PatBlt :: proc(hdc: HDC, x, y, w, h: INT, rop: DWORD) -> BOOL ---
|
||||
Rectangle :: proc(hdc: HDC, left, top, right, bottom: INT) -> BOOL ---
|
||||
|
||||
CreateFontW :: proc(
|
||||
cHeight, cWidth, cEscapement, cOrientation, cWeight: c_int,
|
||||
bItalic, bUnderline, bStrikeOut, iCharSet, iOutPrecision: DWORD,
|
||||
iClipPrecision, iQuality, iPitchAndFamily: DWORD,
|
||||
pszFaceName: LPCWSTR,
|
||||
) -> HFONT ---
|
||||
TextOutW :: proc(hdc: HDC, x, y: c_int, lpString: LPCWSTR, c: c_int) -> BOOL ---
|
||||
GetTextExtentPoint32W :: proc(hdc: HDC, lpString: LPCWSTR, c: c_int, psizl: LPSIZE) -> BOOL ---
|
||||
CreateFontW :: proc(cHeight, cWidth, cEscapement, cOrientation, cWeight: INT, bItalic, bUnderline, bStrikeOut, iCharSet, iOutPrecision: DWORD, iClipPrecision, iQuality, iPitchAndFamily: DWORD, pszFaceName: LPCWSTR) -> HFONT ---
|
||||
CreateFontIndirectW :: proc(lplf: ^LOGFONTW) -> HFONT ---
|
||||
CreateFontIndirectExW :: proc(unnamedParam1: ^ENUMLOGFONTEXDVW) -> HFONT ---
|
||||
AddFontResourceW :: proc(unnamedParam1: LPCWSTR) -> INT ---
|
||||
AddFontResourceExW :: proc(name: LPCWSTR, fl: DWORD, res: PVOID) -> INT ---
|
||||
AddFontMemResourceEx :: proc(pFileView: PVOID, cjSize: DWORD, pvResrved: PVOID, pNumFonts: ^DWORD) -> HANDLE ---
|
||||
EnumFontsW :: proc(hdc: HDC, lpLogfont: LPCWSTR, lpProc: FONTENUMPROCW, lParam: LPARAM) -> INT ---
|
||||
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 ---
|
||||
|
||||
CreateSolidBrush :: proc(color: COLORREF) -> HBRUSH ---
|
||||
|
||||
GetObjectW :: proc(h: HANDLE, c: c_int, pv: LPVOID) -> int ---
|
||||
CreateCompatibleBitmap :: proc(hdc: HDC, cx, cy: c_int) -> HBITMAP ---
|
||||
BitBlt :: proc(hdc: HDC, x, y, cx, cy: c_int, hdcSrc: HDC, x1, y1: c_int, rop: DWORD) -> BOOL ---
|
||||
GetDIBits :: proc(hdc: HDC, hbm: HBITMAP, start, cLines: UINT, lpvBits: LPVOID, lpbmi: ^BITMAPINFO, usage: UINT) -> int ---
|
||||
GetObjectW :: proc(h: HANDLE, c: INT, pv: LPVOID) -> int ---
|
||||
CreateCompatibleBitmap :: proc(hdc: HDC, cx, cy: INT) -> HBITMAP ---
|
||||
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 ---
|
||||
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 {
|
||||
return transmute(COLORREF)[4]u8{r, g, b, 0}
|
||||
RGB :: #force_inline proc "contextless" (#any_int r, g, b: int) -> COLORREF {
|
||||
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)
|
||||
|
||||
CIEXYZ :: struct {
|
||||
ciexyzX: FXPT2DOT30,
|
||||
ciexyzY: FXPT2DOT30,
|
||||
ciexyzZ: FXPT2DOT30,
|
||||
ciexyzX, ciexyzY, ciexyzZ: FXPT2DOT30,
|
||||
}
|
||||
|
||||
CIEXYZTRIPLE :: struct {
|
||||
ciexyzRed: CIEXYZ,
|
||||
ciexyzGreen: CIEXYZ,
|
||||
ciexyzBlue: CIEXYZ,
|
||||
ciexyzRed, ciexyzGreen, ciexyzBlue: CIEXYZ,
|
||||
}
|
||||
|
||||
// https://learn.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapv5header
|
||||
@@ -138,3 +127,227 @@ BITMAPV5HEADER :: struct {
|
||||
bV5ProfileSize: 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
|
||||
|
||||
@@ -51,18 +51,14 @@ foreign kernel32 {
|
||||
// https://learn.microsoft.com/en-us/windows/console/getnumberofconsoleinputevents
|
||||
GetNumberOfConsoleInputEvents :: proc(hConsoleInput: HANDLE, lpcNumberOfEvents: LPDWORD) -> BOOL ---
|
||||
|
||||
GetConsoleMode :: proc(hConsoleHandle: HANDLE,
|
||||
lpMode: LPDWORD) -> BOOL ---
|
||||
SetConsoleMode :: proc(hConsoleHandle: HANDLE,
|
||||
dwMode: DWORD) -> BOOL ---
|
||||
SetConsoleCursorPosition :: proc(hConsoleHandle: HANDLE,
|
||||
dwCursorPosition: COORD) -> BOOL ---
|
||||
SetConsoleTextAttribute :: proc(hConsoleOutput: HANDLE,
|
||||
wAttributes: WORD) -> BOOL ---
|
||||
GetConsoleCP :: proc() -> UINT ---
|
||||
SetConsoleCP :: proc(wCodePageID: UINT) -> BOOL ---
|
||||
GetConsoleOutputCP :: proc() -> UINT ---
|
||||
SetConsoleOutputCP :: proc(wCodePageID: UINT) -> BOOL ---
|
||||
GetConsoleMode :: proc(hConsoleHandle: HANDLE, lpMode: LPDWORD) -> BOOL ---
|
||||
SetConsoleMode :: proc(hConsoleHandle: HANDLE, dwMode: DWORD) -> BOOL ---
|
||||
SetConsoleCursorPosition :: proc(hConsoleHandle: HANDLE, dwCursorPosition: COORD) -> BOOL ---
|
||||
SetConsoleTextAttribute :: proc(hConsoleOutput: HANDLE, wAttributes: WORD) -> BOOL ---
|
||||
GetConsoleCP :: proc() -> CODEPAGE ---
|
||||
SetConsoleCP :: proc(wCodePageID: CODEPAGE) -> BOOL ---
|
||||
GetConsoleOutputCP :: proc() -> CODEPAGE ---
|
||||
SetConsoleOutputCP :: proc(wCodePageID: CODEPAGE) -> BOOL ---
|
||||
FlushConsoleInputBuffer :: proc(hConsoleInput: HANDLE) -> BOOL ---
|
||||
|
||||
GetFileInformationByHandle :: proc(hFile: HANDLE, lpFileInformation: LPBY_HANDLE_FILE_INFORMATION) -> BOOL ---
|
||||
@@ -256,6 +252,7 @@ foreign kernel32 {
|
||||
SetEnvironmentVariableW :: proc(n: LPCWSTR, v: LPCWSTR) -> BOOL ---
|
||||
GetEnvironmentStringsW :: proc() -> LPWCH ---
|
||||
FreeEnvironmentStringsW :: proc(env_ptr: LPWCH) -> BOOL ---
|
||||
ExpandEnvironmentStringsW :: proc(lpSrc: LPCWSTR, lpDst: LPWSTR, nSize: DWORD) -> DWORD ---
|
||||
GetModuleFileNameW :: proc(hModule: HMODULE, lpFilename: LPWSTR, nSize: DWORD) -> DWORD ---
|
||||
CreateDirectoryW :: proc(
|
||||
lpPathName: LPCWSTR,
|
||||
@@ -440,12 +437,34 @@ foreign kernel32 {
|
||||
GetFileAttributesExW :: proc(lpFileName: LPCWSTR, fInfoLevelId: GET_FILEEX_INFO_LEVELS, lpFileInformation: LPVOID) -> BOOL ---
|
||||
GetSystemInfo :: proc(system_info: ^SYSTEM_INFO) ---
|
||||
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 ---
|
||||
LoadLibraryExW :: proc(c_str: LPCWSTR, hFile: HANDLE, dwFlags: LoadLibraryEx_Flags) -> HMODULE ---
|
||||
FreeLibrary :: proc(h: HMODULE) -> BOOL ---
|
||||
GetProcAddress :: proc(h: HMODULE, c_str: LPCSTR) -> rawptr ---
|
||||
LoadLibraryExW :: proc(c_str: LPCWSTR, file: HANDLE, flags: LoadLibraryEx_Flags) -> HMODULE ---
|
||||
|
||||
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 ---
|
||||
GetLongPathNameW :: proc(short, long: LPCWSTR, len: DWORD) -> DWORD ---
|
||||
|
||||
@@ -23,8 +23,24 @@ foreign ntdll_lib {
|
||||
Length: ULONG,
|
||||
FileInformationClass: FILE_INFORMATION_CLASS,
|
||||
) -> NTSTATUS ---
|
||||
|
||||
NtQueryDirectoryFileEx :: proc(
|
||||
FileHandle: HANDLE,
|
||||
Event: HANDLE,
|
||||
ApcRoutine: PIO_APC_ROUTINE,
|
||||
ApcContext: PVOID,
|
||||
IoStatusBlock: PIO_STATUS_BLOCK,
|
||||
FileInformation: PVOID,
|
||||
Length: ULONG,
|
||||
FileInformationClass: FILE_INFORMATION_CLASS,
|
||||
QueryFlags: ULONG,
|
||||
FileName : PUNICODE_STRING,
|
||||
) -> NTSTATUS ---
|
||||
}
|
||||
|
||||
|
||||
PIO_APC_ROUTINE :: #type proc "system" (ApcContext: rawptr, IoStatusBlock: PIO_STATUS_BLOCK, Reserved: ULONG)
|
||||
|
||||
PIO_STATUS_BLOCK :: ^IO_STATUS_BLOCK
|
||||
IO_STATUS_BLOCK :: struct {
|
||||
using _: struct #raw_union {
|
||||
@@ -45,6 +61,12 @@ PROCESS_INFO_CLASS :: enum c_int {
|
||||
ProcessSubsystemInformation = 75,
|
||||
}
|
||||
|
||||
SL_RESTART_SCAN :: 0x00000001 // The scan will start at the first entry in the directory. If this flag is not set, the scan will resume from where the last query ended.
|
||||
SL_RETURN_SINGLE_ENTRY :: 0x00000002 // Normally the return buffer is packed with as many matching directory entries that fit. If this flag is set, the file system will return only one directory entry at a time. This does make the operation less efficient.
|
||||
SL_INDEX_SPECIFIED :: 0x00000004 // The scan should start at a specified indexed position in the directory. This flag can only be set if you generate your own IRP_MJ_DIRECTORY_CONTROL IRP; the index is specified in the IRP. How the position is specified varies from file system to file system.
|
||||
SL_RETURN_ON_DISK_ENTRIES_ONLY :: 0x00000008 // Any file system filters that perform directory virtualization or just-in-time expansion should simply pass the request through to the file system and return entries that are currently on disk. Not all file systems support this flag.
|
||||
SL_NO_CURSOR_UPDATE_QUERY :: 0x00000010 // File systems maintain per-FileObject directory cursor information. When multiple threads do queries using the same FileObject, access to the per-FileObject structure is single threaded to prevent corruption of the cursor state. This flag tells the file system to not update per-FileObject cursor state information thus allowing multiple threads to query in parallel using the same handle. It behaves as if SL_RESTART_SCAN is specified on each call. If a wild card pattern is given on the next call, the operation will not pick up where the last query ended. This allows for true asynchronous directory query support. If this flag is used inside a TxF transaction the operation will be failed. Not all file systems support this flag.
|
||||
|
||||
|
||||
PFILE_INFORMATION_CLASS :: ^FILE_INFORMATION_CLASS
|
||||
FILE_INFORMATION_CLASS :: enum c_int {
|
||||
@@ -134,6 +156,22 @@ FILE_INFORMATION_CLASS :: enum c_int {
|
||||
FileMaximumInformation,
|
||||
}
|
||||
|
||||
PFILE_ID_FULL_DIR_INFORMATION :: ^FILE_ID_FULL_DIR_INFORMATION
|
||||
FILE_ID_FULL_DIR_INFORMATION :: struct {
|
||||
NextEntryOffset: ULONG,
|
||||
FileIndex: ULONG,
|
||||
CreationTime: LARGE_INTEGER,
|
||||
LastAccessTime: LARGE_INTEGER,
|
||||
LastWriteTime: LARGE_INTEGER,
|
||||
ChangeTime: LARGE_INTEGER,
|
||||
EndOfFile: LARGE_INTEGER,
|
||||
AllocationSize: LARGE_INTEGER,
|
||||
FileAttributes: ULONG,
|
||||
FileNameLength: ULONG,
|
||||
EaSize: ULONG,
|
||||
FileId: LARGE_INTEGER,
|
||||
FileName: [1]WCHAR,
|
||||
}
|
||||
|
||||
|
||||
PROCESS_BASIC_INFORMATION :: struct {
|
||||
|
||||
@@ -40,7 +40,8 @@ LPUNKNOWN :: ^IUnknown
|
||||
|
||||
@(default_calling_convention="system")
|
||||
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() ---
|
||||
|
||||
CoCreateInstance :: proc(
|
||||
@@ -52,4 +53,17 @@ foreign Ole32 {
|
||||
) -> HRESULT ---
|
||||
|
||||
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,
|
||||
}
|
||||
@@ -31,6 +31,7 @@ foreign shell32 {
|
||||
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 ---
|
||||
|
||||
ExtractIconExW :: proc(pszFile: LPCWSTR, nIconIndex: INT, phiconLarge: ^HICON, phiconSmall: ^HICON, nIcons: UINT) -> UINT ---
|
||||
DragAcceptFiles :: proc(hWnd: HWND, fAccept: BOOL) ---
|
||||
DragQueryPoint :: proc(hDrop: HDROP, ppt: ^POINT) -> BOOL ---
|
||||
DragQueryFileW :: proc(hDrop: HDROP, iFile: UINT, lpszFile: LPWSTR, cch: UINT) -> UINT ---
|
||||
|
||||
+121
-4
@@ -30,8 +30,10 @@ HICON :: distinct HANDLE
|
||||
HCURSOR :: distinct HANDLE
|
||||
HMENU :: distinct HANDLE
|
||||
HBRUSH :: distinct HANDLE
|
||||
HPEN :: distinct HANDLE
|
||||
HGDIOBJ :: distinct HANDLE
|
||||
HBITMAP :: distinct HANDLE
|
||||
HPALETTE :: distinct HANDLE
|
||||
HGLOBAL :: distinct HANDLE
|
||||
HHOOK :: distinct HANDLE
|
||||
HWINEVENTHOOK :: distinct HANDLE
|
||||
@@ -39,6 +41,9 @@ HKEY :: distinct HANDLE
|
||||
HDESK :: distinct HANDLE
|
||||
HFONT :: distinct HANDLE
|
||||
HRGN :: distinct HANDLE
|
||||
HRSRC :: distinct HANDLE
|
||||
HWINSTA :: distinct HANDLE
|
||||
HACCEL :: distinct HANDLE
|
||||
BOOL :: distinct b32
|
||||
BYTE :: distinct u8
|
||||
BOOLEAN :: distinct b8
|
||||
@@ -139,11 +144,14 @@ LPSTR :: ^CHAR
|
||||
LPWSTR :: ^WCHAR
|
||||
OLECHAR :: WCHAR
|
||||
LPOLESTR :: ^OLECHAR
|
||||
LPCOLESTR :: LPCSTR
|
||||
LPFILETIME :: ^FILETIME
|
||||
LPWSABUF :: ^WSABUF
|
||||
LPWSAOVERLAPPED :: distinct rawptr
|
||||
LPWSAOVERLAPPED_COMPLETION_ROUTINE :: distinct rawptr
|
||||
LPCVOID :: rawptr
|
||||
SCODE :: LONG
|
||||
PSCODE :: ^SCODE
|
||||
|
||||
PACCESS_TOKEN :: PVOID
|
||||
PSECURITY_DESCRIPTOR :: PVOID
|
||||
@@ -699,6 +707,92 @@ FW_BLACK :: FW_HEAVY
|
||||
|
||||
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)
|
||||
|
||||
WNDPROC :: #type proc "system" (HWND, UINT, WPARAM, LPARAM) -> LRESULT
|
||||
@@ -932,6 +1026,16 @@ MF_RIGHTJUSTIFY :: 0x00004000
|
||||
MF_MOUSESELECT :: 0x00008000
|
||||
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
|
||||
TPM_LEFTBUTTON :: 0x0000
|
||||
TPM_RIGHTBUTTON :: 0x0002
|
||||
@@ -1037,9 +1141,6 @@ WIN32_FIND_DATAW :: struct {
|
||||
dwReserved1: DWORD,
|
||||
cFileName: [MAX_PATH]WCHAR,
|
||||
cAlternateFileName: [14]WCHAR,
|
||||
_OBSOLETE_dwFileType: DWORD, // Obsolete. Do not use.
|
||||
_OBSOLETE_dwCreatorType: DWORD, // Obsolete. Do not use
|
||||
_OBSOLETE_wFinderFlags: WORD, // Obsolete. Do not use
|
||||
}
|
||||
|
||||
FILE_ID_128 :: struct {
|
||||
@@ -2207,6 +2308,14 @@ CP_SYMBOL :: 42 // SYMBOL translations
|
||||
CP_UTF7 :: 65000 // UTF-7 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
|
||||
WC_ERR_INVALID_CHARS :: 128
|
||||
|
||||
@@ -2422,8 +2531,10 @@ REFIID :: ^GUID
|
||||
|
||||
REFGUID :: GUID
|
||||
IID :: GUID
|
||||
LPIID :: ^IID
|
||||
CLSID :: GUID
|
||||
REFCLSID :: ^CLSID
|
||||
LPCLSID :: ^CLSID
|
||||
|
||||
CLSCTX_INPROC_SERVER :: 0x1
|
||||
CLSCTX_INPROC_HANDLER :: 0x2
|
||||
@@ -2453,6 +2564,7 @@ CLSCTX_RESERVED6 :: 0x1000000
|
||||
CLSCTX_ACTIVATE_ARM32_SERVER :: 0x2000000
|
||||
CLSCTX_ALLOW_LOWER_TRUST_REGISTRATION :: 0x4000000
|
||||
CLSCTX_PS_DLL :: 0x80000000
|
||||
CLSCTX_ALL :: CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER
|
||||
|
||||
WSAPROTOCOLCHAIN :: struct {
|
||||
ChainLen: c_int,
|
||||
@@ -2512,6 +2624,7 @@ OBJECT_ATTRIBUTES :: struct {
|
||||
SecurityQualityOfService: rawptr,
|
||||
}
|
||||
|
||||
PUNICODE_STRING :: ^UNICODE_STRING
|
||||
UNICODE_STRING :: struct {
|
||||
Length: u16 `fmt:"-"`,
|
||||
MaximumLength: u16 `fmt:"-"`,
|
||||
@@ -4389,7 +4502,7 @@ DNS_STATUS :: distinct DWORD // zero is success
|
||||
DNS_INFO_NO_RECORDS :: 9501
|
||||
DNS_QUERY_NO_RECURSION :: 0x00000004
|
||||
|
||||
DNS_RECORD :: struct {
|
||||
DNS_RECORD :: struct { // aka DNS_RECORDA
|
||||
pNext: ^DNS_RECORD,
|
||||
pName: cstring,
|
||||
wType: WORD,
|
||||
@@ -4433,6 +4546,10 @@ SOCKADDR :: struct {
|
||||
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
|
||||
|
||||
DTR_Control :: enum byte {
|
||||
Disable = 0,
|
||||
Enable = 1,
|
||||
|
||||
+216
-70
@@ -6,19 +6,18 @@ foreign import user32 "system:User32.lib"
|
||||
|
||||
@(default_calling_convention="system")
|
||||
foreign user32 {
|
||||
GetClassInfoW :: proc(hInstance: HINSTANCE, lpClassNAme: LPCWSTR, lpWndClass: ^WNDCLASSW) -> BOOL ---
|
||||
GetClassInfoExW :: proc(hInsatnce: HINSTANCE, lpszClass: LPCWSTR, lpwcx: ^WNDCLASSEXW) -> BOOL ---
|
||||
GetClassInfoW :: proc(hInstance: HINSTANCE, lpClassName: LPCWSTR, lpWndClass: ^WNDCLASSW) -> BOOL ---
|
||||
GetClassInfoExW :: proc(hInstance: HINSTANCE, lpszClass: LPCWSTR, lpwcx: ^WNDCLASSEXW) -> BOOL ---
|
||||
|
||||
GetClassLongW :: proc(hWnd: HWND, nIndex: c_int) -> DWORD ---
|
||||
SetClassLongW :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG) -> DWORD ---
|
||||
GetClassLongW :: proc(hWnd: HWND, nIndex: INT) -> DWORD ---
|
||||
SetClassLongW :: proc(hWnd: HWND, nIndex: INT, dwNewLong: LONG) -> DWORD ---
|
||||
|
||||
GetWindowLongW :: proc(hWnd: HWND, nIndex: c_int) -> LONG ---
|
||||
SetWindowLongW :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG) -> LONG ---
|
||||
GetWindowLongW :: proc(hWnd: HWND, nIndex: INT) -> 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 ---
|
||||
|
||||
GetParent :: proc(hWnd: HWND) -> HWND ---
|
||||
IsWindowVisible :: proc(hWnd: HWND) -> BOOL ---
|
||||
SetWinEventHook :: proc(
|
||||
eventMin, eventMax: DWORD,
|
||||
hmodWinEventProc: HMODULE,
|
||||
@@ -38,10 +37,7 @@ foreign user32 {
|
||||
lpClassName: LPCWSTR,
|
||||
lpWindowName: LPCWSTR,
|
||||
dwStyle: DWORD,
|
||||
X: c_int,
|
||||
Y: c_int,
|
||||
nWidth: c_int,
|
||||
nHeight: c_int,
|
||||
X, Y, nWidth, nHeight: INT,
|
||||
hWndParent: HWND,
|
||||
hMenu: HMENU,
|
||||
hInstance: HINSTANCE,
|
||||
@@ -50,24 +46,33 @@ foreign user32 {
|
||||
|
||||
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 ---
|
||||
IsWindowVisible :: proc(hwnd: HWND) -> BOOL ---
|
||||
IsWindowEnabled :: proc(hwnd: HWND) -> BOOL ---
|
||||
IsIconic :: proc(hwnd: HWND) -> BOOL ---
|
||||
BringWindowToTop :: proc(hWnd: HWND) -> BOOL ---
|
||||
GetTopWindow :: proc(hWnd: HWND) -> HWND ---
|
||||
SetForegroundWindow :: proc(hWnd: HWND) -> BOOL ---
|
||||
GetForegroundWindow :: proc() -> HWND ---
|
||||
GetDesktopWindow :: proc() -> HWND ---
|
||||
UpdateWindow :: proc(hWnd: HWND) -> BOOL ---
|
||||
SetActiveWindow :: proc(hWnd: HWND) -> HWND ---
|
||||
GetActiveWindow :: proc() -> HWND ---
|
||||
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 ---
|
||||
|
||||
TranslateMessage :: proc(lpMsg: ^MSG) -> BOOL ---
|
||||
DispatchMessageW :: proc(lpMsg: ^MSG) -> LRESULT ---
|
||||
|
||||
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 ---
|
||||
PeekMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL ---
|
||||
@@ -80,7 +85,7 @@ foreign user32 {
|
||||
PostThreadMessageA :: 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 ---
|
||||
|
||||
@@ -94,33 +99,26 @@ foreign user32 {
|
||||
|
||||
LoadIconA :: proc(hInstance: HINSTANCE, lpIconName: LPCSTR) -> HICON ---
|
||||
LoadIconW :: proc(hInstance: HINSTANCE, lpIconName: LPCWSTR) -> HICON ---
|
||||
GetIconInfoExW :: proc(hIcon: HICON, piconinfo: PICONINFOEXW) -> BOOL ---
|
||||
LoadCursorA :: proc(hInstance: HINSTANCE, lpCursorName: LPCSTR) -> 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 ---
|
||||
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 ---
|
||||
|
||||
GetWindowRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL ---
|
||||
GetClientRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL ---
|
||||
ClientToScreen :: proc(hWnd: HWND, lpPoint: LPPOINT) -> BOOL ---
|
||||
ScreenToClient :: proc(hWnd: HWND, lpPoint: LPPOINT) -> BOOL ---
|
||||
SetWindowPos :: proc(
|
||||
hWnd: HWND,
|
||||
hWndInsertAfter: HWND,
|
||||
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 ---
|
||||
SetWindowPos :: proc(hWnd: HWND, hWndInsertAfter: HWND, X, Y, cx, cy: INT, uFlags: UINT) -> BOOL ---
|
||||
MoveWindow :: proc(hWnd: HWND, X, Y, hWidth, hHeight: INT, bRepaint: BOOL) -> BOOL ---
|
||||
GetSystemMetrics :: proc(nIndex: INT) -> INT ---
|
||||
AdjustWindowRect :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL) -> 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 ---
|
||||
@@ -130,18 +128,36 @@ foreign user32 {
|
||||
|
||||
GetWindowDC :: 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 ---
|
||||
GetDlgItem :: proc(hDlg: HWND, nIDDlgItem: c_int) -> HWND ---
|
||||
GetDlgCtrlID :: proc(hWnd: HWND) -> INT ---
|
||||
GetDlgItem :: proc(hDlg: HWND, nIDDlgItem: INT) -> HWND ---
|
||||
|
||||
CreateMenu :: proc() -> HMENU ---
|
||||
CreatePopupMenu :: proc() -> HMENU ---
|
||||
DeleteMenu :: proc(hMenu: HMENU, uPosition: UINT, uFlags: UINT) -> 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 ---
|
||||
GetMenu :: proc(hWnd: HWND) -> HMENU ---
|
||||
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 ---
|
||||
|
||||
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 ---
|
||||
ValidateRect :: proc(hWnd: HWND, lpRect: ^RECT) -> BOOL ---
|
||||
InvalidateRect :: proc(hWnd: HWND, lpRect: ^RECT, bErase: BOOL) -> BOOL ---
|
||||
@@ -154,34 +170,35 @@ foreign user32 {
|
||||
ReleaseCapture :: proc() -> BOOL ---
|
||||
TrackMouseEvent :: proc(lpEventTrack: LPTRACKMOUSEEVENT) -> BOOL ---
|
||||
|
||||
GetKeyState :: proc(nVirtKey: c_int) -> SHORT ---
|
||||
GetAsyncKeyState :: proc(vKey: c_int) -> SHORT ---
|
||||
GetKeyState :: proc(nVirtKey: INT) -> SHORT ---
|
||||
GetAsyncKeyState :: proc(vKey: INT) -> SHORT ---
|
||||
|
||||
GetKeyboardState :: proc(lpKeyState: PBYTE) -> BOOL ---
|
||||
|
||||
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 ---
|
||||
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 ---
|
||||
KillTimer :: proc(hWnd: HWND, uIDEvent: UINT_PTR) -> BOOL ---
|
||||
|
||||
// MessageBoxA :: proc(hWnd: HWND, lpText: LPCSTR, lpCaption: LPCSTR, uType: UINT) -> c_int ---
|
||||
MessageBoxW :: proc(hWnd: HWND, lpText: LPCWSTR, lpCaption: LPCWSTR, uType: UINT) -> c_int ---
|
||||
// MessageBoxExA :: proc(hWnd: HWND, lpText: LPCSTR, lpCaption: LPCSTR, uType: UINT, wLanguageId: WORD) -> c_int ---
|
||||
MessageBoxExW :: proc(hWnd: HWND, lpText: LPCWSTR, lpCaption: LPCWSTR, uType: UINT, wLanguageId: WORD) -> c_int ---
|
||||
// MessageBoxA :: proc(hWnd: HWND, lpText: LPCSTR, lpCaption: LPCSTR, uType: UINT) -> INT ---
|
||||
MessageBoxW :: proc(hWnd: HWND, lpText: LPCWSTR, lpCaption: LPCWSTR, uType: UINT) -> 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) -> INT ---
|
||||
|
||||
ClipCursor :: proc(lpRect: LPRECT) -> 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 ---
|
||||
when !intrinsics.is_package_imported("raylib") {
|
||||
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 ---
|
||||
|
||||
MonitorFromPoint :: proc(pt: POINT, dwFlags: Monitor_From_Flags) -> HMONITOR ---
|
||||
@@ -191,6 +208,9 @@ foreign user32 {
|
||||
|
||||
EnumWindows :: proc(lpEnumFunc: Window_Enum_Proc, lParam: LPARAM) -> BOOL ---
|
||||
|
||||
IsProcessDPIAware :: proc() -> BOOL ---
|
||||
SetProcessDPIAware :: proc() -> BOOL ---
|
||||
|
||||
SetThreadDpiAwarenessContext :: proc(dpiContext: DPI_AWARENESS_CONTEXT) -> DPI_AWARENESS_CONTEXT ---
|
||||
GetThreadDpiAwarenessContext :: proc() -> DPI_AWARENESS_CONTEXT ---
|
||||
GetWindowDpiAwarenessContext :: proc(hwnd: HWND) -> DPI_AWARENESS_CONTEXT ---
|
||||
@@ -225,14 +245,14 @@ foreign user32 {
|
||||
lpdwResult: PDWORD_PTR,
|
||||
) -> LRESULT ---
|
||||
|
||||
GetSysColor :: proc(nIndex: c_int) -> DWORD ---
|
||||
GetSysColorBrush :: proc(nIndex: c_int) -> HBRUSH ---
|
||||
SetSysColors :: proc(cElements: c_int, lpaElements: ^INT, lpaRgbValues: ^COLORREF) -> BOOL ---
|
||||
GetSysColor :: proc(nIndex: INT) -> DWORD ---
|
||||
GetSysColorBrush :: proc(nIndex: INT) -> HBRUSH ---
|
||||
SetSysColors :: proc(cElements: INT, lpaElements: ^INT, lpaRgbValues: ^COLORREF) -> BOOL ---
|
||||
MessageBeep :: proc(uType: UINT) -> BOOL ---
|
||||
|
||||
IsDialogMessageW :: proc(hDlg: HWND, lpMsg: LPMSG) -> BOOL ---
|
||||
GetWindowTextLengthW :: proc(hWnd: HWND) -> c_int ---
|
||||
GetWindowTextW :: proc(hWnd: HWND, lpString: LPWSTR, nMaxCount: c_int) -> c_int ---
|
||||
GetWindowTextLengthW :: proc(hWnd: HWND) -> INT ---
|
||||
GetWindowTextW :: proc(hWnd: HWND, lpString: LPWSTR, nMaxCount: INT) -> INT ---
|
||||
SetWindowTextW :: proc(hWnd: HWND, lpString: LPCWSTR) -> BOOL ---
|
||||
CallWindowProcW :: proc(lpPrevWndFunc: WNDPROC, hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT ---
|
||||
EnableWindow :: proc(hWnd: HWND, bEnable: BOOL) -> BOOL ---
|
||||
@@ -245,12 +265,20 @@ foreign user32 {
|
||||
GetRegisteredRawInputDevices :: proc(pRawInputDevices: PRAWINPUTDEVICE, puiNumDevices: PUINT, cbSize: UINT) -> UINT ---
|
||||
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 ---
|
||||
|
||||
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 ---
|
||||
GetWindowPlacement :: proc(hWnd: HWND, lpwndpl: ^WINDOWPLACEMENT) -> BOOL ---
|
||||
@@ -259,21 +287,34 @@ foreign user32 {
|
||||
CreateRectRgnIndirect :: proc(lprect: ^RECT) -> HRGN ---
|
||||
GetSystemMetricsForDpi :: proc(nIndex: int, dpi: UINT) -> int ---
|
||||
|
||||
GetCursorInfo :: proc(pci: PCURSORINFO) -> BOOL ---
|
||||
|
||||
GetSystemMenu :: proc(hWnd: HWND, bRevert: BOOL) -> HMENU ---
|
||||
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 ---
|
||||
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" (
|
||||
lpClassName: LPCTSTR,
|
||||
lpWindowName: LPCTSTR,
|
||||
dwStyle: DWORD,
|
||||
X: c_int,
|
||||
Y: c_int,
|
||||
nWidth: c_int,
|
||||
nHeight: c_int,
|
||||
X: INT,
|
||||
Y: INT,
|
||||
nWidth: INT,
|
||||
nHeight: INT,
|
||||
hWndParent: HWND,
|
||||
hMenu: HMENU,
|
||||
hInstance: HINSTANCE,
|
||||
@@ -298,11 +339,11 @@ CreateWindowW :: #force_inline proc "system" (
|
||||
when ODIN_ARCH == .amd64 {
|
||||
@(default_calling_convention="system")
|
||||
foreign user32 {
|
||||
GetClassLongPtrW :: proc(hWnd: HWND, nIndex: c_int) -> ULONG_PTR ---
|
||||
SetClassLongPtrW :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG_PTR) -> ULONG_PTR ---
|
||||
GetClassLongPtrW :: proc(hWnd: HWND, nIndex: INT) -> ULONG_PTR ---
|
||||
SetClassLongPtrW :: proc(hWnd: HWND, nIndex: INT, dwNewLong: LONG_PTR) -> ULONG_PTR ---
|
||||
|
||||
GetWindowLongPtrW :: proc(hWnd: HWND, nIndex: c_int) -> LONG_PTR ---
|
||||
SetWindowLongPtrW :: proc(hWnd: HWND, nIndex: c_int, dwNewLong: LONG_PTR) -> LONG_PTR ---
|
||||
GetWindowLongPtrW :: proc(hWnd: HWND, nIndex: INT) -> LONG_PTR ---
|
||||
SetWindowLongPtrW :: proc(hWnd: HWND, nIndex: INT, dwNewLong: LONG_PTR) -> LONG_PTR ---
|
||||
}
|
||||
} else when ODIN_ARCH == .i386 {
|
||||
GetClassLongPtrW :: GetClassLongW
|
||||
@@ -312,8 +353,8 @@ when ODIN_ARCH == .amd64 {
|
||||
SetWindowLongPtrW :: SetWindowLongW
|
||||
}
|
||||
|
||||
GET_SC_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> c_int {
|
||||
return c_int(wParam) & 0xFFF0
|
||||
GET_SC_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> INT {
|
||||
return INT(wParam) & 0xFFF0
|
||||
}
|
||||
|
||||
GET_WHEEL_DELTA_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> c_short {
|
||||
@@ -332,6 +373,10 @@ GET_XBUTTON_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> WORD
|
||||
return HIWORD(cast(DWORD)wParam)
|
||||
}
|
||||
|
||||
GET_RAWINPUT_CODE_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> BYTE {
|
||||
return BYTE(wParam) & 0xFF
|
||||
}
|
||||
|
||||
MAKEINTRESOURCEW :: #force_inline proc "contextless" (#any_int i: int) -> LPWSTR {
|
||||
return cast(LPWSTR)uintptr(WORD(i))
|
||||
}
|
||||
@@ -512,8 +557,8 @@ WINDOWPLACEMENT :: struct {
|
||||
flags: UINT,
|
||||
showCmd: UINT,
|
||||
ptMinPosition: POINT,
|
||||
ptMaxPosition: POINT,
|
||||
rcNormalPosition: RECT,
|
||||
ptMaxPosition: POINT,
|
||||
rcNormalPosition: RECT,
|
||||
}
|
||||
|
||||
WINDOWINFO :: struct {
|
||||
@@ -530,11 +575,20 @@ WINDOWINFO :: struct {
|
||||
}
|
||||
PWINDOWINFO :: ^WINDOWINFO
|
||||
|
||||
CURSORINFO :: struct {
|
||||
cbSize: DWORD,
|
||||
flags: DWORD,
|
||||
hCursor: HCURSOR,
|
||||
ptScreenPos: POINT,
|
||||
}
|
||||
PCURSORINFO :: ^CURSORINFO
|
||||
|
||||
|
||||
DRAWTEXTPARAMS :: struct {
|
||||
cbSize: UINT,
|
||||
iTabLength: int,
|
||||
iLeftMargin: int,
|
||||
iRightMargin: int,
|
||||
iTabLength: INT,
|
||||
iLeftMargin: INT,
|
||||
iRightMargin: INT,
|
||||
uiLengthDrawn: UINT,
|
||||
}
|
||||
PDRAWTEXTPARAMS :: ^DRAWTEXTPARAMS
|
||||
@@ -581,11 +635,103 @@ RedrawWindowFlags :: enum UINT {
|
||||
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
|
||||
|
||||
// OUTOFCONTEXT is the zero value, use {}
|
||||
WinEventFlags :: bit_set[WinEventFlag; DWORD]
|
||||
|
||||
WinEventFlag :: enum DWORD {
|
||||
SKIPOWNTHREAD = 0,
|
||||
SKIPOWNPROCESS = 1,
|
||||
INCONTEXT = 2,
|
||||
SKIPOWNTHREAD = 0,
|
||||
SKIPOWNPROCESS = 1,
|
||||
INCONTEXT = 2,
|
||||
}
|
||||
|
||||
@@ -6,22 +6,79 @@ import "base:intrinsics"
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
// 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 {
|
||||
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 {
|
||||
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 {
|
||||
return x << 8 | y
|
||||
}
|
||||
|
||||
@@ -1,6 +1,189 @@
|
||||
// +build 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
|
||||
NO_ERROR :: 0
|
||||
SEC_E_OK : HRESULT : 0x00000000
|
||||
@@ -42,14 +225,55 @@ ERROR_TIMEOUT : DWORD : 1460
|
||||
ERROR_DATATYPE_MISMATCH : DWORD : 1629
|
||||
ERROR_UNSUPPORTED_TYPE : DWORD : 1630
|
||||
ERROR_NOT_SAME_OBJECT : DWORD : 1656
|
||||
ERROR_PIPE_CONNECTED : DWORD : 0x80070217
|
||||
ERROR_PIPE_CONNECTED : DWORD : 535
|
||||
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 "contextless" (#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 "contextless" (#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 {
|
||||
// The operation completed successfully.
|
||||
SUCCESS = 0x0,
|
||||
|
||||
@@ -270,7 +270,7 @@ LPHWAVEOUT :: ^HWAVEOUT
|
||||
|
||||
// https://learn.microsoft.com/en-us/windows/win32/multimedia/multimedia-timer-structures
|
||||
MMTIME :: struct {
|
||||
wType: UINT,
|
||||
wType: MMTIME_TYPE,
|
||||
u: struct #raw_union {
|
||||
ms: DWORD,
|
||||
sample: DWORD,
|
||||
@@ -292,6 +292,21 @@ MMTIME :: struct {
|
||||
}
|
||||
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
|
||||
MAXERRORLENGTH :: 256
|
||||
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