Diff for /np2/win9x/dosio.cpp between versions 1.5 and 1.12

version 1.5, 2004/01/10 20:15:43 version 1.12, 2005/03/20 13:12:49
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
   #include        "oemtext.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) ^ 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) {  
   
         TCHAR   FileNameW[MAX_PATH*2];  
   
         MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpFileName, -1,  
                                                         FileNameW, sizeof(FileNameW)/sizeof(TCHAR));  
         return(CreateFile(FileNameW, dwDesiredAccess, dwShareMode,  
                                                 lpSecurityAttributes, dwCreationDisposition,  
                                                 dwFlagsAndAttributes, hTemplateFile));  
 }  
   
 static inline BOOL DeleteFile_A(LPCSTR lpFileName) {  
   
         TCHAR   FileNameW[MAX_PATH*2];  
   
         MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpFileName, -1,  
                                                         FileNameW, sizeof(FileNameW)/sizeof(TCHAR));  
         return(DeleteFile(FileNameW));  
 }  
   
 static inline DWORD GetFileAttributes_A(LPCSTR lpFileName) {  
   
         TCHAR   FileNameW[MAX_PATH*2];  
   
         MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpFileName, -1,  
                                                         FileNameW, sizeof(FileNameW)/sizeof(TCHAR));  
         return(GetFileAttributes(FileNameW));  
 }  
   
 static inline BOOL CreateDirectory_A(LPCSTR lpFileName,  
                                                                                                 LPSECURITY_ATTRIBUTES atr) {  
   
         TCHAR   FileNameW[MAX_PATH*2];  
   
         MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpFileName, -1,  
                                                         FileNameW, sizeof(FileNameW)/sizeof(TCHAR));  
         return(CreateDirectory(FileNameW, atr));  
 }  
   
 static inline HANDLE FindFirstFile_A(LPCSTR lpFileName,  
                                                                                                         WIN32_FIND_DATA *w32fd) {  
   
         TCHAR   FileNameW[MAX_PATH*2];  
   
         MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpFileName, -1,  
                                                         FileNameW, sizeof(FileNameW)/sizeof(TCHAR));  
         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  
   
   
 // ----  // ----
Line 81  void dosio_init(void) { } Line 13  void dosio_init(void) { }
 void dosio_term(void) { }  void dosio_term(void) { }
   
                                                                                         // ファイル操作                                                                                          // ファイル操作
 FILEH file_open(const char *path) {  FILEH DOSIOCALL file_open(const OEMCHAR *path) {
   
         FILEH   ret;  
   
         if ((ret = CreateFile_A(path, GENERIC_READ | GENERIC_WRITE,  #if defined(OSLANG_UTF8)
                                                 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL))          TCHAR tchr[MAX_PATH];
                                                                                                         == INVALID_HANDLE_VALUE) {          oemtotchar(tchr, NELEMENTS(tchr), path, -1);
                 if ((ret = CreateFile_A(path, GENERIC_READ,  #else
                                                 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL))          const TCHAR *tchr = path;
                                                                                                         == INVALID_HANDLE_VALUE) {  #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);                          return(FILEH_INVALID);
                 }                  }
         }          }
         return(ret);          return(ret);
 }  }
   
 FILEH file_open_rb(const char *path) {  FILEH DOSIOCALL file_open_rb(const OEMCHAR *path) {
   
         FILEH   ret;  #if defined(OSLANG_UTF8)
           TCHAR tchr[MAX_PATH];
         if ((ret = CreateFile_A(path, GENERIC_READ, FILE_SHARE_READ, 0,          oemtotchar(tchr, NELEMENTS(tchr), path, -1);
                                                                 OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL))  #else
                                                                                                         == INVALID_HANDLE_VALUE) {          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(FILEH_INVALID);
         }          }
         return(ret);          return(ret);
 }  }
   
 FILEH file_create(const char *path) {  FILEH DOSIOCALL file_create(const OEMCHAR *path) {
   
         FILEH   ret;  #if defined(OSLANG_UTF8)
           TCHAR tchr[MAX_PATH];
         if ((ret = CreateFile_A(path, GENERIC_READ | GENERIC_WRITE,          oemtotchar(tchr, NELEMENTS(tchr), path, -1);
                                                  0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL))  #else
                                                                                         == INVALID_HANDLE_VALUE) {          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(FILEH_INVALID);
         }          }
         return(ret);          return(ret);
 }  }
   
 long file_seek(FILEH handle, long pointer, int method) {  long DOSIOCALL file_seek(FILEH handle, long pointer, int method) {
   
         return(SetFilePointer(handle, pointer, 0, method));          return(SetFilePointer(handle, pointer, 0, method));
 }  }
   
 UINT file_read(FILEH handle, void *data, UINT length) {  UINT DOSIOCALL file_read(FILEH handle, void *data, UINT length) {
   
         DWORD   readsize;          DWORD   readsize;
   
Line 136  UINT file_read(FILEH handle, void *data, Line 84  UINT file_read(FILEH handle, void *data,
         return(readsize);          return(readsize);
 }  }
   
 UINT file_write(FILEH handle, const void *data, UINT length) {  UINT DOSIOCALL file_write(FILEH handle, const void *data, UINT length) {
   
         DWORD   writesize;          DWORD   writesize;
   
Line 151  UINT file_write(FILEH handle, const void Line 99  UINT file_write(FILEH handle, const void
         return(0);          return(0);
 }  }
   
 short file_close(FILEH handle) {  short DOSIOCALL file_close(FILEH handle) {
   
         CloseHandle(handle);          CloseHandle(handle);
         return(0);          return(0);
 }  }
   
 UINT file_getsize(FILEH handle) {  UINT DOSIOCALL file_getsize(FILEH handle) {
   
         return(GetFileSize(handle, NULL));          return(GetFileSize(handle, NULL));
 }  }
   
 static BOOL cnvdatetime(FILETIME *file, DOSDATE *dosdate, DOSTIME *dostime) {  static BRESULT DOSIOCALL cnvdatetime(FILETIME *file, DOSDATE *dosdate, DOSTIME *dostime) {
   
         FILETIME        localtime;          FILETIME        localtime;
         SYSTEMTIME      systime;          SYSTEMTIME      systime;
Line 184  static BOOL cnvdatetime(FILETIME *file,  Line 132  static BOOL cnvdatetime(FILETIME *file, 
         return(SUCCESS);          return(SUCCESS);
 }  }
   
 short file_getdatetime(FILEH handle, DOSDATE *dosdate, DOSTIME *dostime) {  short DOSIOCALL file_getdatetime(FILEH handle, DOSDATE *dosdate, DOSTIME *dostime) {
   
         FILETIME        lastwrite;          FILETIME        lastwrite;
   
Line 195  short file_getdatetime(FILEH handle, DOS Line 143  short file_getdatetime(FILEH handle, DOS
         return(0);          return(0);
 }  }
   
 short file_delete(const char *path) {  short DOSIOCALL file_delete(const OEMCHAR *path) {
   
         return(DeleteFile_A(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 file_attr(const char *path) {  short DOSIOCALL file_attr(const OEMCHAR *path) {
   
         return((short)GetFileAttributes_A(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 file_dircreate(const char *path) {  short DOSIOCALL file_dircreate(const OEMCHAR *path) {
   
         return(CreateDirectory_A(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);
 }  }
   
   
                                                                                         // カレントファイル操作                                                                                          // カレントファイル操作
 void file_setcd(const char *exepath) {  void DOSIOCALL file_setcd(const OEMCHAR *exepath) {
   
         file_cpyname(curpath, exepath, sizeof(curpath));          file_cpyname(curpath, exepath, NELEMENTS(curpath));
         curfilep = file_getname(curpath);          curfilep = file_getname(curpath);
         *curfilep = '\0';          *curfilep = '\0';
 }  }
   
 char *file_getcd(const char *path) {  OEMCHAR * DOSIOCALL file_getcd(const OEMCHAR *path) {
   
         *curfilep = '\0';          file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath));
         file_catname(curpath, path, sizeof(curpath));  
         return(curpath);          return(curpath);
 }  }
   
 FILEH file_open_c(const char *path) {  FILEH DOSIOCALL file_open_c(const OEMCHAR *path) {
   
         *curfilep = '\0';          file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath));
         file_catname(curpath, path, sizeof(curpath));  
         return(file_open(curpath));          return(file_open(curpath));
 }  }
   
 FILEH file_open_rb_c(const char *path) {  FILEH DOSIOCALL file_open_rb_c(const OEMCHAR *path) {
   
         *curfilep = '\0';          file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath));
         file_catname(curpath, path, sizeof(curpath));  
         return(file_open_rb(curpath));          return(file_open_rb(curpath));
 }  }
   
 FILEH file_create_c(const char *path) {  FILEH DOSIOCALL file_create_c(const OEMCHAR *path) {
   
         *curfilep = '\0';          file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath));
         file_catname(curpath, path, sizeof(curpath));  
         return(file_create(curpath));          return(file_create(curpath));
 }  }
   
 short file_delete_c(const char *path) {  short DOSIOCALL file_delete_c(const OEMCHAR *path) {
   
         *curfilep = '\0';          file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath));
         file_catname(curpath, path, sizeof(curpath));  
         return(file_delete(curpath));          return(file_delete(curpath));
 }  }
   
 short file_attr_c(const char *path) {  short DOSIOCALL file_attr_c(const OEMCHAR *path) {
   
         *curfilep = '\0';          file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath));
         file_catname(curpath, path, sizeof(curpath));  
         return(file_attr(curpath));          return(file_attr(curpath));
 }  }
   
   
 static BOOL 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) &&
                 ((file_cmpname(w32fd->cFileName, ".")) ||                  ((!lstrcmp(w32fd->cFileName, _T("."))) ||
                 (file_cmpname(w32fd->cFileName, "..")))) {                  (!lstrcmp(w32fd->cFileName, _T(".."))))) {
                 return(FAILURE);                  return(FAILURE);
         }          }
 #endif  #endif
Line 275  static BOOL setflist(WIN32_FIND_DATA *w3 Line 235  static BOOL setflist(WIN32_FIND_DATA *w3
         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(UNICODE)  #if defined(OSLANG_UTF8)
         WideCharToMultiByte(CP_ACP, 0, w32fd->cFileName, -1,          tchartooem(fli->path, NELEMENTS(fli->path), w32fd->cFileName, -1);
                                                                 fli->path, sizeof(fli->path), NULL, NULL);  
 #else  #else
         milstr_ncpy(fli->path, w32fd->cFileName, sizeof(fli->path));          milstr_ncpy(fli->path, w32fd->cFileName, NELEMENTS(fli->path));
 #endif  #endif
         return(SUCCESS);          return(SUCCESS);
 }  }
   
 FLISTH file_list1st(const char *dir, FLINFO *fli) {  FLISTH DOSIOCALL file_list1st(const OEMCHAR *dir, FLINFO *fli) {
   
         char                    path[MAX_PATH];  
         HANDLE                  hdl;  
         WIN32_FIND_DATA w32fd;  
   
         milsjis_ncpy(path, dir, sizeof(path));          OEMCHAR path[MAX_PATH];
         file_setseparator(path, sizeof(path));          milstr_ncpy(path, dir, NELEMENTS(path));
         milsjis_ncat(path, "*.*", sizeof(path));          file_setseparator(path, NELEMENTS(path));
           milstr_ncat(path, OEMTEXT("*.*"), NELEMENTS(path));
         TRACEOUT(("file_list1st %s", path));          TRACEOUT(("file_list1st %s", path));
         hdl = FindFirstFile_A(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) {          if (hdl != INVALID_HANDLE_VALUE) {
                 do {                  do {
                         if (setflist(&w32fd, fli) == SUCCESS) {                          if (setflist(&w32fd, fli) == SUCCESS) {
Line 306  FLISTH file_list1st(const char *dir, FLI Line 271  FLISTH file_list1st(const char *dir, FLI
         return(FLISTH_INVALID);          return(FLISTH_INVALID);
 }  }
   
 BOOL file_listnext(FLISTH hdl, FLINFO *fli) {  BRESULT DOSIOCALL file_listnext(FLISTH hdl, FLINFO *fli) {
   
         WIN32_FIND_DATA w32fd;          WIN32_FIND_DATA w32fd;
   
Line 318  BOOL file_listnext(FLISTH hdl, FLINFO *f Line 283  BOOL file_listnext(FLISTH hdl, FLINFO *f
         return(FAILURE);          return(FAILURE);
 }  }
   
 void file_listclose(FLISTH hdl) {  void DOSIOCALL file_listclose(FLISTH hdl) {
   
         FindClose(hdl);          FindClose(hdl);
 }  }
   
   
 char *file_getname(char *path) {  OEMCHAR * DOSIOCALL file_getname(const OEMCHAR *path) {
   
         char    *ret;  const OEMCHAR   *ret;
           int                     csize;
   
         ret = path;          ret = path;
         while(*path != '\0') {          while((csize = milstr_charsize(path)) != 0) {
                 if (!ISKANJI(*path)) {                  if (csize == 1) {
                         if ((*path == '\\') || (*path == '/') || (*path == ':')) {                          if ((*path == '\\') || (*path == '/') || (*path == ':')) {
                                 ret = path + 1;                                  ret = path + 1;
                         }                          }
                 }                  }
                 else {                  path += csize;
                         if (path[1]) {  
                                 path++;  
                         }  
                 }  
                 path++;  
         }          }
         return(ret);          return((OEMCHAR *)ret);
 }  }
   
 void file_cutname(char *path) {  void DOSIOCALL file_cutname(OEMCHAR *path) {
   
         char    *p;          OEMCHAR *p;
   
         p = file_getname(path);          p = file_getname(path);
         p[0] = '\0';          p[0] = '\0';
 }  }
   
 char *file_getext(char *path) {  OEMCHAR * DOSIOCALL file_getext(const OEMCHAR *path) {
   
         char    *p;  const OEMCHAR   *p;
         char    *q;  const OEMCHAR   *q;
           int                     csize;
   
         p = file_getname(path);          p = file_getname(path);
         q = NULL;          q = NULL;
           while((csize = milstr_charsize(p)) != 0) {
         while(*p != '\0') {                  if ((csize == 1) && (*p == '.')) {
                 if (!ISKANJI(*p)) {                          q = p + 1;
                         if (*p == '.') {  
                                 q = p + 1;  
                         }  
                 }  
                 else {  
                         if (p[1]) {  
                                 p++;  
                         }  
                 }                  }
                 p++;                  p += csize;
         }          }
         if (!q) {          if (q == NULL) {
                 q = p;                  q = p;
         }          }
         return(q);          return((OEMCHAR *)q);
 }  }
   
 void file_cutext(char *path) {  void DOSIOCALL file_cutext(OEMCHAR *path) {
   
         char    *p;          OEMCHAR *p;
         char    *q;          OEMCHAR *q;
           int             csize;
   
         p = file_getname(path);          p = file_getname(path);
         q = NULL;          q = NULL;
           while((csize = milstr_charsize(p)) != 0) {
         while(*p != '\0') {                  if ((csize == 1) && (*p == '.')) {
                 if (!ISKANJI(*p)) {                          q = p;
                         if (*p == '.') {  
                                 q = p;  
                         }  
                 }  
                 else {  
                         if (p[1]) {  
                                 p++;  
                         }  
                 }                  }
                 p++;                  p += csize;
         }          }
         if (q) {          if (q) {
                 *q = '\0';                  *q = '\0';
         }          }
 }  }
   
 void file_cutseparator(char *path) {  void DOSIOCALL file_cutseparator(OEMCHAR *path) {
   
         int             pos;          int             pos;
   
         pos = strlen(path) - 1;          pos = OEMSTRLEN(path) - 1;
         if ((pos > 0) &&                                                        // 2文字以上でー          if ((pos > 0) &&                                                        // 2文字以上でー
                 (path[pos] == '\\') &&                                  // ケツが \ でー                  (path[pos] == '\\') &&                                  // ケツが \ でー
                 (!milstr_kanji2nd(path, pos)) &&                // 漢字の2バイト目ぢゃなくてー                  (!milstr_kanji2nd(path, pos)) &&                // 漢字の2バイト目ぢゃなくてー
Line 420  void file_cutseparator(char *path) { Line 367  void file_cutseparator(char *path) {
         }          }
 }  }
   
 void file_setseparator(char *path, int maxlen) {  void DOSIOCALL file_setseparator(OEMCHAR *path, int maxlen) {
   
         int             pos;          int             pos;
   
         pos = strlen(path) - 1;          pos = OEMSTRLEN(path) - 1;
         if ((pos < 0) ||          if ((pos < 0) ||
                 ((pos == 1) && (path[1] == ':')) ||                  ((pos == 1) && (path[1] == ':')) ||
                 ((path[pos] == '\\') && (!milstr_kanji2nd(path, pos))) ||                  ((path[pos] == '\\') && (!milstr_kanji2nd(path, pos))) ||

Removed from v.1.5  
changed lines
  Added in v.1.12


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