merge commit

This commit is contained in:
jason
2024-08-07 23:27:45 -04:00
148 changed files with 9509 additions and 2602 deletions
@@ -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)
}
+1 -1
View File
@@ -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,
+1
View File
@@ -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.
+37
View File
@@ -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,
+298
View File
@@ -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
View File
@@ -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
+33 -14
View File
@@ -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 ---
+38
View File
@@ -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 {
+15 -1
View File
@@ -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 ---
}
+25
View File
@@ -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,
}
+1
View File
@@ -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
View File
@@ -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
View File
@@ -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,
}
+59 -2
View File
@@ -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
}
+227 -3
View File
@@ -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,
+16 -1
View File
@@ -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
+31
View File
@@ -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
+92
View File
@@ -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,
}