ZipStream.st
author Claus Gittinger <cg@exept.de>
Sat, 02 May 2020 21:40:13 +0200
changeset 5476 7355a4b11cb6
parent 4777 b22943151ce0
permissions -rw-r--r--
#FEATURE by cg class: Socket class added: #newTCPclientToHost:port:domain:domainOrder:withTimeout: changed: #newTCPclientToHost:port:domain:withTimeout:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
     1
"{ Encoding: utf8 }"
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
     2
1308
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     3
"
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     4
 COPYRIGHT (c) 2002 by eXept Software AG
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
     5
	      All Rights Reserved
1308
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     6
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     7
 This software is furnished under a license and may be used
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     8
 only in accordance with the terms of that license and with the
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     9
 inclusion of the above copyright notice.   This software may not
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    10
 be provided or otherwise made available to, or used by, any
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    11
 other person.  No title to or ownership of the software is
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    12
 hereby transferred.
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    13
"
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    14
"{ Package: 'stx:libbasic2' }"
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
    15
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
    16
"{ NameSpace: Smalltalk }"
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
    17
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
    18
CompressionStream subclass:#ZipStream
1193
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    19
	instanceVariableNames:''
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    20
	classVariableNames:'Z_DEFLATED HEAD_OS_CODE HEAD_RESERVED HEAD_EXTRA_FIELD
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    21
		HEAD_ORIG_NAME HEAD_COMMENT HEAD_CRC GZ_MAGIC_ID'
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    22
	poolDictionaries:''
4260
3be6896552e2 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4179
diff changeset
    23
	category:'Streams-Compressed'
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
    24
!
c73aee830691 initial checkin
ca
parents:
diff changeset
    25
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    26
!ZipStream primitiveDefinitions!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    27
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    28
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    29
/*
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    30
 * includes, defines, structure definitions
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    31
 * and typedefs come here.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    32
 */
1836
e9e1ba3735c6 Correct include path for zlib
Stefan Vogel <sv@exept.de>
parents: 1828
diff changeset
    33
#include "zlib.h"
e9e1ba3735c6 Correct include path for zlib
Stefan Vogel <sv@exept.de>
parents: 1828
diff changeset
    34
#include "zutil.h"
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    35
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
    36
typedef enum {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    37
	  e_opmode_unspecified          /* processing done */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    38
	, e_opmode_deflate              /* running deflate */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    39
	, e_opmode_inflate              /* running inflate */
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
    40
} e_opmode;
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
    41
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    42
typedef struct {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    43
	z_stream        stream;         /* pointer to the external in -stream */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    44
	Bytef *         in_ref;         /* size    of the external in -stream */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    45
	Bytef *         out_ref;        /* pointer to the external out-stream */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    46
	uLong           out_total;      /* size    of the external out-stream */
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    47
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    48
	e_opmode        op_mode;        /* current operational mode */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    49
	uLong           crc_32;         /* keeps the current crc */
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
    50
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    51
	Bytef           tail_buff[ 8 ]; /* store the tail in the read modus */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    52
	uLong           tail_size;      /* to check the crc and data length */
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    53
} zstream_s;
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    54
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    55
%}
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    56
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    57
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    58
!ZipStream class methodsFor:'documentation'!
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    59
1308
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    60
copyright
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    61
"
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    62
 COPYRIGHT (c) 2002 by eXept Software AG
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
    63
	      All Rights Reserved
1308
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    64
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    65
 This software is furnished under a license and may be used
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    66
 only in accordance with the terms of that license and with the
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    67
 inclusion of the above copyright notice.   This software may not
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    68
 be provided or otherwise made available to, or used by, any
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    69
 other person.  No title to or ownership of the software is
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    70
 hereby transferred.
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    71
"
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    72
!
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    73
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    74
documentation
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    75
"
4260
3be6896552e2 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4179
diff changeset
    76
    Zip compression and decompression (as used in gzip and zip)
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    77
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    78
    [author:]
4260
3be6896552e2 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4179
diff changeset
    79
        Claus Atzkern
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    80
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    81
    [instance variables:]
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    82
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    83
    [class variables:]
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    84
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    85
    [see also:]
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    86
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    87
"
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    88
!
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    89
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    90
examples
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    91
"
2488
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
    92
                                                                [exBegin]
1847
5364b697ad8f better example
sr
parents: 1836
diff changeset
    93
    |compressedDataStream zipStream compressedData uncompressedData|
5364b697ad8f better example
sr
parents: 1836
diff changeset
    94
5364b697ad8f better example
sr
parents: 1836
diff changeset
    95
    compressedDataStream := #[] writeStream.
5364b697ad8f better example
sr
parents: 1836
diff changeset
    96
    zipStream := ZipStream writeOpenOn:compressedDataStream.
5364b697ad8f better example
sr
parents: 1836
diff changeset
    97
    zipStream nextPutAll:'hallo Welt'.
5364b697ad8f better example
sr
parents: 1836
diff changeset
    98
    zipStream close.
5364b697ad8f better example
sr
parents: 1836
diff changeset
    99
5364b697ad8f better example
sr
parents: 1836
diff changeset
   100
    compressedData := compressedDataStream contents.
5364b697ad8f better example
sr
parents: 1836
diff changeset
   101
5364b697ad8f better example
sr
parents: 1836
diff changeset
   102
    zipStream := ZipStream readOpenOn:(compressedData readStream).
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
   103
1847
5364b697ad8f better example
sr
parents: 1836
diff changeset
   104
    zipStream notNil ifTrue:[
2488
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   105
        |stream c|
1847
5364b697ad8f better example
sr
parents: 1836
diff changeset
   106
2488
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   107
        stream := '' writeStream.
1847
5364b697ad8f better example
sr
parents: 1836
diff changeset
   108
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   109
        [ (c := zipStream nextOrNil) notNil ] whileTrue:[
2488
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   110
            stream nextPut:c
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   111
        ].
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   112
        stream close.
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   113
        uncompressedData := stream contents.
1847
5364b697ad8f better example
sr
parents: 1836
diff changeset
   114
    ].
5364b697ad8f better example
sr
parents: 1836
diff changeset
   115
    ^ uncompressedData
2488
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   116
                                                                [exEnd]
1847
5364b697ad8f better example
sr
parents: 1836
diff changeset
   117
5364b697ad8f better example
sr
parents: 1836
diff changeset
   118
2489
9a520f4a1d6a changed: #examples
sr
parents: 2488
diff changeset
   119
                                                                [exBegin]
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   120
    |fstream zipStream c|
2488
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   121
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   122
    fstream := FileStream newTemporary.
2488
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   123
    zipStream := ZipStream writeOpenOn:fstream.
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   124
    zipStream nextPutAll:'hallo Welt(1) - test....'.
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   125
    zipStream cr.
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   126
    zipStream nextPutAll:'hallo Welt(2) - test....'.
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   127
    zipStream cr.
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   128
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   129
    zipStream close.
2488
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   130
    fstream close.
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   131
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   132
    fstream := fstream fileName readStream.
2488
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   133
    zipStream := ZipStream readOpenOn:fstream.
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   134
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   135
    Transcript showCR:zipStream contents.
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   136
2488
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   137
    zipStream close.
702fc73e1b3c added: #examples2
sr
parents: 2335
diff changeset
   138
    fstream close.
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   139
    fstream fileName delete.
2489
9a520f4a1d6a changed: #examples
sr
parents: 2488
diff changeset
   140
                                                                [exEnd]
9a520f4a1d6a changed: #examples
sr
parents: 2488
diff changeset
   141
9a520f4a1d6a changed: #examples
sr
parents: 2488
diff changeset
   142
"
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
   143
! !
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   144
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   145
!ZipStream class methodsFor:'initialization'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   146
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   147
initialize
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   148
    "setup class attributes derived from the library"
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   149
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   150
    |z_deflated os_code|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   151
%{
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   152
    z_deflated = __MKSMALLINT( Z_DEFLATED );
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   153
    os_code    = __MKSMALLINT( OS_CODE );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   154
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   155
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   156
    Z_DEFLATED            := z_deflated.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   157
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   158
    HEAD_OS_CODE          := os_code.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   159
    HEAD_RESERVED         := 16rE0.     " bits 5..7:  reserved "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   160
    HEAD_EXTRA_FIELD      := 16r04.     " bit 2 set:  extra field present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   161
    HEAD_ORIG_NAME        := 16r08.     " bit 3 set:  original file name present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   162
    HEAD_COMMENT          := 16r10.     " bit 4 set:  file comment present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   163
    HEAD_CRC              := 16r02.     " bit 1 set:  header CRC present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   164
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   165
    GZ_MAGIC_ID           := #[ 16r1f 16r8b ]
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   166
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   167
2006
0ad76801137e add instance creation methods to allow to open the ZipStream as
ab
parents: 1847
diff changeset
   168
!ZipStream class methodsFor:'instance creation'!
0ad76801137e add instance creation methods to allow to open the ZipStream as
ab
parents: 1847
diff changeset
   169
0ad76801137e add instance creation methods to allow to open the ZipStream as
ab
parents: 1847
diff changeset
   170
readOpenAsZipStreamOn:aStream
2190
6c3f9241753a fixed stream processing
Claus Gittinger <cg@exept.de>
parents: 2178
diff changeset
   171
    "open to read data compressed from stream,
2006
0ad76801137e add instance creation methods to allow to open the ZipStream as
ab
parents: 1847
diff changeset
   172
     the default readOpenOn: will open ZipStream as gzip stream"
2196
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   173
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   174
    ^ self
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   175
        readOpenAsZipStreamOn:aStream
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   176
        suppressHeaderAndChecksum:(self defaultSuppressHeaderAndChecksum)
2196
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   177
!
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   178
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   179
readOpenAsZipStreamOn:aStream suppressFileHeader:suppressFileHeader suppressZipHeaderAndChecksum:suppressZipHeaderAndChecksum
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   180
    "open to read data compressed from stream,
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   181
     the default readOpenOn: will open ZipStream as gzip stream"
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   182
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   183
    ^ self basicNew
3536
2df6c954138e class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3535
diff changeset
   184
        openWithMode:#readonly
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   185
        on:aStream
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   186
        suppressFileHeader:suppressFileHeader suppressZipHeaderAndChecksum:suppressZipHeaderAndChecksum
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   187
!
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   188
2196
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   189
readOpenAsZipStreamOn:aStream suppressHeaderAndChecksum:aBoolean
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   190
    "open to read data compressed from stream,
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   191
     the default readOpenOn: will open ZipStream as gzip stream"
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   192
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   193
    ^ self basicNew
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   194
        streamOpenWithMode:#readonly
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   195
        on:aStream
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   196
        suppressHeaderAndChecksum:aBoolean
2006
0ad76801137e add instance creation methods to allow to open the ZipStream as
ab
parents: 1847
diff changeset
   197
!
0ad76801137e add instance creation methods to allow to open the ZipStream as
ab
parents: 1847
diff changeset
   198
0ad76801137e add instance creation methods to allow to open the ZipStream as
ab
parents: 1847
diff changeset
   199
writeOpenAsZipStreamOn:aStream
2190
6c3f9241753a fixed stream processing
Claus Gittinger <cg@exept.de>
parents: 2178
diff changeset
   200
    "open to write data compressed to stream,
2006
0ad76801137e add instance creation methods to allow to open the ZipStream as
ab
parents: 1847
diff changeset
   201
     the default writeOpenOn: will open ZipStream as gzip stream"
2196
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   202
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   203
    ^ self
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   204
        writeOpenAsZipStreamOn:aStream
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   205
        suppressHeaderAndChecksum:(self defaultSuppressHeaderAndChecksum)
2196
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   206
!
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   207
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   208
writeOpenAsZipStreamOn:aStream suppressFileHeader:suppressFileHeader suppressZipHeaderAndChecksum:suppressZipHeaderAndChecksum
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   209
    "open to write data compressed to stream,
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   210
     the default writeOpenOn: will open ZipStream as gzip stream"
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   211
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   212
    ^ self basicNew
3536
2df6c954138e class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3535
diff changeset
   213
        openWithMode:#writeonly
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   214
        on:aStream
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   215
        suppressFileHeader:suppressFileHeader suppressZipHeaderAndChecksum:suppressZipHeaderAndChecksum
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   216
!
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   217
2196
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   218
writeOpenAsZipStreamOn:aStream suppressHeaderAndChecksum:aBoolean
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   219
    "open to write data compressed to stream,
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   220
     the default writeOpenOn: will open ZipStream as gzip stream"
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   221
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   222
    ^ self basicNew
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   223
        streamOpenWithMode:#writeonly
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   224
        on:aStream
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   225
        suppressHeaderAndChecksum:aBoolean
2006
0ad76801137e add instance creation methods to allow to open the ZipStream as
ab
parents: 1847
diff changeset
   226
! !
0ad76801137e add instance creation methods to allow to open the ZipStream as
ab
parents: 1847
diff changeset
   227
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   228
!ZipStream class methodsFor:'ZipInterface compatibility - compress/uncompress'!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   229
4777
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   230
compress:anUncompressedByteArrayOrString into:aCompressedByteArrayOrString
4260
3be6896552e2 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4179
diff changeset
   231
    ^ self 
4777
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   232
        flatBytesIn:anUncompressedByteArrayOrString
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   233
        from:1 to:(anUncompressedByteArrayOrString size)
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   234
        into:aCompressedByteArrayOrString
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   235
        doCompress:true.
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   236
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   237
    "
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   238
     |buffer len1 len2 compressed uncompressed|
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   239
     buffer := String new:100.
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   240
     len1 := self compress:'hello world hello world hello world hello world hello world' into:buffer.
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   241
     compressed := buffer copyTo:len1.
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   242
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   243
     len2 := self uncompress:compressed into:buffer.
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   244
     uncompressed := buffer copyTo:len2.
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   245
    "
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   246
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   247
    "Modified (format): / 18-12-2018 / 12:53:17 / Claus Gittinger"
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   248
!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   249
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   250
flatBytesIn:bytesIn from:start to:stop into:bytesOut doCompress:doCompress
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   251
    "compress or uncompress the bytesIn buffer into the bytesOut buffer; returns
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   252
     the un/compressed size; on error an exception is raised"
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   253
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   254
    |errorNr|
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   255
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   256
    ((start between:1 and:stop) and:[stop <= bytesIn size]) ifFalse:[
2335
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   257
        ^ self error:'invalid argument size'
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   258
    ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   259
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   260
%{
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   261
    if (__bothSmallInteger(start, stop)) {
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   262
        uLong __start = __intVal(start);
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   263
        uLong __stop = __intVal(stop);
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   264
        uLong __countIn = __stop - __start + 1;
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   265
        char *__bytesIn;
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   266
        char *__bytesOut;
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   267
        uLong __countOut;
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   268
2335
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   269
        if (__isBytes(bytesIn)) {
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   270
            __bytesIn = __byteArrayVal(bytesIn);
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   271
        } else if (__isStringLike(bytesIn)) {
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   272
            __bytesIn = __stringVal(bytesIn);
2335
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   273
        }
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   274
2335
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   275
        if (__isBytes(bytesOut)) {
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   276
            __bytesOut = __byteArrayVal(bytesOut);
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   277
            __countOut = __byteArraySize(bytesOut);
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   278
        } else if (__isString(bytesOut)) {
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   279
            __bytesOut = __stringVal(bytesOut);
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   280
            __countOut = __stringSize(bytesOut);
2335
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   281
        }
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   282
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   283
        if (__bytesOut && __bytesIn && __countOut > 0) {
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   284
            int __result;
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   285
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   286
            __bytesIn += __intVal(start) - 1;
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   287
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   288
            __result = (doCompress == true)
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   289
                    ? compress  ((Byte *) __bytesOut, &__countOut, (Byte *) __bytesIn, __countIn)
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   290
                    : uncompress((Byte *) __bytesOut, &__countOut, (Byte *) __bytesIn, __countIn);
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   291
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   292
            if (__result == Z_OK) {
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   293
                RETURN(__MKSMALLINT(__countOut));
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   294
            }
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   295
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   296
            errorNr = __MKSMALLINT(__result);
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   297
        }
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   298
    }
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   299
%}.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   300
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   301
    errorNr isNil ifTrue:[ ^ self error:'invalid arguments' ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   302
    errorNr ==  1 ifTrue:[ ^ self error:'stream at end' ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   303
    errorNr == -3 ifTrue:[ ^ self error:'input data are corrupted' ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   304
    errorNr == -4 ifTrue:[ ^ self error:'not enough memory' ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   305
    errorNr == -5 ifTrue:[ ^ self error:'not enough memory in the output stream' ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   306
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   307
    self error:('compressing error: ', errorNr printString).
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   308
!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   309
4777
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   310
uncompress:aCompressedByteArrayOrString into:anUncompressedByteArrayOrString
4260
3be6896552e2 #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 4179
diff changeset
   311
    ^ self 
4777
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   312
        flatBytesIn:aCompressedByteArrayOrString
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   313
        from:1 to:(aCompressedByteArrayOrString size)
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   314
        into:anUncompressedByteArrayOrString
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   315
        doCompress:false.
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   316
b22943151ce0 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4694
diff changeset
   317
    "Modified (format): / 18-12-2018 / 12:53:09 / Claus Gittinger"
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   318
! !
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   319
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   320
!ZipStream class methodsFor:'ZipInterface compatibility - crc'!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   321
2178
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   322
crc32Add:aCharacterOrByte crc:crc
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   323
    "Update a running crc with aCharacterOrByte
2178
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   324
     and return the updated crc "
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   325
%{ /* NOCONTEXT */
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   326
    if (__isInteger(crc)) {
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   327
        int __int;
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   328
        char __byte;
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   329
        uLong  __crc;
2178
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   330
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   331
        if (__isCharacter(aCharacterOrByte)) {
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   332
            __int = __smallIntegerVal(__characterVal(aCharacterOrByte));
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   333
        } else if (__isSmallInteger(aCharacterOrByte)) {
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   334
            __int = __smallIntegerVal(aCharacterOrByte);
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   335
        } else{
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   336
            goto err;
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   337
        }
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   338
        if (__int < 0 || __int > 255) goto err;
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   339
        __byte = __int;
2178
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   340
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   341
        __crc  = __unsignedLongIntVal( crc );
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   342
        __crc = crc32(__crc, (Byte *) &__byte, 1 );
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   343
        RETURN( __MKUINT(__crc) );
2178
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   344
    }
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   345
err:;
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   346
%}.
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   347
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   348
    ^ self error:'invalid argument'
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   349
!
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   350
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   351
crc32BytesIn:bytesIn from:start to:stop crc:crc
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   352
    "Update a running crc with the bytes buf[start.. stop]
2178
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   353
     and return the updated crc"
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   354
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   355
%{ /* NOCONTEXT */
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   356
    if (__isInteger(crc) && __bothSmallInteger(start, stop)) {
2335
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   357
        char * __bytes  = 0;
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   358
        unsigned int __size;
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   359
        uLong  __crc  = __unsignedLongIntVal( crc );
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   360
        int   __start = __intVal( start );
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   361
        int   __stop = __intVal( stop );
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   362
2335
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   363
        if (__isBytes(bytesIn)) {
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   364
            __bytes = __byteArrayVal(bytesIn);
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   365
            __size = __byteArraySize(bytesIn);
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   366
        } else if (__isStringLike(bytesIn)) {
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   367
            __bytes = __stringVal(bytesIn);
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   368
            __size = __stringSize(bytesIn);
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   369
        } else {
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   370
            goto err;
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   371
        }
2178
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   372
4179
51596c002c86 #TUNING by stefan
Stefan Vogel <sv@exept.de>
parents: 4054
diff changeset
   373
        if (__start < 1 || __start > __stop || __stop > __size) goto err;
2178
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   374
2335
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   375
        __size = __stop - __start + 1;
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   376
        __bytes += __start - 1;
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   377
        __crc = crc32(__crc, (Byte *) __bytes, __size );
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   378
2335
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   379
        RETURN( __MKUINT(__crc) );
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   380
    }
2178
f6f0d919aed2 Fix windows compilation bug in 1.31
Stefan Vogel <sv@exept.de>
parents: 2177
diff changeset
   381
err:;
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   382
%}.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   383
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   384
    ^ self error:'invalid argument size'
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   385
! !
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   386
2639
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   387
!ZipStream class methodsFor:'queries'!
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   388
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   389
maxDistanceCodes
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   390
    ^ 30
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   391
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   392
    "Created: / 11-09-2011 / 17:11:36 / cg"
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   393
!
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   394
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   395
maxLiteralCodes
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   396
    ^ 286
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   397
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   398
    "Created: / 11-09-2011 / 17:11:15 / cg"
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   399
! !
Claus Gittinger <cg@exept.de>
parents: 2489
diff changeset
   400
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   401
!ZipStream methodsFor:'low level'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   402
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   403
zclose
1052
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   404
    "low level close of the zip stream
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   405
    "
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   406
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   407
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   408
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   409
    if( _zstreamObj != nil )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   410
    {
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   411
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   412
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   413
	__INST(zstream) = nil;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   414
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   415
	if( _zstream->stream.state != NULL )
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   416
	{
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   417
	    if( _zstream->op_mode == e_opmode_inflate )
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   418
		inflateEnd( & _zstream->stream );
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   419
	    else
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   420
		deflateEnd( & _zstream->stream );
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   421
	}
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   422
	free( _zstream );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   423
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   424
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   425
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   426
1057
9df4a60df0ef *** empty log message ***
ca
parents: 1056
diff changeset
   427
zdeflate
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   428
    "low level - deflate"
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   429
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   430
    |errorNo|
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   431
    errorNo := nil.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   432
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   433
%{  /* STACK: 102400 */
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   434
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   435
1056
44871623590b *** empty log message ***
ca
parents: 1054
diff changeset
   436
    if( _zstreamObj != nil )
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   437
    {
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   438
        int         _errorNo, _action;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   439
        uLong       _bfsize;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   440
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   441
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   442
        if( _zstream->op_mode != e_opmode_deflate )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   443
            RETURN( false );
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   444
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   445
        _bfsize = _zstream->out_total;
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   446
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   447
        if( _zstream->stream.state == NULL )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   448
        {
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   449
            /* processing finished; write crc_32 and the total size
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   450
            */
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   451
            uLong   v, i;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   452
            Bytef * p = _zstream->out_ref;
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   453
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   454
            v = _zstream->crc_32;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   455
            for( i = 0; i < 4; ++i ) { p[i] = v & 0xff; v >>= 8; }
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   456
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   457
            v = _zstream->stream.total_in;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   458
            for( i = 4; i < 8; ++i ) { p[i] = v & 0xff; v >>= 8; }
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   459
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   460
            _zstream->op_mode          = e_opmode_unspecified;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   461
            _zstream->stream.avail_in  = 0;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   462
            _zstream->stream.next_in   = Z_NULL;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   463
            _zstream->stream.avail_out = _bfsize - 8;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   464
            RETURN( true );
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   465
        }
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   466
        _zstream->stream.avail_out = _bfsize;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   467
        _zstream->stream.next_out  = _zstream->out_ref;
1056
44871623590b *** empty log message ***
ca
parents: 1054
diff changeset
   468
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   469
        _action  = (__INST(hitEOF) == true) ? Z_FINISH : Z_NO_FLUSH;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   470
        _errorNo = deflate( & _zstream->stream, _action );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   471
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   472
        if( _errorNo == Z_STREAM_END )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   473
        {
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   474
            _zstream->stream.avail_in = 0;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   475
            _zstream->stream.next_in  = Z_NULL;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   476
            _errorNo = deflateEnd( & _zstream->stream );
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   477
        }
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   478
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   479
        if( _errorNo == Z_OK )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   480
        {
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   481
            if( _zstream->stream.avail_out == 0 )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   482
              RETURN( true );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   483
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   484
            RETURN( false );
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   485
        }
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   486
        errorNo = __MKSMALLINT( _errorNo );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   487
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   488
%}.
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   489
    errorNo isNil ifTrue:[
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   490
        zstream isNil ifTrue:[self errorNotOpen].
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   491
        self invalidArgument.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   492
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   493
    self zerror:errorNo.
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   494
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   495
    "Modified: / 05-07-2018 / 19:38:45 / Stefan Vogel"
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   496
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   497
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   498
zdeflateInit
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   499
    "low level - deflateInit"
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   500
2193
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   501
    |errorNo level windowBits|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   502
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   503
    errorNo := nil.
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   504
    level   := BlockSize.
2193
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   505
    windowBits := self zget_windowBits.
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   506
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   507
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   508
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   509
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   510
    if( (_zstreamObj != nil) && __isSmallInteger(level) )
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   511
    {
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   512
	int         _errorNo;
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   513
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   514
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   515
	_zstream->op_mode = e_opmode_deflate;
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   516
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   517
	_errorNo = deflateInit2( & _zstream->stream
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   518
			       , __intVal( level )
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   519
			       , Z_DEFLATED
2193
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   520
			       , __intVal( windowBits )
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   521
			       , DEF_MEM_LEVEL
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   522
			       , Z_DEFAULT_STRATEGY
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   523
			       );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   524
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   525
	if( _errorNo == Z_OK )
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   526
	    RETURN( self );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   527
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   528
	errorNo = __MKSMALLINT( _errorNo );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   529
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   530
%}.
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   531
    errorNo isNil ifTrue:[
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   532
	zstream isNil ifTrue:[ self errorNotOpen ].
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   533
	self invalidArgument .
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   534
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   535
    self zerror:errorNo.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   536
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   537
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   538
zget_avail_out
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   539
    "low level - get the number of available out bytes
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   540
    "
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   541
%{
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   542
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   543
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   544
    if( _zstreamObj != nil )
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   545
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   546
	uInt        _count;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   547
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   548
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   549
	_count = _zstream->out_total - _zstream->stream.avail_out;
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   550
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   551
	RETURN( __MKSMALLINT (_count) );
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   552
    }
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   553
%}.
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   554
    self errorNotOpen.
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   555
!
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   556
2193
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   557
zget_windowBits
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   558
    "answer the bits used for inflateInit2 or deflateInit2...
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   559
    a negative WindowBits value suppresses the zlib header and the checksum..."
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   560
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   561
    |windowBits|
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   562
%{
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   563
    windowBits = __MKSMALLINT( MAX_WBITS );
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   564
%}.
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   565
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   566
    self isHeaderAndChecksumSuppressed ifTrue:[
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   567
	"/ undocumented feature.....
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   568
	^ windowBits negated
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   569
    ].
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   570
    ^ windowBits
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   571
!
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   572
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   573
zinflate
1052
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   574
    "low level - inflate
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   575
    "
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   576
    |errorNo tailError|
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   577
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   578
    tailError := nil.
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   579
    errorNo   := nil.
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   580
%{  /* STACK: 102400 */
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   581
    OBJ _zstreamObj = __INST( zstream );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   582
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   583
    if( _zstreamObj != nil )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   584
    {
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   585
        int         _errorNo, _count;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   586
        zstream_s * _zstream;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   587
        int         _avail_in;
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   588
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   589
        _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   590
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   591
        if( _zstream->op_mode != e_opmode_inflate )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   592
            RETURN( nil );
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   593
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   594
        _avail_in = _zstream->stream.avail_in;
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   595
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   596
        if( _zstream->stream.state == NULL )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   597
        {
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   598
            /* processing finished : check crc and data length */
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   599
            Bytef * _next_in;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   600
            Bytef * _buff;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   601
            uLong   _tnum;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   602
            int     _i;
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   603
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   604
            _next_in   = _zstream->stream.next_in;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   605
            _buff = _zstream->tail_buff;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   606
            _tnum = _zstream->tail_size;
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   607
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   608
            while( (_avail_in > 0) && (_tnum < 8) )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   609
            {
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   610
               _buff[_tnum] = * _next_in;
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   611
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   612
                ++_next_in;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   613
                ++_tnum;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   614
                --_avail_in;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   615
            }
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   616
            _zstream->tail_size = _tnum;
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   617
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   618
            if( _tnum < 8 )                     /* test whether tail is read */
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   619
                RETURN( __MKSMALLINT (0) );     /* need more data */
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   620
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   621
            /* compute and check crc */
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   622
            for( _tnum = 0, _i = 4; --_i >= 0; _tnum = (_tnum << 8) + _buff[_i] );
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   623
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   624
            if( _tnum != _zstream->crc_32 )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   625
                { tailError = __MKSMALLINT( 1 ); goto badTail; }
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   626
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   627
            /* compute and check data length */
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   628
            for( _tnum = 0, _i = 8; --_i >= 4; _tnum = (_tnum << 8) + _buff[_i] );
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   629
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   630
            if( _zstream->stream.total_out != _tnum )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   631
                { tailError = __MKSMALLINT( 2 ); goto badTail; }
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   632
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   633
            _zstream->op_mode = e_opmode_unspecified;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   634
            RETURN( nil );
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   635
        }
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   636
        if( _avail_in == 0 )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   637
            RETURN( __MKSMALLINT (0) );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   638
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   639
        _zstream->stream.avail_out = _zstream->out_total;
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   640
        _zstream->stream.next_out  = _zstream->out_ref;
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   641
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   642
        _errorNo = inflate( & _zstream->stream, Z_NO_FLUSH );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   643
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   644
        if( _errorNo == Z_STREAM_END )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   645
            _errorNo = inflateEnd( & _zstream->stream );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   646
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   647
        if( _errorNo == Z_OK )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   648
        {
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   649
            _count = _zstream->out_total - _zstream->stream.avail_out;
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   650
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   651
            if( _count > 0 )
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   652
                _zstream->crc_32 = crc32( _zstream->crc_32, _zstream->out_ref, _count );
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   653
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   654
            RETURN( __MKSMALLINT (_count) );
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   655
        }
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   656
        errorNo = __MKSMALLINT( _errorNo );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   657
    }
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   658
badTail:;
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   659
%}.
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   660
    errorNo isNil ifTrue:[
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   661
        tailError ifNotNil:[
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   662
            tailError == 1 ifTrue:[
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   663
                self zerror:'invalid compressed data--crc error'
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   664
            ].
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   665
            self zerror:'invalid compressed data--length error'
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   666
        ].
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   667
        self errorNotOpen
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   668
    ].
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   669
    self zerror:errorNo.
4694
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   670
5cf29506d101 #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 4263
diff changeset
   671
    "Modified: / 05-07-2018 / 19:06:33 / Stefan Vogel"
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   672
!
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   673
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   674
zinflateInit
1052
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   675
    "low level - inflateInit
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   676
    "
2193
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   677
    |errorNo windowBits|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   678
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   679
    errorNo := nil.
2193
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   680
    windowBits := self zget_windowBits.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   681
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   682
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   683
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   684
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   685
    if( _zstreamObj != nil )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   686
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   687
	int         _errorNo;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   688
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   689
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   690
	_zstream->op_mode = e_opmode_inflate;
2193
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   691
	_errorNo = inflateInit2 ( & _zstream->stream
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   692
				, __intVal( windowBits )
db70507b21ba suppress header & checksum configurable
ca
parents: 2190
diff changeset
   693
				);
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   694
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   695
	if( _errorNo == Z_OK )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   696
	    RETURN( self );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   697
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   698
	_zstream->stream.avail_in = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   699
	errorNo = __MKSMALLINT( _errorNo );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   700
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   701
%}.
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   702
    errorNo isNil ifTrue:[ self errorNotOpen ].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   703
    self zerror:errorNo.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   704
!
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   705
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   706
zopen
1052
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   707
    "low level - opens the zip stream
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   708
    "
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   709
    |outTotal|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   710
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   711
    outTotal := outputBytes size.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   712
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   713
    zstream_s * _zstream = (zstream_s *) malloc( sizeof(zstream_s) );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   714
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   715
    if( _zstream )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   716
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   717
	OBJ     _zobj   = __MKEXTERNALADDRESS( _zstream );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   718
	OBJ     _outObj = __INST( outputBytes );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   719
	OBJ     _inpObj = __INST( inputBytes  );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   720
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   721
	zmemzero( _zstream, sizeof(zstream_s) );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   722
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   723
	_zstream->in_ref           = (Bytef *) __externalBytesAddress( _inpObj );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   724
	_zstream->stream.next_in   = Z_NULL;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   725
	_zstream->stream.avail_in  = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   726
	_zstream->stream.total_in  = 0;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   727
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   728
	_zstream->out_total        = __intVal( outTotal );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   729
	_zstream->out_ref          = (Bytef *) __externalBytesAddress( _outObj );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   730
	_zstream->stream.next_out  = _zstream->out_ref;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   731
	_zstream->stream.avail_out = _zstream->out_total;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   732
	_zstream->stream.total_out = 0;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   733
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   734
	_zstream->stream.zalloc    = (alloc_func)0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   735
	_zstream->stream.zfree     = (free_func) 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   736
	_zstream->stream.opaque    = (voidpf)    0;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   737
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   738
	_zstream->crc_32           = crc32( 0L, Z_NULL, 0 );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   739
	_zstream->op_mode          = e_opmode_unspecified;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   740
	_zstream->tail_size        = 0;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   741
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   742
	__INST (zstream) = _zobj;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   743
	__STORE(self, _zobj);
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   744
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   745
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   746
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   747
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   748
zset_avail_in:count
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   749
    "set the 'avail_in' and compute the crc"
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   750
%{
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   751
    OBJ _zstreamObj = __INST( zstream );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   752
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   753
    if( (_zstreamObj != nil) && __isSmallInteger(count) )
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   754
    {
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   755
	int         _count;
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   756
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   757
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   758
	if( (_count = __intVal( count )) > 0 )
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   759
	{
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   760
	    Bytef * _in_ref = _zstream->in_ref;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   761
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   762
	    _zstream->stream.avail_in = _count;
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   763
	    _zstream->stream.next_in  = _in_ref;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   764
1828
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   765
	    if( _zstream->op_mode == e_opmode_deflate )
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   766
		_zstream->crc_32 = crc32( _zstream->crc_32, _in_ref, _count );
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   767
	} else {
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   768
	    _zstream->stream.avail_in = 0;
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   769
	    _zstream->stream.next_in  = Z_NULL;
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   770
	}
47cd819e24af *** empty log message ***
ca
parents: 1619
diff changeset
   771
	RETURN( self );
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   772
    }
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   773
%}.
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   774
    zstream isNil ifTrue:[ self errorNotOpen ].
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   775
    self invalidArgument.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   776
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   777
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   778
!ZipStream methodsFor:'startup & release'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   779
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   780
openWithMode:aMode on:aStream suppressFileHeader:suppressFileHeader suppressZipHeaderAndChecksum:suppressZipHeaderAndChecksum
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   781
    "open stream and write or check gzip header
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   782
     suppressFileHeader:
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   783
        if true, the gzip header (magic number and a few extra fields) is not written/read
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   784
     suppressZipHeaderAndChecksum
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   785
        controls if the gzip checksum and 2 header bytes should be written/checked"
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   786
2196
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   787
    super
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   788
        openWithMode:aMode
9eecfefd08aa suppressHeaderAndChecksum is configurable
ca
parents: 2193
diff changeset
   789
        on:aStream
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   790
        suppressHeaderAndChecksum:suppressZipHeaderAndChecksum.
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   791
4263
4fb08e7f7b65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4260
diff changeset
   792
    suppressZipHeaderAndChecksum ifFalse:[    
4fb08e7f7b65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4260
diff changeset
   793
        suppressFileHeader ifFalse:[
4fb08e7f7b65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4260
diff changeset
   794
            self isReadable ifTrue:[
4fb08e7f7b65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4260
diff changeset
   795
                "Check for the gzip magic id"            
4fb08e7f7b65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4260
diff changeset
   796
                self readHeader
4fb08e7f7b65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4260
diff changeset
   797
            ] ifFalse:[
4fb08e7f7b65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4260
diff changeset
   798
                "write the gzip magic id"
4fb08e7f7b65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4260
diff changeset
   799
                self writeHeader
4fb08e7f7b65 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4260
diff changeset
   800
            ].
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   801
        ].
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   802
    ].
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   803
!
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   804
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   805
openWithMode:aMode on:aStream suppressHeaderAndChecksum:aBoolean
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   806
    "open stream and write or check gzip header.
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   807
     Caveat:
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   808
        Backward compatibility: aBoolean controls if the gzip checksum and 2 header bytes should be written/checked
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   809
        (i.e. NOT the file header with the zip magic)"
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   810
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   811
    self
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   812
        openWithMode:aMode
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   813
        on:aStream
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   814
        suppressFileHeader:false
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   815
        suppressZipHeaderAndChecksum:aBoolean
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   816
!
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   817
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   818
readHeader
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   819
    "Check for the gzip magic id"
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   820
    |flags|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   821
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   822
    GZ_MAGIC_ID do:[:b|
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   823
        onStream nextByte ~~ b ifTrue:[ self zerror:'version error' ]
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   824
    ].
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   825
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   826
    onStream nextByte ~~ Z_DEFLATED ifTrue:[
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   827
        self zerror:'invalid method (not deflated)'
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   828
    ].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   829
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   830
    flags := onStream nextByte.
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   831
    (flags bitAnd:HEAD_RESERVED) ~~ 0 ifTrue:[
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   832
        self zerror:'wrong data format'
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   833
    ].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   834
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   835
    "discard time, xflags and OS code"
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   836
    onStream skip:6.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   837
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   838
    (flags bitAnd:HEAD_EXTRA_FIELD) ~~ 0 ifTrue:[
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   839
        |len|
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   840
        "skip the extra field"
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   841
        len := onStream nextByte + (onStream nextByte bitShift:8).
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   842
        "/ len timesRepeat:[ onStream nextByte ].
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   843
        "/ faster:
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   844
        onStream skip:len.
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   845
    ].
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   846
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   847
    (flags bitAnd:HEAD_ORIG_NAME) ~~ 0 ifTrue:[
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   848
        |b|
3535
d62d6f27f07c class: ZipStream
Claus Gittinger <cg@exept.de>
parents: 3283
diff changeset
   849
        "skip the original file name (up to zero byte)"
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   850
        [ (b := onStream nextByte) ~~ 0 ] whileTrue.
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   851
    ].
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   852
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   853
    (flags bitAnd:HEAD_CRC) ~~ 0 ifTrue:[
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   854
        "skip the header crc"
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   855
        onStream skip:2.
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   856
    ].
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   857
!
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   858
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   859
writeHeader
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   860
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   861
    "write the gzip magic id"
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   862
    onStream nextPutBytes:GZ_MAGIC_ID.
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   863
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   864
    "write the method"
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   865
    onStream nextPutByte:Z_DEFLATED.
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   866
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   867
    onStream nextPutBytes:#[
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   868
                0                    "write the flags"
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   869
                0 0 0 0              "write time"
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   870
                0                    "write xflags"
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   871
            ].
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   872
2019
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   873
    "write OS code"
4a33a6715a51 refactored
Claus Gittinger <cg@exept.de>
parents: 2006
diff changeset
   874
    onStream nextPutByte:HEAD_OS_CODE.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   875
! !
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
   876
c73aee830691 initial checkin
ca
parents:
diff changeset
   877
!ZipStream class methodsFor:'documentation'!
c73aee830691 initial checkin
ca
parents:
diff changeset
   878
c73aee830691 initial checkin
ca
parents:
diff changeset
   879
version
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   880
    ^ '$Header$'
2335
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   881
!
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   882
609923563c1d change __isString() to __isStringLike() in primitive code
Stefan Vogel <sv@exept.de>
parents: 2196
diff changeset
   883
version_CVS
4054
54f989be66a1 #TUNING
mawalch
parents: 3536
diff changeset
   884
    ^ '$Header$'
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
   885
! !
1193
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
   886
3283
836136cf9e8d class: ZipStream
Stefan Vogel <sv@exept.de>
parents: 2639
diff changeset
   887
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   888
ZipStream initialize!