Unit Lh5Unit |
*****************************************************************************) (* *) (* LH5.PAS *) (* *) (* This code compress/decompress data using the same algorithm as LHArc 2.x *) (* It is roughly derived from the C source code of AR002 (a C version of a *) (* subset of LHArc, written by Haruhiko Okomura). *) (* The algorithm was created by Haruhiko Okomura and Haruyasu Yoshizaki. *) (* *) (* 4/20/98 Modified by Gregory L. Bullock (bullock@mbay.net) *) (* - to use TStream (and descendents) instead of files, *) (* - to reduce the memory requirements in the data segment, *) (* - to changed the program to a unit. *) (* The interface consists of the two procedures *) (* procedure LHACompress(InStr, OutStr: TStream); *) (* procedure LHAExpand(InStr, OutStr: TStream); *) (* These procedures DO NOT change the current position of EITHER *) (* TStream before performing their function. Thus, LHACompress *) (* starts compressing at InStr's current position and continues to *) (* the end of InStr, placing the compressed output in OutStr *) (* starting at OutStr's current position. If you need the entirety *) (* of InStr compressed or uncompressed, you'll need to set *) (* InStr.Position := 0 before calling one of these procedures. *) (* *) (* See the test program at the end of this unit for an example of *) (* how to use these procedures. *) (* *) (* Changing this to a unit required the (internal) addition of *) (* procedure FreeMemory; *) (* procedure InitMemory; *) (* to ensure that memory gets initialized properly between calls *) (* to the unit's interface procedures. *) (
Classes |
Functions |
LHACompress - Turn off range checking - MANDATORY ! and stack checking (to speed up things)} {$B-,R-,S-} {$DEFINE PERCOLATE} (*
NOTE :
LHArc uses a "percolating" update of its Lempel-Ziv structures.
LHAExpand - LHACompress starts compressing at InStr's current position and continues
to the end of InStr, placing the compressed output in OutStr starting at
OutStr's current position.
Types |
Constants |
Variables |
Functions |
****************************** Interface Procedures
Types |
Constants |
Variables |