diff options
Diffstat (limited to 'fltk/fltk/filename.h')
-rw-r--r-- | fltk/fltk/filename.h | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/fltk/fltk/filename.h b/fltk/fltk/filename.h new file mode 100644 index 0000000..6743406 --- /dev/null +++ b/fltk/fltk/filename.h @@ -0,0 +1,131 @@ +// "$Id: filename.h 6483 2008-10-22 07:01:02Z spitzak $" + +/* Copyright 1998-2006 by Bill Spitzak and others. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * Please report all bugs and problems to "fltk-bugs@fltk.org". + * + * These functions are not in the fltk namespace because they really + * should not be part of fltk. They are used by the file chooser. + * THESE FUNCTIONS MAY BE CHANGED OR DELETED IN FUTURE VERSIONS. DO + * NOT USE THEM, AS THEY ARE NOT AN OFFICIAL PART OF fltk! + */ + +#ifndef fltk_filename_h +#define fltk_filename_h + +#include "FL_API.h" + +//////////////////////////////////////////////////////////////// +#ifndef DOXYGEN +// dirent (what a pain)... + +// FC: UNDER WIN32/VC6 long long is undefined, so use __int64 instead +// for cross platform type compatibility though in fact VC6 uses +// a 32 bit long to calculate size in the stat struct so don't expect +// to handle >4GB files here... +#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) && (_MSC_VER==1200) +typedef unsigned __int64 FL_FILESIZE_T; +#else +typedef unsigned long long FL_FILESIZE_T; +#endif + +#if defined(__WATCOMC__) + +# include <sys/types.h> +# include "direct.h" + +#elif defined(_WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__) +// Dummy version used on win32 that just holds a name: + +struct dirent {char d_name[1];}; + +#elif defined(__linux) +// Newest Linux libc is broken when it emulates the 32-bit dirent, it +// generates errors when the data like the inode number does not fit, even +// though we are not going to look at anything other than the name. This +// code seems to force the 64-bit version to be used: + +# ifndef _GNU_SOURCE +# define _GNU_SOURCE +# endif +# include <features.h> +# include <sys/types.h> +# include <dirent.h> +# if defined(__GLIBC_PREREQ) +# if __GLIBC_PREREQ(2,3) +# define dirent dirent64 +# define scandir scandir64 +# endif +# endif + +#else +// warning: on some systems (very few nowadays?) <dirent.h> may not exist. +// The correct information is in one of these three files: +// #include <sys/ndir.h> +// #include <sys/dir.h> +// #include <ndir.h> +// plus you must do the following #define: +// #define dirent direct +// I recommend you create a /usr/include/dirent.h containing the correct info + +# include <sys/types.h> +# include <dirent.h> + +#endif + +#ifndef PATH_MAX +# ifdef _MAX_PATH +# define PATH_MAX _MAX_PATH +# else +# define PATH_MAX 1024 +# endif +#endif + +#endif +//////////////////////////////////////////////////////////////// + +namespace fltk { + +/// \name fltk/filename.h +/// Some functions to manipulate filenames, to make portable programs. +//@{ + +FL_API int filename_absolute(char *to, int tolen, const char *from, const char* cwd=0); +FL_API int filename_relative(char *to, int tolen, const char *from, const char* cwd=0); +FL_API const char *filename_name(const char *); +inline char* filename_name(char* a) {return (char*)(filename_name((const char*)a));} +FL_API const char *filename_ext(const char *); +inline char* filename_ext(char* a) {return (char*)(filename_ext((const char*)a));} +FL_API bool filename_match(const char *, const char *pattern); // glob match +FL_API bool filename_exist(const char*); +FL_API bool filename_isdir(const char*); +FL_API FL_FILESIZE_T filename_size(const char *); // return size of file +FL_API long int filename_mtime(const char *); // return modification time + +typedef int (File_Sort_F)(const dirent*const*, const dirent*const*); +FL_API int alphasort(const dirent*const*, const dirent*const*); +FL_API int casealphasort(const dirent*const*, const dirent*const*); +FL_API int casenumericsort(const dirent*const*, const dirent*const*); +FL_API int numericsort(const dirent*const*, const dirent*const*); +FL_API int filename_list(const char *d, dirent ***list, File_Sort_F *sort); +FL_API int filename_list(const char *d, dirent ***list); // uses numericsort + +//@} + +} + +#endif + +// End of "$Id: filename.h 6483 2008-10-22 07:01:02Z spitzak $". |