libmspack

Data Fields
mschm_decompressor Struct Reference

A decompressor for .CHM (Microsoft HTMLHelp) files. More...

`#include <mspack.h>`

Collaboration diagram for mschm_decompressor:
[legend]

## 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...

## Detailed Description

A decompressor for .CHM (Microsoft HTMLHelp) files.

All fields are READ ONLY.

See also
  mspack_create_chm_decompressor(), mspack_destroy_chm_decompressor()

## Field Documentation

## ◆ close

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.

Parameters

  self | a self-referential pointer to the mschm_decompressor instance being called
  chm | the CHM helpfile to close

See also
  open(), fast_open()

## ◆ extract

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().

Parameters

  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

Returns
  an error code, or MSPACK_ERR_OK if successful

## ◆ fast_find

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:

- section: the correct value for the found file
- offset: the correct value for the found file
- length: the correct value for the found file
- all other structure elements: NULL or 0

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:

- section: NULL
- offset: 0
- length: 0
- all other structure elements: NULL or 0

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().

Parameters

  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)`

Returns
  an error code, or MSPACK_ERR_OK if successful

See also
  open(), close(), fast_find(), extract()

## ◆ fast_open

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.

Parameters

  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().

Returns
  a pointer to a mschmd_header structure, or NULL on failure

See also
  open(), close(), fast_find(), extract()

## ◆ last_error

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.

Parameters

  self | a self-referential pointer to the mschm_decompressor instance being called

Returns
  the most recent error code

See also
  open(), extract()

## ◆ open

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.

Parameters

  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().

Returns
  a pointer to a mschmd_header structure, or NULL on failure

See also
  close()

The documentation for this struct was generated from the following file:

- mspack.h