+/** @defgroup G_general General
+ *
+ * @brief Declarations and structures shared across the library.
+ */
+
+/** @defgroup G_creating_and_opening_wims Creating and Opening WIMs
+ *
+ * @brief Create new WIMs and open existing WIMs.
+ */
+
+/** @defgroup G_wim_information Retrieving WIM information and directory listings
+ *
+ * @brief Retrieve information about a WIM or WIM image.
+ */
+
+/** @defgroup G_modifying_wims Modifying WIMs
+ *
+ * @brief Make changes to a WIM.
+ *
+ * @section sec_adding_images Capturing and adding WIM images
+ *
+ * As described in @ref sec_basic_wim_handling_concepts, capturing a new WIM or
+ * appending an image to an existing WIM is a multi-step process, but at its
+ * core is wimlib_add_image() or an equivalent function. Normally,
+ * wimlib_add_image() takes an on-disk directory tree and logically adds it to a
+ * ::WIMStruct as a new image. However, when supported by the build of the
+ * library, there is also a special NTFS volume capture mode (entered when
+ * ::WIMLIB_ADD_FLAG_NTFS is specified) that allows adding the image directly
+ * from an unmounted NTFS volume.
+ *
+ * Another function, wimlib_add_image_multisource() is also provided. It
+ * generalizes wimlib_add_image() to allow combining multiple files or directory
+ * trees into a single WIM image in a configurable way.
+ *
+ * For maximum customization of WIM image creation, it is also possible to add a
+ * completely empty WIM image with wimlib_add_empty_image(), then update it with
+ * wimlib_update_image(). (This is in fact what wimlib_add_image() and
+ * wimlib_add_image_multisource() do internally.)
+ *
+ * Note that some details of how image addition/capture works are documented
+ * more fully in the manual page for <b>wimlib-imagex capture</b>.
+ *
+ * @section sec_deleting_images Deleting WIM images
+ *
+ * wimlib_delete_image() can delete an image from a ::WIMStruct. But as usual,
+ * wimlib_write() or wimlib_overwrite() must be called to cause the changes to
+ * be made persistent in an on-disk WIM file.
+ *
+ * @section sec_exporting_images Exporting WIM images
+ *
+ * wimlib_export_image() can copy, or "export", an image from one WIM to
+ * another.
+ *
+ * @section sec_other_modifications Other modifications
+ *
+ * wimlib_update_image() can add, delete, and rename files in a WIM image.
+ *
+ * wimlib_set_image_name(), wimlib_set_image_descripton(), and
+ * wimlib_set_image_flags() can change other image metadata.
+ *
+ * wimlib_set_wim_info() can change information about the WIM file itself, such
+ * as the boot index.
+ */
+
+/** @defgroup G_extracting_wims Extracting WIMs
+ *
+ * @brief Extract files, directories, and images from a WIM.
+ *
+ * wimlib_extract_image() extracts, or "applies", an image from a WIM,
+ * represented by a ::WIMStruct. This normally extracts the image to a
+ * directory, but when supported by the build of the library there is also a
+ * special NTFS volume extraction mode (entered when ::WIMLIB_EXTRACT_FLAG_NTFS
+ * is specified) that allows extracting a WIM image directly to an unmounted
+ * NTFS volume. Various other flags allow further customization of image
+ * extraction.
+ *
+ * wimlib_extract_paths() and wimlib_extract_pathlist() allow extracting a list
+ * of (possibly wildcard) paths from a WIM image.
+ *
+ * wimlib_extract_image_from_pipe() extracts an image from a pipable WIM sent
+ * over a pipe; see @ref subsec_pipable_wims.
+ *
+ * Some details of how WIM extraction works are documented more fully in the
+ * manual pages for <b>wimlib-imagex apply</b> and <b>wimlib-imagex extract</b>.
+ */
+
+/** @defgroup G_mounting_wim_images Mounting WIM images
+ *
+ * @brief Mount and unmount WIM images.
+ *
+ * On UNIX-like systems supporting FUSE (such as Linux), wimlib supports
+ * mounting images from WIM files either read-only or read-write. To mount an
+ * image, call wimlib_mount_image(). To unmount an image, call
+ * wimlib_unmount_image(). Mounting can be done without root privileges because
+ * it is implemented using FUSE (Filesystem in Userspace). If wimlib is
+ * compiled with the <code>--without-fuse</code> flag, these functions will be
+ * available but will fail with ::WIMLIB_ERR_UNSUPPORTED. Note that mounting an
+ * image read-write is an alternative to calling wimlib_update_image().
+ */
+
+/**
+ * @defgroup G_progress Progress Messages
+ *
+ * @brief Track the progress of long WIM operations.
+ *
+ * Library users can provide a progress function which will be called
+ * periodically during operations such as extracting a WIM image or writing a
+ * WIM image. A ::WIMStruct can have a progress function of type
+ * ::wimlib_progress_func_t associated with it by calling
+ * wimlib_register_progress_function() or by opening the ::WIMStruct using
+ * wimlib_open_wim_with_progress(). Once this is done, the progress function
+ * will be called automatically during many operations, such as
+ * wimlib_extract_image() and wimlib_write().
+ *
+ * Some functions that do not operate directly on a user-provided ::WIMStruct,
+ * such as wimlib_join(), also take the progress function directly using an
+ * extended version of the function, such as wimlib_join_with_progress().
+ *
+ * In wimlib v1.7.0 and later, progress functions are no longer just
+ * unidirectional. You can now return ::WIMLIB_PROGRESS_STATUS_ABORT to cause
+ * the current operation to be aborted. wimlib v1.7.0 also added the third
+ * argument to ::wimlib_progress_func_t, which is a user-supplied context.
+ */
+
+/** @defgroup G_writing_and_overwriting_wims Writing and Overwriting WIMs
+ *
+ * @brief Write and overwrite on-disk WIM files.
+ *
+ * As described in @ref sec_basic_wim_handling_concepts, these functions are
+ * critical to the design of the library as they allow new or modified WIMs to
+ * actually be written to on-disk files. Generally, wimlib_write() is the
+ * function you need to call to write a new WIM file, and wimlib_overwrite() is
+ * the function you need to call to persistently update an existing WIM file.
+ */
+
+/** @defgroup G_nonstandalone_wims Creating and handling non-standalone WIMs
+ *
+ * @brief Create and handle non-standalone WIMs, such as split and delta WIMs.
+ *
+ * Normally, ::WIMStruct represents a WIM file, but there's a bit more to it
+ * than that. Normally, WIM files are "standalone". However, WIM files can
+ * also be arranged in non-standalone ways, such as a set of on-disk files that
+ * together form a single "split WIM" or "delta WIM". Such arrangements are
+ * fully supported by wimlib. However, as a result, in such cases a ::WIMStruct
+ * created from one of these on-disk files initially only partially represents
+ * the full WIM and needs to, in effect, be logically combined with other
+ * ::WIMStruct's before performing certain operations, such as extracting files
+ * with wimlib_extract_image() or wimlib_extract_paths(). This is done by
+ * calling wimlib_reference_resource_files() or wimlib_reference_resources().
+ *
+ * wimlib_write() can create delta WIMs as well as standalone WIMs, but a
+ * specialized function (wimlib_split()) is needed to create a split WIM.
+ */
+