123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- #ifndef INCL_PHYSFSEXT_GLOBBING_H
- #define INCL_PHYSFSEXT_GLOBBING_H
- /** \file globbing.h */
- #include "physfs.h"
- /**
- * \mainpage PhysicsFS globbing
- *
- * This is an extension to PhysicsFS to let you search for files with basic
- * wildcard matching, regardless of what sort of filesystem or archive they
- * reside in. It does this by enumerating directories as needed and manually
- * locating matching entries.
- *
- * Usage: Set up PhysicsFS as you normally would, then use
- * PHYSFSEXT_enumerateFilesWildcard() when enumerating files. This is just
- * like PHYSFS_enumerateFiles(), but it returns a subset that matches your
- * wildcard pattern. You must call PHYSFSEXT_freeEnumeration() on the results,
- * just PHYSFS_enumerateFiles() would do with PHYSFS_freeList().
- *
- * License: this code is public domain. I make no warranty that it is useful,
- * correct, harmless, or environmentally safe.
- *
- * This particular file may be used however you like, including copying it
- * verbatim into a closed-source project, exploiting it commercially, and
- * removing any trace of my name from the source (although I hope you won't
- * do that). I welcome enhancements and corrections to this file, but I do
- * not require you to send me patches if you make changes. This code has
- * NO WARRANTY.
- *
- * Unless otherwise stated, the rest of PhysicsFS falls under the zlib license.
- * Please see LICENSE.txt in the source's "docs" directory.
- *
- * \author Ryan C. Gordon.
- */
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * \fn char **PHYSFS_enumerateFilesWildcard(const char *dir, const char *wildcard, int caseSensitive)
- * \brief Get a file listing of a search path's directory, filtered with a wildcard pattern.
- *
- * Matching directories are interpolated. That is, if "C:\mydir" is in the
- * search path and contains a directory "savegames" that contains "x.sav",
- * "y.Sav", and "z.txt", and there is also a "C:\userdir" in the search path
- * that has a "savegames" subdirectory with "w.sav", then the following code:
- *
- * \code
- * char **rc = PHYSFS_enumerateFilesWildcard("savegames", "*.sav", 0);
- * char **i;
- *
- * for (i = rc; *i != NULL; i++)
- * printf(" * We've got [%s].\n", *i);
- *
- * PHYSFS_freeList(rc);
- * \endcode
- *
- * ...will print:
- *
- * \verbatim
- * We've got [x.sav].
- * We've got [y.Sav].
- * We've got [w.sav].\endverbatim
- *
- * Feel free to sort the list however you like. We only promise there will
- * be no duplicates, but not what order the final list will come back in.
- *
- * Wildcard strings can use the '*' and '?' characters, currently.
- * Matches can be case-insensitive if you pass a zero for argument 3.
- *
- * Don't forget to call PHYSFSEXT_freeEnumerator() with the return value from
- * this function when you are done with it. As we use PhysicsFS's allocator
- * for this list, you must free it before calling PHYSFS_deinit().
- * Do not use PHYSFS_freeList() on the returned value!
- *
- * \param dir directory in platform-independent notation to enumerate.
- * \param wildcard Wildcard pattern to use for filtering.
- * \param caseSensitive Zero for case-insensitive matching,
- * non-zero for case-sensitive.
- * \return Null-terminated array of null-terminated strings.
- *
- * \sa PHYSFSEXT_freeEnumeration
- */
- PHYSFS_DECL char **PHYSFSEXT_enumerateFilesWildcard(const char *dir,
- const char *wildcard,
- int caseSensitive);
- /**
- * \fn void PHYSFSEXT_freeEnumeration(char **list)
- * \brief Free data returned by PHYSFSEXT_enumerateFilesWildcard
- *
- * Conceptually, this works like PHYSFS_freeList(), but is used with data
- * returned by PHYSFSEXT_enumerateFilesWildcard() only. Be sure to call this
- * on any returned data from that function before
- *
- * \param list Pointer previously returned by
- * PHYSFSEXT_enumerateFilesWildcard(). It is safe to pass a
- * NULL here.
- *
- * \sa PHYSFSEXT_enumerateFilesWildcard
- */
- PHYSFS_DECL void PHYSFSEXT_freeEnumeration(char **list);
- /**
- * \fn void PHYSFSEXT_enumerateFilesCallbackWildcard(const char *dir, const char *wildcard, int caseSensitive, PHYSFS_EnumFilesCallback c, void *d);
- * \brief Get a file listing of a search path's directory, filtered with a wildcard pattern, using an application-defined callback.
- *
- * This function is equivalent to PHYSFSEXT_enumerateFilesWildcard(). It
- * reports file listings, filtered by a wildcard pattern.
- *
- * Unlike PHYSFS_enumerateFiles(), this function does not return an array.
- * Rather, it calls a function specified by the application once per
- * element of the search path:
- *
- * \code
- *
- * static void printDir(void *data, const char *origdir, const char *fname)
- * {
- * printf(" * We've got [%s] in [%s].\n", fname, origdir);
- * }
- *
- * // ...
- * PHYSFS_enumerateFilesCallbackWildcard("savegames","*.sav",0,printDir,NULL);
- * \endcode
- *
- * Items sent to the callback are not guaranteed to be in any order whatsoever.
- * There is no sorting done at this level, and if you need that, you should
- * probably use PHYSFS_enumerateFilesWildcard() instead, which guarantees
- * alphabetical sorting. This form reports whatever is discovered in each
- * archive before moving on to the next. Even within one archive, we can't
- * guarantee what order it will discover data. <em>Any sorting you find in
- * these callbacks is just pure luck. Do not rely on it.</em> As this walks
- * the entire list of archives, you may receive duplicate filenames.
- *
- * Wildcard strings can use the '*' and '?' characters, currently.
- * Matches can be case-insensitive if you pass a zero for argument 3.
- *
- * \param dir Directory, in platform-independent notation, to enumerate.
- * \param wildcard Wildcard pattern to use for filtering.
- * \param caseSensitive Zero for case-insensitive matching,
- * non-zero for case-sensitive.
- * \param c Callback function to notify about search path elements.
- * \param d Application-defined data passed to callback. Can be NULL.
- *
- * \sa PHYSFS_EnumFilesCallback
- * \sa PHYSFS_enumerateFiles
- */
- PHYSFS_DECL void PHYSFSEXT_enumerateFilesCallbackWildcard(const char *dir,
- const char *wildcard,
- int caseSensitive,
- PHYSFS_EnumFilesCallback c,
- void *d);
- #ifdef __cplusplus
- }
- #endif
- #endif /* include-once blocker. */
- /* end of globbing.h ... */
|