--- np2/wince/dosio.cpp 2004/06/20 02:57:47 1.6 +++ np2/wince/dosio.cpp 2005/04/01 15:35:50 1.12 @@ -1,149 +1,76 @@ #include "compiler.h" +#include "oemtext.h" #include "dosio.h" 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, - DWORD dwDesiredAccess, - DWORD dwShareMode, - LPSECURITY_ATTRIBUTES lpSecurityAttributes, - DWORD dwCreationDisposition, - DWORD dwFlagsAndAttributes, - HANDLE hTemplateFile) { - - 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(CreateFile(FileNameW, dwDesiredAccess, dwShareMode, - lpSecurityAttributes, dwCreationDisposition, - dwFlagsAndAttributes, 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]; - -#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)); -} -#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) - -#endif - // ---- void dosio_init(void) { } void dosio_term(void) { } - // ファイル操作 -FILEH file_open(const char *path) { - FILEH ret; + // ファイル操作 +FILEH file_open(const OEMCHAR *path) { - if ((ret = CreateFile_A(path, GENERIC_READ | GENERIC_WRITE, - 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) - == INVALID_HANDLE_VALUE) { - if ((ret = CreateFile_A(path, GENERIC_READ, - 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) - == INVALID_HANDLE_VALUE) { +#if defined(OEMCHAR_SAME_TCHAR) + const TCHAR *tcharpath = path; +#else + TCHAR tcharpath[MAX_PATH]; + oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); +#endif + FILEH ret; + ret = CreateFile(tcharpath, GENERIC_READ | GENERIC_WRITE, + 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (ret == INVALID_HANDLE_VALUE) { + ret = CreateFile(tcharpath, GENERIC_READ, + 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (ret == INVALID_HANDLE_VALUE) { return(FILEH_INVALID); } } 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, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) - == INVALID_HANDLE_VALUE) { +#if defined(OEMCHAR_SAME_TCHAR) + const TCHAR *tcharpath = path; +#else + TCHAR tcharpath[MAX_PATH]; + oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); +#endif + FILEH ret; + ret = CreateFile(tcharpath, GENERIC_READ, FILE_SHARE_READ, 0, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (ret != INVALID_HANDLE_VALUE) { + return(ret); + } + else { return(FILEH_INVALID); } - return(ret); } -FILEH file_create(const char *path) { - - FILEH ret; +FILEH file_create(const OEMCHAR *path) { - if ((ret = CreateFile_A(path, GENERIC_READ | GENERIC_WRITE, - 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) - == INVALID_HANDLE_VALUE) { +#if defined(OEMCHAR_SAME_TCHAR) + const TCHAR *tcharpath = path; +#else + TCHAR tcharpath[MAX_PATH]; + oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); +#endif + FILEH ret; + ret = CreateFile(tcharpath, GENERIC_READ | GENERIC_WRITE, + 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + if (ret != INVALID_HANDLE_VALUE) { + return(ret); + } + else { return(FILEH_INVALID); } - return(ret); } long file_seek(FILEH handle, long pointer, int method) { @@ -187,7 +114,8 @@ UINT file_getsize(FILEH handle) { return(GetFileSize(handle, NULL)); } -static BOOL cnvdatetime(FILETIME *file, DOSDATE *dosdate, DOSTIME *dostime) { +static BRESULT cnvdatetime(const FILETIME *file, + DOSDATE *dosdate, DOSTIME *dostime) { FILETIME localtime; SYSTEMTIME systime; @@ -220,87 +148,99 @@ 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(OEMCHAR_SAME_TCHAR) + const TCHAR *tcharpath = path; +#else + TCHAR tcharpath[MAX_PATH]; + oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); +#endif + return(DeleteFile(tcharpath)?0:-1); } -short file_attr(const char *path) { +short file_attr(const OEMCHAR *path) { - return((short)GetFileAttributes_A(path)); +#if defined(OEMCHAR_SAME_TCHAR) +const TCHAR *tcharpath = path; +#else + TCHAR tcharpath[MAX_PATH]; + oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); +#endif + return((short)GetFileAttributes(tcharpath)); } -short file_dircreate(const char *path) { +short file_dircreate(const OEMCHAR *path) { - return(CreateDirectory_A(path, NULL)?0:-1); +#if defined(OEMCHAR_SAME_TCHAR) + const TCHAR *tcharpath = path; +#else + TCHAR tcharpath[MAX_PATH]; + oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); +#endif + return(CreateDirectory(tcharpath, NULL)?0:-1); } // カレントファイル操作 -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) { +OEMCHAR *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)); } -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); -#else - milstr_ncpy(fli->path, w32fd->cFileName, sizeof(fli->path)); +#if !defined(_WIN32_WCE) +static const TCHAR str_selfdir[] = _T("."); +static const TCHAR str_parentdir[] = _T(".."); #endif +static const OEMCHAR str_wildcard[] = OEMTEXT("*.*"); + +static BRESULT setflist(const WIN32_FIND_DATA *w32fd, FLINFO *fli) { + #if !defined(_WIN32_WCE) if ((w32fd->dwFileAttributes & FILEATTR_DIRECTORY) && - ((!file_cmpname(fli->path, ".")) || - (!file_cmpname(fli->path, "..")))) { + ((!lstrcmp(w32fd->cFileName, str_selfdir)) || + (!lstrcmp(w32fd->cFileName, str_parentdir)))) { return(FAILURE); } #endif @@ -308,20 +248,30 @@ static BOOL setflist(WIN32_FIND_DATA *w3 fli->size = w32fd->nFileSizeLow; fli->attr = w32fd->dwFileAttributes; cnvdatetime(&w32fd->ftLastWriteTime, &fli->date, &fli->time); +#if defined(OEMCHAR_SAME_TCHAR) + file_cpyname(fli->path, w32fd->cFileName, NELEMENTS(fli->path)); +#else + tchartooem(fli->path, NELEMENTS(fli->path), w32fd->cFileName, (UINT)-1); +#endif return(SUCCESS); } -FLISTH file_list1st(const char *dir, FLINFO *fli) { - - char path[MAX_PATH]; - HANDLE hdl; - WIN32_FIND_DATA w32fd; +FLISTH file_list1st(const OEMCHAR *dir, FLINFO *fli) { - milsjis_ncpy(path, dir, sizeof(path)); - file_setseparator(path, sizeof(path)); - milsjis_ncat(path, "*.*", sizeof(path)); + OEMCHAR path[MAX_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(OEMCHAR_SAME_TCHAR) +const TCHAR *tcharpath = path; +#else + TCHAR tcharpath[MAX_PATH]; + oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); +#endif + HANDLE hdl; + WIN32_FIND_DATA w32fd; + hdl = FindFirstFile(tcharpath, &w32fd); if (hdl != INVALID_HANDLE_VALUE) { do { if (setflist(&w32fd, fli) == SUCCESS) { @@ -333,7 +283,7 @@ FLISTH file_list1st(const char *dir, FLI return(FLISTH_INVALID); } -BOOL file_listnext(FLISTH hdl, FLINFO *fli) { +BRESULT file_listnext(FLISTH hdl, FLINFO *fli) { WIN32_FIND_DATA w32fd; @@ -353,8 +303,8 @@ void file_listclose(FLISTH hdl) { OEMCHAR *file_getname(const OEMCHAR *path) { - int csize; const OEMCHAR *ret; + int csize; ret = path; while((csize = milstr_charsize(path)) != 0) { @@ -377,9 +327,9 @@ void file_cutname(OEMCHAR *path) { OEMCHAR *file_getext(const OEMCHAR *path) { - OEMCHAR *p; - OEMCHAR *q; - int csize; +const OEMCHAR *p; +const OEMCHAR *q; + int csize; p = file_getname(path); q = NULL; @@ -389,7 +339,7 @@ OEMCHAR *file_getext(const OEMCHAR *path } p += csize; } - if (!q) { + if (q == NULL) { q = p; } return((OEMCHAR *)q); @@ -405,7 +355,7 @@ void file_cutext(OEMCHAR *path) { q = NULL; while((csize = milstr_charsize(p)) != 0) { if ((csize == 1) && (*p == '.')) { - q = p + 1; + q = p; } p += csize; } @@ -418,7 +368,7 @@ void file_cutseparator(OEMCHAR *path) { int pos; - pos = strlen(path) - 1; + pos = OEMSTRLEN(path) - 1; if ((pos > 0) && // 2文字以上でー (path[pos] == '\\') && // ケツが \ でー (!milstr_kanji2nd(path, pos)) && // 漢字の2バイト目ぢゃなくてー @@ -432,7 +382,7 @@ void file_setseparator(OEMCHAR *path, in int pos; - pos = strlen(path) - 1; + pos = OEMSTRLEN(path) - 1; if ((pos < 0) || ((pos == 1) && (path[1] == ':')) || ((path[pos] == '\\') && (!milstr_kanji2nd(path, pos))) ||