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