BZip2Stream.st
author Stefan Vogel <sv@exept.de>
Mon, 01 Aug 2005 14:37:49 +0200
changeset 1570 b6dd9a871cc2
parent 1564 c3409f17ded6
child 1750 436ca57ad6be
permissions -rw-r--r--
Fix typo
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1308
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
     1
"
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
     2
 COPYRIGHT (c) 2002 by eXept Software AG
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
     3
              All Rights Reserved
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
     4
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
     5
 This software is furnished under a license and may be used
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
     6
 only in accordance with the terms of that license and with the
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
     8
 be provided or otherwise made available to, or used by, any
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
     9
 other person.  No title to or ownership of the software is
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    10
 hereby transferred.
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    11
"
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    12
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    13
"{ Package: 'stx:libbasic2' }"
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    14
1196
bba6d37ed88b BZipStream -> BZip2Stream
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    15
CompressionStream subclass:#BZip2Stream
1193
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    16
	instanceVariableNames:''
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    17
	classVariableNames:''
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    18
	poolDictionaries:''
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    19
	category:'System-Compress'
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    20
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    21
1196
bba6d37ed88b BZipStream -> BZip2Stream
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    22
!BZip2Stream primitiveDefinitions!
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    23
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    24
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    25
/*
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    26
 * includes, defines, structure definitions
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    27
 * and typedefs come here.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    28
 */
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    29
1196
bba6d37ed88b BZipStream -> BZip2Stream
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    30
#include "bz2lib/bzlib.h"
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    31
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    32
typedef enum {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    33
	  e_opmode_unspecified          /* processing done */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    34
	, e_opmode_deflate              /* running deflate */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    35
	, e_opmode_inflate              /* running inflate */
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    36
} e_opmode;
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    37
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    38
typedef struct {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    39
	bz_stream       stream;         /* pointer to the external in -stream */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    40
	char *          in_ref;         /* size    of the external in -stream */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    41
	char *          out_ref;        /* pointer to the external out-stream */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    42
	unsigned int    out_total;      /* size    of the external out-stream */
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    43
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    44
	e_opmode        op_mode;        /* current operational mode */
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    45
} zstream_s;
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    46
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    47
%}
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    48
! !
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    49
1308
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    50
!BZip2Stream class methodsFor:'documentation'!
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    51
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    52
copyright
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    53
"
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    54
 COPYRIGHT (c) 2002 by eXept Software AG
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    55
              All Rights Reserved
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    56
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    57
 This software is furnished under a license and may be used
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    58
 only in accordance with the terms of that license and with the
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    59
 inclusion of the above copyright notice.   This software may not
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    60
 be provided or otherwise made available to, or used by, any
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    61
 other person.  No title to or ownership of the software is
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    62
 hereby transferred.
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    63
"
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
    64
! !
1193
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    65
1196
bba6d37ed88b BZipStream -> BZip2Stream
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    66
!BZip2Stream methodsFor:'low level'!
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    67
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    68
zclose
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    69
    "low level close of the zip stream
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    70
    "
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    71
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    72
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    73
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    74
    if( _zstreamObj != nil )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    75
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    76
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    77
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    78
	__INST(zstream) = nil;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    79
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    80
	if( _zstream->stream.state != NULL )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    81
	{
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    82
	    if( _zstream->op_mode == e_opmode_inflate )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    83
		BZ2_bzDecompressEnd( & _zstream->stream );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    84
	    else
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    85
		BZ2_bzCompressEnd( & _zstream->stream );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    86
	}
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    87
	free( _zstream );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    88
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    89
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    90
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    91
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    92
zdeflate
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
    93
    "low level - deflate"
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
    94
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    95
    |errorNo|
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    96
    errorNo := nil.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    97
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    98
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    99
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   100
    if( _zstreamObj != nil )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   101
    {
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   102
        int          _errorNo, _action;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   103
        unsigned int _bfsize;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   104
        zstream_s *  _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   105
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   106
        if( _zstream->op_mode != e_opmode_deflate )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   107
            RETURN( nil );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   108
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   109
        _bfsize = _zstream->out_total;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   110
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   111
        if( _zstream->stream.state == NULL )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   112
        {
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   113
            _zstream->op_mode = e_opmode_unspecified;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   114
            RETURN( nil );
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   115
        }
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   116
        _action = (__INST(hitEOF) == true) ? BZ_FINISH : BZ_RUN;        
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   117
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   118
        _zstream->stream.avail_out = _bfsize;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   119
        _zstream->stream.next_out  = _zstream->out_ref;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   120
        
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   121
        _errorNo = BZ2_bzCompress( & _zstream->stream, _action );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   122
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   123
        if( _errorNo == BZ_STREAM_END )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   124
        {
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   125
            _zstream->stream.avail_in = 0;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   126
            _zstream->stream.next_in  = NULL;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   127
            _errorNo = BZ2_bzCompressEnd( & _zstream->stream );
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   128
        }
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   129
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   130
        if(   (_errorNo == BZ_OK)
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   131
           || (_errorNo == BZ_RUN_OK)
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   132
           || (_errorNo == BZ_FINISH_OK)
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   133
          )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   134
        {
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   135
            if(   (_zstream->stream.avail_out != _bfsize)
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   136
               || (_zstream->stream.avail_in  != 0)
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   137
              )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   138
              RETURN( true );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   139
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   140
            RETURN( false );
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   141
        }
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   142
        errorNo = __MKSMALLINT( _errorNo );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   143
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   144
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   145
    errorNo ifNil:[
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   146
        zstream ifNil:[self errorNotOpen].
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   147
        self invalidArgument.
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   148
    ].
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   149
    self zerror:errorNo.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   150
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   151
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   152
zdeflateInit
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   153
    "low level - open for reading"
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   154
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   155
    |errorNo blockSize100k workFactor|
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   156
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   157
    errorNo       := nil.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   158
    blockSize100k := BlockSize.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   159
    workFactor    := 30.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   160
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   161
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   162
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   163
    if( (_zstreamObj != nil) && __bothSmallInteger(blockSize100k, workFactor) )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   164
    {
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   165
        int         _errorNo;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   166
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   167
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   168
        _zstream->op_mode = e_opmode_deflate;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   169
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   170
        _errorNo = BZ2_bzCompressInit( & _zstream->stream
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   171
                                     , __intVal( blockSize100k ), 0, __intVal( workFactor ) );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   172
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   173
        if( _errorNo == BZ_OK )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   174
            RETURN( self );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   175
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   176
        errorNo = __MKSMALLINT( _errorNo );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   177
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   178
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   179
    errorNo ifNil:[
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   180
        zstream ifNil:[ self errorNotOpen ].
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   181
        self invalidArgument.
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   182
    ].
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   183
    self zerror:errorNo.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   184
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   185
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   186
zget_avail_out
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   187
    "low level - get the number of available out bytes
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   188
    "
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   189
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   190
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   191
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   192
    if( _zstreamObj != nil )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   193
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   194
	unsigned int _count;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   195
	zstream_s *  _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   196
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   197
	_count = _zstream->out_total - _zstream->stream.avail_out;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   198
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   199
	RETURN( __MKSMALLINT (_count) );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   200
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   201
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   202
    self errorNotOpen.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   203
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   204
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   205
zinflate
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   206
    "low level - inflate
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   207
    "
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   208
    |errorNo|
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   209
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   210
    errorNo := nil.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   211
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   212
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   213
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   214
    if( _zstreamObj != nil )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   215
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   216
	int         _errorNo, _count;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   217
	zstream_s * _zstream;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   218
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   219
	_zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   220
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   221
	if( _zstream->op_mode != e_opmode_inflate )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   222
	    RETURN( nil );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   223
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   224
	if( _zstream->stream.state == NULL )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   225
	{
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   226
	    _zstream->op_mode = e_opmode_unspecified;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   227
	    RETURN( nil );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   228
	}
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   229
	if( _zstream->stream.avail_in == 0 )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   230
	    RETURN( __MKSMALLINT (0) );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   231
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   232
	_zstream->stream.avail_out = _zstream->out_total;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   233
	_zstream->stream.next_out  = _zstream->out_ref;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   234
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   235
	_errorNo = BZ2_bzDecompress( & _zstream->stream );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   236
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   237
	if( _errorNo == BZ_STREAM_END )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   238
	    _errorNo = BZ2_bzDecompressEnd( & _zstream->stream );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   239
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   240
	if( _errorNo == BZ_OK )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   241
	{
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   242
	    _count = _zstream->out_total - _zstream->stream.avail_out;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   243
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   244
	    RETURN( __MKSMALLINT (_count) );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   245
	}
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   246
	errorNo = __MKSMALLINT( _errorNo );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   247
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   248
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   249
    errorNo ifNil:[ self errorNotOpen ].
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   250
    self zerror:errorNo.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   251
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   252
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   253
zinflateInit
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   254
    "low level - inflateInit
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   255
    "
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   256
    |errorNo|
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   257
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   258
    errorNo := nil.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   259
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   260
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   261
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   262
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   263
    if( _zstreamObj != nil )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   264
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   265
	int         _errorNo;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   266
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   267
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   268
	_zstream->op_mode = e_opmode_inflate;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   269
	_errorNo = BZ2_bzDecompressInit( & _zstream->stream, 0, 1 );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   270
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   271
	if( _errorNo == BZ_OK )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   272
	    RETURN( self );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   273
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   274
	_zstream->stream.avail_in = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   275
	errorNo = __MKSMALLINT( _errorNo );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   276
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   277
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   278
    errorNo ifNil:[ self errorNotOpen ].
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   279
    self zerror:errorNo.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   280
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   281
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   282
zopen
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   283
    "low level - opens the zip stream
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   284
    "
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   285
    |outTotal|
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   286
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   287
    outTotal := outputBytes size.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   288
%{
1564
Claus Gittinger <cg@exept.de>
parents: 1308
diff changeset
   289
    extern char *malloc();
Claus Gittinger <cg@exept.de>
parents: 1308
diff changeset
   290
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   291
    zstream_s * _zstream = (zstream_s *) malloc( sizeof(zstream_s) );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   292
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   293
    if( _zstream )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   294
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   295
	OBJ     _zobj   = __MKEXTERNALADDRESS( _zstream );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   296
	OBJ     _outObj = __INST( outputBytes );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   297
	OBJ     _inpObj = __INST( inputBytes  );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   298
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   299
	_zstream->in_ref           = (char *) __externalBytesAddress( _inpObj );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   300
	_zstream->stream.next_in   = NULL;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   301
	_zstream->stream.avail_in  = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   302
	_zstream->stream.total_in_lo32  = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   303
	_zstream->stream.total_in_hi32  = 0;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   304
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   305
	_zstream->out_total        = __intVal( outTotal );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   306
	_zstream->out_ref          = (char *) __externalBytesAddress( _outObj );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   307
	_zstream->stream.next_out  = _zstream->out_ref;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   308
	_zstream->stream.avail_out = _zstream->out_total;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   309
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   310
	_zstream->stream.total_out_lo32 = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   311
	_zstream->stream.total_out_hi32 = 0;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   312
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   313
	_zstream->stream.bzalloc   = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   314
	_zstream->stream.bzfree    = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   315
	_zstream->stream.opaque    = 0;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   316
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   317
	_zstream->op_mode          = e_opmode_unspecified;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   318
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   319
	__INST (zstream) = _zobj;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   320
	__STORE(self, _zobj);
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   321
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   322
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   323
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   324
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   325
zset_avail_in:count
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   326
    "set the 'avail_in'"
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   327
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   328
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   329
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   330
    if( (_zstreamObj != nil) && __isSmallInteger(count) )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   331
    {
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   332
        int         _count;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   333
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   334
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   335
        if( (_count = __intVal( count )) > 0 )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   336
        {
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   337
            char * _in_ref = _zstream->in_ref;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   338
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   339
            _zstream->stream.avail_in = _count;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   340
            _zstream->stream.next_in  = _in_ref;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   341
        } else {
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   342
            _zstream->stream.avail_in = 0;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   343
            _zstream->stream.next_in  = NULL;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   344
        }
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   345
        RETURN( self );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   346
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   347
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   348
    zstream ifNil:[ self errorNotOpen ].
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   349
    self invalidArgument.
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   350
! !
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   351
1196
bba6d37ed88b BZipStream -> BZip2Stream
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
   352
!BZip2Stream class methodsFor:'documentation'!
1193
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
   353
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
   354
version
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1564
diff changeset
   355
    ^ '$Header: /cvs/stx/stx/libbasic2/BZip2Stream.st,v 1.9 2005-08-01 12:37:43 stefan Exp $'
1193
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
   356
! !