libmspack
|
A decompressor for .CHM (Microsoft HTMLHelp) files. More...
#include <mspack.h>
Data Fields | |
struct mschmd_header *(* | open )(struct mschm_decompressor *self, const char *filename) |
Opens a CHM helpfile and reads its contents. More... | |
void(* | close )(struct mschm_decompressor *self, struct mschmd_header *chm) |
Closes a previously opened CHM helpfile. More... | |
int(* | extract )(struct mschm_decompressor *self, struct mschmd_file *file, const char *filename) |
Extracts a file from a CHM helpfile. More... | |
int(* | last_error )(struct mschm_decompressor *self) |
Returns the error code set by the most recently called method. More... | |
struct mschmd_header *(* | fast_open )(struct mschm_decompressor *self, const char *filename) |
Opens a CHM helpfile quickly. More... | |
int(* | fast_find )(struct mschm_decompressor *self, struct mschmd_header *chm, const char *filename, struct mschmd_file *f_ptr, int f_size) |
Finds file details quickly. More... | |
A decompressor for .CHM (Microsoft HTMLHelp) files.
All fields are READ ONLY.
void(* mschm_decompressor::close) (struct mschm_decompressor *self, struct mschmd_header *chm) |
Closes a previously opened CHM helpfile.
This closes a CHM helpfile, frees the mschmd_header and all mschmd_file structures associated with it (if any). This works on both helpfiles opened with open() and helpfiles opened with fast_open().
The CHM header pointer is now invalid and cannot be used again. All mschmd_file pointers referencing that CHM are also now invalid, and cannot be used again.
self | a self-referential pointer to the mschm_decompressor instance being called |
chm | the CHM helpfile to close |
int(* mschm_decompressor::extract) (struct mschm_decompressor *self, struct mschmd_file *file, const char *filename) |
Extracts a file from a CHM helpfile.
This extracts a file from a CHM helpfile and writes it to the given filename. The filename of the file, mscabd_file::filename, is not used by extract(), but can be used by the caller as a guide for constructing an appropriate filename.
This method works both with files found in the mschmd_header::files and mschmd_header::sysfiles list and mschmd_file structures generated on the fly by fast_find().
self | a self-referential pointer to the mschm_decompressor instance being called |
file | the file to be decompressed |
filename | the filename of the file being written to |
int(* mschm_decompressor::fast_find) (struct mschm_decompressor *self, struct mschmd_header *chm, const char *filename, struct mschmd_file *f_ptr, int f_size) |
Finds file details quickly.
Instead of reading all CHM helpfile headers and building a list of files, fast_open() and fast_find() are intended for finding file details only when they are needed. The CHM file format includes an on-disk file index to allow this.
Given a case-sensitive filename, fast_find() will search the on-disk index for that file.
If the file was found, the caller-provided mschmd_file structure will be filled out like so:
If the file was not found, MSPACK_ERR_OK will still be returned as the result, but the caller-provided structure will be filled out like so:
This method is intended to be used in conjunction with CHM helpfiles opened with fast_open(), but it also works with helpfiles opened using the regular open().
self | a self-referential pointer to the mschm_decompressor instance being called |
chm | the CHM helpfile to search for the file |
filename | the filename of the file to search for |
f_ptr | a pointer to a caller-provded mschmd_file structure |
f_size | sizeof(struct mschmd_file) |
struct mschmd_header*(* mschm_decompressor::fast_open) (struct mschm_decompressor *self, const char *filename) |
Opens a CHM helpfile quickly.
If the file opened is a valid CHM helpfile, only essential headers will be read. A mschmd_header structure will be still be returned, as with open(), but the mschmd_header::files field will be NULL. No files details will be automatically read. The fast_find() method must be used to obtain file details.
In the case of an error occuring, NULL is returned and the error code is available from last_error().
The filename pointer should be considered "in use" until close() is called on the CHM helpfile.
self | a self-referential pointer to the mschm_decompressor instance being called |
filename | the filename of the CHM helpfile. This is passed directly to mspack_system::open(). |
int(* mschm_decompressor::last_error) (struct mschm_decompressor *self) |
Returns the error code set by the most recently called method.
This is useful for open() and fast_open(), which do not return an error code directly.
self | a self-referential pointer to the mschm_decompressor instance being called |
struct mschmd_header*(* mschm_decompressor::open) (struct mschm_decompressor *self, const char *filename) |
Opens a CHM helpfile and reads its contents.
If the file opened is a valid CHM helpfile, all headers will be read and a mschmd_header structure will be returned, with a full list of files.
In the case of an error occuring, NULL is returned and the error code is available from last_error().
The filename pointer should be considered "in use" until close() is called on the CHM helpfile.
self | a self-referential pointer to the mschm_decompressor instance being called |
filename | the filename of the CHM helpfile. This is passed directly to mspack_system::open(). |