BZip2Stream.st
author Claus Gittinger <cg@exept.de>
Fri, 29 Aug 2003 21:31:33 +0200
changeset 1308 d7bea6d0b3b6
parent 1196 bba6d37ed88b
child 1564 c3409f17ded6
permissions -rw-r--r--
*** empty log message ***
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
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    93
    "low level - deflate
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    94
    "
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    95
    |errorNo|
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
    96
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
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   100
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   101
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   102
    if( _zstreamObj != nil )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   103
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   104
	int          _errorNo, _action;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   105
	unsigned int _bfsize;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   106
	zstream_s *  _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   107
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   108
	if( _zstream->op_mode != e_opmode_deflate )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   109
	    RETURN( nil );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   110
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   111
	_bfsize = _zstream->out_total;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   112
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   113
	if( _zstream->stream.state == NULL )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   114
	{
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   115
	    _zstream->op_mode = e_opmode_unspecified;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   116
	    RETURN( nil );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   117
	}
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   118
	_action = (__INST(hitEOF) == true) ? BZ_FINISH : BZ_RUN;        
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   119
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   120
	_zstream->stream.avail_out = _bfsize;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   121
	_zstream->stream.next_out  = _zstream->out_ref;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   122
        
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   123
	_errorNo = BZ2_bzCompress( & _zstream->stream, _action );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   124
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   125
	if( _errorNo == BZ_STREAM_END )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   126
	{
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   127
	    _zstream->stream.avail_in = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   128
	    _zstream->stream.next_in  = NULL;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   129
	    _errorNo = BZ2_bzCompressEnd( & _zstream->stream );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   130
	}
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   131
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   132
	if(   (_errorNo == BZ_OK)
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   133
	   || (_errorNo == BZ_RUN_OK)
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   134
	   || (_errorNo == BZ_FINISH_OK)
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   135
	  )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   136
	{
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   137
	    if(   (_zstream->stream.avail_out != _bfsize)
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   138
	       || (_zstream->stream.avail_in  != 0)
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   139
	      )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   140
	      RETURN( true );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   141
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   142
	    RETURN( false );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   143
	}
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   144
	errorNo = __MKSMALLINT( _errorNo );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   145
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   146
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   147
    errorNo ifNil:[
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   148
	zstream ifNil:[self errorNotOpen].
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   149
	self invalidArguments.
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   150
    ].
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   151
    self zerror:errorNo.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   152
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   153
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   154
zdeflateInit
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   155
    "low level - open for reading
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   156
    "
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   157
    |errorNo blockSize100k workFactor|
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   158
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   159
    errorNo       := nil.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   160
    blockSize100k := BlockSize.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   161
    workFactor    := 30.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   162
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   163
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   164
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   165
    if( (_zstreamObj != nil) && __bothSmallInteger(blockSize100k, workFactor) )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   166
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   167
	int         _errorNo;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   168
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   169
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   170
	_zstream->op_mode = e_opmode_deflate;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   171
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   172
	_errorNo = BZ2_bzCompressInit( & _zstream->stream
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   173
				     , __intVal( blockSize100k ), 0, __intVal( workFactor ) );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   174
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   175
	if( _errorNo == BZ_OK )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   176
	    RETURN( self );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   177
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   178
	errorNo = __MKSMALLINT( _errorNo );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   179
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   180
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   181
    errorNo ifNil:[
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   182
	zstream ifNil:[ self errorNotOpen ].
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   183
	self invalidArguments .
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   184
    ].
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   185
    self zerror:errorNo.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   186
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   187
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   188
zget_avail_out
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   189
    "low level - get the number of available out bytes
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   190
    "
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   191
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   192
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   193
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   194
    if( _zstreamObj != nil )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   195
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   196
	unsigned int _count;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   197
	zstream_s *  _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
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
	_count = _zstream->out_total - _zstream->stream.avail_out;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   200
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   201
	RETURN( __MKSMALLINT (_count) );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   202
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   203
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   204
    self errorNotOpen.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   205
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   206
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   207
zinflate
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   208
    "low level - inflate
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   209
    "
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   210
    |errorNo|
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   211
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   212
    errorNo := nil.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   213
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   214
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   215
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   216
    if( _zstreamObj != nil )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   217
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   218
	int         _errorNo, _count;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   219
	zstream_s * _zstream;
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
	_zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   222
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   223
	if( _zstream->op_mode != e_opmode_inflate )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   224
	    RETURN( nil );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   225
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   226
	if( _zstream->stream.state == NULL )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   227
	{
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   228
	    _zstream->op_mode = e_opmode_unspecified;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   229
	    RETURN( nil );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   230
	}
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   231
	if( _zstream->stream.avail_in == 0 )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   232
	    RETURN( __MKSMALLINT (0) );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   233
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   234
	_zstream->stream.avail_out = _zstream->out_total;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   235
	_zstream->stream.next_out  = _zstream->out_ref;
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
	_errorNo = BZ2_bzDecompress( & _zstream->stream );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   238
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   239
	if( _errorNo == BZ_STREAM_END )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   240
	    _errorNo = BZ2_bzDecompressEnd( & _zstream->stream );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   241
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   242
	if( _errorNo == BZ_OK )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   243
	{
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   244
	    _count = _zstream->out_total - _zstream->stream.avail_out;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   245
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   246
	    RETURN( __MKSMALLINT (_count) );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   247
	}
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   248
	errorNo = __MKSMALLINT( _errorNo );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   249
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   250
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   251
    errorNo ifNil:[ self errorNotOpen ].
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   252
    self zerror:errorNo.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   253
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   254
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   255
zinflateInit
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   256
    "low level - inflateInit
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   257
    "
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   258
    |errorNo|
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   259
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   260
    errorNo := nil.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   261
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   262
%{
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   263
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   264
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   265
    if( _zstreamObj != nil )
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   266
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   267
	int         _errorNo;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   268
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   269
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   270
	_zstream->op_mode = e_opmode_inflate;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   271
	_errorNo = BZ2_bzDecompressInit( & _zstream->stream, 0, 1 );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   272
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   273
	if( _errorNo == BZ_OK )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   274
	    RETURN( self );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   275
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   276
	_zstream->stream.avail_in = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   277
	errorNo = __MKSMALLINT( _errorNo );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   278
    }
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   279
%}.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   280
    errorNo ifNil:[ self errorNotOpen ].
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   281
    self zerror:errorNo.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   282
!
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   283
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   284
zopen
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   285
    "low level - opens the zip stream
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   286
    "
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   287
    |outTotal|
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   288
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   289
    outTotal := outputBytes size.
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   290
%{
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
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
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
%{
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
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   333
	int         _count;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   334
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   335
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   336
	if( (_count = __intVal( count )) > 0 )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   337
	{
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   338
	    char * _in_ref = _zstream->in_ref;
1059
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   339
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   340
	    _zstream->stream.avail_in = _count;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   341
	    _zstream->stream.next_in  = _in_ref;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   342
	} else {
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   343
	    _zstream->stream.avail_in = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   344
	    _zstream->stream.next_in  = NULL;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   345
	}
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
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 ].
b47e4eff5543 *** empty log message ***
ca
parents:
diff changeset
   350
    self invalidArguments.
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
1308
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1196
diff changeset
   356
    ^ '$Header: /cvs/stx/stx/libbasic2/BZip2Stream.st,v 1.7 2003-08-29 19:31:11 cg Exp $'
1193
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
   357
! !