--- np2/wince/dosio.cpp 2004/06/20 02:57:47 1.6 +++ np2/wince/dosio.cpp 2004/06/20 04:32:18 1.7 @@ -5,11 +5,15 @@ static OEMCHAR curpath[MAX_PATH]; static OEMCHAR *curfilep = curpath; -// #define ISKANJI(c) (((((c) ^ 0x20) - 0xa1) & 0xff) < 0x3c) -#if defined(UNICODE) +// ---- -static HANDLE CreateFile_A(LPCSTR lpFileName, +void dosio_init(void) { } +void dosio_term(void) { } + + // ファイル操作 +#if defined(UNICODE) && defined(OSLANG_SJIS) +static HANDLE _CreateFile(const OEMCHAR *lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, @@ -17,103 +21,43 @@ static HANDLE CreateFile_A(LPCSTR lpFile DWORD dwFlagsAndAttributes, HANDLE hTemplateFile) { - UINT16 FileNameW[MAX_PATH]; + UINT16 ucs2[MAX_PATH]; -#if defined(OSLANG_SJIS) MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpFileName, -1, - FileNameW, sizeof(FileNameW)/sizeof(UINT16)); -#else - ucscnv_utf8toucs2(FileNameW, sizeof(FileNameW)/sizeof(UINT16), - lpFileName, (UINT)-1); -#endif - return(CreateFile(FileNameW, dwDesiredAccess, dwShareMode, + ucs2, NELEMENTS(ucs2)); + return(CreateFile(ucs2, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile)); } +#elif defined(OSLANG_UTF8) +static HANDLE _CreateFile(const OEMCHAR *lpFileName, + DWORD dwDesiredAccess, + DWORD dwShareMode, + LPSECURITY_ATTRIBUTES lpSecurityAttributes, + DWORD dwCreationDisposition, + DWORD dwFlagsAndAttributes, + HANDLE hTemplateFile) { -static inline BOOL DeleteFile_A(LPCSTR lpFileName) { - - UINT16 FileNameW[MAX_PATH]; - -#if defined(OSLANG_SJIS) - MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpFileName, -1, - FileNameW, sizeof(FileNameW)/sizeof(UINT16)); -#else - ucscnv_utf8toucs2(FileNameW, sizeof(FileNameW)/sizeof(UINT16), - lpFileName, (UINT)-1); -#endif - return(DeleteFile(FileNameW)); -} - -static inline DWORD GetFileAttributes_A(LPCSTR lpFileName) { - - UINT16 FileNameW[MAX_PATH]; - -#if defined(OSLANG_SJIS) - MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpFileName, -1, - FileNameW, sizeof(FileNameW)/sizeof(UINT16)); -#else - ucscnv_utf8toucs2(FileNameW, sizeof(FileNameW)/sizeof(UINT16), - lpFileName, (UINT)-1); -#endif - return(GetFileAttributes(FileNameW)); -} - -static inline BOOL CreateDirectory_A(LPCSTR lpFileName, - LPSECURITY_ATTRIBUTES atr) { - - UINT16 FileNameW[MAX_PATH]; - -#if defined(OSLANG_SJIS) - MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpFileName, -1, - FileNameW, sizeof(FileNameW)/sizeof(UINT16)); -#else - ucscnv_utf8toucs2(FileNameW, sizeof(FileNameW)/sizeof(UINT16), - lpFileName, (UINT)-1); -#endif - return(CreateDirectory(FileNameW, atr)); -} - -static inline HANDLE FindFirstFile_A(LPCSTR lpFileName, - WIN32_FIND_DATA *w32fd) { - - UINT16 FileNameW[MAX_PATH]; + UINT16 ucs2[MAX_PATH]; -#if defined(OSLANG_SJIS) - MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpFileName, -1, - FileNameW, sizeof(FileNameW)/sizeof(UINT16)); -#else - ucscnv_utf8toucs2(FileNameW, sizeof(FileNameW)/sizeof(UINT16), - lpFileName, (UINT)-1); -#endif - return(FindFirstFile(FileNameW, w32fd)); + ucscnv_utf8toucs2(ucs2, NELEMENTS(ucs2), lpFileName, (UINT)-1); + return(CreateFile(ucs2, dwDesiredAccess, dwShareMode, + lpSecurityAttributes, dwCreationDisposition, + dwFlagsAndAttributes, hTemplateFile)); } #else - -#define CreateFile_A(a, b, c, d, e, f, g) \ - CreateFile(a, b, c, d, e, f, g) -#define DeleteFile_A(a) DeleteFile(a) -#define GetFileAttributes_A(a) GetFileAttributes(a) -#define CreateDirectory_A(a, b) CreateDirectory(a, b) -#define FindFirstFile_A(a, b) FindFirstFile(a, b) - +#define _CreateFile(a, b, c, d, e, f, g) CreateFile(a, b, c, d, e, f, g) #endif -// ---- - -void dosio_init(void) { } -void dosio_term(void) { } - - // ファイル操作 -FILEH file_open(const char *path) { +FILEH file_open(const OEMCHAR *path) { FILEH ret; - if ((ret = CreateFile_A(path, GENERIC_READ | GENERIC_WRITE, + if ((ret = _CreateFile(path, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { - if ((ret = CreateFile_A(path, GENERIC_READ, + if ((ret = _CreateFile(path, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { return(FILEH_INVALID); @@ -122,11 +66,11 @@ FILEH file_open(const char *path) { return(ret); } -FILEH file_open_rb(const char *path) { +FILEH file_open_rb(const OEMCHAR *path) { FILEH ret; - if ((ret = CreateFile_A(path, GENERIC_READ, FILE_SHARE_READ, 0, + if ((ret = _CreateFile(path, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { return(FILEH_INVALID); @@ -134,11 +78,11 @@ FILEH file_open_rb(const char *path) { return(ret); } -FILEH file_create(const char *path) { +FILEH file_create(const OEMCHAR *path) { FILEH ret; - if ((ret = CreateFile_A(path, GENERIC_READ | GENERIC_WRITE, + if ((ret = _CreateFile(path, GENERIC_READ | GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) { return(FILEH_INVALID); @@ -220,87 +164,122 @@ short file_getdatetime(FILEH handle, DOS return(0); } -short file_delete(const char *path) { +short file_delete(const OEMCHAR *path) { - return(DeleteFile_A(path)?0:-1); +#if defined(UNICODE) && defined(OSLANG_SJIS) + UINT16 ucs2[MAX_PATH]; + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, path, -1, + ucs2, NELEMENTS(ucs2)); + return(DeleteFile(ucs2)?0:-1); +#elif defined(OSLANG_UTF8) + UINT16 ucs2[MAX_PATH]; + ucscnv_utf8toucs2(ucs2, NELEMENTS(ucs2), path, (UINT)-1); + return(DeleteFile(ucs2)?0:-1); +#else + return(DeleteFile(path)?0:-1); +#endif } -short file_attr(const char *path) { +short file_attr(const OEMCHAR *path) { - return((short)GetFileAttributes_A(path)); +#if defined(UNICODE) && defined(OSLANG_SJIS) + UINT16 ucs2[MAX_PATH]; + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, path, -1, + ucs2, NELEMENTS(ucs2)); + return((short)GetFileAttributes(ucs2)); +#elif defined(OSLANG_UTF8) + UINT16 ucs2[MAX_PATH]; + ucscnv_utf8toucs2(ucs2, NELEMENTS(ucs2), path, (UINT)-1); + return((short)GetFileAttributes(ucs2)); +#else + return((short)GetFileAttributes(path)); +#endif } -short file_dircreate(const char *path) { +short file_dircreate(const OEMCHAR *path) { - return(CreateDirectory_A(path, NULL)?0:-1); +#if defined(UNICODE) && defined(OSLANG_SJIS) + UINT16 ucs2[MAX_PATH]; + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, path, -1, + ucs2, NELEMENTS(ucs2)); + return(CreateDirectory(ucs2, NULL)?0:-1); +#elif defined(OSLANG_UTF8) + UINT16 ucs2[MAX_PATH]; + ucscnv_utf8toucs2(ucs2, NELEMENTS(ucs2), path, (UINT)-1); + return(CreateDirectory(ucs2, NULL)?0:-1); +#else + return(CreateDirectory(path, NULL)?0:-1); +#endif } // カレントファイル操作 -void file_setcd(const char *exepath) { +void file_setcd(const OEMCHAR *exepath) { - file_cpyname(curpath, exepath, sizeof(curpath)); + file_cpyname(curpath, exepath, NELEMENTS(curpath)); curfilep = file_getname(curpath); *curfilep = '\0'; } -char *file_getcd(const char *path) { +char *file_getcd(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, sizeof(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(curpath); } -FILEH file_open_c(const char *path) { +FILEH file_open_c(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, sizeof(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(file_open(curpath)); } -FILEH file_open_rb_c(const char *path) { +FILEH file_open_rb_c(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, sizeof(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(file_open_rb(curpath)); } -FILEH file_create_c(const char *path) { +FILEH file_create_c(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, sizeof(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(file_create(curpath)); } -short file_delete_c(const char *path) { +short file_delete_c(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, sizeof(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(file_delete(curpath)); } -short file_attr_c(const char *path) { +short file_attr_c(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, sizeof(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(file_attr(curpath)); } +// ---- + +#if !defined(_WIN32_WCE) +static const OEMCHAR str_selfdir[] = OEMTEXT("."); +static const OEMCHAR str_parentdir[] = OEMTEXT(".."); +#endif +static const OEMCHAR str_wildcard[] = OEMTEXT("*.*"); + static BOOL setflist(WIN32_FIND_DATA *w32fd, FLINFO *fli) { #if defined(UNICODE) && defined(OSLANG_SJIS) WideCharToMultiByte(CP_ACP, 0, w32fd->cFileName, -1, - fli->path, sizeof(fli->path), NULL, NULL); -#elif defined(UNICODE) && defined(OSLANG_UTF8) - ucscnv_ucs2toutf8(fli->path, sizeof(fli->path), w32fd->cFileName, -1); + fli->path, NELEMENTS(fli->path), NULL, NULL); +#elif defined(OSLANG_UTF8) + ucscnv_ucs2toutf8(fli->path, NELEMENTS(fli->path), w32fd->cFileName, -1); #else - milstr_ncpy(fli->path, w32fd->cFileName, sizeof(fli->path)); + file_cpyname(fli->path, w32fd->cFileName, NELEMENTS(fli->path)); #endif #if !defined(_WIN32_WCE) if ((w32fd->dwFileAttributes & FILEATTR_DIRECTORY) && - ((!file_cmpname(fli->path, ".")) || - (!file_cmpname(fli->path, "..")))) { + ((!file_cmpname(fli->path, str_selfdir)) || + (!file_cmpname(fli->path, str_parentdir)))) { return(FAILURE); } #endif @@ -311,17 +290,29 @@ static BOOL setflist(WIN32_FIND_DATA *w3 return(SUCCESS); } -FLISTH file_list1st(const char *dir, FLINFO *fli) { +FLISTH file_list1st(const OEMCHAR *dir, FLINFO *fli) { - char path[MAX_PATH]; + OEMCHAR path[MAX_PATH]; HANDLE hdl; WIN32_FIND_DATA w32fd; - milsjis_ncpy(path, dir, sizeof(path)); - file_setseparator(path, sizeof(path)); - milsjis_ncat(path, "*.*", sizeof(path)); + file_cpyname(path, dir, NELEMENTS(path)); + file_setseparator(path, NELEMENTS(path)); + file_catname(path, str_wildcard, NELEMENTS(path)); TRACEOUT(("file_list1st %s", path)); - hdl = FindFirstFile_A(path, &w32fd); + +#if defined(UNICODE) && defined(OSLANG_SJIS) + UINT16 ucs2[MAX_PATH]; + MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, path, -1, + ucs2, NELEMENTS(ucs2)); + hdl = FindFirstFile(ucs2, &w32fd); +#elif defined(OSLANG_UTF8) + UINT16 ucs2[MAX_PATH]; + ucscnv_utf8toucs2(ucs2, NELEMENTS(ucs2), path, (UINT)-1); + hdl = FindFirstFile(ucs2, &w32fd); +#else + hdl = FindFirstFile(path, &w32fd); +#endif if (hdl != INVALID_HANDLE_VALUE) { do { if (setflist(&w32fd, fli) == SUCCESS) {