Diff for /np2/x11/dosio.c between versions 1.10 and 1.16

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;
   

Removed from v.1.10  
changed lines
  Added in v.1.16


RetroPC.NET-CVS <cvs@retropc.net>