--- np2/win9x/dosio.cpp 2005/02/09 20:11:35 1.8 +++ np2/win9x/dosio.cpp 2005/03/20 13:12:49 1.12 @@ -1,12 +1,11 @@ #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) - // ---- @@ -16,14 +15,20 @@ void dosio_term(void) { } // ファイル操作 FILEH DOSIOCALL file_open(const OEMCHAR *path) { - FILEH ret; - if ((ret = CreateFile(path, GENERIC_READ | GENERIC_WRITE, - 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) - == INVALID_HANDLE_VALUE) { - if ((ret = CreateFile(path, GENERIC_READ, - 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) - == INVALID_HANDLE_VALUE) { +#if defined(OSLANG_UTF8) + TCHAR tchr[MAX_PATH]; + oemtotchar(tchr, NELEMENTS(tchr), path, -1); +#else + const TCHAR *tchr = path; +#endif + FILEH ret; + ret = CreateFile(tchr, GENERIC_READ | GENERIC_WRITE, + 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (ret == INVALID_HANDLE_VALUE) { + ret = CreateFile(tchr, GENERIC_READ, + 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (ret == INVALID_HANDLE_VALUE) { return(FILEH_INVALID); } } @@ -32,11 +37,16 @@ FILEH DOSIOCALL file_open(const OEMCHAR FILEH DOSIOCALL file_open_rb(const OEMCHAR *path) { - FILEH ret; - - if ((ret = CreateFile(path, GENERIC_READ, FILE_SHARE_READ, 0, - OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) - == INVALID_HANDLE_VALUE) { +#if defined(OSLANG_UTF8) + TCHAR tchr[MAX_PATH]; + oemtotchar(tchr, NELEMENTS(tchr), path, -1); +#else + const TCHAR *tchr = path; +#endif + FILEH ret; + ret = CreateFile(tchr, GENERIC_READ, FILE_SHARE_READ, 0, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (ret == INVALID_HANDLE_VALUE) { return(FILEH_INVALID); } return(ret); @@ -44,11 +54,16 @@ FILEH DOSIOCALL file_open_rb(const OEMCH FILEH DOSIOCALL file_create(const OEMCHAR *path) { - FILEH ret; - - if ((ret = CreateFile(path, GENERIC_READ | GENERIC_WRITE, - 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) - == INVALID_HANDLE_VALUE) { +#if defined(OSLANG_UTF8) + TCHAR tchr[MAX_PATH]; + oemtotchar(tchr, NELEMENTS(tchr), path, -1); +#else + const TCHAR *tchr = path; +#endif + FILEH ret; + ret = CreateFile(tchr, GENERIC_READ | GENERIC_WRITE, + 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + if (ret == INVALID_HANDLE_VALUE) { return(FILEH_INVALID); } return(ret); @@ -130,17 +145,35 @@ short DOSIOCALL file_getdatetime(FILEH h short DOSIOCALL file_delete(const OEMCHAR *path) { - return(DeleteFile(path)?0:-1); +#if defined(OSLANG_UTF8) + TCHAR tchr[MAX_PATH]; + oemtotchar(tchr, NELEMENTS(tchr), path, -1); +#else + const TCHAR *tchr = path; +#endif + return(DeleteFile(tchr)?0:-1); } short DOSIOCALL file_attr(const OEMCHAR *path) { - return((short)GetFileAttributes(path)); +#if defined(OSLANG_UTF8) + TCHAR tchr[MAX_PATH]; + oemtotchar(tchr, NELEMENTS(tchr), path, -1); +#else + const TCHAR *tchr = path; +#endif + return((short)GetFileAttributes(tchr)); } short DOSIOCALL file_dircreate(const OEMCHAR *path) { - return(CreateDirectory(path, NULL)?0:-1); +#if defined(OSLANG_UTF8) + TCHAR tchr[MAX_PATH]; + oemtotchar(tchr, NELEMENTS(tchr), path, -1); +#else + const TCHAR *tchr = path; +#endif + return(CreateDirectory(tchr, NULL)?0:-1); } @@ -154,43 +187,37 @@ void DOSIOCALL file_setcd(const OEMCHAR OEMCHAR * DOSIOCALL file_getcd(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, NELEMENTS(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(curpath); } FILEH DOSIOCALL file_open_c(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, NELEMENTS(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(file_open(curpath)); } FILEH DOSIOCALL file_open_rb_c(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, NELEMENTS(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(file_open_rb(curpath)); } FILEH DOSIOCALL file_create_c(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, NELEMENTS(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(file_create(curpath)); } short DOSIOCALL file_delete_c(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, NELEMENTS(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(file_delete(curpath)); } short DOSIOCALL file_attr_c(const OEMCHAR *path) { - *curfilep = '\0'; - file_catname(curpath, path, NELEMENTS(curpath)); + file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(file_attr(curpath)); } @@ -199,8 +226,8 @@ static BRESULT DOSIOCALL setflist(WIN32_ #if !defined(_WIN32_WCE) if ((w32fd->dwFileAttributes & FILEATTR_DIRECTORY) && - ((!file_cmpname(w32fd->cFileName, OEMTEXT("."))) || - (!file_cmpname(w32fd->cFileName, OEMTEXT(".."))))) { + ((!lstrcmp(w32fd->cFileName, _T("."))) || + (!lstrcmp(w32fd->cFileName, _T(".."))))) { return(FAILURE); } #endif @@ -208,21 +235,31 @@ static BRESULT DOSIOCALL setflist(WIN32_ fli->size = w32fd->nFileSizeLow; fli->attr = w32fd->dwFileAttributes; cnvdatetime(&w32fd->ftLastWriteTime, &fli->date, &fli->time); +#if defined(OSLANG_UTF8) + tchartooem(fli->path, NELEMENTS(fli->path), w32fd->cFileName, -1); +#else milstr_ncpy(fli->path, w32fd->cFileName, NELEMENTS(fli->path)); +#endif return(SUCCESS); } FLISTH DOSIOCALL file_list1st(const OEMCHAR *dir, FLINFO *fli) { - OEMCHAR path[MAX_PATH]; - HANDLE hdl; - WIN32_FIND_DATA w32fd; + OEMCHAR path[MAX_PATH]; milstr_ncpy(path, dir, NELEMENTS(path)); file_setseparator(path, NELEMENTS(path)); milstr_ncat(path, OEMTEXT("*.*"), NELEMENTS(path)); TRACEOUT(("file_list1st %s", path)); - hdl = FindFirstFile(path, &w32fd); +#if defined(OSLANG_UTF8) + TCHAR tchr[MAX_PATH]; + oemtotchar(tchr, NELEMENTS(tchr), path, -1); +#else + const TCHAR *tchr = path; +#endif + HANDLE hdl; + WIN32_FIND_DATA w32fd; + hdl = FindFirstFile(tchr, &w32fd); if (hdl != INVALID_HANDLE_VALUE) { do { if (setflist(&w32fd, fli) == SUCCESS) { @@ -255,20 +292,16 @@ void DOSIOCALL file_listclose(FLISTH hdl OEMCHAR * DOSIOCALL file_getname(const OEMCHAR *path) { const OEMCHAR *ret; + int csize; ret = path; - while(*path != '\0') { - if (!ISKANJI(*path)) { + while((csize = milstr_charsize(path)) != 0) { + if (csize == 1) { if ((*path == '\\') || (*path == '/') || (*path == ':')) { ret = path + 1; } } - else { - if (path[1]) { - path++; - } - } - path++; + path += csize; } return((OEMCHAR *)ret); } @@ -285,24 +318,17 @@ OEMCHAR * DOSIOCALL file_getext(const OE const OEMCHAR *p; const OEMCHAR *q; + int csize; p = file_getname(path); q = NULL; - - while(*p != '\0') { - if (!ISKANJI(*p)) { - if (*p == '.') { - q = p + 1; - } - } - else { - if (p[1]) { - p++; - } + while((csize = milstr_charsize(p)) != 0) { + if ((csize == 1) && (*p == '.')) { + q = p + 1; } - p++; + p += csize; } - if (!q) { + if (q == NULL) { q = p; } return((OEMCHAR *)q); @@ -312,21 +338,15 @@ void DOSIOCALL file_cutext(OEMCHAR *path OEMCHAR *p; OEMCHAR *q; + int csize; p = file_getname(path); q = NULL; - while(*p != '\0') { - if (!ISKANJI(*p)) { - if (*p == '.') { - q = p; - } - } - else { - if (p[1]) { - p++; - } + while((csize = milstr_charsize(p)) != 0) { + if ((csize == 1) && (*p == '.')) { + q = p; } - p++; + p += csize; } if (q) { *q = '\0';