mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-13 01:21:38 -07:00
61fcfd6f3d
Missing stuff in records, procedures, and tuples
402 lines
9.2 KiB
Odin
402 lines
9.2 KiB
Odin
#foreign_system_library "user32"
|
|
#foreign_system_library "gdi32"
|
|
|
|
CS_VREDRAW :: 1
|
|
CS_HREDRAW :: 2
|
|
CW_USEDEFAULT :: 0x80000000
|
|
|
|
WS_OVERLAPPED :: 0
|
|
WS_MAXIMIZEBOX :: 0x00010000
|
|
WS_MINIMIZEBOX :: 0x00020000
|
|
WS_THICKFRAME :: 0x00040000
|
|
WS_SYSMENU :: 0x00080000
|
|
WS_CAPTION :: 0x00C00000
|
|
WS_VISIBLE :: 0x10000000
|
|
WS_OVERLAPPEDWINDOW :: WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX
|
|
|
|
WM_DESTROY :: 0x02
|
|
WM_CLOSE :: 0x10
|
|
WM_QUIT :: 0x12
|
|
|
|
PM_REMOVE :: 1
|
|
|
|
COLOR_BACKGROUND :: 1 as HBRUSH
|
|
|
|
|
|
HANDLE :: type rawptr
|
|
HWND :: type HANDLE
|
|
HDC :: type HANDLE
|
|
HINSTANCE :: type HANDLE
|
|
HICON :: type HANDLE
|
|
HCURSOR :: type HANDLE
|
|
HMENU :: type HANDLE
|
|
HBRUSH :: type HANDLE
|
|
WPARAM :: type uint
|
|
LPARAM :: type int
|
|
LRESULT :: type int
|
|
ATOM :: type i16
|
|
BOOL :: type i32
|
|
POINT :: type struct { x, y: i32 }
|
|
|
|
INVALID_HANDLE_VALUE :: (-1 as int) as HANDLE
|
|
|
|
WNDPROC :: type proc(hwnd: HWND, msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT
|
|
|
|
WNDCLASSEXA :: struct {
|
|
size, style: u32
|
|
wnd_proc: WNDPROC
|
|
cls_extra, wnd_extra: i32
|
|
instance: HINSTANCE
|
|
icon: HICON
|
|
cursor: HCURSOR
|
|
background: HBRUSH
|
|
menu_name, class_name: ^u8
|
|
sm: HICON
|
|
}
|
|
|
|
MSG :: struct {
|
|
hwnd: HWND
|
|
message: u32
|
|
wparam: WPARAM
|
|
lparam: LPARAM
|
|
time: u32
|
|
pt: POINT
|
|
}
|
|
|
|
|
|
|
|
GetLastError :: proc() -> i32 #foreign
|
|
ExitProcess :: proc(exit_code: u32) #foreign
|
|
GetDesktopWindow :: proc() -> HWND #foreign
|
|
GetCursorPos :: proc(p: ^POINT) -> i32 #foreign
|
|
ScreenToClient :: proc(h: HWND, p: ^POINT) -> i32 #foreign
|
|
|
|
GetModuleHandleA :: proc(module_name: ^u8) -> HINSTANCE #foreign
|
|
|
|
QueryPerformanceFrequency :: proc(result: ^i64) -> i32 #foreign
|
|
QueryPerformanceCounter :: proc(result: ^i64) -> i32 #foreign
|
|
|
|
sleep_ms :: proc(ms: i32) {
|
|
Sleep :: proc(ms: i32) -> i32 #foreign
|
|
Sleep(ms)
|
|
}
|
|
|
|
OutputDebugStringA :: proc(c_str: ^u8) #foreign
|
|
|
|
|
|
RegisterClassExA :: proc(wc: ^WNDCLASSEXA) -> ATOM #foreign
|
|
CreateWindowExA :: proc(ex_style: u32,
|
|
class_name, title: ^u8,
|
|
style: u32,
|
|
x, y: u32,
|
|
w, h: i32,
|
|
parent: HWND, menu: HMENU, instance: HINSTANCE,
|
|
param: rawptr) -> HWND #foreign
|
|
|
|
ShowWindow :: proc(hwnd: HWND, cmd_show: i32) -> BOOL #foreign
|
|
UpdateWindow :: proc(hwnd: HWND) -> BOOL #foreign
|
|
PeekMessageA :: proc(msg: ^MSG, hwnd: HWND,
|
|
msg_filter_min, msg_filter_max, remove_msg: u32) -> BOOL #foreign
|
|
TranslateMessage :: proc(msg: ^MSG) -> BOOL #foreign
|
|
DispatchMessageA :: proc(msg: ^MSG) -> LRESULT #foreign
|
|
|
|
DefWindowProcA :: proc(hwnd: HWND, msg: u32, wparam: WPARAM, lparam: LPARAM) -> LRESULT #foreign
|
|
|
|
|
|
|
|
GetQueryPerformanceFrequency :: proc() -> i64 {
|
|
r: i64
|
|
_ = QueryPerformanceFrequency(^r)
|
|
return r
|
|
}
|
|
|
|
GetCommandLineA :: proc() -> ^u8 #foreign
|
|
|
|
|
|
|
|
// File Stuff
|
|
|
|
CloseHandle :: proc(h: HANDLE) -> i32 #foreign
|
|
GetStdHandle :: proc(h: i32) -> HANDLE #foreign
|
|
CreateFileA :: proc(filename: ^u8, desired_access, share_mode: u32,
|
|
security: rawptr,
|
|
creation, flags_and_attribs: u32, template_file: HANDLE) -> HANDLE #foreign
|
|
ReadFile :: proc(h: HANDLE, buf: rawptr, to_read: u32, bytes_read: ^i32, overlapped: rawptr) -> BOOL #foreign
|
|
WriteFile :: proc(h: HANDLE, buf: rawptr, len: i32, written_result: ^i32, overlapped: rawptr) -> i32 #foreign
|
|
|
|
GetFileSizeEx :: proc(file_handle: HANDLE, file_size: ^i64) -> BOOL #foreign
|
|
|
|
FILE_SHARE_READ :: 0x00000001
|
|
FILE_SHARE_WRITE :: 0x00000002
|
|
FILE_SHARE_DELETE :: 0x00000004
|
|
FILE_GENERIC_ALL :: 0x10000000
|
|
FILE_GENERIC_EXECUTE :: 0x20000000
|
|
FILE_GENERIC_WRITE :: 0x40000000
|
|
FILE_GENERIC_READ :: 0x80000000
|
|
|
|
STD_INPUT_HANDLE :: -10
|
|
STD_OUTPUT_HANDLE :: -11
|
|
STD_ERROR_HANDLE :: -12
|
|
|
|
CREATE_NEW :: 1
|
|
CREATE_ALWAYS :: 2
|
|
OPEN_EXISTING :: 3
|
|
OPEN_ALWAYS :: 4
|
|
TRUNCATE_EXISTING :: 5
|
|
|
|
|
|
HeapAlloc :: proc(h: HANDLE, flags: u32, bytes: int) -> rawptr #foreign
|
|
HeapFree :: proc(h: HANDLE, flags: u32, memory: rawptr) -> BOOL #foreign
|
|
GetProcessHeap :: proc() -> HANDLE #foreign
|
|
|
|
HEAP_ZERO_MEMORY :: 0x00000008
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Windows OpenGL
|
|
|
|
PFD_TYPE_RGBA :: 0
|
|
PFD_TYPE_COLORINDEX :: 1
|
|
PFD_MAIN_PLANE :: 0
|
|
PFD_OVERLAY_PLANE :: 1
|
|
PFD_UNDERLAY_PLANE :: -1
|
|
PFD_DOUBLEBUFFER :: 1
|
|
PFD_STEREO :: 2
|
|
PFD_DRAW_TO_WINDOW :: 4
|
|
PFD_DRAW_TO_BITMAP :: 8
|
|
PFD_SUPPORT_GDI :: 16
|
|
PFD_SUPPORT_OPENGL :: 32
|
|
PFD_GENERIC_FORMAT :: 64
|
|
PFD_NEED_PALETTE :: 128
|
|
PFD_NEED_SYSTEM_PALETTE :: 0x00000100
|
|
PFD_SWAP_EXCHANGE :: 0x00000200
|
|
PFD_SWAP_COPY :: 0x00000400
|
|
PFD_SWAP_LAYER_BUFFERS :: 0x00000800
|
|
PFD_GENERIC_ACCELERATED :: 0x00001000
|
|
PFD_DEPTH_DONTCARE :: 0x20000000
|
|
PFD_DOUBLEBUFFER_DONTCARE :: 0x40000000
|
|
PFD_STEREO_DONTCARE :: 0x80000000
|
|
|
|
HGLRC :: type HANDLE
|
|
PROC :: type proc()
|
|
wglCreateContextAttribsARBType :: type proc(hdc: HDC, hshareContext: rawptr, attribList: ^i32) -> HGLRC
|
|
|
|
|
|
PIXELFORMATDESCRIPTOR :: struct {
|
|
size,
|
|
version,
|
|
flags: u32
|
|
|
|
pixel_type,
|
|
color_bits,
|
|
red_bits,
|
|
red_shift,
|
|
green_bits,
|
|
green_shift,
|
|
blue_bits,
|
|
blue_shift,
|
|
alpha_bits,
|
|
alpha_shift,
|
|
accum_bits,
|
|
accum_red_bits,
|
|
accum_green_bits,
|
|
accum_blue_bits,
|
|
accum_alpha_bits,
|
|
depth_bits,
|
|
stencil_bits,
|
|
aux_buffers,
|
|
layer_type,
|
|
reserved: byte
|
|
|
|
layer_mask,
|
|
visible_mask,
|
|
damage_mask: u32
|
|
}
|
|
|
|
GetDC :: proc(h: HANDLE) -> HDC #foreign
|
|
SetPixelFormat :: proc(hdc: HDC, pixel_format: i32, pfd: ^PIXELFORMATDESCRIPTOR ) -> BOOL #foreign
|
|
ChoosePixelFormat :: proc(hdc: HDC, pfd: ^PIXELFORMATDESCRIPTOR) -> i32 #foreign
|
|
SwapBuffers :: proc(hdc: HDC) -> BOOL #foreign
|
|
|
|
|
|
WGL_CONTEXT_MAJOR_VERSION_ARB :: 0x2091
|
|
WGL_CONTEXT_MINOR_VERSION_ARB :: 0x2092
|
|
WGL_CONTEXT_PROFILE_MASK_ARB :: 0x9126
|
|
WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB :: 0x0002
|
|
|
|
wglCreateContext :: proc(hdc: HDC) -> HGLRC #foreign
|
|
wglMakeCurrent :: proc(hdc: HDC, hglrc: HGLRC) -> BOOL #foreign
|
|
wglGetProcAddress :: proc(c_str: ^u8) -> PROC #foreign
|
|
wglDeleteContext :: proc(hglrc: HGLRC) -> BOOL #foreign
|
|
|
|
|
|
|
|
GetAsyncKeyState :: proc(v_key: i32) -> i16 #foreign
|
|
|
|
is_key_down :: proc(key: int) -> bool {
|
|
return GetAsyncKeyState(key as i32) < 0
|
|
}
|
|
|
|
|
|
VK_LBUTTON :: 0x01
|
|
VK_RBUTTON :: 0x02
|
|
VK_CANCEL :: 0x03
|
|
VK_MBUTTON :: 0x04
|
|
|
|
VK_BACK :: 0x08
|
|
VK_TAB :: 0x09
|
|
|
|
VK_CLEAR :: 0x0C
|
|
VK_RETURN :: 0x0D
|
|
|
|
VK_SHIFT :: 0x10
|
|
VK_CONTROL :: 0x11
|
|
VK_MENU :: 0x12
|
|
VK_PAUSE :: 0x13
|
|
VK_CAPITAL :: 0x14
|
|
|
|
VK_KANA :: 0x15
|
|
VK_HANGEUL :: 0x15
|
|
VK_HANGUL :: 0x15
|
|
VK_JUNJA :: 0x17
|
|
VK_FINAL :: 0x18
|
|
VK_HANJA :: 0x19
|
|
VK_KANJI :: 0x19
|
|
|
|
VK_ESCAPE :: 0x1B
|
|
|
|
VK_CONVERT :: 0x1C
|
|
VK_NONCONVERT :: 0x1D
|
|
VK_ACCEPT :: 0x1E
|
|
VK_MODECHANGE :: 0x1F
|
|
|
|
VK_SPACE :: 0x20
|
|
VK_PRIOR :: 0x21
|
|
VK_NEXT :: 0x22
|
|
VK_END :: 0x23
|
|
VK_HOME :: 0x24
|
|
VK_LEFT :: 0x25
|
|
VK_UP :: 0x26
|
|
VK_RIGHT :: 0x27
|
|
VK_DOWN :: 0x28
|
|
VK_SELECT :: 0x29
|
|
VK_PRINT :: 0x2A
|
|
VK_EXECUTE :: 0x2B
|
|
VK_SNAPSHOT :: 0x2C
|
|
VK_INSERT :: 0x2D
|
|
VK_DELETE :: 0x2E
|
|
VK_HELP :: 0x2F
|
|
|
|
VK_0 :: #rune "0"
|
|
VK_1 :: #rune "1"
|
|
VK_2 :: #rune "2"
|
|
VK_3 :: #rune "3"
|
|
VK_4 :: #rune "4"
|
|
VK_5 :: #rune "5"
|
|
VK_6 :: #rune "6"
|
|
VK_7 :: #rune "7"
|
|
VK_8 :: #rune "8"
|
|
VK_9 :: #rune "9"
|
|
|
|
VK_A :: #rune "A"
|
|
VK_B :: #rune "B"
|
|
VK_C :: #rune "C"
|
|
VK_D :: #rune "D"
|
|
VK_E :: #rune "E"
|
|
VK_F :: #rune "F"
|
|
VK_G :: #rune "G"
|
|
VK_H :: #rune "H"
|
|
VK_I :: #rune "I"
|
|
VK_J :: #rune "J"
|
|
VK_K :: #rune "K"
|
|
VK_L :: #rune "L"
|
|
VK_M :: #rune "M"
|
|
VK_N :: #rune "N"
|
|
VK_O :: #rune "O"
|
|
VK_P :: #rune "P"
|
|
VK_Q :: #rune "Q"
|
|
VK_R :: #rune "R"
|
|
VK_S :: #rune "S"
|
|
VK_T :: #rune "T"
|
|
VK_U :: #rune "U"
|
|
VK_V :: #rune "V"
|
|
VK_W :: #rune "W"
|
|
VK_X :: #rune "X"
|
|
VK_Y :: #rune "Y"
|
|
VK_Z :: #rune "Z"
|
|
|
|
VK_LWIN :: 0x5B
|
|
VK_RWIN :: 0x5C
|
|
VK_APPS :: 0x5D
|
|
|
|
VK_NUMPAD0 :: 0x60
|
|
VK_NUMPAD1 :: 0x61
|
|
VK_NUMPAD2 :: 0x62
|
|
VK_NUMPAD3 :: 0x63
|
|
VK_NUMPAD4 :: 0x64
|
|
VK_NUMPAD5 :: 0x65
|
|
VK_NUMPAD6 :: 0x66
|
|
VK_NUMPAD7 :: 0x67
|
|
VK_NUMPAD8 :: 0x68
|
|
VK_NUMPAD9 :: 0x69
|
|
VK_MULTIPLY :: 0x6A
|
|
VK_ADD :: 0x6B
|
|
VK_SEPARATOR :: 0x6C
|
|
VK_SUBTRACT :: 0x6D
|
|
VK_DECIMAL :: 0x6E
|
|
VK_DIVIDE :: 0x6F
|
|
VK_F1 :: 0x70
|
|
VK_F2 :: 0x71
|
|
VK_F3 :: 0x72
|
|
VK_F4 :: 0x73
|
|
VK_F5 :: 0x74
|
|
VK_F6 :: 0x75
|
|
VK_F7 :: 0x76
|
|
VK_F8 :: 0x77
|
|
VK_F9 :: 0x78
|
|
VK_F10 :: 0x79
|
|
VK_F11 :: 0x7A
|
|
VK_F12 :: 0x7B
|
|
VK_F13 :: 0x7C
|
|
VK_F14 :: 0x7D
|
|
VK_F15 :: 0x7E
|
|
VK_F16 :: 0x7F
|
|
VK_F17 :: 0x80
|
|
VK_F18 :: 0x81
|
|
VK_F19 :: 0x82
|
|
VK_F20 :: 0x83
|
|
VK_F21 :: 0x84
|
|
VK_F22 :: 0x85
|
|
VK_F23 :: 0x86
|
|
VK_F24 :: 0x87
|
|
|
|
VK_NUMLOCK :: 0x90
|
|
VK_SCROLL :: 0x91
|
|
|
|
VK_LSHIFT :: 0xA0
|
|
VK_RSHIFT :: 0xA1
|
|
VK_LCONTROL :: 0xA2
|
|
VK_RCONTROL :: 0xA3
|
|
VK_LMENU :: 0xA4
|
|
VK_RMENU :: 0xA5
|
|
VK_PROCESSKEY :: 0xE5
|
|
VK_ATTN :: 0xF6
|
|
VK_CRSEL :: 0xF7
|
|
VK_EXSEL :: 0xF8
|
|
VK_EREOF :: 0xF9
|
|
VK_PLAY :: 0xFA
|
|
VK_ZOOM :: 0xFB
|
|
VK_NONAME :: 0xFC
|
|
VK_PA1 :: 0xFD
|
|
VK_OEM_CLEAR :: 0xFE
|
|
|