|
|
| version 1.10, 2004/02/06 16:51:21 | version 1.16, 2011/01/03 11:49:25 |
|---|---|
| Line 2 | Line 2 |
| #include "compiler.h" | #include "compiler.h" |
| #include <sys/stat.h> | |
| #include <time.h> | #include <time.h> |
| #include "codecnv.h" | #include "codecnv.h" |
| #include "dosio.h" | #include "dosio.h" |
| static char curpath[MAX_PATH]; | static OEMCHAR curpath[MAX_PATH]; |
| static char *curfilep = curpath; | static OEMCHAR *curfilep = curpath; |
| #define ISKANJI(c) ((((c) - 0xa1) & 0xff) < 0x5c) | #define ISKANJI(c) ((((c) - 0xa1) & 0xff) < 0x5c) |
| Line 30 dosio_term(void) | Line 31 dosio_term(void) |
| /* ファイル操作 */ | /* ファイル操作 */ |
| FILEH | FILEH |
| file_open(const char *path) | file_open(const OEMCHAR *path) |
| { | { |
| FILEH fh; | FILEH fh; |
| Line 41 file_open(const char *path) | Line 42 file_open(const char *path) |
| } | } |
| FILEH | FILEH |
| file_open_rb(const char *path) | file_open_rb(const OEMCHAR *path) |
| { | { |
| return fopen(path, "rb"); | return fopen(path, "rb"); |
| } | } |
| FILEH | FILEH |
| file_create(const char *path) | file_create(const OEMCHAR *path) |
| { | { |
| return fopen(path, "wb+"); | return fopen(path, "wb+"); |
| Line 95 file_getsize(FILEH handle) | Line 96 file_getsize(FILEH handle) |
| } | } |
| short | short |
| file_attr(const char *path) | file_attr(const OEMCHAR *path) |
| { | { |
| struct stat sb; | struct stat sb; |
| short attr; | short attr; |
| Line 147 file_getdatetime(FILEH handle, DOSDATE * | Line 148 file_getdatetime(FILEH handle, DOSDATE * |
| } | } |
| short | short |
| file_delete(const char *path) | file_delete(const OEMCHAR *path) |
| { | { |
| return (short)unlink(path); | return (short)unlink(path); |
| } | } |
| short | short |
| file_dircreate(const char *path) | file_dircreate(const OEMCHAR *path) |
| { | { |
| return (short)mkdir(path, 0777); | return (short)mkdir(path, 0777); |
| Line 163 file_dircreate(const char *path) | Line 164 file_dircreate(const char *path) |
| /* カレントファイル操作 */ | /* カレントファイル操作 */ |
| void | void |
| file_setcd(const char *exepath) | file_setcd(const OEMCHAR *exepath) |
| { | { |
| milstr_ncpy(curpath, exepath, sizeof(curpath)); | milstr_ncpy(curpath, exepath, sizeof(curpath)); |
| Line 172 file_setcd(const char *exepath) | Line 173 file_setcd(const char *exepath) |
| } | } |
| char * | char * |
| file_getcd(const char *sjis) | file_getcd(const OEMCHAR *filename) |
| { | { |
| *curfilep = '\0'; | *curfilep = '\0'; |
| file_catname(curpath, sjis, sizeof(curpath)); | file_catname(curpath, filename, sizeof(curpath)); |
| return curpath; | return curpath; |
| } | } |
| FILEH | FILEH |
| file_open_c(const char *sjis) | file_open_c(const OEMCHAR *filename) |
| { | { |
| *curfilep = '\0'; | *curfilep = '\0'; |
| file_catname(curpath, sjis, sizeof(curpath)); | file_catname(curpath, filename, sizeof(curpath)); |
| return file_open(curpath); | return file_open(curpath); |
| } | } |
| FILEH | FILEH |
| file_open_rb_c(const char *sjis) | file_open_rb_c(const OEMCHAR *filename) |
| { | { |
| *curfilep = '\0'; | *curfilep = '\0'; |
| file_catname(curpath, sjis, sizeof(curpath)); | file_catname(curpath, filename, sizeof(curpath)); |
| return file_open_rb(curpath); | return file_open_rb(curpath); |
| } | } |
| FILEH | FILEH |
| file_create_c(const char *sjis) | file_create_c(const OEMCHAR *filename) |
| { | { |
| *curfilep = '\0'; | *curfilep = '\0'; |
| file_catname(curpath, sjis, sizeof(curpath)); | file_catname(curpath, filename, sizeof(curpath)); |
| return file_create(curpath); | return file_create(curpath); |
| } | } |
| short | short |
| file_delete_c(const char *sjis) | file_delete_c(const OEMCHAR *filename) |
| { | { |
| *curfilep = '\0'; | *curfilep = '\0'; |
| file_catname(curpath, sjis, sizeof(curpath)); | file_catname(curpath, filename, sizeof(curpath)); |
| return file_delete(curpath); | return file_delete(curpath); |
| } | } |
| short | short |
| file_attr_c(const char *sjis) | file_attr_c(const OEMCHAR *filename) |
| { | { |
| *curfilep = '\0'; | *curfilep = '\0'; |
| file_catname(curpath, sjis, sizeof(curpath)); | file_catname(curpath, filename, sizeof(curpath)); |
| return file_attr_c(curpath); | return file_attr(curpath); |
| } | } |
| FLISTH | FLISTH |
| file_list1st(const char *dir, FLINFO *fli) | file_list1st(const OEMCHAR *dir, FLINFO *fli) |
| { | { |
| FLISTH ret; | FLISTH ret; |
| ret = (FLISTH)malloc(sizeof(_FLISTH)); | ret = (FLISTH)_MALLOC(sizeof(_FLISTH), "FLISTH"); |
| if (ret == NULL) { | if (ret == NULL) { |
| VERBOSE(("file_list1st: couldn't alloc memory (size = %d)", sizeof(_FLISTH))); | VERBOSE(("file_list1st: couldn't alloc memory (size = %d)", sizeof(_FLISTH))); |
| return FLISTH_INVALID; | return FLISTH_INVALID; |
| } | } |
| mileuc_ncpy(ret->path, dir, sizeof(ret->path)); | milstr_ncpy(ret->path, dir, sizeof(ret->path)); |
| file_setseparator(ret->path, sizeof(ret->path)); | file_setseparator(ret->path, sizeof(ret->path)); |
| ret->hdl = opendir(ret->path); | ret->hdl = opendir(ret->path); |
| VERBOSE(("file_list1st: opendir(%s)", ret->path)); | VERBOSE(("file_list1st: opendir(%s)", ret->path)); |
| if (ret->hdl == NULL) { | if (ret->hdl == NULL) { |
| VERBOSE(("file_list1st: opendir failure")); | VERBOSE(("file_list1st: opendir failure")); |
| free(ret); | _MFREE(ret); |
| return FLISTH_INVALID; | return FLISTH_INVALID; |
| } | } |
| if (file_listnext((FLISTH)ret, fli) == SUCCESS) { | if (file_listnext((FLISTH)ret, fli) == SUCCESS) { |
| Line 250 file_list1st(const char *dir, FLINFO *fl | Line 251 file_list1st(const char *dir, FLINFO *fl |
| } | } |
| VERBOSE(("file_list1st: file_listnext failure")); | VERBOSE(("file_list1st: file_listnext failure")); |
| closedir(ret->hdl); | closedir(ret->hdl); |
| free(ret); | _MFREE(ret); |
| return FLISTH_INVALID; | return FLISTH_INVALID; |
| } | } |
| BOOL | BOOL |
| file_listnext(FLISTH hdl, FLINFO *fli) | file_listnext(FLISTH hdl, FLINFO *fli) |
| { | { |
| char buf[MAX_PATH]; | OEMCHAR buf[MAX_PATH]; |
| struct dirent *de; | struct dirent *de; |
| struct stat sb; | struct stat sb; |
| Line 268 file_listnext(FLISTH hdl, FLINFO *fli) | Line 269 file_listnext(FLISTH hdl, FLINFO *fli) |
| } | } |
| milstr_ncpy(buf, hdl->path, sizeof(buf)); | milstr_ncpy(buf, hdl->path, sizeof(buf)); |
| mileuc_ncat(buf, de->d_name, sizeof(buf)); | milstr_ncat(buf, de->d_name, sizeof(buf)); |
| if (stat(buf, &sb) != 0) { | if (stat(buf, &sb) != 0) { |
| VERBOSE(("file_listnext: stat failure. (path = %s)", buf)); | VERBOSE(("file_listnext: stat failure. (path = %s)", buf)); |
| return FAILURE; | return FAILURE; |
| Line 284 file_listnext(FLISTH hdl, FLINFO *fli) | Line 285 file_listnext(FLISTH hdl, FLINFO *fli) |
| fli->attr |= FILEATTR_READONLY; | fli->attr |= FILEATTR_READONLY; |
| } | } |
| cnvdatetime(&sb, &fli->date, &fli->time); | cnvdatetime(&sb, &fli->date, &fli->time); |
| mileuc_ncpy(fli->path, de->d_name, sizeof(fli->path)); | milstr_ncpy(fli->path, de->d_name, sizeof(fli->path)); |
| VERBOSE(("file_listnext: success")); | VERBOSE(("file_listnext: success")); |
| return SUCCESS; | return SUCCESS; |
| } | } |
| Line 295 file_listclose(FLISTH hdl) | Line 296 file_listclose(FLISTH hdl) |
| if (hdl) { | if (hdl) { |
| closedir(hdl->hdl); | closedir(hdl->hdl); |
| free(hdl); | _MFREE(hdl); |
| } | } |
| } | } |
| static int | static int |
| euckanji1st(const char *str, int pos) | euckanji1st(const OEMCHAR *str, int pos) |
| { | { |
| int ret; | int ret; |
| int c; | |
| ret = 0; | for (ret = 0; pos >= 0; ret ^= 1) { |
| while ((pos >= 0) && (((str[pos--] - 0xa1) & 0xff) < 0x5d)) { | c = (UINT8)str[pos--]; |
| ret ^= 1; | if (!ISKANJI(c)) |
| break; | |
| } | } |
| return ret; | return ret; |
| } | } |
| void | void |
| file_cpyname(char *dst, const char *src, int maxlen) | file_cpyname(OEMCHAR *dst, const OEMCHAR *src, int maxlen) |
| { | { |
| int i; | int i; |
| if (maxlen--) { | if (maxlen-- > 0) { |
| for (i = 0; i < maxlen && src[i] != '\0'; i++) { | for (i = 0; i < maxlen && src[i] != '\0'; i++) { |
| dst[i] = src[i]; | dst[i] = src[i]; |
| } | } |
| Line 330 file_cpyname(char *dst, const char *src, | Line 333 file_cpyname(char *dst, const char *src, |
| } | } |
| void | void |
| file_catname(char *path, const char *sjis, int maxlen) | file_catname(OEMCHAR *path, const OEMCHAR *filename, int maxlen) |
| { | { |
| while (maxlen) { | for (; maxlen > 0; path++, maxlen--) { |
| if (*path == '\0') { | if (*path == '\0') { |
| break; | break; |
| } | } |
| path++; | |
| maxlen--; | |
| } | } |
| if (maxlen) { | if (maxlen > 0) { |
| codecnv_sjis2euc(path, maxlen, sjis, (UINT)-1); | milstr_ncpy(path, filename, maxlen); |
| for (; path[0] != '\0'; path++) { | for (; *path != '\0'; path++) { |
| if (!ISKANJI(path[0])) { | if (!ISKANJI(*path)) { |
| if (path[1] == '\0') { | path++; |
| if (*path == '\0') { | |
| break; | break; |
| } | } |
| path++; | } else if (((*path - 0x41) & 0xff) < 26) { |
| } else if ((((path[0]) - 0x41) & 0xff) < 26) { | *path |= 0x20; |
| path[0] |= 0x20; | } else if (*path == '\\') { |
| } else if (path[0] == '\\') { | *path = '/'; |
| path[0] = '/'; | |
| } | } |
| } | } |
| } | } |
| } | } |
| BOOL | BOOL |
| file_cmpname(const char *path, const char *sjis) | file_cmpname(const OEMCHAR *path, const OEMCHAR *path2) |
| { | { |
| char euc[MAX_PATH]; | |
| codecnv_sjis2euc(euc, sizeof(euc), sjis, (UINT)-1); | return strcasecmp(path, path2); |
| return strcmp(path, euc); | |
| } | } |
| char * | OEMCHAR * |
| file_getname(char *path) | file_getname(const OEMCHAR *path) |
| { | { |
| char *ret; | const OEMCHAR *ret; |
| for (ret = path; path[0] != '\0'; path++) { | for (ret = path; *path != '\0'; path++) { |
| if (ISKANJI(path[0])) { | if (ISKANJI(*path)) { |
| if (path[1] == '\0') { | path++; |
| if (*path == '\0') { | |
| break; | break; |
| } | } |
| path++; | } else if (*path == '/') { |
| } else if (path[0] == '/') { | |
| ret = path + 1; | ret = path + 1; |
| } | } |
| } | } |
| return ret; | return (OEMCHAR *)ret; |
| } | } |
| void | void |
| file_cutname(char *path) | file_cutname(OEMCHAR *path) |
| { | { |
| char *p; | OEMCHAR *p; |
| p = file_getname(path); | p = file_getname(path); |
| *p = '\0'; | *p = '\0'; |
| } | } |
| char * | OEMCHAR * |
| file_getext(char *path) | file_getext(const OEMCHAR *path) |
| { | { |
| char *p; | const OEMCHAR *p, *q; |
| char *q; | |
| p = file_getname(path); | for (p = file_getname(path), q = NULL; *p != '\0'; p++) { |
| q = NULL; | |
| while (*p != '\0') { | |
| if (*p == '.') { | if (*p == '.') { |
| q = p + 1; | q = p + 1; |
| } | } |
| p++; | |
| } | } |
| if (q == NULL) { | if (q == NULL) { |
| q = p; | q = p; |
| } | } |
| return q; | return (char *)q; |
| } | } |
| void | void |
| file_cutext(char *path) | file_cutext(OEMCHAR *path) |
| { | { |
| char *p; | OEMCHAR *p, *q; |
| char *q; | |
| p = file_getname(path); | for (p = file_getname(path), q = NULL; *p != '\0'; p++) { |
| q = NULL; | |
| while (*p != '\0') { | |
| if (*p == '.') { | if (*p == '.') { |
| q = p; | q = p; |
| } | } |
| p++; | |
| } | } |
| if (q != NULL) { | if (q != NULL) { |
| *q = '\0'; | *q = '\0'; |
| Line 433 file_cutext(char *path) | Line 424 file_cutext(char *path) |
| } | } |
| void | void |
| file_cutseparator(char *path) | file_cutseparator(OEMCHAR *path) |
| { | { |
| int pos; | int pos; |
| Line 444 file_cutseparator(char *path) | Line 435 file_cutseparator(char *path) |
| } | } |
| void | void |
| file_setseparator(char *path, int maxlen) | file_setseparator(OEMCHAR *path, int maxlen) |
| { | { |
| int pos; | int pos; |