Compress::Zlib
[p5sagit/p5-mst-13.2.git] / ext / Compress / IO / Zlib / lib / IO / Compress / Deflate.pm
1 package IO::Compress::Deflate ;
2
3 use strict ;
4 use warnings;
5 use bytes;
6
7 require Exporter ;
8
9 use IO::Compress::RawDeflate;
10
11 use Compress::Raw::Zlib ;
12 use IO::Compress::Zlib::Constants;
13 use IO::Compress::Base::Common qw(createSelfTiedObject);
14
15
16 our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $DeflateError);
17
18 $VERSION = '2.000_08';
19 $DeflateError = '';
20
21 @ISA    = qw(Exporter IO::Compress::RawDeflate);
22 @EXPORT_OK = qw( $DeflateError deflate ) ;
23 %EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ;
24 push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ;
25 Exporter::export_ok_tags('all');
26
27
28 sub new
29 {
30     my $class = shift ;
31
32     my $obj = createSelfTiedObject($class, \$DeflateError);
33     return $obj->_create(undef, @_);
34 }
35
36 sub deflate
37 {
38     my $obj = createSelfTiedObject(undef, \$DeflateError);
39     return $obj->_def(@_);
40 }
41
42
43 sub bitmask($$$$)
44 {
45     my $into  = shift ;
46     my $value  = shift ;
47     my $offset = shift ;
48     my $mask   = shift ;
49
50     return $into | (($value & $mask) << $offset ) ;
51 }
52
53 sub mkDeflateHdr($$$;$)
54 {
55     my $method = shift ;
56     my $cinfo  = shift;
57     my $level  = shift;
58     my $fdict_adler = shift  ;
59
60     my $cmf = 0;
61     my $flg = 0;
62     my $fdict = 0;
63     $fdict = 1 if defined $fdict_adler;
64
65     $cmf = bitmask($cmf, $method, ZLIB_CMF_CM_OFFSET,    ZLIB_CMF_CM_BITS);
66     $cmf = bitmask($cmf, $cinfo,  ZLIB_CMF_CINFO_OFFSET, ZLIB_CMF_CINFO_BITS);
67
68     $flg = bitmask($flg, $fdict,  ZLIB_FLG_FDICT_OFFSET, ZLIB_FLG_FDICT_BITS);
69     $flg = bitmask($flg, $level,  ZLIB_FLG_LEVEL_OFFSET, ZLIB_FLG_LEVEL_BITS);
70
71     my $fcheck = 31 - ($cmf * 256 + $flg) % 31 ;
72     $flg = bitmask($flg, $fcheck, ZLIB_FLG_FCHECK_OFFSET, ZLIB_FLG_FCHECK_BITS);
73
74     my $hdr =  pack("CC", $cmf, $flg) ;
75     $hdr .= pack("N", $fdict_adler) if $fdict ;
76
77     return $hdr;
78 }
79
80 sub mkHeader 
81 {
82     my $self = shift ;
83     my $param = shift ;
84
85     my $level = $param->value('Level');
86     my $strategy = $param->value('Strategy');
87
88     my $lflag ;
89     $level = 6 
90         if $level == Z_DEFAULT_COMPRESSION ;
91
92     if (ZLIB_VERNUM >= 0x1210)
93     {
94         if ($strategy >= Z_HUFFMAN_ONLY || $level < 2)
95          {  $lflag = ZLIB_FLG_LEVEL_FASTEST }
96         elsif ($level < 6)
97          {  $lflag = ZLIB_FLG_LEVEL_FAST }
98         elsif ($level == 6)
99          {  $lflag = ZLIB_FLG_LEVEL_DEFAULT }
100         else
101          {  $lflag = ZLIB_FLG_LEVEL_SLOWEST }
102     }
103     else
104     {
105         $lflag = ($level - 1) >> 1 ;
106         $lflag = 3 if $lflag > 3 ;
107     }
108
109      #my $wbits = (MAX_WBITS - 8) << 4 ;
110     my $wbits = 7;
111     mkDeflateHdr(ZLIB_CMF_CM_DEFLATED, $wbits, $lflag);
112 }
113
114 sub ckParams
115 {
116     my $self = shift ;
117     my $got = shift;
118     
119     $got->value('ADLER32' => 1);
120     return 1 ;
121 }
122
123
124 sub mkTrailer
125 {
126     my $self = shift ;
127     return pack("N", *$self->{Compress}->adler32()) ;
128 }
129
130 sub mkFinalTrailer
131 {
132     return '';
133 }
134
135 #sub newHeader
136 #{
137 #    my $self = shift ;
138 #    return *$self->{Header};
139 #}
140
141 sub getExtraParams
142 {
143     my $self = shift ;
144     return $self->getZlibParams(),
145 }
146
147 sub getInverseClass
148 {
149     return ('IO::Uncompress::Inflate',
150                 \$IO::Uncompress::Inflate::InflateError);
151 }
152
153 sub getFileInfo
154 {
155     my $self = shift ;
156     my $params = shift;
157     my $file = shift ;
158     
159 }
160
161
162
163 1;
164
165 __END__
166
167 =head1 NAME
168
169
170 IO::Compress::Deflate - Perl interface to write RFC 1950 files/buffers
171  
172
173 =head1 SYNOPSIS
174
175     use IO::Compress::Deflate qw(deflate $DeflateError) ;
176
177
178     my $status = deflate $input => $output [,OPTS] 
179         or die "deflate failed: $DeflateError\n";
180
181     my $z = new IO::Compress::Deflate $output [,OPTS]
182         or die "deflate failed: $DeflateError\n";
183
184     $z->print($string);
185     $z->printf($format, $string);
186     $z->write($string);
187     $z->syswrite($string [, $length, $offset]);
188     $z->flush();
189     $z->tell();
190     $z->eof();
191     $z->seek($position, $whence);
192     $z->binmode();
193     $z->fileno();
194     $z->opened();
195     $z->autoflush();
196     $z->input_line_number();
197     $z->newStream( [OPTS] );
198     
199     $z->deflateParams();
200     
201     $z->close() ;
202
203     $DeflateError ;
204
205     # IO::File mode
206
207     print $z $string;
208     printf $z $format, $string;
209     tell $z
210     eof $z
211     seek $z, $position, $whence
212     binmode $z
213     fileno $z
214     close $z ;
215     
216
217 =head1 DESCRIPTION
218
219
220
221 B<WARNING -- This is a Beta release>. 
222
223 =over 5
224
225 =item * DO NOT use in production code.
226
227 =item * The documentation is incomplete in places.
228
229 =item * Parts of the interface defined here are tentative.
230
231 =item * Please report any problems you find.
232
233 =back
234
235
236
237
238 This module provides a Perl interface that allows writing compressed
239 data to files or buffer as defined in RFC 1950.
240
241
242
243
244
245
246
247
248
249 For reading RFC 1950 files/buffers, see the companion module 
250 L<IO::Uncompress::Inflate|IO::Uncompress::Inflate>.
251
252
253 =head1 Functional Interface
254
255 A top-level function, C<deflate>, is provided to carry out
256 "one-shot" compression between buffers and/or files. For finer
257 control over the compression process, see the L</"OO Interface">
258 section.
259
260     use IO::Compress::Deflate qw(deflate $DeflateError) ;
261
262     deflate $input => $output [,OPTS] 
263         or die "deflate failed: $DeflateError\n";
264
265
266
267 The functional interface needs Perl5.005 or better.
268
269
270 =head2 deflate $input => $output [, OPTS]
271
272
273 C<deflate> expects at least two parameters, C<$input> and C<$output>.
274
275 =head3 The C<$input> parameter
276
277 The parameter, C<$input>, is used to define the source of
278 the uncompressed data. 
279
280 It can take one of the following forms:
281
282 =over 5
283
284 =item A filename
285
286 If the C<$input> parameter is a simple scalar, it is assumed to be a
287 filename. This file will be opened for reading and the input data
288 will be read from it.
289
290 =item A filehandle
291
292 If the C<$input> parameter is a filehandle, the input data will be
293 read from it.
294 The string '-' can be used as an alias for standard input.
295
296 =item A scalar reference 
297
298 If C<$input> is a scalar reference, the input data will be read
299 from C<$$input>.
300
301 =item An array reference 
302
303 If C<$input> is an array reference, each element in the array must be a
304 filename.
305
306 The input data will be read from each file in turn. 
307
308 The complete array will be walked to ensure that it only
309 contains valid filenames before any data is compressed.
310
311
312
313 =item An Input FileGlob string
314
315 If C<$input> is a string that is delimited by the characters "<" and ">"
316 C<deflate> will assume that it is an I<input fileglob string>. The
317 input is the list of files that match the fileglob.
318
319 If the fileglob does not match any files ...
320
321 See L<File::GlobMapper|File::GlobMapper> for more details.
322
323
324 =back
325
326 If the C<$input> parameter is any other type, C<undef> will be returned.
327
328
329
330 =head3 The C<$output> parameter
331
332 The parameter C<$output> is used to control the destination of the
333 compressed data. This parameter can take one of these forms.
334
335 =over 5
336
337 =item A filename
338
339 If the C<$output> parameter is a simple scalar, it is assumed to be a
340 filename.  This file will be opened for writing and the compressed
341 data will be written to it.
342
343 =item A filehandle
344
345 If the C<$output> parameter is a filehandle, the compressed data
346 will be written to it.
347 The string '-' can be used as an alias for standard output.
348
349
350 =item A scalar reference 
351
352 If C<$output> is a scalar reference, the compressed data will be
353 stored in C<$$output>.
354
355
356
357 =item An Array Reference
358
359 If C<$output> is an array reference, the compressed data will be
360 pushed onto the array.
361
362 =item An Output FileGlob
363
364 If C<$output> is a string that is delimited by the characters "<" and ">"
365 C<deflate> will assume that it is an I<output fileglob string>. The
366 output is the list of files that match the fileglob.
367
368 When C<$output> is an fileglob string, C<$input> must also be a fileglob
369 string. Anything else is an error.
370
371 =back
372
373 If the C<$output> parameter is any other type, C<undef> will be returned.
374
375
376
377 =head2 Notes
378
379 When C<$input> maps to multiple files/buffers and C<$output> is a single
380 file/buffer the compressed input files/buffers will all be stored
381 in C<$output> as a single compressed stream.
382
383
384
385 =head2 Optional Parameters
386
387 Unless specified below, the optional parameters for C<deflate>,
388 C<OPTS>, are the same as those used with the OO interface defined in the
389 L</"Constructor Options"> section below.
390
391 =over 5
392
393 =item AutoClose =E<gt> 0|1
394
395 This option applies to any input or output data streams to 
396 C<deflate> that are filehandles.
397
398 If C<AutoClose> is specified, and the value is true, it will result in all
399 input and/or output filehandles being closed once C<deflate> has
400 completed.
401
402 This parameter defaults to 0.
403
404
405
406 =item BinModeIn =E<gt> 0|1
407
408 When reading from a file or filehandle, set C<binmode> before reading.
409
410 Defaults to 0.
411
412
413
414
415
416 =item -Append =E<gt> 0|1
417
418 TODO
419
420
421 =back
422
423
424
425 =head2 Examples
426
427 To read the contents of the file C<file1.txt> and write the compressed
428 data to the file C<file1.txt.1950>.
429
430     use strict ;
431     use warnings ;
432     use IO::Compress::Deflate qw(deflate $DeflateError) ;
433
434     my $input = "file1.txt";
435     deflate $input => "$input.1950"
436         or die "deflate failed: $DeflateError\n";
437
438
439 To read from an existing Perl filehandle, C<$input>, and write the
440 compressed data to a buffer, C<$buffer>.
441
442     use strict ;
443     use warnings ;
444     use IO::Compress::Deflate qw(deflate $DeflateError) ;
445     use IO::File ;
446
447     my $input = new IO::File "<file1.txt"
448         or die "Cannot open 'file1.txt': $!\n" ;
449     my $buffer ;
450     deflate $input => \$buffer 
451         or die "deflate failed: $DeflateError\n";
452
453 To compress all files in the directory "/my/home" that match "*.txt"
454 and store the compressed data in the same directory
455
456     use strict ;
457     use warnings ;
458     use IO::Compress::Deflate qw(deflate $DeflateError) ;
459
460     deflate '</my/home/*.txt>' => '<*.1950>'
461         or die "deflate failed: $DeflateError\n";
462
463 and if you want to compress each file one at a time, this will do the trick
464
465     use strict ;
466     use warnings ;
467     use IO::Compress::Deflate qw(deflate $DeflateError) ;
468
469     for my $input ( glob "/my/home/*.txt" )
470     {
471         my $output = "$input.1950" ;
472         deflate $input => $output 
473             or die "Error compressing '$input': $DeflateError\n";
474     }
475
476
477 =head1 OO Interface
478
479 =head2 Constructor
480
481 The format of the constructor for C<IO::Compress::Deflate> is shown below
482
483     my $z = new IO::Compress::Deflate $output [,OPTS]
484         or die "IO::Compress::Deflate failed: $DeflateError\n";
485
486 It returns an C<IO::Compress::Deflate> object on success and undef on failure. 
487 The variable C<$DeflateError> will contain an error message on failure.
488
489 If you are running Perl 5.005 or better the object, C<$z>, returned from 
490 IO::Compress::Deflate can be used exactly like an L<IO::File|IO::File> filehandle. 
491 This means that all normal output file operations can be carried out 
492 with C<$z>. 
493 For example, to write to a compressed file/buffer you can use either of 
494 these forms
495
496     $z->print("hello world\n");
497     print $z "hello world\n";
498
499 The mandatory parameter C<$output> is used to control the destination
500 of the compressed data. This parameter can take one of these forms.
501
502 =over 5
503
504 =item A filename
505
506 If the C<$output> parameter is a simple scalar, it is assumed to be a
507 filename. This file will be opened for writing and the compressed data
508 will be written to it.
509
510 =item A filehandle
511
512 If the C<$output> parameter is a filehandle, the compressed data will be
513 written to it.
514 The string '-' can be used as an alias for standard output.
515
516
517 =item A scalar reference 
518
519 If C<$output> is a scalar reference, the compressed data will be stored
520 in C<$$output>.
521
522 =back
523
524 If the C<$output> parameter is any other type, C<IO::Compress::Deflate>::new will
525 return undef.
526
527 =head2 Constructor Options
528
529 C<OPTS> is any combination of the following options:
530
531 =over 5
532
533 =item AutoClose =E<gt> 0|1
534
535 This option is only valid when the C<$output> parameter is a filehandle. If
536 specified, and the value is true, it will result in the C<$output> being
537 closed once either the C<close> method is called or the C<IO::Compress::Deflate>
538 object is destroyed.
539
540 This parameter defaults to 0.
541
542 =item Append =E<gt> 0|1
543
544 Opens C<$output> in append mode. 
545
546 The behaviour of this option is dependent on the type of C<$output>.
547
548 =over 5
549
550 =item * A Buffer
551
552 If C<$output> is a buffer and C<Append> is enabled, all compressed data
553 will be append to the end if C<$output>. Otherwise C<$output> will be
554 cleared before any data is written to it.
555
556 =item * A Filename
557
558 If C<$output> is a filename and C<Append> is enabled, the file will be
559 opened in append mode. Otherwise the contents of the file, if any, will be
560 truncated before any compressed data is written to it.
561
562 =item * A Filehandle
563
564 If C<$output> is a filehandle, the file pointer will be positioned to the
565 end of the file via a call to C<seek> before any compressed data is written
566 to it.  Otherwise the file pointer will not be moved.
567
568 =back
569
570 This parameter defaults to 0.
571
572
573
574
575
576 =item -Merge =E<gt> 0|1
577
578 This option is used to compress input data and append it to an existing
579 compressed data stream in C<$output>. The end result is a single compressed
580 data stream stored in C<$output>. 
581
582
583
584 It is a fatal error to attempt to use this option when C<$output> is not an
585 RFC 1950 data stream.
586
587
588
589 There are a number of other limitations with the C<Merge> option:
590
591 =over 5 
592
593 =item 1
594
595 This module needs to have been built with zlib 1.2.1 or better to work. A
596 fatal error will be thrown if C<Merge> is used with an older version of
597 zlib.  
598
599 =item 2
600
601 If C<$output> is a file or a filehandle, it must be seekable.
602
603 =back
604
605
606 This parameter defaults to 0.
607
608
609
610 =item -Level 
611
612 Defines the compression level used by zlib. The value should either be
613 a number between 0 and 9 (0 means no compression and 9 is maximum
614 compression), or one of the symbolic constants defined below.
615
616    Z_NO_COMPRESSION
617    Z_BEST_SPEED
618    Z_BEST_COMPRESSION
619    Z_DEFAULT_COMPRESSION
620
621 The default is Z_DEFAULT_COMPRESSION.
622
623 Note, these constants are not imported by C<IO::Compress::Deflate> by default.
624
625     use IO::Compress::Deflate qw(:strategy);
626     use IO::Compress::Deflate qw(:constants);
627     use IO::Compress::Deflate qw(:all);
628
629 =item -Strategy 
630
631 Defines the strategy used to tune the compression. Use one of the symbolic
632 constants defined below.
633
634    Z_FILTERED
635    Z_HUFFMAN_ONLY
636    Z_RLE
637    Z_FIXED
638    Z_DEFAULT_STRATEGY
639
640 The default is Z_DEFAULT_STRATEGY.
641
642
643
644
645
646
647 =item -Strict =E<gt> 0|1
648
649
650
651 This is a placeholder option.
652
653
654
655 =back
656
657 =head2 Examples
658
659 TODO
660
661 =head1 Methods 
662
663 =head2 print
664
665 Usage is
666
667     $z->print($data)
668     print $z $data
669
670 Compresses and outputs the contents of the C<$data> parameter. This
671 has the same behaviour as the C<print> built-in.
672
673 Returns true if successful.
674
675 =head2 printf
676
677 Usage is
678
679     $z->printf($format, $data)
680     printf $z $format, $data
681
682 Compresses and outputs the contents of the C<$data> parameter.
683
684 Returns true if successful.
685
686 =head2 syswrite
687
688 Usage is
689
690     $z->syswrite $data
691     $z->syswrite $data, $length
692     $z->syswrite $data, $length, $offset
693
694 Compresses and outputs the contents of the C<$data> parameter.
695
696 Returns the number of uncompressed bytes written, or C<undef> if
697 unsuccessful.
698
699 =head2 write
700
701 Usage is
702
703     $z->write $data
704     $z->write $data, $length
705     $z->write $data, $length, $offset
706
707 Compresses and outputs the contents of the C<$data> parameter.
708
709 Returns the number of uncompressed bytes written, or C<undef> if
710 unsuccessful.
711
712 =head2 flush
713
714 Usage is
715
716
717     $z->flush;
718     $z->flush($flush_type);
719
720
721 Flushes any pending compressed data to the output file/buffer.
722
723
724 This method takes an optional parameter, C<$flush_type>, that controls
725 how the flushing will be carried out. By default the C<$flush_type>
726 used is C<Z_FINISH>. Other valid values for C<$flush_type> are
727 C<Z_NO_FLUSH>, C<Z_SYNC_FLUSH>, C<Z_FULL_FLUSH> and C<Z_BLOCK>. It is
728 strongly recommended that you only set the C<flush_type> parameter if
729 you fully understand the implications of what it does - overuse of C<flush>
730 can seriously degrade the level of compression achieved. See the C<zlib>
731 documentation for details.
732
733
734 Returns true on success.
735
736
737 =head2 tell
738
739 Usage is
740
741     $z->tell()
742     tell $z
743
744 Returns the uncompressed file offset.
745
746 =head2 eof
747
748 Usage is
749
750     $z->eof();
751     eof($z);
752
753
754
755 Returns true if the C<close> method has been called.
756
757
758
759 =head2 seek
760
761     $z->seek($position, $whence);
762     seek($z, $position, $whence);
763
764
765
766
767 Provides a sub-set of the C<seek> functionality, with the restriction
768 that it is only legal to seek forward in the output file/buffer.
769 It is a fatal error to attempt to seek backward.
770
771 Empty parts of the file/buffer will have NULL (0x00) bytes written to them.
772
773
774
775 The C<$whence> parameter takes one the usual values, namely SEEK_SET,
776 SEEK_CUR or SEEK_END.
777
778 Returns 1 on success, 0 on failure.
779
780 =head2 binmode
781
782 Usage is
783
784     $z->binmode
785     binmode $z ;
786
787 This is a noop provided for completeness.
788
789 =head2 opened
790
791     $z->opened()
792
793 Returns true if the object currently refers to a opened file/buffer. 
794
795 =head2 autoflush
796
797     my $prev = $z->autoflush()
798     my $prev = $z->autoflush(EXPR)
799
800 If the C<$z> object is associated with a file or a filehandle, this method
801 returns the current autoflush setting for the underlying filehandle. If
802 C<EXPR> is present, and is non-zero, it will enable flushing after every
803 write/print operation.
804
805 If C<$z> is associated with a buffer, this method has no effect and always
806 returns C<undef>.
807
808 B<Note> that the special variable C<$|> B<cannot> be used to set or
809 retrieve the autoflush setting.
810
811 =head2 input_line_number
812
813     $z->input_line_number()
814     $z->input_line_number(EXPR)
815
816
817 This method always returns C<undef> when compressing. 
818
819
820
821 =head2 fileno
822
823     $z->fileno()
824     fileno($z)
825
826 If the C<$z> object is associated with a file or a filehandle, this method
827 will return the underlying file descriptor.
828
829 If the C<$z> object is is associated with a buffer, this method will
830 return undef.
831
832 =head2 close
833
834     $z->close() ;
835     close $z ;
836
837
838
839 Flushes any pending compressed data and then closes the output file/buffer. 
840
841
842
843 For most versions of Perl this method will be automatically invoked if
844 the IO::Compress::Deflate object is destroyed (either explicitly or by the
845 variable with the reference to the object going out of scope). The
846 exceptions are Perl versions 5.005 through 5.00504 and 5.8.0. In
847 these cases, the C<close> method will be called automatically, but
848 not until global destruction of all live objects when the program is
849 terminating.
850
851 Therefore, if you want your scripts to be able to run on all versions
852 of Perl, you should call C<close> explicitly and not rely on automatic
853 closing.
854
855 Returns true on success, otherwise 0.
856
857 If the C<AutoClose> option has been enabled when the IO::Compress::Deflate
858 object was created, and the object is associated with a file, the
859 underlying file will also be closed.
860
861
862
863
864 =head2 newStream([OPTS])
865
866 Usage is
867
868     $z->newStream( [OPTS] )
869
870 Closes the current compressed data stream and starts a new one.
871
872 OPTS consists of the following sub-set of the the options that are
873 available when creating the C<$z> object,
874
875 =over 5
876
877
878
879 =item * Level
880
881
882
883 =back
884
885
886 =head2 deflateParams
887
888 Usage is
889
890     $z->deflateParams
891
892 TODO
893
894
895 =head1 Importing 
896
897
898 A number of symbolic constants are required by some methods in 
899 C<IO::Compress::Deflate>. None are imported by default.
900
901
902
903 =over 5
904
905 =item :all
906
907
908 Imports C<deflate>, C<$DeflateError> and all symbolic
909 constants that can be used by C<IO::Compress::Deflate>. Same as doing this
910
911     use IO::Compress::Deflate qw(deflate $DeflateError :constants) ;
912
913 =item :constants
914
915 Import all symbolic constants. Same as doing this
916
917     use IO::Compress::Deflate qw(:flush :level :strategy) ;
918
919 =item :flush
920
921 These symbolic constants are used by the C<flush> method.
922
923     Z_NO_FLUSH
924     Z_PARTIAL_FLUSH
925     Z_SYNC_FLUSH
926     Z_FULL_FLUSH
927     Z_FINISH
928     Z_BLOCK
929
930 =item :level
931
932 These symbolic constants are used by the C<Level> option in the constructor.
933
934     Z_NO_COMPRESSION
935     Z_BEST_SPEED
936     Z_BEST_COMPRESSION
937     Z_DEFAULT_COMPRESSION
938
939
940 =item :strategy
941
942 These symbolic constants are used by the C<Strategy> option in the constructor.
943
944     Z_FILTERED
945     Z_HUFFMAN_ONLY
946     Z_RLE
947     Z_FIXED
948     Z_DEFAULT_STRATEGY
949     
950
951 =back
952
953 For 
954
955 =head1 EXAMPLES
956
957 TODO
958
959
960
961
962
963
964 =head1 SEE ALSO
965
966 L<Compress::Zlib>, L<IO::Compress::Gzip>, L<IO::Uncompress::Gunzip>, L<IO::Uncompress::Inflate>, L<IO::Compress::RawDeflate>, L<IO::Uncompress::RawInflate>, L<IO::Compress::Bzip2>, L<IO::Uncompress::Bunzip2>, L<IO::Compress::Lzop>, L<IO::Uncompress::UnLzop>, L<IO::Uncompress::AnyInflate>, L<IO::Uncompress::AnyUncompress>
967
968 L<Compress::Zlib::FAQ|Compress::Zlib::FAQ>
969
970 L<File::GlobMapper|File::GlobMapper>, L<Archive::Zip|Archive::Zip>,
971 L<Archive::Tar|Archive::Tar>,
972 L<IO::Zlib|IO::Zlib>
973
974
975 For RFC 1950, 1951 and 1952 see 
976 F<http://www.faqs.org/rfcs/rfc1950.html>,
977 F<http://www.faqs.org/rfcs/rfc1951.html> and
978 F<http://www.faqs.org/rfcs/rfc1952.html>
979
980 The I<zlib> compression library was written by Jean-loup Gailly
981 F<gzip@prep.ai.mit.edu> and Mark Adler F<madler@alumni.caltech.edu>.
982
983 The primary site for the I<zlib> compression library is
984 F<http://www.zlib.org>.
985
986 The primary site for gzip is F<http://www.gzip.org>.
987
988
989
990
991
992
993
994 =head1 AUTHOR
995
996 The I<IO::Compress::Deflate> module was written by Paul Marquess,
997 F<pmqs@cpan.org>. 
998
999
1000
1001 =head1 MODIFICATION HISTORY
1002
1003 See the Changes file.
1004
1005 =head1 COPYRIGHT AND LICENSE
1006  
1007
1008 Copyright (c) 2005-2006 Paul Marquess. All rights reserved.
1009
1010 This program is free software; you can redistribute it and/or
1011 modify it under the same terms as Perl itself.
1012
1013