require 'dl/struct'
require 'dl/import'
module WININET
extend DL::Importable
dlload('winInet.dll')
typealias('BOOL', 'unsigned int')
typealias('DWORD', 'unsigned long')
typealias('LPSTR', 'char *')
typealias('INTERNET_SCHEME', 'int')
typealias('INTERNET_PORT', 'unsigned short')
UrlComponent_t = struct ["DWORD dwStructSize",
"LPSTR lpszScheme",
"DWORD dwSchemeLength",
"INTERNET_SCHEME nScheme",
"LPSTR lpszHostName",
"DWORD dwHostNameLength",
"INTERNET_PORT nPort",
"LPSTR lpszUserName",
"DWORD dwUserNameLength",
"LPSTR lpszPassword",
"DWORD dwPasswordLength",
"LPSTR lpszUrlPath",
"DWORD dwUrlPathLength",
"LPSTR lpszExtraInfo",
"DWORD dwExtraInfoLength"]
extern('BOOL InternetCrackUrl(const char *, DWORD, DWORD, void *)')
end
uc = WININET::UrlComponent_t.malloc
uc.dwStructSize = uc.size
uc.lpszScheme = "\0" * 100
uc.dwSchemeLength = 100
uc.nScheme = 0
uc.lpszHostName = "\0" * 100
uc.dwHostNameLength = 100
uc.nPort = 0
uc.lpszUserName = "\0" * 100
uc.dwUserNameLength = 100
uc.lpszPassword = "\0" * 100
uc.dwPasswordLength = 100
uc.lpszUrlPath = "\0" * 100
uc.dwUrlPathLength = 100
uc.lpszExtraInfo = "\0" * 100
uc.dwExtraInfoLength = 100
p WININET::internetCrackUrl("http://localhost/test", 0, 0, uc)
print uc.lpszScheme