home *** CD-ROM | disk | FTP | other *** search
/ Chip 2000 May / Chip_2000-05_cd1.bin / zkuste / Perl / ActivePerl-5.6.0.613.msi / 䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥 / _2156004807ac61f9bd34e9069cff0f60 < prev    next >
Text File  |  2000-03-15  |  26KB  |  1,022 lines

  1. # File      : Zlib.pm
  2. # Author  : Paul Marquess
  3. # Created : 17th March 1999
  4. # Version : 1.03
  5. #
  6. #     Copyright (c) 1995-1999 Paul Marquess. All rights reserved.
  7. #     This program is free software; you can redistribute it and/or
  8. #     modify it under the same terms as Perl itself.
  9. #
  10.  
  11. package Compress::Zlib;
  12.  
  13. require 5.003_05 ;
  14. require Exporter;
  15. require DynaLoader;
  16. use AutoLoader;
  17. use Carp ;
  18. use IO::Handle ;
  19.  
  20. use strict ;
  21. use vars qw($VERSION @ISA @EXPORT $AUTOLOAD 
  22.         $deflateDefault $deflateParamsDefault $inflateDefault) ;
  23.  
  24. @ISA = qw(Exporter DynaLoader);
  25. # Items to export into callers namespace by default. Note: do not export
  26. # names by default without a very good reason. Use EXPORT_OK instead.
  27. # Do not simply export all your public functions/methods/constants.
  28. @EXPORT = qw(
  29.     deflateInit inflateInit
  30.  
  31.     compress uncompress
  32.  
  33.     gzip gunzip
  34.  
  35.     gzopen $gzerrno
  36.  
  37.     adler32 crc32
  38.  
  39.     ZLIB_VERSION
  40.  
  41.         MAX_MEM_LEVEL
  42.     MAX_WBITS
  43.  
  44.     Z_ASCII
  45.     Z_BEST_COMPRESSION
  46.     Z_BEST_SPEED
  47.     Z_BINARY
  48.     Z_BUF_ERROR
  49.     Z_DATA_ERROR
  50.     Z_DEFAULT_COMPRESSION
  51.     Z_DEFAULT_STRATEGY
  52.         Z_DEFLATED
  53.     Z_ERRNO
  54.     Z_FILTERED
  55.     Z_FINISH
  56.     Z_FULL_FLUSH
  57.     Z_HUFFMAN_ONLY
  58.     Z_MEM_ERROR
  59.     Z_NEED_DICT
  60.     Z_NO_COMPRESSION
  61.     Z_NO_FLUSH
  62.     Z_NULL
  63.     Z_OK
  64.     Z_PARTIAL_FLUSH
  65.     Z_STREAM_END
  66.     Z_STREAM_ERROR
  67.     Z_SYNC_FLUSH
  68.     Z_UNKNOWN
  69.     Z_VERSION_ERROR
  70. );
  71.  
  72.  
  73. $VERSION = "1.03" ;
  74.  
  75.  
  76. sub AUTOLOAD {
  77.     # This AUTOLOAD is used to 'autoload' constants from the constant()
  78.     # XS function.  If a constant is not found then control is passed
  79.     # to the AUTOLOAD in AutoLoader.
  80.  
  81.     my($constname);
  82.     ($constname = $AUTOLOAD) =~ s/.*:://;
  83.     my $val = constant($constname, @_ ? $_[0] : 0);
  84.     if ($! != 0) {
  85.     if ($! =~ /Invalid/) {
  86.         $AutoLoader::AUTOLOAD = $AUTOLOAD;
  87.         goto &AutoLoader::AUTOLOAD;
  88.     }
  89.     else {
  90.         croak "Your vendor has not defined Compress::Zlib macro $constname"
  91.     }
  92.     }
  93.     eval "sub $AUTOLOAD { $val }";
  94.     goto &$AUTOLOAD;
  95. }
  96.  
  97. bootstrap Compress::Zlib $VERSION ;
  98.  
  99. # Preloaded methods go here.
  100.  
  101. sub isaFilehandle
  102. {
  103.     my $fh = shift ;
  104.  
  105.     return ((UNIVERSAL::isa($fh,'GLOB') or UNIVERSAL::isa(\$fh,'GLOB')) 
  106.         and defined fileno($fh)  )
  107.  
  108. }
  109.  
  110. sub isaFilename
  111. {
  112.     my $name = shift ;
  113.  
  114.     return (! ref $name and UNIVERSAL::isa(\$name, 'SCALAR')) ;
  115. }
  116.  
  117. sub gzopen
  118. {
  119.     my ($file, $mode) = @_ ;
  120.  
  121.     if (isaFilehandle $file) {
  122.     IO::Handle::flush($file) ;
  123.         gzdopen_(fileno($file), $mode, tell($file)) 
  124.     }
  125.     elsif (isaFilename $file) {
  126.     gzopen_($file, $mode) 
  127.     }
  128.     else {
  129.     croak "gzopen: file parameter is not a filehandle or filename"
  130.     }
  131. }
  132.  
  133. sub ParseParameters($@)
  134. {
  135.     my ($default, @rest) = @_ ;
  136.     my (%got) = %$default ;
  137.     my (@Bad) ;
  138.     my ($key, $value) ;
  139.     my $sub = (caller(1))[3] ;
  140.     my %options = () ;
  141.  
  142.     # allow the options to be passed as a hash reference or
  143.     # as the complete hash.
  144.     if (@rest == 1) {
  145.  
  146.         croak "$sub: parameter is not a reference to a hash"
  147.             if ref $rest[0] ne "HASH" ;
  148.  
  149.         %options = %{ $rest[0] } ;
  150.     }
  151.     elsif (@rest >= 2) {
  152.         %options = @rest ;
  153.     }
  154.  
  155.     while (($key, $value) = each %options)
  156.     {
  157.     $key =~ s/^-// ;
  158.  
  159.         if (exists $default->{$key})
  160.           { $got{$key} = $value }
  161.         else
  162.       { push (@Bad, $key) }
  163.     }
  164.     
  165.     if (@Bad) {
  166.         my ($bad) = join(", ", @Bad) ;
  167.         croak "unknown key value(s) @Bad" ;
  168.     }
  169.  
  170.     return \%got ;
  171. }
  172.  
  173. $deflateDefault = {
  174.     'Level'        =>    Z_DEFAULT_COMPRESSION(),
  175.     'Method'        =>    Z_DEFLATED(),
  176.     'WindowBits' =>    MAX_WBITS(),
  177.     'MemLevel'   =>    MAX_MEM_LEVEL(),
  178.     'Strategy'   =>    Z_DEFAULT_STRATEGY(),
  179.     'Bufsize'    =>    4096,
  180.     'Dictionary' =>    "",
  181.     } ;
  182.  
  183. $deflateParamsDefault = {
  184.     'Level'        =>    Z_DEFAULT_COMPRESSION(),
  185.     'Strategy'   =>    Z_DEFAULT_STRATEGY(),
  186.     } ;
  187.  
  188. $inflateDefault = {
  189.     'WindowBits' =>    MAX_WBITS(),
  190.     'Bufsize'    =>    4096,
  191.     'Dictionary' =>    "",
  192.     } ;
  193.  
  194.  
  195. sub deflateInit
  196. {
  197.     my ($got) = ParseParameters($deflateDefault, @_) ;
  198.     _deflateInit($got->{Level}, $got->{Method}, $got->{WindowBits}, 
  199.         $got->{MemLevel}, $got->{Strategy}, $got->{Bufsize},
  200.         $got->{Dictionary}) ;
  201.         
  202. }
  203.  
  204. sub inflateInit
  205. {
  206.     my ($got) = ParseParameters($inflateDefault, @_) ;
  207.     _inflateInit($got->{WindowBits}, $got->{Bufsize}, $got->{Dictionary}) ;
  208.  
  209. }
  210.  
  211. sub compress($)
  212. {
  213.     my ($x, $output, $out, $err, $in) ;
  214.  
  215.     if (ref $_[0] ) {
  216.         $in = $_[0] ;
  217.     croak "not a scalar reference" unless ref $in eq 'SCALAR' ;
  218.     }
  219.     else {
  220.         $in = \$_[0] ;
  221.     }
  222.  
  223.     if ( (($x, $err) = deflateInit())[1] == Z_OK()) {
  224.  
  225.         ($output, $err) = $x->deflate($in) ;
  226.         return undef unless $err == Z_OK() ;
  227.  
  228.         ($out, $err) = $x->flush() ;
  229.         return undef unless $err == Z_OK() ;
  230.     
  231.         return ($output . $out) ;
  232.  
  233.     }
  234.  
  235.     return undef ;
  236. }
  237.  
  238.  
  239. sub uncompress($)
  240. {
  241.     my ($x, $output, $err, $in) ;
  242.  
  243.     if (ref $_[0] ) {
  244.         $in = $_[0] ;
  245.     croak "not a scalar reference" unless ref $in eq 'SCALAR' ;
  246.     }
  247.     else {
  248.         $in = \$_[0] ;
  249.     }
  250.  
  251.     if ( (($x, $err) = inflateInit())[1] == Z_OK())  {
  252.  
  253.         ($output, $err) = $x->inflate($in) ;
  254.         return undef unless $err == Z_STREAM_END() ;
  255.  
  256.     return $output ;
  257.     }
  258.  
  259.     return undef ;
  260. }
  261.  
  262.  
  263. sub MAGIC1() { 0x1f }
  264. sub MAGIC2() { 0x8b }
  265. sub OSCODE() { 3    }
  266.  
  267. sub memGzip
  268. {
  269.   my $x = deflateInit(
  270.                       -Level         => Z_BEST_COMPRESSION(),
  271.                       -WindowBits     =>  - MAX_WBITS(),
  272.                      )
  273.       or return undef ;
  274.  
  275.   # write a minimal gzip header
  276.   my(@m);
  277.   push @m, pack("c10", MAGIC1, MAGIC2, Z_DEFLATED(), 0,0,0,0,0,0, OSCODE) ;
  278.  
  279.   # if the deflation buffer isn't a reference, make it one
  280.   my $string = (ref $_[0] ? $_[0] : \$_[0]) ;
  281.  
  282.   my ($output, $status) = $x->deflate($string) ;
  283.   push @m, $output ;
  284.   $status == Z_OK()
  285.       or return undef ;
  286.  
  287.   ($output, $status) = $x->flush() ;
  288.   push @m, $output ;
  289.   $status == Z_OK()
  290.       or return undef ;
  291.  
  292.   push @m, pack("V V", crc32($string), length($$string)) ;
  293.  
  294.   return join "", @m;
  295. }
  296.  
  297.  
  298. 1 ;
  299. # Autoload methods go after __END__, and are processed by the autosplit program.
  300.  
  301. 1;
  302. __END__
  303.  
  304.  
  305. =cut
  306.  
  307. =head1 NAME
  308.  
  309. Compress::Zlib - Interface to zlib compression library
  310.  
  311. =head1 SYNOPSIS
  312.  
  313.     use Compress::Zlib ;
  314.  
  315.     ($d, $status) = deflateInit( [OPT] ) ;
  316.     ($out, $status) = $d->deflate($buffer) ;
  317.     ($out, $status) = $d->flush() ;
  318.     $d->dict_adler() ;
  319.  
  320.     ($i, $status) = inflateInit( [OPT] ) ;
  321.     ($out, $status) = $i->inflate($buffer) ;
  322.     $i->dict_adler() ;
  323.  
  324.     $dest = compress($source) ;
  325.     $dest = uncompress($source) ;
  326.  
  327.     $gz = gzopen($filename or filehandle, $mode) ;
  328.     $bytesread = $gz->gzread($buffer [,$size]) ;
  329.     $bytesread = $gz->gzreadline($line) ;
  330.     $byteswritten = $gz->gzwrite($buffer) ;
  331.     $status = $gz->gzflush($flush) ;
  332.     $status = $gz->gzclose() ;
  333.     $errstring = $gz->gzerror() ; 
  334.     $gzerrno
  335.  
  336.     $dest = Compress::Zlib::memGzip($buffer) ;
  337.  
  338.     $crc = adler32($buffer [,$crc]) ;
  339.     $crc = crc32($buffer [,$crc]) ;
  340.  
  341.     ZLIB_VERSION
  342.  
  343. =head1 DESCRIPTION
  344.  
  345. The I<Compress::Zlib> module provides a Perl interface to the I<zlib>
  346. compression library (see L</AUTHORS> for details about where to get
  347. I<zlib>). Most of the functionality provided by I<zlib> is available
  348. in I<Compress::Zlib>.
  349.  
  350. The module can be split into two general areas of functionality, namely
  351. in-memory compression/decompression and read/write access to I<gzip>
  352. files. Each of these areas will be discussed separately below.
  353.  
  354. =head1 DEFLATE 
  355.  
  356. The interface I<Compress::Zlib> provides to the in-memory I<deflate>
  357. (and I<inflate>) functions has been modified to fit into a Perl model.
  358.  
  359. The main difference is that for both inflation and deflation, the Perl
  360. interface will I<always> consume the complete input buffer before
  361. returning. Also the output buffer returned will be automatically grown
  362. to fit the amount of output available.
  363.  
  364. Here is a definition of the interface available:
  365.  
  366.  
  367. =head2 B<($d, $status) = deflateInit( [OPT] )>
  368.  
  369. Initialises a deflation stream. 
  370.  
  371. It combines the features of the I<zlib> functions B<deflateInit>,
  372. B<deflateInit2> and B<deflateSetDictionary>.
  373.  
  374. If successful, it will return the initialised deflation stream, B<$d>
  375. and B<$status> of C<Z_OK> in a list context. In scalar context it
  376. returns the deflation stream, B<$d>, only.
  377.  
  378. If not successful, the returned deflation stream (B<$d>) will be
  379. I<undef> and B<$status> will hold the exact I<zlib> error code.
  380.  
  381. The function optionally takes a number of named options specified as
  382. C<-Name=E<gt>value> pairs. This allows individual options to be
  383. tailored without having to specify them all in the parameter list.
  384.  
  385. For backward compatability, it is also possible to pass the parameters
  386. as a reference to a hash containing the name=>value pairs.
  387.  
  388. The function takes one optional parameter, a reference to a hash.  The
  389. contents of the hash allow the deflation interface to be tailored.
  390.  
  391. Here is a list of the valid options:
  392.  
  393. =over 5
  394.  
  395. =item B<-Level>
  396.  
  397. Defines the compression level. Valid values are 1 through 9,
  398. C<Z_BEST_SPEED>, C<Z_BEST_COMPRESSION>, and C<Z_DEFAULT_COMPRESSION>.
  399.  
  400. The default is C<-Level =E<gt>Z_DEFAULT_COMPRESSION>.
  401.  
  402. =item B<-Method>
  403.  
  404. Defines the compression method. The only valid value at present (and
  405. the default) is C<-Method =E<gt>Z_DEFLATED>.
  406.  
  407. =item B<-WindowBits>
  408.  
  409. For a definition of the meaning and valid values for B<WindowBits>
  410. refer to the I<zlib> documentation for I<deflateInit2>.
  411.  
  412. Defaults to C<-WindowBits =E<gt>MAX_WBITS>.
  413.  
  414. =item B<-MemLevel>
  415.  
  416. For a definition of the meaning and valid values for B<MemLevel>
  417. refer to the I<zlib> documentation for I<deflateInit2>.
  418.  
  419. Defaults to C<-MemLevel =E<gt>MAX_MEM_LEVEL>.
  420.  
  421. =item B<-Strategy>
  422.  
  423. Defines the strategy used to tune the compression. The valid values are
  424. C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and C<Z_HUFFMAN_ONLY>. 
  425.  
  426. The default is C<-Strategy =E<gt>Z_DEFAULT_STRATEGY>.
  427.  
  428. =item B<-Dictionary>
  429.  
  430. When a dictionary is specified I<Compress::Zlib> will automatically
  431. call B<deflateSetDictionary> directly after calling B<deflateInit>. The
  432. Adler32 value for the dictionary can be obtained by calling tht method 
  433. C<$d->dict_adler()>.
  434.  
  435. The default is no dictionary.
  436.  
  437. =item B<-Bufsize>
  438.  
  439. Sets the initial size for the deflation buffer. If the buffer has to be
  440. reallocated to increase the size, it will grow in increments of
  441. B<Bufsize>.
  442.  
  443. The default is 4096.
  444.  
  445. =back
  446.  
  447. Here is an example of using the B<deflateInit> optional parameter list
  448. to override the default buffer size and compression level. All other
  449. options will take their default values.
  450.  
  451.     deflateInit( -Bufsize => 300, 
  452.                  -Level => Z_BEST_SPEED  ) ;
  453.  
  454.  
  455. =head2 B<($out, $status) = $d-E<gt>deflate($buffer)>
  456.  
  457.  
  458. Deflates the contents of B<$buffer>. The buffer can either be a scalar
  459. or a scalar reference.  When finished, B<$buffer> will be
  460. completely processed (assuming there were no errors). If the deflation
  461. was successful it returns the deflated output, B<$out>, and a status
  462. value, B<$status>, of C<Z_OK>.
  463.  
  464. On error, B<$out> will be I<undef> and B<$status> will contain the
  465. I<zlib> error code.
  466.  
  467. In a scalar context B<deflate> will return B<$out> only.
  468.  
  469. As with the I<deflate> function in I<zlib>, it is not necessarily the
  470. case that any output will be produced by this method. So don't rely on
  471. the fact that B<$out> is empty for an error test.
  472.  
  473.  
  474. =head2 B<($out, $status) = $d-E<gt>flush()>
  475.  
  476. Finishes the deflation. Any pending output will be returned via B<$out>.
  477. B<$status> will have a value C<Z_OK> if successful.
  478.  
  479. In a scalar context B<flush> will return B<$out> only.
  480.  
  481. Note that flushing can degrade the compression ratio, so it should only
  482. be used to terminate a decompression.
  483.  
  484. =head2 B<$d-E<gt>dict_adler()>
  485.  
  486. Returns the adler32 value for the dictionary.
  487.  
  488. =head2 Example
  489.  
  490.  
  491. Here is a trivial example of using B<deflate>. It simply reads standard
  492. input, deflates it and writes it to standard output.
  493.  
  494.     use Compress::Zlib ;
  495.  
  496.     binmode STDIN;
  497.     binmode STDOUT;
  498.  
  499.     $x = deflateInit()
  500.        or die "Cannot create a deflation stream\n" ;
  501.  
  502.     while (<>)
  503.     {
  504.         ($output, $status) = $x->deflate($_) ;
  505.     
  506.         $status == Z_OK
  507.             or die "deflation failed\n" ;
  508.  
  509.         print $output ;
  510.     }
  511.  
  512.     ($output, $status) = $x->flush() ;
  513.  
  514.     $status == Z_OK
  515.         or die "deflation failed\n" ;
  516.  
  517.     print $output ;
  518.  
  519.  
  520. =head1 INFLATE
  521.  
  522. Here is a definition of the interface:
  523.  
  524.  
  525. =head2 B<($i, $status) = inflateInit()>
  526.  
  527. Initialises an inflation stream. 
  528.  
  529. In a list context it returns the inflation stream, B<$i>, and the
  530. I<zlib> status code (B<$status>). In a scalar context it returns the
  531. inflation stream only.
  532.  
  533. If successful, B<$i> will hold the inflation stream and B<$status> will
  534. be C<Z_OK>.
  535.  
  536. If not successful, B<$i> will be I<undef> and B<$status> will hold the
  537. I<zlib> error code.
  538.  
  539. The function optionally takes a number of named options specified as
  540. C<-Name=E<gt>value> pairs. This allows individual options to be
  541. tailored without having to specify them all in the parameter list.
  542.  
  543. For backward compatability, it is also possible to pass the parameters
  544. as a reference to a hash containing the name=>value pairs.
  545.  
  546. The function takes one optional parameter, a reference to a hash.  The
  547. contents of the hash allow the deflation interface to be tailored.
  548.  
  549. Here is a list of the valid options:
  550.  
  551. =over 5
  552.  
  553. =item B<-WindowBits>
  554.  
  555. For a definition of the meaning and valid values for B<WindowBits>
  556. refer to the I<zlib> documentation for I<inflateInit2>.
  557.  
  558. Defaults to C<-WindowBits =E<gt>MAX_WBITS>.
  559.  
  560. =item B<-Bufsize>
  561.  
  562. Sets the initial size for the inflation buffer. If the buffer has to be
  563. reallocated to increase the size, it will grow in increments of
  564. B<Bufsize>. 
  565.  
  566. Default is 4096.
  567.  
  568. =item B<-Dictionary>
  569.  
  570. The default is no dictionary.
  571.  
  572. =back
  573.  
  574. Here is an example of using the B<inflateInit> optional parameter to
  575. override the default buffer size.
  576.  
  577.     inflateInit( -Bufsize => 300 ) ;
  578.  
  579. =head2 B<($out, $status) = $i-E<gt>inflate($buffer)>
  580.  
  581. Inflates the complete contents of B<$buffer>. The buffer can either be
  582. a scalar or a scalar reference.
  583.  
  584. Returns C<Z_OK> if successful and C<Z_STREAM_END> if the end of the
  585. compressed data has been reached. 
  586.  
  587. The C<$buffer> parameter is modified by C<inflate>. On completion it
  588. will contain what remains of the input buffer after inflation. This
  589. means that C<$buffer> will be an empty string when the return status is
  590. C<Z_OK>. When the return status is C<Z_STREAM_END> the C<$buffer>
  591. parameter will contains what (if anything) was stored in the input
  592. buffer after the deflated data stream.
  593.  
  594. This feature is needed when processing a file format that encapsulates
  595. a  deflated data stream (e.g. gzip, zip).
  596.  
  597. =head2 B<$i-E<gt>dict_adler()>
  598.  
  599.  
  600. =head2 Example
  601.  
  602. Here is an example of using B<inflate>.
  603.  
  604.     use Compress::Zlib ;
  605.  
  606.     $x = inflateInit()
  607.        or die "Cannot create a inflation stream\n" ;
  608.  
  609.     $input = '' ;
  610.     binmode STDIN;
  611.     binmode STDOUT;
  612.  
  613.     while (read(STDIN, $input, 4096))
  614.     {
  615.         ($output, $status) = $x->inflate(\$input) ;
  616.  
  617.         print $output 
  618.             if $status == Z_OK or $status == Z_STREAM_END ;
  619.  
  620.         last if $status != Z_OK ;
  621.     }
  622.  
  623.     die "inflation failed\n"
  624.         unless $status == Z_STREAM_END ;
  625.  
  626. =head1 COMPRESS/UNCOMPRESS
  627.  
  628. Two high-level functions are provided by I<zlib> to perform in-memory
  629. compression. They are B<compress> and B<uncompress>. Two Perl subs are
  630. provided which provide similar functionality.
  631.  
  632. =over 5
  633.  
  634. =item B<$dest = compress($source) ;>
  635.  
  636. Compresses B<$source>. If successful it returns the
  637. compressed data. Otherwise it returns I<undef>.
  638.  
  639. The source buffer can either be a scalar or a scalar reference.
  640.  
  641. =item B<$dest = uncompress($source) ;>
  642.  
  643. Uncompresses B<$source>. If successful it returns the uncompressed
  644. data. Otherwise it returns I<undef>.
  645.  
  646. The source buffer can either be a scalar or a scalar reference.
  647.  
  648. =back
  649.  
  650. =head1 GZIP INTERFACE
  651.  
  652. A number of functions are supplied in I<zlib> for reading and writing
  653. I<gzip> files. This module provides an interface to most of them. In
  654. general the interface provided by this module operates identically to
  655. the functions provided by I<zlib>. Any differences are explained
  656. below.
  657.  
  658. =over 5
  659.  
  660. =item B<$gz = gzopen(filename or filehandle, mode)>
  661.  
  662. This function operates identically to the I<zlib> equivalent except
  663. that it returns an object which is used to access the other I<gzip>
  664. methods.
  665.  
  666. As with the I<zlib> equivalent, the B<mode> parameter is used to
  667. specify both whether the file is opened for reading or writing and to
  668. optionally specify a a compression level. Refer to the I<zlib>
  669. documentation for the exact format of the B<mode> parameter.
  670.  
  671. If a reference to an open filehandle is passed in place of the
  672. filename, gzdopen will be called behind the scenes. The third example
  673. at the end of this section, I<gzstream>, uses this feature.
  674.  
  675. =item B<$bytesread = $gz-E<gt>gzread($buffer [, $size]) ;>
  676.  
  677. Reads B<$size> bytes from the compressed file into B<$buffer>. If
  678. B<$size> is not specified, it will default to 4096. If the scalar
  679. B<$buffer> is not large enough, it will be extended automatically.
  680.  
  681. Returns the number of bytes actually read. On EOF it returns 0 and in
  682. the case of an error, -1.
  683.  
  684. =item B<$bytesread = $gz-E<gt>gzreadline($line) ;>
  685.  
  686. Reads the next line from the compressed file into B<$line>. 
  687.  
  688. Returns the number of bytes actually read. On EOF it returns 0 and in
  689. the case of an error, -1.
  690.  
  691. It is legal to intermix calls to B<gzread> and B<gzreadline>.
  692.  
  693. At this time B<gzreadline> ignores the variable C<$/>
  694. (C<$INPUT_RECORD_SEPARATOR> or C<$RS> when C<English> is in use). The
  695. end of a line is denoted by the C character C<'\n'>.
  696.  
  697. =item B<$byteswritten = $gz-E<gt>gzwrite($buffer) ;>
  698.  
  699. Writes the contents of B<$buffer> to the compressed file. Returns the
  700. number of bytes actually written, or 0 on error.
  701.  
  702. =item B<$status = $gz-E<gt>gzflush($flush) ;>
  703.  
  704. Flushes all pending output into the compressed file.
  705. Works identically to the I<zlib> function it interfaces to. Note that
  706. the use of B<gzflush> can degrade compression.
  707.  
  708. Refer to the I<zlib> documentation for the valid values of B<$flush>.
  709.  
  710. =item B<$gz-E<gt>gzclose>
  711.  
  712. Closes the compressed file. Any pending data is flushed to the file
  713. before it is closed.
  714.  
  715. =item B<$gz-E<gt>gzerror>
  716.  
  717. Returns the I<zlib> error message or number for the last operation
  718. associated with B<$gz>. The return value will be the I<zlib> error
  719. number when used in a numeric context and the I<zlib> error message
  720. when used in a string context. The I<zlib> error number constants,
  721. shown below, are available for use.
  722.  
  723.     Z_OK
  724.     Z_STREAM_END
  725.     Z_ERRNO
  726.     Z_STREAM_ERROR
  727.     Z_DATA_ERROR
  728.     Z_MEM_ERROR
  729.     Z_BUF_ERROR
  730.  
  731. =item B<$gzerrno>
  732.  
  733. The B<$gzerrno> scalar holds the error code associated with the most
  734. recent I<gzip> routine. Note that unlike B<gzerror()>, the error is
  735. I<not> associated with a particular file.
  736.  
  737. As with B<gzerror()> it returns an error number in numeric context and
  738. an error message in string context. Unlike B<gzerror()> though, the
  739. error message will correspond to the I<zlib> message when the error is
  740. associated with I<zlib> itself, or the UNIX error message when it is
  741. not (i.e. I<zlib> returned C<Z_ERRORNO>).
  742.  
  743. As there is an overlap between the error numbers used by I<zlib> and
  744. UNIX, B<$gzerrno> should only be used to check for the presence of
  745. I<an> error in numeric context. Use B<gzerror()> to check for specific
  746. I<zlib> errors. The I<gzcat> example below shows how the variable can
  747. be used safely.
  748.  
  749. =back
  750.  
  751.  
  752. =head2 Examples
  753.  
  754. Here is an example script which uses the interface. It implements a
  755. I<gzcat> function.
  756.  
  757.     use Compress::Zlib ;
  758.  
  759.     die "Usage: gzcat file...\n"
  760.     unless @ARGV ;
  761.  
  762.     foreach $file (@ARGV) {
  763.         $gz = gzopen($file, "rb") 
  764.         or die "Cannot open $file: $gzerrno\n" ;
  765.  
  766.         print $buffer 
  767.             while $gz->gzread($buffer) > 0 ;
  768.         die "Error reading from $file: $gzerrno\n" 
  769.             if $gzerrno != Z_STREAM_END ;
  770.     
  771.         $gz->gzclose() ;
  772.     }
  773.  
  774. Below is a script which makes use of B<gzreadline>. It implements a
  775. very simple I<grep> like script.
  776.  
  777.     use Compress::Zlib ;
  778.  
  779.     die "Usage: gzgrep pattern file...\n"
  780.         unless @ARGV >= 2;
  781.  
  782.     $pattern = shift ;
  783.  
  784.     foreach $file (@ARGV) {
  785.         $gz = gzopen($file, "rb") 
  786.              or die "Cannot open $file: $gzerrno\n" ;
  787.     
  788.         while ($gz->gzreadline($_) > 0) {
  789.             print if /$pattern/ ;
  790.         }
  791.     
  792.         die "Error reading from $file: $gzerrno\n" 
  793.             if $gzerrno != Z_STREAM_END ;
  794.     
  795.         $gz->gzclose() ;
  796.     }
  797.  
  798.  
  799. This script, I<gzstream>, does the opposite of the I<gzcat> script
  800. above. It reads from standard input and writes a gzip file to standard
  801. output.
  802.  
  803.     use Compress::Zlib ;
  804.  
  805.     binmode STDOUT; # gzopen only sets it on the fd
  806.  
  807.     my $gz = gzopen(\*STDOUT, "wb")
  808.       or die "Cannot open stdout: $gzerrno\n" ;
  809.  
  810.     while (<>) {
  811.         $gz->gzwrite($_) 
  812.         or die "error writing: $gzerrno\n" ;
  813.     }
  814.  
  815.     $gz->gzclose ;
  816.  
  817. =head2 Compress::Zlib::memGzip
  818.  
  819. This function is used to create an in-memory gzip file. 
  820. It creates a minimal gzip header.
  821.  
  822.     $dest = Compress::Zlib::memGzip($buffer) ;
  823.  
  824. If successful, it returns the in-memory gzip file, otherwise it returns
  825. undef.
  826.  
  827. The buffer parameter can either be a scalar or a scalar reference.
  828.  
  829. =head1 CHECKSUM FUNCTIONS
  830.  
  831. Two functions are provided by I<zlib> to calculate a checksum. For the
  832. Perl interface, the order of the two parameters in both functions has
  833. been reversed. This allows both running checksums and one off
  834. calculations to be done.
  835.  
  836.     $crc = adler32($buffer [,$crc]) ;
  837.     $crc = crc32($buffer [,$crc]) ;
  838.  
  839. The buffer parameters can either be a scalar or a scalar reference.
  840.  
  841. If the $crc parameters is C<undef>, the crc value will be reset.
  842.  
  843. =head1 CONSTANTS
  844.  
  845. All the I<zlib> constants are automatically imported when you make use
  846. of I<Compress::Zlib>.
  847.  
  848. =head1 AUTHOR
  849.  
  850. The I<Compress::Zlib> module was written by Paul Marquess,
  851. F<Paul.Marquess@btinternet.com>. The latest copy of the module can be
  852. found on CPAN in F<modules/by-module/Compress/Compress-Zlib-x.x.tar.gz>.
  853.  
  854. The I<zlib> compression library was written by Jean-loup Gailly
  855. F<gzip@prep.ai.mit.edu> and Mark Adler F<madler@alumni.caltech.edu>.
  856. It is available at F<ftp://ftp.uu.net/pub/archiving/zip/zlib*> and
  857. F<ftp://swrinde.nde.swri.edu/pub/png/src/zlib*>. Alternatively check
  858. out the zlib home page at F<http://quest.jpl.nasa.gov/zlib/>.
  859.  
  860. Questions about I<zlib> itself should be sent to
  861. F<zlib@quest.jpl.nasa.gov> or, if this fails, to the addresses given
  862. for the authors above.
  863.  
  864. =head1 MODIFICATION HISTORY
  865.  
  866. =head2 0.1 2nd October 1995.
  867.  
  868. First public release of I<Compress::Zlib>.
  869.  
  870.  
  871. =head2 0.2 5th October 1995.
  872.  
  873. Fixed a minor allocation problem in Zlib.xs
  874.  
  875.  
  876. =head2 0.3 12th October 1995.
  877.  
  878. Added prototype specification.
  879.  
  880.  
  881. =head2 0.4 25th June 1996.
  882.  
  883. =over 5
  884.  
  885. =item 1.
  886.  
  887. Documentation update.
  888.  
  889. =item 2.
  890.  
  891. Upgraded to support zlib 1.0.2
  892.  
  893. =item 3.
  894.  
  895. Added dictionary interface.
  896.  
  897. =item 4.
  898.  
  899. Fixed bug in gzreadline - previously it would keep returning the same
  900. buffer. This bug was reported by Helmut Jarausch
  901.  
  902. =item 5.
  903.  
  904. Removed dependancy to zutil.h and so dropped support for 
  905.     
  906.     DEF_MEM_LEVEL (use MAX_MEM_LEVEL instead)
  907.     DEF_WBITS     (use MAX_WBITS instead)
  908.  
  909. =back
  910.  
  911. =head2 0.50 19th Feb 1997
  912.  
  913. =over 5
  914.  
  915. =item 1.
  916.  
  917. Confirmed that no changes were necessary for zlib 1.0.3 or 1.0.4.
  918.  
  919. =item 2.
  920.  
  921. The optional parameters for deflateInit and inflateInit can now be
  922. specified as an associative array in addition to a reference to an
  923. associative array. They can also accept the -Name syntax.
  924.  
  925. =item 3.
  926.  
  927. gzopen can now optionally take a reference to an open filehandle in
  928. place of a filename. In this case it will call gzdopen.
  929.  
  930. =item 4.
  931.  
  932. Added gzstream example script.
  933.  
  934. =back
  935.  
  936. =head2 1.00 14 Nov 1997
  937.  
  938. =over 5
  939.  
  940. =item 1.
  941.  
  942. The following functions can now take a scalar reference in place of a
  943. scalar for their buffer parameters:
  944.  
  945.     compress
  946.     uncompress
  947.     deflate
  948.     inflate
  949.     crc32
  950.     adler32
  951.  
  952. This should mean applications that make use of the module don't have to
  953. copy large buffers around.
  954.  
  955. =item 2.
  956.  
  957. Normally the inflate method consumes I<all> of the input buffer before
  958. returning. The exception to this is when inflate detects the end of the
  959. stream (Z_STREAM_END). In this case the input buffer need not be
  960. completely consumed. To allow processing of file formats that embed a
  961. deflation stream (e.g. zip, gzip), the inflate method now sets the
  962. buffer parameter to be what remains after inflation.
  963.  
  964. When the return status is Z_STREAM_END, it will be what remains of the
  965. buffer (if any) after deflation. When the status is Z_OK it will be an
  966. empty string.
  967.  
  968. This change means that the buffer parameter must be a lvalue.
  969.  
  970. =item 3.
  971.  
  972. Fixed crc32 and adler32. They were both very broken. 
  973.  
  974. =item 4,
  975.  
  976. Added the Compress::Zlib::memGzip function.
  977.  
  978. =back
  979.  
  980. =head2 1.01 23 Nov 1997
  981.  
  982. =over 5
  983.  
  984. =item 1.
  985.  
  986. A number of fixes to the test suite and the example scripts to allow
  987. them to work under win32. All courtesy of Gurusamy Sarathy.
  988.  
  989. =back
  990.  
  991. =head2 1.02 10 Jan 1998
  992.  
  993. =over 5
  994.  
  995. =item 1.
  996.  
  997. The return codes for gzread, gzreadline and gzwrite were documented
  998. incorrectly as returning a status code.
  999.  
  1000. =item 2.
  1001.  
  1002. The test harness was missing a "gzclose". This caused problem showed up
  1003. on an amiga. Thanks to Erik van Roode for reporting this one.
  1004.  
  1005. =item 3.
  1006.  
  1007. Patched zlib.t for OS/2. Thanks to Ilya Zakharevich for the patch.
  1008.  
  1009. =back
  1010.  
  1011. =head2 1.03 17 Mar 1999
  1012.  
  1013. =over 5
  1014.  
  1015. =item 1.
  1016.  
  1017. Updated to use the new PL_ symbols. 
  1018. Means the module can be built with Perl 5.005_5*
  1019.  
  1020.  
  1021. =back
  1022.