|
|
| version 1.12, 2005/03/20 13:12:49 | version 1.13, 2005/04/01 15:35:49 |
|---|---|
| Line 12 static OEMCHAR *curfilep = curpath; | Line 12 static OEMCHAR *curfilep = curpath; |
| void dosio_init(void) { } | void dosio_init(void) { } |
| void dosio_term(void) { } | void dosio_term(void) { } |
| // ファイル操作 | // ファイル操作 |
| FILEH DOSIOCALL file_open(const OEMCHAR *path) { | FILEH DOSIOCALL file_open(const OEMCHAR *path) { |
| #if defined(OEMCHAR_SAME_TCHAR) | |
| #if defined(OSLANG_UTF8) | const TCHAR *tcharpath = path; |
| TCHAR tchr[MAX_PATH]; | |
| oemtotchar(tchr, NELEMENTS(tchr), path, -1); | |
| #else | #else |
| const TCHAR *tchr = path; | TCHAR tcharpath[MAX_PATH]; |
| oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); | |
| #endif | #endif |
| FILEH ret; | FILEH ret; |
| ret = CreateFile(tchr, GENERIC_READ | GENERIC_WRITE, | ret = CreateFile(tcharpath, GENERIC_READ | GENERIC_WRITE, |
| 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); | 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
| if (ret == INVALID_HANDLE_VALUE) { | if (ret == INVALID_HANDLE_VALUE) { |
| ret = CreateFile(tchr, GENERIC_READ, | ret = CreateFile(tcharpath, GENERIC_READ, |
| 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); | 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
| if (ret == INVALID_HANDLE_VALUE) { | if (ret == INVALID_HANDLE_VALUE) { |
| return(FILEH_INVALID); | return(FILEH_INVALID); |
| Line 37 FILEH DOSIOCALL file_open(const OEMCHAR | Line 37 FILEH DOSIOCALL file_open(const OEMCHAR |
| FILEH DOSIOCALL file_open_rb(const OEMCHAR *path) { | FILEH DOSIOCALL file_open_rb(const OEMCHAR *path) { |
| #if defined(OSLANG_UTF8) | #if defined(OEMCHAR_SAME_TCHAR) |
| TCHAR tchr[MAX_PATH]; | const TCHAR *tcharpath = path; |
| oemtotchar(tchr, NELEMENTS(tchr), path, -1); | |
| #else | #else |
| const TCHAR *tchr = path; | TCHAR tcharpath[MAX_PATH]; |
| oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); | |
| #endif | #endif |
| FILEH ret; | FILEH ret; |
| ret = CreateFile(tchr, GENERIC_READ, FILE_SHARE_READ, 0, | ret = CreateFile(tcharpath, GENERIC_READ, FILE_SHARE_READ, 0, |
| OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); | OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); |
| if (ret == INVALID_HANDLE_VALUE) { | if (ret != INVALID_HANDLE_VALUE) { |
| return(ret); | |
| } | |
| else { | |
| return(FILEH_INVALID); | return(FILEH_INVALID); |
| } | } |
| return(ret); | |
| } | } |
| FILEH DOSIOCALL file_create(const OEMCHAR *path) { | FILEH DOSIOCALL file_create(const OEMCHAR *path) { |
| #if defined(OSLANG_UTF8) | #if defined(OEMCHAR_SAME_TCHAR) |
| TCHAR tchr[MAX_PATH]; | const TCHAR *tcharpath = path; |
| oemtotchar(tchr, NELEMENTS(tchr), path, -1); | |
| #else | #else |
| const TCHAR *tchr = path; | TCHAR tcharpath[MAX_PATH]; |
| oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); | |
| #endif | #endif |
| FILEH ret; | FILEH ret; |
| ret = CreateFile(tchr, GENERIC_READ | GENERIC_WRITE, | ret = CreateFile(tcharpath, GENERIC_READ | GENERIC_WRITE, |
| 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); | 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); |
| if (ret == INVALID_HANDLE_VALUE) { | if (ret != INVALID_HANDLE_VALUE) { |
| return(ret); | |
| } | |
| else { | |
| return(FILEH_INVALID); | return(FILEH_INVALID); |
| } | } |
| return(ret); | |
| } | } |
| long DOSIOCALL file_seek(FILEH handle, long pointer, int method) { | long DOSIOCALL file_seek(FILEH handle, long pointer, int method) { |
| Line 110 UINT DOSIOCALL file_getsize(FILEH handle | Line 114 UINT DOSIOCALL file_getsize(FILEH handle |
| return(GetFileSize(handle, NULL)); | return(GetFileSize(handle, NULL)); |
| } | } |
| static BRESULT DOSIOCALL cnvdatetime(FILETIME *file, DOSDATE *dosdate, DOSTIME *dostime) { | static BRESULT DOSIOCALL cnvdatetime(const FILETIME *file, |
| DOSDATE *dosdate, DOSTIME *dostime) { | |
| FILETIME localtime; | FILETIME localtime; |
| SYSTEMTIME systime; | SYSTEMTIME systime; |
| Line 132 static BRESULT DOSIOCALL cnvdatetime(FIL | Line 137 static BRESULT DOSIOCALL cnvdatetime(FIL |
| return(SUCCESS); | return(SUCCESS); |
| } | } |
| short DOSIOCALL file_getdatetime(FILEH handle, DOSDATE *dosdate, DOSTIME *dostime) { | short DOSIOCALL file_getdatetime(FILEH handle, |
| DOSDATE *dosdate, DOSTIME *dostime) { | |
| FILETIME lastwrite; | FILETIME lastwrite; |
| Line 145 short DOSIOCALL file_getdatetime(FILEH h | Line 151 short DOSIOCALL file_getdatetime(FILEH h |
| short DOSIOCALL file_delete(const OEMCHAR *path) { | short DOSIOCALL file_delete(const OEMCHAR *path) { |
| #if defined(OSLANG_UTF8) | #if defined(OEMCHAR_SAME_TCHAR) |
| TCHAR tchr[MAX_PATH]; | const TCHAR *tcharpath = path; |
| oemtotchar(tchr, NELEMENTS(tchr), path, -1); | |
| #else | #else |
| const TCHAR *tchr = path; | TCHAR tcharpath[MAX_PATH]; |
| oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); | |
| #endif | #endif |
| return(DeleteFile(tchr)?0:-1); | return(DeleteFile(tcharpath)?0:-1); |
| } | } |
| short DOSIOCALL file_attr(const OEMCHAR *path) { | short DOSIOCALL file_attr(const OEMCHAR *path) { |
| #if defined(OSLANG_UTF8) | #if defined(OEMCHAR_SAME_TCHAR) |
| TCHAR tchr[MAX_PATH]; | const TCHAR *tcharpath = path; |
| oemtotchar(tchr, NELEMENTS(tchr), path, -1); | |
| #else | #else |
| const TCHAR *tchr = path; | TCHAR tcharpath[MAX_PATH]; |
| oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); | |
| #endif | #endif |
| return((short)GetFileAttributes(tchr)); | return((short)GetFileAttributes(tcharpath)); |
| } | } |
| short DOSIOCALL file_dircreate(const OEMCHAR *path) { | short DOSIOCALL file_dircreate(const OEMCHAR *path) { |
| #if defined(OSLANG_UTF8) | #if defined(OEMCHAR_SAME_TCHAR) |
| TCHAR tchr[MAX_PATH]; | const TCHAR *tcharpath = path; |
| oemtotchar(tchr, NELEMENTS(tchr), path, -1); | |
| #else | #else |
| const TCHAR *tchr = path; | TCHAR tcharpath[MAX_PATH]; |
| oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); | |
| #endif | #endif |
| return(CreateDirectory(tchr, NULL)?0:-1); | return(CreateDirectory(tcharpath, NULL)?0:-1); |
| } | } |
| Line 222 short DOSIOCALL file_attr_c(const OEMCHA | Line 228 short DOSIOCALL file_attr_c(const OEMCHA |
| } | } |
| // ---- | |
| #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 DOSIOCALL setflist(WIN32_FIND_DATA *w32fd, FLINFO *fli) { | static BRESULT DOSIOCALL setflist(WIN32_FIND_DATA *w32fd, FLINFO *fli) { |
| #if !defined(_WIN32_WCE) | #if !defined(_WIN32_WCE) |
| if ((w32fd->dwFileAttributes & FILEATTR_DIRECTORY) && | if ((w32fd->dwFileAttributes & FILEATTR_DIRECTORY) && |
| ((!lstrcmp(w32fd->cFileName, _T("."))) || | ((!lstrcmp(w32fd->cFileName, str_selfdir)) || |
| (!lstrcmp(w32fd->cFileName, _T(".."))))) { | (!lstrcmp(w32fd->cFileName, str_parentdir)))) { |
| return(FAILURE); | return(FAILURE); |
| } | } |
| #endif | #endif |
| Line 235 static BRESULT DOSIOCALL setflist(WIN32_ | Line 249 static BRESULT DOSIOCALL setflist(WIN32_ |
| fli->size = w32fd->nFileSizeLow; | fli->size = w32fd->nFileSizeLow; |
| fli->attr = w32fd->dwFileAttributes; | fli->attr = w32fd->dwFileAttributes; |
| cnvdatetime(&w32fd->ftLastWriteTime, &fli->date, &fli->time); | cnvdatetime(&w32fd->ftLastWriteTime, &fli->date, &fli->time); |
| #if defined(OSLANG_UTF8) | #if defined(OEMCHAR_SAME_TCHAR) |
| tchartooem(fli->path, NELEMENTS(fli->path), w32fd->cFileName, -1); | file_cpyname(fli->path, w32fd->cFileName, NELEMENTS(fli->path)); |
| #else | #else |
| milstr_ncpy(fli->path, w32fd->cFileName, NELEMENTS(fli->path)); | tchartooem(fli->path, NELEMENTS(fli->path), w32fd->cFileName, (UINT)-1); |
| #endif | #endif |
| return(SUCCESS); | return(SUCCESS); |
| } | } |
| FLISTH DOSIOCALL file_list1st(const OEMCHAR *dir, FLINFO *fli) { | FLISTH DOSIOCALL file_list1st(const OEMCHAR *dir, FLINFO *fli) { |
| OEMCHAR path[MAX_PATH]; | OEMCHAR path[MAX_PATH]; |
| milstr_ncpy(path, dir, NELEMENTS(path)); | file_cpyname(path, dir, NELEMENTS(path)); |
| file_setseparator(path, NELEMENTS(path)); | file_setseparator(path, NELEMENTS(path)); |
| milstr_ncat(path, OEMTEXT("*.*"), NELEMENTS(path)); | file_catname(path, str_wildcard, NELEMENTS(path)); |
| TRACEOUT(("file_list1st %s", path)); | TRACEOUT(("file_list1st %s", path)); |
| #if defined(OSLANG_UTF8) | #if defined(OEMCHAR_SAME_TCHAR) |
| TCHAR tchr[MAX_PATH]; | const TCHAR *tcharpath = path; |
| oemtotchar(tchr, NELEMENTS(tchr), path, -1); | |
| #else | #else |
| const TCHAR *tchr = path; | TCHAR tcharpath[MAX_PATH]; |
| oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); | |
| #endif | #endif |
| HANDLE hdl; | HANDLE hdl; |
| WIN32_FIND_DATA w32fd; | WIN32_FIND_DATA w32fd; |
| hdl = FindFirstFile(tchr, &w32fd); | hdl = FindFirstFile(tcharpath, &w32fd); |
| if (hdl != INVALID_HANDLE_VALUE) { | if (hdl != INVALID_HANDLE_VALUE) { |
| do { | do { |
| if (setflist(&w32fd, fli) == SUCCESS) { | if (setflist(&w32fd, fli) == SUCCESS) { |
| Line 296 const OEMCHAR *ret; | Line 309 const OEMCHAR *ret; |
| ret = path; | ret = path; |
| while((csize = milstr_charsize(path)) != 0) { | while((csize = milstr_charsize(path)) != 0) { |
| if (csize == 1) { | if ((csize == 1) && |
| if ((*path == '\\') || (*path == '/') || (*path == ':')) { | ((*path == '\\') || (*path == '/') || (*path == ':'))) { |
| ret = path + 1; | ret = path + 1; |
| } | |
| } | } |
| path += csize; | path += csize; |
| } | } |