// Copyright © 2015, Peter Atashian
// Licensed under the MIT License <LICENSE.md>
//! Basic Windows Type Definitions for minwin partition
pub type ULONG = ::c_ulong;
pub type PULONG = *mut ULONG;
pub type USHORT = ::c_ushort;
pub type PUSHORT = *mut USHORT;
pub type UCHAR = ::c_uchar;
pub type PUCHAR = *mut UCHAR;
pub type PSZ = *mut ::c_char;
pub const MAX_PATH: usize = 260;
pub const FALSE: BOOL = 0;
pub const TRUE: BOOL = 1;
pub type DWORD = ::c_ulong;
pub type BOOL = ::c_int;
pub type BYTE = ::c_uchar;
pub type WORD = ::c_ushort;
pub type FLOAT = ::c_float;
pub type PFLOAT = *mut FLOAT;
pub type PBOOL = *mut BOOL;
pub type LPBOOL = *mut BOOL;
pub type PBYTE = *mut BYTE;
pub type LPBYTE = *mut BYTE;
pub type PINT = *mut ::c_int;
pub type LPINT = *mut ::c_int;
pub type PWORD = *mut WORD;
pub type LPWORD = *mut WORD;
pub type LPLONG = *mut ::c_long;
pub type PDWORD = *mut DWORD;
pub type LPDWORD = *mut DWORD;
pub type LPVOID = *mut ::c_void;
pub type LPCVOID = *const ::c_void;
pub type INT = ::c_int;
pub type UINT = ::c_uint;
pub type PUINT = *mut ::c_uint;
pub type WPARAM = ::UINT_PTR;
pub type LPARAM = ::LONG_PTR;
pub type LRESULT = ::LONG_PTR;
pub fn MAKEWORD(a: BYTE, b: BYTE) -> WORD {
    (a as WORD) | ((b as WORD) << 8)
}
pub fn MAKELONG(a: WORD, b: WORD) -> ::LONG {
    ((a as DWORD) | ((b as DWORD) << 16)) as ::LONG
}
pub fn LOWORD(l: DWORD) -> WORD {
    (l & 0xffff) as WORD
}
pub fn HIWORD(l: DWORD) -> WORD {
    ((l >> 16) & 0xffff) as WORD
}
pub fn LOBYTE(l: WORD) -> BYTE {
    (l & 0xff) as BYTE
}
pub fn HIBYTE(l: WORD) -> BYTE {
    ((l >> 8) & 0xff) as BYTE
}
pub type SPHANDLE = *mut ::HANDLE;
pub type LPHANDLE = *mut ::HANDLE;
pub type HGLOBAL = ::HANDLE;
pub type HLOCAL = ::HANDLE;
pub type GLOBALHANDLE = ::HANDLE;
pub type LOCALHANDLE = ::HANDLE;
/// Pointer to probably a function with unknown type signature.
pub type FARPROC = *const ::c_void;
/// Pointer to probably a function with unknown type signature.
pub type NEARPROC = *const ::c_void;
/// Pointer to probably a function with unknown type signature.
pub type PROC = *const ::c_void;
pub type ATOM = WORD;
DECLARE_HANDLE!(HKEY, HKEY__);
pub type PHKEY = *mut HKEY;
DECLARE_HANDLE!(HMETAFILE, HMETAFILE__);
DECLARE_HANDLE!(HINSTANCE, HINSTANCE__);
pub type HMODULE = HINSTANCE;
DECLARE_HANDLE!(HRGN, HRGN__);
DECLARE_HANDLE!(HRSRC, HRSRC__);
DECLARE_HANDLE!(HSPRITE, HSPRITE__);
DECLARE_HANDLE!(HLSURF, HLSURF__);
DECLARE_HANDLE!(HSTR, HSTR__);
DECLARE_HANDLE!(HTASK, HTASK__);
DECLARE_HANDLE!(HWINSTA, HWINSTA__);
DECLARE_HANDLE!(HKL, HKL__);
pub type HFILE = ::c_int;
STRUCT!{struct FILETIME {
    dwLowDateTime: DWORD,
    dwHighDateTime: DWORD,
}}
pub type PFILETIME = *mut FILETIME;
pub type LPFILETIME = *mut FILETIME;
