ZipStream.st
author Stefan Vogel <sv@exept.de>
Mon, 01 Aug 2005 14:37:49 +0200
changeset 1570 b6dd9a871cc2
parent 1565 ed95bd664ace
child 1619 b20d5b1af962
permissions -rw-r--r--
Fix typo
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1308
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     1
"
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     2
 COPYRIGHT (c) 2002 by eXept Software AG
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
     3
	      All Rights Reserved
1308
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     4
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     5
 This software is furnished under a license and may be used
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     6
 only in accordance with the terms of that license and with the
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     8
 be provided or otherwise made available to, or used by, any
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
     9
 other person.  No title to or ownership of the software is
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    10
 hereby transferred.
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    11
"
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    12
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    13
"{ Package: 'stx:libbasic2' }"
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
    14
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
    15
CompressionStream subclass:#ZipStream
1193
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    16
	instanceVariableNames:''
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    17
	classVariableNames:'Z_DEFLATED HEAD_OS_CODE HEAD_RESERVED HEAD_EXTRA_FIELD
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    18
		HEAD_ORIG_NAME HEAD_COMMENT HEAD_CRC GZ_MAGIC_ID'
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    19
	poolDictionaries:''
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
    20
	category:'System-Compress'
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
    21
!
c73aee830691 initial checkin
ca
parents:
diff changeset
    22
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    23
!ZipStream primitiveDefinitions!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    24
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    25
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    26
/*
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    27
 * includes, defines, structure definitions
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    28
 * and typedefs come here.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    29
 */
1060
a59e60d44eb4 *** empty log message ***
ca
parents: 1059
diff changeset
    30
#include "zlib/zlib.h"
a59e60d44eb4 *** empty log message ***
ca
parents: 1059
diff changeset
    31
#include "zlib/zutil.h"
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    32
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
    33
typedef enum {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    34
	  e_opmode_unspecified          /* processing done */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    35
	, e_opmode_deflate              /* running deflate */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    36
	, e_opmode_inflate              /* running inflate */
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
    37
} e_opmode;
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
    38
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    39
typedef struct {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    40
	z_stream        stream;         /* pointer to the external in -stream */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    41
	Bytef *         in_ref;         /* size    of the external in -stream */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    42
	Bytef *         out_ref;        /* pointer to the external out-stream */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    43
	uLong           out_total;      /* size    of the external out-stream */
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    44
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    45
	e_opmode        op_mode;        /* current operational mode */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    46
	uLong           crc_32;         /* keeps the current crc */
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
    47
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
    48
	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
    49
	uLong           tail_size;      /* to check the crc and data length */
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    50
} zstream_s;
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    51
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    52
%}
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    53
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    54
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    55
!ZipStream class methodsFor:'documentation'!
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    56
1308
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    57
copyright
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    58
"
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    59
 COPYRIGHT (c) 2002 by eXept Software AG
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
    60
	      All Rights Reserved
1308
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
 This software is furnished under a license and may be used
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    63
 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
    64
 inclusion of the above copyright notice.   This software may not
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    65
 be provided or otherwise made available to, or used by, any
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    66
 other person.  No title to or ownership of the software is
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    67
 hereby transferred.
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    68
"
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    69
!
d7bea6d0b3b6 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1197
diff changeset
    70
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    71
documentation
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    72
"
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    73
    Zip compression and decompression (used in gzip and zip)
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    74
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    75
    [author:]
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
    76
	Claus Atzkern
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
    [instance variables:]
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    79
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    80
    [class variables:]
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    81
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    82
    [see also:]
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    83
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
!
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
examples
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    88
"
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
    89
                                                                [exBegin]
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    90
    |compressed zipStream|
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    91
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
    92
self halt.
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    93
    compressed := #[] writeStream.
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    94
    zipStream := self writeOpenOn:compressed.
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    95
    zipStream nextPutAll:'This is some text 1234567890'.
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    96
    zipStream flush.
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
    97
    self information:'Compressed size: ', compressed contents size printString.
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    98
self halt.
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
    99
    zipStream := self readOpenOn:compressed contents readStream.
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
   100
    self information:zipStream contents.
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   101
                                                                [exEnd]
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
   102
"
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
   103
! !
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   104
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   105
!ZipStream class methodsFor:'initialization'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   106
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   107
initialize
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   108
    "setup class attributes derived from the library
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   109
    "
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   110
    |z_deflated os_code|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   111
%{
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   112
    z_deflated = __MKSMALLINT( Z_DEFLATED );
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   113
    os_code    = __MKSMALLINT( OS_CODE );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   114
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   115
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   116
    Z_DEFLATED            := z_deflated.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   117
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   118
    HEAD_OS_CODE          := os_code.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   119
    HEAD_RESERVED         := 16rE0.     " bits 5..7:  reserved "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   120
    HEAD_EXTRA_FIELD      := 16r04.     " bit 2 set:  extra field present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   121
    HEAD_ORIG_NAME        := 16r08.     " bit 3 set:  original file name present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   122
    HEAD_COMMENT          := 16r10.     " bit 4 set:  file comment present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   123
    HEAD_CRC              := 16r02.     " bit 1 set:  header CRC present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   124
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   125
    GZ_MAGIC_ID           := #[ 16r1f 16r8b ]
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   126
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   127
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   128
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   129
!ZipStream class methodsFor:'ZipInterface compatibility - compress/uncompress'!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   130
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   131
compress: aUncompressedByteArray into: aCompressedByteArray
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   132
    ""
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   133
    ^ self flatBytesIn: aUncompressedByteArray
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   134
		  from: 1
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   135
		    to: (aUncompressedByteArray size)
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   136
		  into: aCompressedByteArray
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   137
	    doCompress: true.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   138
!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   139
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   140
flatBytesIn:bytesIn from:start to:stop into:bytesOut doCompress:doCompress
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   141
    "compress or uncompress the bytesIn buffer into the bytesOut buffer; returns
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   142
     the un/compressed size; on error an exception is raised
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   143
    "
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   144
    |errorNr size|
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   145
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   146
     size := stop - start + 1.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   147
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   148
     (    (start between:1 and:stop)
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   149
      and:[size > 0
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   150
      and:[bytesIn  size >= stop
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   151
      and:[bytesOut size >  0]]]
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   152
     ) ifFalse:[
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   153
        ^ self error:'invalid argument size'
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   154
    ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   155
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   156
%{
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   157
    char *  __bytesIn  = 0;
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   158
    uLong   __countIn  = 0;
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   159
    char *  __bytesOut = 0;
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   160
    uLong   __countOut = 0;
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   161
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   162
    if( (__isSmallInteger(start)) && (__isSmallInteger(stop)) && (__isSmallInteger(size)) )
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   163
    {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   164
        __countIn = __intVal( size );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   165
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   166
        if (__isBytes(bytesIn)) {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   167
            __bytesIn = __ByteArrayInstPtr(bytesIn)->ba_element;
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   168
        } else {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   169
            if (__isString(bytesIn)) {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   170
                __bytesIn = __stringVal( bytesIn );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   171
            }
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   172
        }
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   173
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   174
        if (__isBytes(bytesOut)) {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   175
            __bytesOut = __ByteArrayInstPtr(bytesOut)->ba_element;
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   176
            __countOut = __byteArraySize( bytesOut );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   177
        } else {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   178
            if (__isString(bytesOut)) {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   179
                __bytesOut = __stringVal( bytesOut );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   180
                __countOut = __stringSize( bytesOut );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   181
            }
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   182
        }
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   183
    }
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   184
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   185
    if( __bytesOut && __bytesIn )
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   186
    {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   187
        int __result = Z_OK;
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   188
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   189
        __bytesIn += (__intVal( start)) - 1;
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   190
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   191
        if( doCompress == true )
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   192
            __result   = compress  ( (Byte *) __bytesOut, & __countOut, (Byte *) __bytesIn, __countIn );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   193
        else
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   194
            __result   = uncompress( (Byte *) __bytesOut, & __countOut, (Byte *) __bytesIn, __countIn );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   195
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   196
        if( __result == Z_OK )
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   197
            { RETURN(__MKSMALLINT(__countOut)); }
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   198
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   199
        errorNr = __MKSMALLINT( __result );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   200
    }
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   201
%}.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   202
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   203
    errorNr isNil ifTrue:[ ^ self error:'invalid arguments' ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   204
    errorNr ==  1 ifTrue:[ ^ self error:'stream at end' ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   205
    errorNr == -3 ifTrue:[ ^ self error:'input data are corrupted' ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   206
    errorNr == -4 ifTrue:[ ^ self error:'not enough memory' ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   207
    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
   208
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   209
    self error:('compressing error: ', errorNr printString).
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   210
!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   211
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   212
uncompress: aCompressedByteArray into: aUncompressedByteArray
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   213
    ""
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   214
    ^ self flatBytesIn: aCompressedByteArray
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   215
		  from: 1
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   216
		    to: (aCompressedByteArray size)
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   217
		  into: aUncompressedByteArray
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   218
	    doCompress: false.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   219
! !
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   220
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   221
!ZipStream class methodsFor:'ZipInterface compatibility - crc'!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   222
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   223
crc32BytesIn:bytesIn
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   224
    "compute crc with the bytes buf[1.. bytesIn size]
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   225
     and return the crc
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   226
    "
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   227
    ^ self crc32BytesIn:bytesIn from:1
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   228
!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   229
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   230
crc32BytesIn:bytesIn crc:aCrc
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   231
    "Update a running crc with the bytes buf[1.. bytesIn size]
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   232
     and return the updated
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   233
    "
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   234
    ^ self crc32BytesIn:bytesIn from:1 crc:aCrc
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   235
!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   236
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   237
crc32BytesIn:bytesIn from:start
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   238
    "compute crc with the bytes buf[start.. bytesIn size]
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   239
     and return the crc
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   240
    "
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   241
    ^ self crc32BytesIn:bytesIn from:start to:(bytesIn size)
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   242
!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   243
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   244
crc32BytesIn:bytesIn from:start crc:aCrc
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   245
    "Update a running crc with the bytes buf[start.. bytesIn size]
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   246
     and return the updated
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   247
    "
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   248
    ^ self crc32BytesIn:bytesIn from:start to:(bytesIn size) crc:aCrc
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
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   251
crc32BytesIn:bytesIn from:start to:stop
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   252
    "compute crc with the bytes buf[start.. stop]
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   253
     and return the crc
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   254
    "
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   255
    ^ self crc32BytesIn:bytesIn from:start to:stop crc:0
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   256
!
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   257
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   258
crc32BytesIn:bytesIn from:start to:stop crc:crc
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   259
    "Update a running crc with the bytes buf[start.. stop]
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   260
     and return the updated
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   261
    "
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   262
    |size|
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   263
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   264
     size := stop - start + 1.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   265
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   266
     (    (start between:1 and:stop)
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   267
      and:[size > 0
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   268
      and:[bytesIn size >= stop]]
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   269
     ) ifFalse:[
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   270
	^ self error:'invalid argument size'
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   271
    ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   272
%{
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   273
    if( (__isInteger(crc)) && (__isSmallInteger(start)) && (__isSmallInteger(size)) )
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   274
    {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   275
	char * __bytes  = 0;
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   276
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   277
	if (__isBytes(bytesIn)) {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   278
	    __bytes = __ByteArrayInstPtr(bytesIn)->ba_element;
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   279
	} else {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   280
	    if (__isString(bytesIn)) {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   281
		__bytes = __stringVal( bytesIn );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   282
	    }
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   283
	}
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   284
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   285
	if( __bytes )
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   286
	{
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   287
	    uLong  __crc  = __longIntVal( crc );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   288
	    uInt   __size = __intVal( size );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   289
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   290
	    __bytes += (__intVal( start)) - 1;
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   291
	    __crc = crc32(__crc, (Byte *) __bytes, __size );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   292
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   293
	    RETURN( __MKUINT(__crc) );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   294
	}
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   295
    }
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   296
%}.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   297
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   298
    ^ self error:'invalid argument size'
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
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   301
!ZipStream methodsFor:'low level'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   302
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   303
zclose
1052
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   304
    "low level close of the zip stream
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   305
    "
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   306
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   307
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   308
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   309
    if( _zstreamObj != nil )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   310
    {
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   311
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   312
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   313
        __INST(zstream) = nil;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   314
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   315
        if( _zstream->stream.state != NULL )
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   316
        {
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   317
            if( _zstream->op_mode == e_opmode_inflate )
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   318
                inflateEnd( & _zstream->stream );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   319
            else
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   320
                deflateEnd( & _zstream->stream );
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   321
        }
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   322
        free( _zstream );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   323
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   324
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   325
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   326
1057
9df4a60df0ef *** empty log message ***
ca
parents: 1056
diff changeset
   327
zdeflate
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   328
    "low level - deflate"
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   329
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   330
    |errorNo|
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   331
    errorNo := nil.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   332
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   333
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   334
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   335
1056
44871623590b *** empty log message ***
ca
parents: 1054
diff changeset
   336
    if( _zstreamObj != nil )
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   337
    {
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   338
        int         _errorNo, _action;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   339
        uLong       _bfsize;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   340
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   341
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   342
        if( _zstream->op_mode != e_opmode_deflate )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   343
            RETURN( false );
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   344
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   345
        _bfsize = _zstream->out_total;
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   346
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   347
        if( _zstream->stream.state == NULL )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   348
        {
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   349
            /* processing finished; write crc_32 and the total size
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   350
            */
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   351
            uLong   v, i;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   352
            Bytef * p = _zstream->out_ref;
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   353
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   354
            v = _zstream->crc_32;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   355
            for( i = 0; i < 4; ++i ) { p[i] = v & 0xff; v >>= 8; }
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   356
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   357
            v = _zstream->stream.total_in;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   358
            for( i = 4; i < 8; ++i ) { p[i] = v & 0xff; v >>= 8; }
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   359
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   360
            _zstream->op_mode          = e_opmode_unspecified;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   361
            _zstream->stream.avail_in  = 0;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   362
            _zstream->stream.next_in   = Z_NULL;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   363
            _zstream->stream.avail_out = _bfsize - 8;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   364
            RETURN( true );
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   365
        }
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   366
        _zstream->stream.avail_out = _bfsize;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   367
        _zstream->stream.next_out  = _zstream->out_ref;
1056
44871623590b *** empty log message ***
ca
parents: 1054
diff changeset
   368
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   369
        _action  = (__INST(hitEOF) == true) ? Z_FINISH : Z_NO_FLUSH;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   370
        _errorNo = deflate( & _zstream->stream, _action );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   371
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   372
        if( _errorNo == Z_STREAM_END )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   373
        {
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   374
            _zstream->stream.avail_in = 0;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   375
            _zstream->stream.next_in  = Z_NULL;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   376
            _errorNo = deflateEnd( & _zstream->stream );
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   377
        }
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   378
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   379
        if( _errorNo == Z_OK )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   380
        {
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   381
            if(   (_zstream->stream.avail_out != _bfsize)
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   382
               || (_zstream->stream.avail_in  != 0)
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   383
              )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   384
              RETURN( true );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   385
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   386
            RETURN( false );
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   387
        }
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   388
        errorNo = __MKSMALLINT( _errorNo );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   389
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   390
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   391
    errorNo ifNil:[
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   392
        zstream ifNil:[self errorNotOpen].
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   393
        self invalidArgument.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   394
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   395
    self zerror:errorNo.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   396
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   397
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   398
zdeflateInit
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   399
    "low level - deflateInit"
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   400
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   401
    |errorNo level|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   402
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   403
    errorNo := nil.
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   404
    level   := BlockSize.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   405
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   406
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   407
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   408
    if( (_zstreamObj != nil) && __isSmallInteger(level) )
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   409
    {
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   410
        int         _errorNo;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   411
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   412
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   413
        _zstream->op_mode = e_opmode_deflate;
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   414
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   415
        _errorNo = deflateInit2( & _zstream->stream
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   416
                               , __intVal( level )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   417
                               , Z_DEFLATED
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   418
                               , -MAX_WBITS
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   419
                               , DEF_MEM_LEVEL
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   420
                               , Z_DEFAULT_STRATEGY
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   421
                               );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   422
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   423
        if( _errorNo == Z_OK )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   424
            RETURN( self );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   425
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   426
        errorNo = __MKSMALLINT( _errorNo );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   427
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   428
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   429
    errorNo ifNil:[
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   430
        zstream ifNil:[ self errorNotOpen ].
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   431
        self invalidArgument .
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   432
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   433
    self zerror:errorNo.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   434
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   435
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   436
zget_avail_out
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   437
    "low level - get the number of available out bytes
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   438
    "
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   439
%{
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   440
    OBJ _zstreamObj = __INST( zstream );
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   441
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   442
    if( _zstreamObj != nil )
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   443
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   444
	uInt        _count;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   445
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   446
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   447
	_count = _zstream->out_total - _zstream->stream.avail_out;
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   448
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   449
	RETURN( __MKSMALLINT (_count) );
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   450
    }
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   451
%}.
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   452
    self errorNotOpen.
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   453
!
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   454
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   455
zinflate
1052
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   456
    "low level - inflate
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   457
    "
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   458
    |errorNo tailError|
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   459
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   460
    tailError := nil.
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   461
    errorNo   := nil.
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   462
%{
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   463
    OBJ _zstreamObj = __INST( zstream );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   464
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   465
    if( _zstreamObj != nil )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   466
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   467
	int         _errorNo, _count;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   468
	zstream_s * _zstream;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   469
	int         _avail_in;
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   470
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   471
	_zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   472
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   473
	if( _zstream->op_mode != e_opmode_inflate )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   474
	    RETURN( nil );
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   475
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   476
	_avail_in = _zstream->stream.avail_in;
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   477
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   478
	if( _zstream->stream.state == NULL )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   479
	{
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   480
	    /* processing finished : check crc and data length */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   481
	    Bytef * _next_in;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   482
	    Bytef * _buff;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   483
	    uLong   _tnum;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   484
	    int     _i;
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   485
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   486
	    _next_in   = _zstream->stream.next_in;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   487
	    _buff = _zstream->tail_buff;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   488
	    _tnum = _zstream->tail_size;
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   489
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   490
	    while( (_avail_in > 0) && (_tnum < 8) )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   491
	    {
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   492
	       _buff[_tnum] = * _next_in;
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   493
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   494
		++_next_in;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   495
		++_tnum;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   496
		--_avail_in;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   497
	    }
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   498
	    _zstream->tail_size = _tnum;
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   499
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   500
	    if( _tnum < 8 )                     /* test whether tail is read */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   501
		RETURN( __MKSMALLINT (0) );     /* need more data */
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   502
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   503
	    /* compute and check crc */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   504
	    for( _tnum = 0, _i = 4; --_i >= 0; _tnum = (_tnum << 8) + _buff[_i] );
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   505
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   506
	    if( _tnum != _zstream->crc_32 )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   507
		{ tailError = __MKSMALLINT( 1 ); goto badTail; }
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   508
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   509
	    /* compute and check data length */
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   510
	    for( _tnum = 0, _i = 8; --_i >= 4; _tnum = (_tnum << 8) + _buff[_i] );
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   511
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   512
	    if( _zstream->stream.total_out != _tnum )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   513
		{ tailError = __MKSMALLINT( 2 ); goto badTail; }
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   514
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   515
	    _zstream->op_mode = e_opmode_unspecified;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   516
	    RETURN( nil );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   517
	}
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   518
	if( _avail_in == 0 )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   519
	    RETURN( __MKSMALLINT (0) );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   520
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   521
	_zstream->stream.avail_out = _zstream->out_total;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   522
	_zstream->stream.next_out  = _zstream->out_ref;
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   523
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   524
	_errorNo = inflate( & _zstream->stream, Z_NO_FLUSH );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   525
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   526
	if( _errorNo == Z_STREAM_END )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   527
	    _errorNo = inflateEnd( & _zstream->stream );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   528
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   529
	if( _errorNo == Z_OK )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   530
	{
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   531
	    _count = _zstream->out_total - _zstream->stream.avail_out;
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   532
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   533
	    if( _count > 0 )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   534
		_zstream->crc_32 = crc32( _zstream->crc_32, _zstream->out_ref, _count );
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   535
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   536
	    RETURN( __MKSMALLINT (_count) );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   537
	}
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   538
	errorNo = __MKSMALLINT( _errorNo );
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   539
    }
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   540
badTail:;
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   541
%}.
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   542
    errorNo ifNil:[
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   543
	tailError ifNotNil:[
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   544
	    tailError == 1 ifTrue:[
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   545
		self zerror:'invalid compressed data--crc error'
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   546
	    ].
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   547
	    self zerror:'invalid compressed data--length error'
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   548
	].
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   549
	self errorNotOpen
1061
be824dc5e0e7 *** empty log message ***
ca
parents: 1060
diff changeset
   550
    ].
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   551
    self zerror:errorNo.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   552
!
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   553
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   554
zinflateInit
1052
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   555
    "low level - inflateInit
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   556
    "
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   557
    |errorNo|
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   558
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   559
    errorNo := nil.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   560
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   561
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   562
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   563
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   564
    if( _zstreamObj != nil )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   565
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   566
	int         _errorNo;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   567
	zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   568
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   569
	_zstream->op_mode = e_opmode_inflate;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   570
	_errorNo = inflateInit2( & _zstream->stream, -MAX_WBITS );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   571
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   572
	if( _errorNo == Z_OK )
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   573
	    RETURN( self );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   574
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   575
	_zstream->stream.avail_in = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   576
	errorNo = __MKSMALLINT( _errorNo );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   577
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   578
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   579
    errorNo ifNil:[ self errorNotOpen ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   580
    self zerror:errorNo.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   581
!
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   582
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   583
zopen
1052
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   584
    "low level - opens the zip stream
055841c03c8a *** empty log message ***
ca
parents: 1051
diff changeset
   585
    "
1051
4f18d73427bb *** empty log message ***
ca
parents: 1050
diff changeset
   586
    |outTotal|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   587
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   588
    outTotal := outputBytes size.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   589
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   590
    zstream_s * _zstream = (zstream_s *) malloc( sizeof(zstream_s) );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   591
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   592
    if( _zstream )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   593
    {
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   594
	OBJ     _zobj   = __MKEXTERNALADDRESS( _zstream );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   595
	OBJ     _outObj = __INST( outputBytes );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   596
	OBJ     _inpObj = __INST( inputBytes  );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   597
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   598
	zmemzero( _zstream, sizeof(zstream_s) );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   599
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   600
	_zstream->in_ref           = (Bytef *) __externalBytesAddress( _inpObj );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   601
	_zstream->stream.next_in   = Z_NULL;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   602
	_zstream->stream.avail_in  = 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   603
	_zstream->stream.total_in  = 0;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   604
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   605
	_zstream->out_total        = __intVal( outTotal );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   606
	_zstream->out_ref          = (Bytef *) __externalBytesAddress( _outObj );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   607
	_zstream->stream.next_out  = _zstream->out_ref;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   608
	_zstream->stream.avail_out = _zstream->out_total;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   609
	_zstream->stream.total_out = 0;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   610
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   611
	_zstream->stream.zalloc    = (alloc_func)0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   612
	_zstream->stream.zfree     = (free_func) 0;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   613
	_zstream->stream.opaque    = (voidpf)    0;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   614
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   615
	_zstream->crc_32           = crc32( 0L, Z_NULL, 0 );
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   616
	_zstream->op_mode          = e_opmode_unspecified;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   617
	_zstream->tail_size        = 0;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   618
1195
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   619
	__INST (zstream) = _zobj;
9d887847d1b6 Add BZipStream and ZipStream
Stefan Vogel <sv@exept.de>
parents: 1193
diff changeset
   620
	__STORE(self, _zobj);
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   621
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   622
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   623
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   624
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   625
zset_avail_in:count
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   626
    "set the 'avail_in' and compute the crc"
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   627
%{
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   628
    OBJ _zstreamObj = __INST( zstream );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   629
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   630
    if( (_zstreamObj != nil) && __isSmallInteger(count) )
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   631
    {
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   632
        int         _count;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   633
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   634
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   635
        if( (_count = __intVal( count )) > 0 )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   636
        {
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   637
            Bytef * _in_ref = _zstream->in_ref;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   638
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   639
            _zstream->stream.avail_in = _count;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   640
            _zstream->stream.next_in  = _in_ref;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   641
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   642
            if( _zstream->op_mode == e_opmode_deflate )
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   643
                _zstream->crc_32 = crc32( _zstream->crc_32, _in_ref, _count );
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   644
        } else {
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   645
            _zstream->stream.avail_in = 0;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   646
            _zstream->stream.next_in  = Z_NULL;
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   647
        }
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   648
        RETURN( self );
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   649
    }
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   650
%}.
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   651
    zstream ifNil:[ self errorNotOpen ].
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   652
    self invalidArgument.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   653
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   654
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   655
!ZipStream methodsFor:'startup & release'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   656
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   657
openWithMode:aMode on:aStream
1197
c86e858c2893 Documentation. Does not work yet.
Stefan Vogel <sv@exept.de>
parents: 1195
diff changeset
   658
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   659
    super openWithMode:aMode on:aStream.
1193
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
   660
    self isReadable ifTrue:[
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   661
	"Check for the gzip magic id"
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   662
	|flags|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   663
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   664
	GZ_MAGIC_ID do:[:b|
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   665
	    onStream nextByte ~~ b ifTrue:[ self zerror:'version error' ]
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   666
	].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   667
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   668
	onStream nextByte ~~ Z_DEFLATED ifTrue:[
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   669
	    self zerror:'invalid method (not deflated)'
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   670
	].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   671
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   672
	flags := onStream nextByte.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   673
	(flags bitAnd:HEAD_RESERVED) ~~ 0 ifTrue:[
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   674
	    self zerror:'wrong data format'
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   675
	].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   676
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   677
	"discard time, xflags and OS code"
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   678
	onStream skip:6.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   679
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   680
	(flags bitAnd:HEAD_EXTRA_FIELD) ~~ 0 ifTrue:[|len|
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   681
	    "skip the extra field"
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   682
	    len := onStream nextByte + (onStream nextByte bitShift:8).
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   683
	    len timesRepeat:[ onStream nextByte ].
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   684
	].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   685
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   686
	(flags bitAnd:HEAD_ORIG_NAME) ~~ 0 ifTrue:[|b|
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   687
	    "skip the original file name"
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   688
	    [ (b := onStream nextByte) ~~ 0 ] whileTrue.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   689
	].
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   690
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   691
	(flags bitAnd:HEAD_CRC) ~~ 0 ifTrue:[
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   692
	    "skip the header crc"
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   693
	    onStream skip:2.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   694
	].
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   695
    ] ifFalse:[
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   696
	"write the gzip magic id
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   697
	"
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   698
	GZ_MAGIC_ID do:[:b| onStream nextPutByte:b ].
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   699
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   700
	"write the method"
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   701
	onStream nextPutByte:Z_DEFLATED.
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   702
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   703
	"write the flags"
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   704
	onStream nextPutByte:0.
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   705
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   706
	"write time"
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   707
	4 timesRepeat:[ onStream nextPutByte:0 ].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   708
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   709
	"write xflags"
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   710
	onStream nextPutByte:0.
1059
b47e4eff5543 *** empty log message ***
ca
parents: 1058
diff changeset
   711
1439
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   712
	"write OS code"
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   713
	onStream nextPutByte:HEAD_OS_CODE.
134b4620d6d0 add ZipInterface compatibility used by SEL MDT Application
ab
parents: 1308
diff changeset
   714
    ].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   715
! !
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
   716
c73aee830691 initial checkin
ca
parents:
diff changeset
   717
!ZipStream class methodsFor:'documentation'!
c73aee830691 initial checkin
ca
parents:
diff changeset
   718
c73aee830691 initial checkin
ca
parents:
diff changeset
   719
version
1570
b6dd9a871cc2 Fix typo
Stefan Vogel <sv@exept.de>
parents: 1565
diff changeset
   720
    ^ '$Header: /cvs/stx/stx/libbasic2/ZipStream.st,v 1.24 2005-08-01 12:37:49 stefan Exp $'
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
   721
! !
1193
7688148ec90c Code formatting & clean up
Stefan Vogel <sv@exept.de>
parents: 1061
diff changeset
   722
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   723
ZipStream initialize!