1 #ifndef _ZFTAPE_COMPRESS_H
 
   2 #define _ZFTAPE_COMPRESS_H
 
   4  *      Copyright (c) 1994-1997 Claus-Justus Heine
 
   6  This program is free software; you can redistribute it and/or
 
   7  modify it under the terms of the GNU General Public License as
 
   8  published by the Free Software Foundation; either version 2, or (at
 
   9  your option) any later version.
 
  11  This program is distributed in the hope that it will be useful, but
 
  12  WITHOUT ANY WARRANTY; without even the implied warranty of
 
  13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
  14  General Public License for more details.
 
  16  You should have received a copy of the GNU General Public License
 
  17  along with this program; see the file COPYING.  If not, write to
 
  18  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139,
 
  22  * $Source: /homes/cvs/ftape-stacked/ftape/compressor/zftape-compress.h,v $
 
  24  * $Date: 1997/10/05 19:12:32 $
 
  26  * This file contains macros and definitions for zftape's
 
  27  * builtin compression code.
 
  31 #include "../zftape/zftape-buffers.h"
 
  32 #include "../zftape/zftape-vtbl.h"
 
  33 #include "../compressor/lzrw3.h"
 
  35 /* CMPR_WRK_MEM_SIZE gives the size of the compression wrk_mem */
 
  36 /* I got these out of lzrw3.c */
 
  37 #define U(X)            ((__u32) X)
 
  38 #define SIZE_P_BYTE     (U(sizeof(__u8 *)))
 
  39 #define ALIGNMENT_FUDGE (U(16))
 
  41 #define CMPR_WRK_MEM_SIZE (U(4096)*(SIZE_P_BYTE) + ALIGNMENT_FUDGE)
 
  43 /* the maximum number of bytes the size of the "compressed" data can
 
  44  * exceed the uncompressed data. As it is quite useless to compress
 
  45  * data twice it is sometimes the case that it is more efficient to
 
  46  * copy a block of data but to feed it to the "compression"
 
  47  * algorithm. In this case there are some flag bytes or the like
 
  48  * proceding the "compressed" data.  THAT MUST NOT BE THE CASE for the
 
  49  * algorithm we use for this driver. Instead, the high bit 15 of
 
  52  * compressed_size = ftape_compress()
 
  54  * must be set in such a case.
 
  56  * Nevertheless, it might also be as for lzrw3 that there is an
 
  57  * "intermediate" overrun that exceeds the amount of the compressed
 
  58  * data that is actually produced. During the algorithm we need in the
 
  59  * worst case MAX_CMP_GROUP bytes more than the input-size.
 
  61 #define MAX_CMP_GROUP (2+16*2) /* from lzrw3.c */
 
  63 #define CMPR_OVERRUN      MAX_CMP_GROUP /* during compression */
 
  65 /****************************************************/
 
  67 #define     CMPR_BUFFER_SIZE (MAX_BLOCK_SIZE + CMPR_OVERRUN)
 
  69 /* the compression map stores the byte offset compressed blocks within
 
  70  * the current volume for catridges with format code 2,3 and 5
 
  71  * (and old versions of zftape) and the offset measured in kilobytes for
 
  72  * format code 4 and 6. This gives us a possible max. size of a 
 
  73  * compressed volume of 1024*4GIG which should be enough.
 
  75 typedef __u32 CmprMap;
 
  83 #endif /* _ZFTAPE_COMPRESS_H */