diff options
Diffstat (limited to 'packages/palmunits/src/lz77mgr.pp')
-rw-r--r-- | packages/palmunits/src/lz77mgr.pp | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/packages/palmunits/src/lz77mgr.pp b/packages/palmunits/src/lz77mgr.pp new file mode 100644 index 0000000000..951a8ad00d --- /dev/null +++ b/packages/palmunits/src/lz77mgr.pp @@ -0,0 +1,171 @@ +{$MACRO ON} + +(****************************************************************************** + * + * Copyright (c) 1994-2001 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: Lz77Mgr.h + * + * Release: Palm OS SDK 4.0 (63220) + * + * History: + * 11/01/99 Created by Michel Turcotte + * Initial revision based on InetLib + * + *****************************************************************************) + +unit lz77mgr; + +interface + +uses palmos, libtraps, errorbase, systemresources; + +// +// Common PalmOS and Windows section +// + +const + Lz77VerID = 1; + Lz77LastSupportedVerID = 1; + + lz77Compress = True; + lz77Expand = False; + +type + Lz77ErrorType = Err; + +(******************************************************************** + * Error codes + ********************************************************************) + +const + lz77Success = $00; + // Non Fatal Errors + lz77ErrNonFatalFirstErr = lz77ErrorClass or $00; + lz77ErrNonFatalInputBufferIncomplete = lz77ErrorClass or $01; + lz77ErrNonFatalOutputBufferFull = lz77ErrorClass or $02; + lz77ErrNonFatalLastErr = lz77ErrorClass or $7F; + // Fatal Errors + lz77ErrFatalFirstErr = lz77ErrorClass or $80; + lz77ErrFatalUnfinishedInputBuffer = lz77ErrorClass or $80; + lz77ErrFatalInputBufferIncomplete = lz77ErrorClass or $81; + lz77ErrFatalInputBufferInvalid = lz77ErrorClass or $82; + lz77ErrFatalMemAllocation = lz77ErrorClass or $83; + lz77ErrFatalHandleInvalid = lz77ErrorClass or $84; + lz77ErrFatalCantChangeToCompress = lz77ErrorClass or $85; + lz77ErrFatalUnknownVersion = lz77ErrorClass or $86; + lz77ErrFatalOutputBufferTooSmall = lz77ErrorClass or $87; + lz77ErrFatalInvalidArgument = lz77ErrorClass or $88; + lz77ErrFatalLastErr = lz77ErrorClass or $FF; + +function lz77ErrIsFatal(err: Lz77ErrorType): Boolean; + +// +// Specific PalmOS section +// + +// Creator. Used for both the database that contains the LZ77 Library and +// it's features for the feature manager. +const + lz77Creator = sysFileCLz77Lib; // Lz77 Library creator + lz77LibName = 'Lz77.lib'; // pass in to SysLibFind() + +(******************************************************************** + * LZ77 Library functions. + ********************************************************************) + +const + lz77LibTrapChunk = sysLibTrapCustom; + lz77LibTrapMaxBufferSize = sysLibTrapCustom + 1; + lz77LibTrapBufferGetInfo = sysLibTrapCustom + 2; + lz77LibTrapBufferSetInfo = sysLibTrapCustom + 3; + +//-------------------------------------------------- +// Library initialization, shutdown, sleep and wake +//-------------------------------------------------- + +function Lz77LibOpen( + libRefnum: UInt16; // Palm OS reference calling number + var lz77HandleP: MemHandle; // <- Pointer to returning LZ77 handle (NULL for error) + compressFlag: Boolean; // -> TRUE = Compress; FALSE = Expand + sourceSize: UInt32; // -> Source size in bytes + var destHP: MemHandle; // <-> If (*destHP != NULL) => use pre allocated memory + // (*destHP and *destSizeP) + // If (*destHP == NULL) => allocate memory in *destHP + var destSizeP: UInt32; // <-> If (*destSizeP ==0) THEN *destP must be NULL + // => Lz77Open will calculate maximum buffer size + // based on compressFlag and sourceSize + // If (*destSizeP !=0) THEN it indicate + // the size in bytes of the destination buffer + useVerNum: UInt16; // -> if (useVerNum !=0) THEN Use Version numbering + // (Compress will write the value useVerNum in the + // output buffer Expand will verify if the Version + // in the source buffer is compatible) + var primerP: UInt8; // -> if (compressFlag ==lz77Compress) + // UncompressPrimer buffer pointer + // else CompressPrimer buffer pointer + // Must be valid compressed lz77 data + // compressed without a primer. + // NULL means no primer + primerL: UInt32; // -> Byte length of primer + processedPrimerL: UInt32 // -> Byte length of processed primer + ): Err; syscall sysLibTrapOpen; + // Note: The output buffer must be large enough to include the emtire processed primer. + // When Expanding, the compressed primer is passed to the Open routine and + // the output buffer must be large enough to contain the expanded primer. + +function Lz77LibClose( + libRefnum: UInt16; // Palm OS reference calling number + lz77Handle: MemHandle; // -> Lz77 Handle + var ResultingSizeP: UInt32 // <- Size in bytes of output generated buffer + // Output buffer will be resized to the resulting size + // if Lz77Open have allocated the output buffer. + // Output buffer must be free by the calling application + ): Err; syscall sysLibTrapClose; + +function Lz77LibSleep(libRefnum: UInt16): Err; syscall sysLibTrapSleep; + +function Lz77LibWake(libRefnum: UInt16): Err; syscall sysLibTrapWake; + +function Lz77LibChunk( + libRefnum: UInt16; // Palm OS reference calling number + lz77Handle: MemHandle; // -> Lz77 Handle + var sourceP: Int8; // -> Source buffer pointer + sourceSize: UInt32; // -> Source buffer Size (bytes) + var sourceBitReadOffset: UInt32 // <-> Next bit to read from source + ): Err; syscall lz77LibTrapChunk; + +function Lz77LibMaxBufferSize( + libRefnum: UInt16; // Palm OS reference calling number + compressFlag: Boolean; // -> TRUE = Compress; FALSE = Expand + sourceSize: UInt32; // -> Size of Source buffer + var maxBufferSizeP: UInt32 // <- result size pointer + ): Err; syscall lz77LibTrapMaxBufferSize; + +function Lz77LibBufferGetInfo( + libRefnum: UInt16; // Palm OS reference calling number + lz77Handle: MemHandle; // -> Lz77 Handle + var compressFlagP: Boolean; // <- Get compressFlag (true = compress mode; false = expand mode) + var bufferHP: MemHandle; // <- Get the Pointer to the accumulated destination buffer + var bufferByteSizeP: UInt32; // <- Get destination buffer size in bytes + var destBitOffsetP: UInt32 // <- Get destination bit offset + ): Err; syscall lz77LibTrapBufferGetInfo; + +function Lz77LibBufferSetInfo( + libRefnum: UInt16; // Palm OS reference calling number + lz77Handle: MemHandle; // -> Lz77 Handle + compressFlag: Boolean; // -> Set compressFlag (true = compress mode; false = expand mode) + destH: MemHandle; // -> Set a Pointer to the accumulated destination buffer + destByteSize: UInt32; // -> Set destination buffer size in bytes + destBitOffset: UInt32 // -> Set destination bit offset + ): Err; syscall lz77LibTrapBufferSetInfo; + +implementation + +function lz77ErrIsFatal(err: Lz77ErrorType): Boolean; +begin + lz77ErrIsFatal := (err <> lz77Success) and ((err < lz77ErrNonFatalFirstErr) or (err > lz77ErrNonFatalLastErr)); +end; + +end. |