blob: 0af302cdb61b4afa3d667d4f3ea5c10086b0532a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/*++ BUILD Version: 0001 // Increment this if a change has global effects
Copyright (c) 1989 Microsoft Corporation
Module Name:
Mrcf.h
Abstract:
This module defines all of the double space compression routines
Author:
Gary Kimura [GaryKi] 03-Jun-1993
Revision History:
--*/
#ifndef _MRCF_
#define _MRCF_
//
// To decompress/compress a block of data the user needs to
// provide a work space as an extra parameter to all the exported
// procedures. That way the routines will not need to use excessive
// stack space and will still be multithread safe
//
//
// Variables for reading and writing bits
//
typedef struct _MRCF_BIT_IO {
USHORT abitsBB; // 16-bit buffer being read
LONG cbitsBB; // Number of bits left in abitsBB
PUCHAR pbBB; // Pointer to byte stream being read
ULONG cbBB; // Number of bytes left in pbBB
ULONG cbBBInitial; // Initial size of pbBB
} MRCF_BIT_IO;
typedef MRCF_BIT_IO *PMRCF_BIT_IO;
//
// Decompression only needs the bit i/o structure
//
typedef struct _MRCF_DECOMPRESS {
MRCF_BIT_IO BitIo;
} MRCF_DECOMPRESS;
typedef MRCF_DECOMPRESS *PMRCF_DECOMPRESS;
//
// Standard compression uses a few more field to contain
// the lookup table
//
#define cMAXSLOTS (8) // The maximum number of slots used in the algorithm
#define ltUNUSED (0xE000) // Value of unused ltX table entry
#define mruUNUSED (0xFF) // Value of unused MRU table entry
#define bRARE (0xD5) // Rarely occuring character value
typedef struct _MRCF_STANDARD_COMPRESS {
MRCF_BIT_IO BitIo;
ULONG ltX[256][cMAXSLOTS]; // Source text pointer look-up table
UCHAR abChar[256][cMAXSLOTS]; // Character look-up table
UCHAR abMRUX[256]; // Most Recently Used ltX/abChar entry
} MRCF_STANDARD_COMPRESS;
typedef MRCF_STANDARD_COMPRESS *PMRCF_STANDARD_COMPRESS;
ULONG
MrcfDecompress (
PUCHAR UncompressedBuffer,
ULONG UncompressedLength,
PUCHAR CompressedBuffer,
ULONG CompressedLength,
PMRCF_DECOMPRESS WorkSpace
);
ULONG
MrcfStandardCompress (
PUCHAR CompressedBuffer,
ULONG CompressedLength,
PUCHAR UncompressedBuffer,
ULONG UncompressedLength,
PMRCF_STANDARD_COMPRESS WorkSpace
);
#endif // _MRCF_
|