home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / ftp.vapor.com / microdot-1 / md1_src_02.lzx / lzw.c < prev    next >
C/C++ Source or Header  |  2014-05-19  |  1KB  |  62 lines

  1. /*#include "microdot.h"*/
  2.  
  3. #include <proto/exec.h>
  4. #include <exec/memory.h>
  5.  
  6. int __asm GenCompress(
  7.     register __a0 void *source,
  8.     register __a1 void *dest,
  9.     register __a2 void *hashtable,
  10.     register __d0 ULONG size,
  11.     register __d1 ULONG maxbits
  12. );
  13.  
  14. int __asm GenDecompress(
  15.     register __a0 void *source,
  16.     register __a1 void *dest,
  17.     register __a2 void *hash
  18. );
  19.  
  20. int __asm GenCompTableSize( register __d0 ULONG );
  21. int __asm GenDecompTableSize( register __a0 void * );
  22.  
  23. int lzw_pack( void *from, void *to, ULONG size, ULONG bits )
  24. {
  25.     int hashsize = GenCompTableSize( bits );
  26.     void *hash;
  27.     int rc;
  28.  
  29.     if( !hashsize )
  30.         return( 0 );
  31.  
  32.     hash = AllocMem( hashsize, MEMF_CLEAR );
  33.     if( !hash )
  34.         return( 0 );
  35.  
  36.     rc = GenCompress( from, to, hash, size, bits );
  37.  
  38.     FreeMem( hash, hashsize );
  39.  
  40.     return( rc );
  41. }
  42.  
  43. int lzw_unpack( void *from, void *to )
  44. {
  45.     int hashsize = GenDecompTableSize( from );
  46.     void *hash;
  47.     int rc;
  48.  
  49.     if( !hashsize )
  50.         return( 0 );
  51.  
  52.     hash = AllocMem( hashsize, MEMF_CLEAR );
  53.     if( !hash )
  54.         return( 0 );
  55.  
  56.     rc = GenDecompress( from, to, hash );
  57.  
  58.     FreeMem( hash, hashsize );
  59.  
  60.     return( rc );
  61. }
  62.