105 lines
4.3 KiB
C
105 lines
4.3 KiB
C
/*****************************************************************************
|
|
* *
|
|
* 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__
|