JCALG1 revision 5.01
(c)1999 by Jeremy Collake
All Rights Reserved.


This software is provided as-is, without warranty of ANY KIND, either expressed or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose. The author shall NOT be held liable for ANY damage to you, your computer, or to anyone or anything else, that may result from its use, or misuse. Basically, you use it at YOUR OWN RISK.


Credits
First of all, I would like to credit Joergen Ibsen, author of apLib, for many suggestions and help with my development of JCALG1. You may notice similarities between the JCALG1 decompressor and that of apLib. The reason for this is because I could not come up with a better encoding scheme than Joergen Ibsen's. So, I must, rightfully, give him much credit to developing the encoding scheme that JCALG1 uses.

Synopsis
JCALG1 is a fast and tight compression library that can easily be integrated into any application. Written in 100% assembly, compression is fairly fast, and decompression is rapid.


Documentation
This is where I tell you what you need to know, ever-so-briefly ;). I decided to document all functions in C, since most people are familar with it. All functions use the STDCALL calling convention (parameters pushed onto stack, called function adjusts stack before return).
unsigned int JCALG1_Compress(
void *Source,
unsigned int Length,
void *Destination,
unsigned int WindowSize,
AllocFunc *pAlloc,
DeAllocFunc *pDealloc,
CallbackFunc *pCallback);
Returns: Size of the compressed data, or NULL if the data could not be compressed.



unsigned int JCALG1_Decompress(
void *Source,
void *Destination);

Returns: Size of the uncompressed data.

Notes: The decompressor assumes that the direction flag is clear.



void JCALG1_GetInfo(
_JCALG1_Info *JCALG1_Info);
typedef struct __JCALG1_Info {
DWORD MajorRev;
DWORD MinorRev;
DWORD FastDecompressorSize;
DWORD SmallDecompressorSize;
} _JCALG1_Info;



BOOL CallbackFunc(
void *pCurrentSrc,
void *pCurrentDest);
Return: FALSE to stop compression, TRUE to continue compression.



void *AllocFunc(
unsigned int Size);
Returns: Pointer to allocated memory block.



BOOL DeallocFunc(
void *pMemory)
Returns: FALSE if failure.