from ctypes import *
from ctypes.util import find_library


CHAR = c_byte
BYTE = c_ubyte
SHORT = c_short
WORD = c_ushort
INT = c_int
UINT = c_uint
LONG = c_int
DWORD = c_uint
DOUBLE = c_double
BOOL = c_int
PBOOL = POINTER(c_bool)
PBYTE = POINTER(c_ubyte)
PSHORT = POINTER(c_short)
PWORD = POINTER(c_ushort)
PLONG = POINTER(c_int)
PDWORD = POINTER(c_uint)
PDOUBLE = POINTER(c_double)
PVOID = c_void_p
PSTR = c_char_p

FALSE = 0
TRUE = 1

HANDLE = c_void_p
HWND = c_int
PCHAR = POINTER(c_byte)
PCSTR = c_char_p
PHWND = POINTER(c_int)

VOID = None


GTDioLib = WinDLL(find_library("GtDio32"))

'''****************************************************************
        GTDio Functions
****************************************************************'''

#Void WINAPI DioInitialize(SHORT nMasterNum, PSHORT pnMasterHandle, PSHORT pnStatus)
DioInitialize = GTDioLib.DioInitialize
DioInitialize.restype=VOID
DioInitialize.argtypes=[SHORT, PSHORT, PSHORT]

#Void WINAPI DioInitialize(PSTR pszSummary, SHORT nCount, PDWORD Version)
DioGetDriverSummary = GTDioLib.DioGetDriverSummary
DioGetDriverSummary.restype=VOID
DioGetDriverSummary.argtypes=[PSTR, SHORT, PDWORD]

#Declaring Variables
nCount=c_short(256)
sSummary=create_string_buffer(nCount.value)
pdwVersion=c_uint()
DioGetDriverSummary(sSummary, nCount, byref(pdwVersion))

print (sSummary.value)
print (nCount.value)
print (f'{sSummary.value}, major={pdwVersion.value>>16}, minor={pdwVersion.value and 0xFFFF}')
