#define PERL_NO_GET_CONTEXT #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include MODULE = Win32::Unicode::Dir PACKAGE = Win32::Unicode::Dir PROTOTYPES: DISABLE bool create_directory(WCHAR *dirname) CODE: RETVAL = CreateDirectoryW(dirname, NULL); OUTPUT: RETVAL SV* get_current_directory() CODE: WCHAR cur[MAX_PATH]; GetCurrentDirectoryW(sizeof(cur), cur); RETVAL = newSVpvn((char *)cur, wcslen(cur) * sizeof(WCHAR)); OUTPUT: RETVAL bool set_current_directory(WCHAR *dirname) CODE: RETVAL = SetCurrentDirectoryW(dirname); OUTPUT: RETVAL bool remove_directory(WCHAR *dirname) CODE: RETVAL = RemoveDirectoryW(dirname); OUTPUT: RETVAL void find_first_file(SV* self, WCHAR *dirname) CODE: WIN32_FIND_DATAW info; HANDLE handle = FindFirstFileW(dirname, &info); HV* hv = (HV*)SvRV(self); hv_stores(hv, "handle", newSVuv((DWORD)handle)); hv_stores(hv, "first", newSVpvn(info.cFileName, wcslen(info.cFileName) * sizeof(WCHAR))); SV* find_next_file(SV* self) CODE: WIN32_FIND_DATAW info; HV* hv = (HV*)SvRV(self); HANDLE handle = (HANDLE)SvUVx(*hv_fetchs(hv, "handle", 1)); if(FindNextFileW(handle, &info) == 0) { XSRETURN_EMPTY; } RETVAL = newSVpvn((char *)info.cFileName, wcslen(info.cFileName) * sizeof(WCHAR)); OUTPUT: RETVAL bool find_close(SV* self) CODE: HV* hv = (HV*)SvRV(self); HANDLE handle = (HANDLE)SvUVx(*hv_fetchs(hv, "handle", 1)); RETVAL = FindClose(handle); OUTPUT: RETVAL