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