home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2233.zip / wxOS2-2_3_3.zip / wxWindows-2.3.3 / include / wx / filefn.h < prev    next >
C/C++ Source or Header  |  2002-08-31  |  13KB  |  362 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        filefn.h
  3. // Purpose:     File- and directory-related functions
  4. // Author:      Julian Smart
  5. // Modified by:
  6. // Created:     29/01/98
  7. // RCS-ID:      $Id: filefn.h,v 1.61 2002/08/31 11:29:10 GD Exp $
  8. // Copyright:   (c) 1998 Julian Smart
  9. // Licence:     wxWindows license
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifndef   _FILEFN_H_
  13. #define   _FILEFN_H_
  14.  
  15. #if defined(__GNUG__) && !defined(__APPLE__)
  16.     #pragma interface "filefn.h"
  17. #endif
  18.  
  19. #include "wx/list.h"
  20.  
  21. #include <time.h>
  22.  
  23. // ----------------------------------------------------------------------------
  24. // constants
  25. // ----------------------------------------------------------------------------
  26.  
  27. // define off_t
  28. #if !defined(__WXMAC__) || defined(__UNIX__)
  29.     #include  <sys/types.h>
  30. #else
  31.     typedef long off_t;
  32. #endif
  33.  
  34. #if defined(__VISUALC__) || ( defined(__MWERKS__) && defined( __INTEL__) )
  35.     typedef _off_t off_t;
  36. #elif defined(__BORLANDC__) && defined(__WIN16__)
  37.     typedef long off_t;
  38. #elif defined(__SC__)
  39.     typedef long off_t;
  40. #elif defined(__MWERKS__) && !defined(__INTEL__)
  41.     typedef long off_t;
  42. #endif
  43.  
  44. #if defined(__VISAGECPP__) && __IBMCPP__ >= 400
  45. //
  46. // VisualAge C++ V4.0 cannot have any external linkage const decs
  47. // in headers included by more than one primary source
  48. //
  49. extern const off_t wxInvalidOffset;
  50. #else
  51. const off_t wxInvalidOffset = (off_t)-1;
  52. #endif
  53.  
  54. enum wxSeekMode
  55. {
  56.   wxFromStart,
  57.   wxFromCurrent,
  58.   wxFromEnd
  59. };
  60.  
  61. WXDLLEXPORT_DATA(extern const wxChar*) wxEmptyString;
  62.  
  63. // ----------------------------------------------------------------------------
  64. // declare our versions of low level file functions: some compilers prepend
  65. // underscores to the usual names, some also have Unicode versions of them
  66. // ----------------------------------------------------------------------------
  67.  
  68. // Microsoft compiler loves underscores, feed them to it
  69. #if defined( __VISUALC__ ) \
  70.     || ( defined(__MINGW32__) && wxCHECK_W32API_VERSION( 0, 5 ) ) \
  71.     || ( defined(__MWERKS__) && defined(__WXMSW__) )
  72.     // functions
  73.     #define   wxClose      _close
  74.     #define   wxRead       _read
  75.     #define   wxWrite      _write
  76.     #define   wxLseek      _lseek
  77.     #define   wxFsync      _commit
  78.     #define   wxEof        _eof
  79.  
  80.     #define   wxTell       _tell
  81.  
  82.     #if wxUSE_UNICODE
  83.         #if wxUSE_UNICODE_MSLU
  84.             #define   wxOpen       wxMSLU__wopen
  85.             #define   wxAccess     wxMSLU__waccess
  86.             #define   wxMkDir      wxMSLU__wmkdir
  87.             #define   wxRmDir      wxMSLU__wrmdir
  88.             #define   wxStat       wxMSLU__wstat
  89.         #else
  90.             #define   wxOpen       _wopen
  91.             #define   wxAccess     _waccess
  92.             #define   wxMkDir      _wmkdir
  93.             #define   wxRmDir      _wrmdir
  94.             #define   wxStat       _wstat
  95.         #endif
  96.     #else // !wxUSE_UNICODE
  97.         #define   wxOpen       _open
  98.         #define   wxAccess     _access
  99.         #define   wxMkDir      _mkdir
  100.         #define   wxRmDir      _rmdir
  101.         #define   wxStat       _stat
  102.     #endif
  103.  
  104.     // types
  105.     #define   wxStructStat struct _stat
  106.  
  107.     // constants (unless already defined by the user code)
  108.     #ifndef O_RDONLY
  109.         #define   O_RDONLY    _O_RDONLY
  110.         #define   O_WRONLY    _O_WRONLY
  111.         #define   O_RDWR      _O_RDWR
  112.         #define   O_EXCL      _O_EXCL
  113.         #define   O_CREAT     _O_CREAT
  114.         #define   O_BINARY    _O_BINARY
  115.  
  116.         #define   S_IFMT      _S_IFMT
  117.         #define   S_IFDIR     _S_IFDIR
  118.         #define   S_IFREG     _S_IFREG
  119.     #endif // O_RDONLY
  120. #else
  121.     // functions
  122.     #define   wxClose      close
  123.     #define   wxRead       read
  124.     #define   wxWrite      write
  125.     #define   wxLseek      lseek
  126.     #define   wxFsync      commit
  127.     #define   wxEof        eof
  128.  
  129.     #define   wxMkDir      mkdir
  130.     #define   wxRmDir      rmdir
  131.  
  132.     #define   wxTell(fd)   lseek(fd, 0, SEEK_CUR)
  133.  
  134.     #define   wxStructStat struct stat
  135.     
  136. #if wxUSE_UNICODE
  137. #   define wxNEED_WX_UNISTD_H
  138. WXDLLEXPORT int wxStat( const wxChar *file_name, wxStructStat *buf );
  139. WXDLLEXPORT int wxAccess( const wxChar *pathname, int mode );
  140. WXDLLEXPORT int wxOpen( const wxChar *pathname, int flags, mode_t mode );
  141. #else
  142.     #define   wxOpen       open
  143.     #define   wxStat       stat
  144.     #define   wxAccess     access
  145. #endif
  146.  
  147. #endif  // VC++
  148.  
  149. // ----------------------------------------------------------------------------
  150. // functions
  151. // ----------------------------------------------------------------------------
  152. WXDLLEXPORT bool wxFileExists(const wxString& filename);
  153. #define FileExists wxFileExists
  154.  
  155. // does the path exist? (may have or not '/' or '\\' at the end)
  156. WXDLLEXPORT bool wxPathExists(const wxChar *pszPathName);
  157.  
  158. #define wxDirExists wxPathExists
  159. #define DirExists wxDirExists
  160.  
  161. WXDLLEXPORT bool wxIsAbsolutePath(const wxString& filename);
  162. #define IsAbsolutePath wxIsAbsolutePath
  163.  
  164. // Get filename
  165. WXDLLEXPORT wxChar* wxFileNameFromPath(wxChar *path);
  166. WXDLLEXPORT wxString wxFileNameFromPath(const wxString& path);
  167. #define FileNameFromPath wxFileNameFromPath
  168.  
  169. // Get directory
  170. WXDLLEXPORT wxString wxPathOnly(const wxString& path);
  171. #define PathOnly wxPathOnly
  172.  
  173. // wxString version
  174. WXDLLEXPORT wxString wxRealPath(const wxString& path);
  175.  
  176. WXDLLEXPORT void wxDos2UnixFilename(wxChar *s);
  177. #define Dos2UnixFilename wxDos2UnixFilename
  178.  
  179. WXDLLEXPORT void wxUnix2DosFilename(wxChar *s);
  180. #define Unix2DosFilename wxUnix2DosFilename
  181.  
  182. // Strip the extension, in situ
  183. WXDLLEXPORT void wxStripExtension(wxChar *buffer);
  184. WXDLLEXPORT void wxStripExtension(wxString& buffer);
  185.  
  186. // Get a temporary filename
  187. WXDLLEXPORT wxChar* wxGetTempFileName(const wxString& prefix, wxChar *buf = (wxChar *) NULL);
  188. WXDLLEXPORT bool wxGetTempFileName(const wxString& prefix, wxString& buf);
  189.  
  190. // Expand file name (~/ and ${OPENWINHOME}/ stuff)
  191. WXDLLEXPORT wxChar* wxExpandPath(wxChar *dest, const wxChar *path);
  192. WXDLLEXPORT bool wxExpandPath(wxString& dest, const wxChar *path);
  193.  
  194. // Contract w.r.t environment (</usr/openwin/lib, OPENWHOME> -> ${OPENWINHOME}/lib)
  195. // and make (if under the home tree) relative to home
  196. // [caller must copy-- volatile]
  197. WXDLLEXPORT wxChar* wxContractPath(const wxString& filename,
  198.                                    const wxString& envname = wxEmptyString,
  199.                                    const wxString& user = wxEmptyString);
  200.  
  201. // Destructive removal of /./ and /../ stuff
  202. WXDLLEXPORT wxChar* wxRealPath(wxChar *path);
  203.  
  204. // Allocate a copy of the full absolute path
  205. WXDLLEXPORT wxChar* wxCopyAbsolutePath(const wxString& path);
  206.  
  207. // Get first file name matching given wild card.
  208. // Flags are reserved for future use.
  209. #define wxFILE  1
  210. #define wxDIR   2
  211. WXDLLEXPORT wxString wxFindFirstFile(const wxChar *spec, int flags = wxFILE);
  212. WXDLLEXPORT wxString wxFindNextFile();
  213.  
  214. // Does the pattern contain wildcards?
  215. WXDLLEXPORT bool wxIsWild(const wxString& pattern);
  216.  
  217. // Does the pattern match the text (usually a filename)?
  218. // If dot_special is TRUE, doesn't match * against . (eliminating
  219. // `hidden' dot files)
  220. WXDLLEXPORT bool wxMatchWild(const wxString& pattern,  const wxString& text, bool dot_special = TRUE);
  221.  
  222. // Concatenate two files to form third
  223. WXDLLEXPORT bool wxConcatFiles(const wxString& file1, const wxString& file2, const wxString& file3);
  224.  
  225. // Copy file1 to file2
  226. WXDLLEXPORT bool wxCopyFile(const wxString& file1, const wxString& file2,
  227.                             bool overwrite = TRUE);
  228.  
  229. // Remove file
  230. WXDLLEXPORT bool wxRemoveFile(const wxString& file);
  231.  
  232. // Rename file
  233. WXDLLEXPORT bool wxRenameFile(const wxString& file1, const wxString& file2);
  234.  
  235. // Get current working directory.
  236. // If buf is NULL, allocates space using new, else
  237. // copies into buf.
  238. // IMPORTANT NOTE getcwd is know not to work under some releases
  239. // of Win32s 1.3, according to MS release notes!
  240. WXDLLEXPORT wxChar* wxGetWorkingDirectory(wxChar *buf = (wxChar *) NULL, int sz = 1000);
  241. // new and preferred version of wxGetWorkingDirectory
  242. // NB: can't have the same name because of overloading ambiguity
  243. WXDLLEXPORT wxString wxGetCwd();
  244.  
  245. // Set working directory
  246. WXDLLEXPORT bool wxSetWorkingDirectory(const wxString& d);
  247.  
  248. // Make directory
  249. WXDLLEXPORT bool wxMkdir(const wxString& dir, int perm = 0777);
  250.  
  251. // Remove directory. Flags reserved for future use.
  252. WXDLLEXPORT bool wxRmdir(const wxString& dir, int flags = 0);
  253.  
  254. // ----------------------------------------------------------------------------
  255. // separators in file names
  256. // ----------------------------------------------------------------------------
  257.  
  258. // between file name and extension
  259. #define wxFILE_SEP_EXT        wxT('.')
  260.  
  261. // between drive/volume name and the path
  262. #define wxFILE_SEP_DSK        wxT(':')
  263.  
  264. // between the path components
  265. #define wxFILE_SEP_PATH_DOS   wxT('\\')
  266. #define wxFILE_SEP_PATH_UNIX  wxT('/')
  267. #define wxFILE_SEP_PATH_MAC   wxT(':')
  268. #define wxFILE_SEP_PATH_VMS   wxT('.') // VMS also uses '[' and ']'
  269.  
  270. // separator in the path list (as in PATH environment variable)
  271. // there is no PATH variable in Classic Mac OS so just use the
  272. // semicolon (it must be different from the file name separator)
  273. // NB: these are strings and not characters on purpose!
  274. #define wxPATH_SEP_DOS        wxT(";")
  275. #define wxPATH_SEP_UNIX       wxT(":")
  276. #define wxPATH_SEP_MAC        wxT(";")
  277.  
  278. // platform independent versions
  279. #if defined(__UNIX__) && !defined(__CYGWIN__)
  280.   #define wxFILE_SEP_PATH     wxFILE_SEP_PATH_UNIX
  281.   #define wxPATH_SEP          wxPATH_SEP_UNIX
  282. #elif defined(__MAC__)
  283.   #define wxFILE_SEP_PATH     wxFILE_SEP_PATH_MAC
  284.   #define wxPATH_SEP          wxPATH_SEP_MAC
  285. #elif defined(__CYGWIN__) // Cygwin
  286.   #define wxFILE_SEP_PATH     wxFILE_SEP_PATH_DOS
  287.   #define wxPATH_SEP          wxPATH_SEP_UNIX
  288. #else   // Windows and OS/2
  289.   #define wxFILE_SEP_PATH     wxFILE_SEP_PATH_DOS
  290.   #define wxPATH_SEP          wxPATH_SEP_DOS
  291. #endif  // Unix/Windows
  292.  
  293. // this is useful for wxString::IsSameAs(): to compare two file names use
  294. // filename1.IsSameAs(filename2, wxARE_FILENAMES_CASE_SENSITIVE)
  295. #if defined(__UNIX__) && !defined(__DARWIN__)
  296.   #define wxARE_FILENAMES_CASE_SENSITIVE  TRUE
  297. #else   // Windows, Mac OS and OS/2
  298.   #define wxARE_FILENAMES_CASE_SENSITIVE  FALSE
  299. #endif  // Unix/Windows
  300.  
  301. // is the char a path separator?
  302. inline bool wxIsPathSeparator(wxChar c)
  303. {
  304.     // under DOS/Windows we should understand both Unix and DOS file separators
  305. #if defined(__UNIX__) || defined(__MAC__)
  306.     return c == wxFILE_SEP_PATH;
  307. #else
  308.     return c == wxFILE_SEP_PATH_DOS || c == wxFILE_SEP_PATH_UNIX;
  309. #endif
  310. }
  311.  
  312. // does the string ends with path separator?
  313. WXDLLEXPORT bool wxEndsWithPathSeparator(const wxChar *pszFileName);
  314.  
  315. // split the full path into path (including drive for DOS), name and extension
  316. // (understands both '/' and '\\')
  317. WXDLLEXPORT void wxSplitPath(const wxChar *pszFileName,
  318.                              wxString *pstrPath,
  319.                              wxString *pstrName,
  320.                              wxString *pstrExt);
  321.  
  322. // find a file in a list of directories, returns false if not found
  323. WXDLLEXPORT bool wxFindFileInPath(wxString *pStr, const wxChar *pszPath, const wxChar *pszFile);
  324.  
  325. // Get the OS directory if appropriate (such as the Windows directory).
  326. // On non-Windows platform, probably just return the empty string.
  327. WXDLLEXPORT wxString wxGetOSDirectory();
  328.  
  329. // Get file modification time
  330. WXDLLEXPORT time_t wxFileModificationTime(const wxString& filename);
  331.  
  332. // ----------------------------------------------------------------------------
  333. // classes
  334. // ----------------------------------------------------------------------------
  335.  
  336. // Path searching
  337. class WXDLLEXPORT wxPathList : public wxStringList
  338. {
  339. public:
  340.     // Adds all paths in environment variable
  341.     void AddEnvList(const wxString& envVariable);
  342.  
  343.     void Add(const wxString& path);
  344.     // Avoid compiler warning
  345.     wxNode *Add(const wxChar *s) { return wxStringList::Add(s); }
  346.     // Find the first full path for which the file exists
  347.     wxString FindValidPath(const wxString& filename);
  348.     // Find the first full path for which the file exists; ensure it's an
  349.     // absolute path that gets returned.
  350.     wxString FindAbsoluteValidPath(const wxString& filename);
  351.     // Given full path and filename, add path to list
  352.     void EnsureFileAccessible(const wxString& path);
  353.     // Returns TRUE if the path is in the list
  354.     bool Member(const wxString& path);
  355.  
  356. private:
  357.     DECLARE_DYNAMIC_CLASS(wxPathList)
  358. };
  359.  
  360. #endif
  361.   // _WX_FILEFN_H_
  362.