+// ----------------------------------------------------------------------------
+// declare our versions of low level file functions: some compilers prepend
+// underscores to the usual names, some also have Unicode versions of them
+// ----------------------------------------------------------------------------
+
+// Wrappers around Win32 api functions like CreateFile, ReadFile and such
+// Implemented in filefnwce.cpp
+#if defined( __WXWINCE__)
+ typedef __int64 wxFileOffset;
+ typedef unsigned __int64 wxFileSize_t;
+ #define wxFileOffsetFmtSpec _("I64")
+ int wxOpen(const wxChar *filename, int oflag, int WXUNUSED(pmode));
+ int wxAccess(const wxChar *name, int WXUNUSED(how));
+ int wxClose(int fd);
+ int wxFsync(int WXUNUSED(fd));
+ int wxRead(int fd, void *buf, unsigned int count);
+ int wxWrite(int fd, const void *buf, unsigned int count);
+ int wxEof(int fd);
+ wxFileOffset wxSeek(int fd, wxFileOffset offset, int origin);
+ #define wxLSeek wxSeek
+ wxFileOffset wxTell(int fd);
+
+ #if wxUSE_UNICODE
+ #if wxUSE_UNICODE_MSLU
+ #define wxMkDir wxMSLU__wmkdir
+ #define wxRmDir wxMSLU__wrmdir
+ #define wxStat wxMSLU__wstat
+ #else
+ #define wxMkDir _wmkdir
+ #define wxRmDir _wrmdir
+ #define wxStat _wstat
+ #endif
+ #else // !wxUSE_UNICODE
+ #define wxMkDir _mkdir
+ #ifdef __WATCOMC__
+ #define wxRmDir rmdir
+ #else
+ #define wxRmDir _rmdir
+ #endif
+ #define wxStat _stat
+ #endif
+ #define wxStructStat struct _stat
+
+// Microsoft compiler loves underscores, feed them to it
+#elif defined( __VISUALC__ ) \
+ || ( defined(__MINGW32__) && !defined(__WINE__) && wxCHECK_W32API_VERSION( 0, 5 ) ) \
+ || ( defined(__MWERKS__) && defined(__WXMSW__) ) \
+ || ( defined(__DMC__) && defined(__WXMSW__) ) \
+ || ( defined(__WATCOMC__) && defined(__WXMSW__) )
+
+ // detect compilers which have support for huge files (currently only
+ // Digital Mars doesn't)
+ #ifndef __PALMOS__
+ #include "wx/msw/private.h"
+ #endif
+
+ #undef wxHAS_HUGE_FILES
+ #if defined(__MINGW32__)
+ #define wxHAS_HUGE_FILES 1
+ #elif defined(__MWERKS__)
+ #define wxHAS_HUGE_FILES 0
+ #elif defined(__DMC__)
+ #define wxHAS_HUGE_FILES 0
+ #elif ((_INTEGRAL_MAX_BITS >= 64) || defined(_LARGE_FILES))
+ #define wxHAS_HUGE_FILES 1
+ #else
+ #define wxHAS_HUGE_FILES 0
+ #endif
+
+ // functions
+ #if defined(__BORLANDC__) || defined(__WATCOMC__)
+ #define _tell tell
+ #endif
+
+ #if wxHAS_HUGE_FILES
+ typedef wxLongLong_t wxFileOffset;
+ typedef unsigned wxLongLong_t wxFileSize_t;
+ #define wxFileOffsetFmtSpec wxLongLongFmtSpec
+ #else
+ typedef off_t wxFileOffset;
+ typedef unsigned long wxFileSize_t;
+ #endif
+
+ #define wxClose _close
+
+ #if defined(__MWERKS__)
+ #if __MSL__ >= 0x6000
+ #define wxRead(fd, buf, nCount) _read(fd, (void *)buf, nCount)
+ #define wxWrite(fd, buf, nCount) _write(fd, (void *)buf, nCount)
+ #else
+ #define wxRead(fd, buf, nCount)\
+ _read(fd, (const char *)buf, nCount)
+ #define wxWrite(fd, buf, nCount)\
+ _write(fd, (const char *)buf, nCount)
+ #endif
+ #else
+ #if defined(__WATCOMC__)
+ inline wxFileSize_t wxRead( int handle, void *buffer, wxFileSize_t len )
+ { return ::read( handle, buffer, (unsigned int)len ); }
+ inline wxFileSize_t wxWrite( int handle, const void *buffer, wxFileSize_t len )
+ { return ::write( handle, buffer, (unsigned int)len ); }
+ #elif defined(__DMC__)
+ #define wxRead ::read
+ #define wxWrite ::write
+ #else
+ #define wxRead _read
+ #define wxWrite _write
+ #endif
+ #endif
+ #if wxHAS_HUGE_FILES
+ #define wxSeek _lseeki64
+ #define wxLseek _lseeki64
+ #define wxTell _telli64
+ #else
+ #define wxSeek _lseek
+ #define wxLseek _lseek
+ #define wxTell _tell
+ #endif
+ #define wxFsync _commit
+ #if defined(__WATCOMC__)
+ #define wxEof ::eof
+ #else
+ #define wxEof _eof
+ #endif
+
+ #if wxUSE_UNICODE
+ #if wxUSE_UNICODE_MSLU
+ #define wxOpen wxMSLU__wopen
+
+ #define wxAccess wxMSLU__waccess
+ #define wxMkDir wxMSLU__wmkdir
+ #define wxRmDir wxMSLU__wrmdir
+ #if wxHAS_HUGE_FILES
+ #define wxStat wxMSLU__wstati64
+ #else
+ #define wxStat wxMSLU__wstat
+ #endif
+ #else
+ #define wxOpen _wopen
+ #define wxAccess _waccess
+ #define wxMkDir _wmkdir
+ #define wxRmDir _wrmdir
+ #if wxHAS_HUGE_FILES
+ #define wxStat _wstati64
+ #else
+ #define wxStat _wstat
+ #endif
+ #endif
+ #else // !wxUSE_UNICODE
+ #ifdef __BORLANDC__
+ #define wxOpen open
+ #else
+ #define wxOpen _open
+ #endif
+ #define wxAccess _access
+ #define wxMkDir _mkdir
+ #ifdef __WATCOMC__
+ #define wxRmDir rmdir
+ #else
+ #define wxRmDir _rmdir
+ #endif
+ #if wxHAS_HUGE_FILES
+ #define wxStat _stati64
+ #else
+ #define wxStat _stat
+ #endif
+ #endif
+
+ // types: notice that Watcom is the only compiler to have a wide char
+ // version of struct stat as well as a wide char stat function variant
+ #if wxHAS_HUGE_FILES
+ #if wxUSE_UNICODE && defined(__WATCOMC__)
+ #define wxStructStat struct _wstati64
+ #else
+ #define wxStructStat struct _stati64
+ #endif
+ #else
+ #if wxUSE_UNICODE && defined(__WATCOMC__)
+ #define wxStructStat struct _wstat
+ #else
+ #define wxStructStat struct _stat
+ #endif
+ #endif
+
+ // constants (unless already defined by the user code)
+ #if !defined(__BORLANDC__) && !defined(__WATCOMC__) && !defined(__PALMOS__)
+ #ifndef O_RDONLY
+ #define O_RDONLY _O_RDONLY
+ #define O_WRONLY _O_WRONLY
+ #define O_RDWR _O_RDWR
+ #define O_EXCL _O_EXCL
+ #define O_CREAT _O_CREAT
+ #define O_BINARY _O_BINARY
+ #endif
+
+ #ifndef S_IFMT
+ #define S_IFMT _S_IFMT
+ #define S_IFDIR _S_IFDIR
+ #define S_IFREG _S_IFREG
+ #endif
+ #endif
+
+ // It's a private define, undefine it so nobody gets tempted to use it
+ #undef wxHAS_HUGE_FILES
+#else // Unix platforms using configure
+ typedef off_t wxFileOffset;
+ #ifdef _LARGE_FILES
+ #define wxFileOffsetFmtSpec wxLongLongFmtSpec
+ wxCOMPILE_TIME_ASSERT( sizeof(off_t) == sizeof(wxLongLong_t),
+ BadFileSizeType );
+ typedef unsigned wxLongLong_t wxFileSize_t;
+ #else
+ #define wxFileOffsetFmtSpec _T("")
+ typedef unsigned long wxFileSize_t;
+ #endif
+ // functions
+ #define wxClose close
+ #define wxRead ::read
+ #define wxWrite ::write
+ #define wxLseek lseek
+ #define wxSeek lseek
+ #define wxFsync commit
+ #define wxEof eof
+
+ #define wxMkDir mkdir
+ #define wxRmDir rmdir
+
+ #define wxTell(fd) lseek(fd, 0, SEEK_CUR)
+
+ #define wxStructStat struct stat
+
+ #if wxUSE_UNICODE
+ #define wxNEED_WX_UNISTD_H
+ #if defined(__DMC__)
+ typedef unsigned long mode_t;
+ #endif
+ WXDLLIMPEXP_BASE int wxStat( const wxChar *file_name, wxStructStat *buf );
+ WXDLLIMPEXP_BASE int wxAccess( const wxChar *pathname, int mode );
+ WXDLLIMPEXP_BASE int wxOpen( const wxChar *pathname, int flags, mode_t mode );
+ #else
+ #define wxOpen open
+ #define wxStat stat
+ #define wxAccess access
+ #endif
+#endif // platforms
+
+#if defined(__VISAGECPP__) && __IBMCPP__ >= 400
+//
+// VisualAge C++ V4.0 cannot have any external linkage const decs
+// in headers included by more than one primary source
+//
+extern const wxFileSize_t wxInvalidOffset;
+#else
+const wxFileSize_t wxInvalidOffset = (wxFileSize_t)-1;
+#endif