|
|
/*****************************************************************************
* * * ZECK.H * * * * Copyright (C) Microsoft Corporation 1990. * * All Rights reserved. * * * ****************************************************************************** * * * Module Intent * * * * Zeck compression routines for bitmaps & topic 2K blocks. * * *****************************************************************************/
// This structure is passed to the compression routine to specify ranges
// in which to suppress compression:
#ifndef __ZECK_H__
#define __ZECK_H__
#ifdef __cplusplus
extern "C" { #endif
#include "misc.h"
typedef struct struct_suppresszeck SUPPRESSZECK, FAR *QSUPPRESSZECK;
struct struct_suppresszeck { RB rbSuppress; // beginning of range for suppression.
WORD cbSuppress; // number of bytes to suppress compression.
RB rbNewpos; // pointer into dest buffer where suppressed range
// ended up after compression (an OUT param value).
WORD iBitdex; // offset from rbNewpos of zeck code bits, used when
// back patching.
QSUPPRESSZECK next; // next suppression range in this list.
};
#define BITDEX_NONE ((WORD)-1) // indicates no compression took place, and
// backpatch should not adjust for the
// code bits.
/* LcbCompressZeck -
* * This is the only entry point into zeck compression. Compresses 'cbSrc' * bytes at 'rbSrc' into the buffer at 'rbDest', suppressing compression * for bytes specified by the qSuppress linked list. * * rbSrc - IN far pointer to source buffer. * rbDest- IN far pointer to dest buffer. * cbSrc - IN count of bytes to be compressed. * cbDest- IN limit count of bytes to put in rbDest - used to create * the 2K topic blocks. * qulSrcUsed- OUT count of src bytes compressed into rbDest (needed when * a cbDest limit is used). * qSuppress IN OUT linked list of compression suppression specifiers, * the out value is where the suppression ranges ended * up in the rbDest buffer. * * RETURNS: length of compressed data put in rbDest, 0 for error. */ #define COMPRESS_CBNONE 0 // passed as cbDest when no limit is to apply.
#define COMPRESS_SUPPRESSNIL NULL // passed as qSuppress when no
// suppression is desired
ULONG FAR PASCAL LcbCompressZeck( QB rbSrc, QB rbDest, ULONG cbSrc, ULONG cbDest, QUL qulSrcUsed, QSUPPRESSZECK qSuppress, LPVOID lperrb);
BOOL FAR PASCAL FAllocateZeckGlobals( void ); void FAR PASCAL FreeZeckGlobals( void );
ULONG PASCAL FAR LcbSimpleCompressZeck(RB rbSrc, RB rbDest, ULONG cbSrc, LPVOID lperrb);
VOID FAR PASCAL VMemBackpatchZeck( QSUPPRESSZECK qsuppresszeck, ULONG ulOffset, ULONG ulValue );
// erinfox: comment out so we don't need def. for HF
//BOOL FAR PASCAL FDiskBackpatchZeck( HF hf, ULONG fcl, ULONG ulOffset,
// WORD iBitdex, ULONG ulValue, BOOL fSaveLoc, LPVOID lperrb );
ULONG FAR PASCAL LcbUncompressZeck( RB rbSrc, RB rbDest, ULONG cbSrc, ULONG cbDest);
/***********************************************************************
MATTSMI 4/17/92 -- CALLBACK DEFNS PUT HERE SO THAT THE WMVC COMPILER CAN GET STATUS INFORMATION DURING COMPRESSION ************************************************************************/ typedef BOOL (FAR PASCAL * lpfnPumpMessageQueue)(VOID); typedef VOID (FAR PASCAL * lpfnPrintStatusMessage)(LPSTR); typedef VOID (FAR PASCAL * lpfnMessageGetPutFunc)(VOID);
#ifdef __cplusplus
} #endif
#endif // __ZECK_H__
|