MRCI Fn 0002H: Decompress Data
Compatibility: 6.0+
Expects: AX 0002H
CX caller type: 0000H=APPLICATION client (InDOS is clear)
0001H=SYSTEM client (InDOS is set)
DS:SI address of a pre-filled MRCRequestRec structure:
.pfbSrc=address of compressed data
.wSrcLen=(ignored)
.pfbDest=buffer to receive decompressed data
.wDestLen=exact size of the data when decompressed
ES:BX address of a MRCInfoRec structure obtained via INT 2fH 4a12H
──────────────────────────────────────────────────────────────────
Returns: AX 0000H = success
else = MRCI API Error Code
DS:SI wDestLen field (offset 0eH) is size of uncompressed data
──────────────────────────────────────────────────────────────────
Info: This fn decompresses data that was compressed via MRCI Fn 0001H
(compress data). The source and destination addresses and other
important details are identified in the MRCRequestRec structure.
The API entry address is obtained via INT 2fH 4a12H.
Before using this call, you must ensure the correct state of the
InDOS Flag (corresponding to the value in CX) and you must start
a Windows Critical Section. See MRCI Fn 0001H for info about
these requirements.
You must know the exact size of the data after it is decompressed
and put that amount in the wDestLen of the MRCRequestRec
structure. MRCI needs this to know when to stop decompressing.
Notes: ■ Check AX for a returned error code. And check the wDestLen
field of the MRCRequestRec structure.
■ The MRCI server will NOT decompress data that is not compressed
(for instance when a previous call to MRCI Fn 0002H failed
because the data was incompressible). To decide whether or not
to decompress, you may examine the four-byte header and/or
maintain separate information about each block of data
compressed.
Data compressed by MRCI starts with a 4-byte header such as
'MD0' (4DH, 44H, 00H, 02H).
■ To decompress data found in a DoubleSpace CVF, you must know
the size the data will be after it is uncompressed. You can
obtain a file size from the RootDir region of the CVF.
Alternately, you can make a series of calls to MRCI Fn 0020H
(incremental decompress) and look for some sort of end-of-file
marker or (perhaps) hope for an error return code that helps
decide when you have reached the end of the valid compressed
data.
See Also: MRCI API
DoubleSpace Overview
DoubleSpace API
INT 2fH: Multiplex Interrupt
DOS Functions
-♦-