newport_os 0.2.0

Os abstractions for engine use
#![allow(dead_code)]
#![allow(non_snake_case)]
#![allow(non_camel_case_types)]
#![allow(unused_macros)]

use std::ffi::c_void;

pub type PVOID = *mut c_void;
pub type LPVOID = PVOID;
pub type LPCVOID = *const c_void;

pub type BOOL = u32;
pub type CHAR = u8;
pub type INT = u32;
pub type UINT = u32;

pub type HANDLE = PVOID;
pub type HINSTANCE = HANDLE;
pub type HMODULE = HANDLE;
pub type HWND = HANDLE;
pub type HGLOBAL = HANDLE;
pub type HICON = HANDLE;
pub type HCURSOR = HICON;
pub type HBRUSH = HANDLE;
pub type HMENU = HANDLE;
pub type HMONITOR = HANDLE;

pub type LONG = u32;
pub type PLONG = *mut LONG;

pub type LONGLONG = i64;
pub type ULONGLONG = u64;

pub type LPSTR = *mut i8;
pub type LPCSTR = *const i8;

pub type LPWSTR = *mut i16;
pub type LPCWSTR = *const i16;

pub type WORD = u16;
pub type DWORD = u32;
pub type LPDWORD = *mut DWORD;
pub type PDWORD = LPDWORD;

pub type ULONG_PTR = u64;
pub type LONG_PTR = i64;
pub type UINT_PTR = u64;
pub type DWORD_PTR = DWORD;

pub type FLOAT = f32;
pub type INT64 = i64;
pub type INT32 = u32;
pub type USHORT = u16;

pub type BYTE = u8;
pub type SIZE_T = usize;

pub type HRESULT = LONG;
pub type LRESULT = LONG_PTR;
pub type WPARAM = UINT_PTR;
pub type LPARAM = LONG_PTR;

type ATOM = WORD;

#[macro_export]
macro_rules! MAKEINTRESOURCEA {
	($i:expr) => {
		(($i as WORD) as LONG_PTR) as LPSTR
	};
}

#[allow(overflowing_literals)]
pub const INFINITE: u32 = 0xFFFFFFFF;
pub const GMEM_MOVABLE: u32 = 0x02;
pub const CF_TEXT: u32 = 1;

pub const INVALID_HANDLE_VALUE: HANDLE = (-1 as LONG_PTR) as HANDLE;

#[macro_export]
macro_rules! HIWORD {
	($_dw:expr) => {
		((($_dw as ULONG_PTR) >> 16) & 0xFFFF) as WORD
	};
}

pub const WHEEL_DELTA: u32 = 120;

#[macro_export]
macro_rules! GET_WHEEL_DELTA_WPARAM {
	($wParam:expr) => {
		HIWORD!($wParam) as i16
	};
}

#[repr(C)]
#[derive(Copy, Clone)]
pub struct LARGE_INTEGER_SPLIT {
	pub LowPart: DWORD,
	pub HighPart: LONG,
}

#[repr(C)]
#[derive(Copy, Clone)]
pub union LARGE_INTEGER {
	pub u: LARGE_INTEGER_SPLIT,
	pub QuadPart: LONGLONG,
}
pub type PLARGE_INTEGER = *mut LARGE_INTEGER;

#[repr(C)]
#[derive(Copy, Clone)]
pub struct ULARGE_INTEGER_SPLIT {
	pub LowPart: DWORD,
	pub HighPart: DWORD,
}

#[repr(C)]
#[derive(Copy, Clone)]
pub union ULARGE_INTEGER {
	pub u: ULARGE_INTEGER_SPLIT,
	pub QuadPart: ULONGLONG,
}

#[repr(C)]
#[derive(Copy, Clone, Default, Debug)]
pub struct RECT {
	pub left: LONG,
	pub top: LONG,
	pub right: LONG,
	pub bottom: LONG,
}
pub type LPRECT = *mut RECT;

impl RECT {
	pub fn point_in_rect(&self, p: POINT) -> bool {
		(self.left <= p.x && p.x < self.right) && (self.top <= p.y && p.y < self.bottom)
	}
}

#[repr(C)]
#[derive(Copy, Clone, Default)]
pub struct POINT {
	pub x: LONG,
	pub y: LONG,
}
pub type LPPOINT = *mut POINT;

pub mod comdlg;
pub mod dwmapi;
pub mod kernel32;
pub mod user32;
pub mod uxtheme;

pub use {
	comdlg::*,
	dwmapi::*,
	kernel32::*,
	user32::*,
	uxtheme::*,
};