ZipStream.st
author ca
Fri, 21 Jun 2002 11:12:26 +0200
changeset 1050 b7e7d51e0a9f
parent 1049 b44c11236369
child 1051 4f18d73427bb
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
     1
'From Smalltalk/X, Version:4.1.4 on 20-jun-2002 at 06:09:31 am'                 !
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
     2
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
     3
"{ Package: 'ca:Compress' }"
c73aee830691 initial checkin
ca
parents:
diff changeset
     4
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
     5
Stream subclass:#ZipStream
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
     6
        instanceVariableNames:'onStream hitEOF binary readPosition writePosition readLimit isReadOpen inputBytes outputBytes zstream'
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
     7
        classVariableNames:'Z_FINISH Z_NO_FLUSH Z_SYNC_FLUSH Z_FULL_FLUSH Z_DEFLATED
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
     8
                Z_DEFAULT_COMPRESSION Z_DEFAULT_LEVEL Z_BEST_COMPRESSION
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
     9
                Z_DEF_MEM_LEVEL Z_DEFAULT_STRATEGY Z_FILTERED Z_HUFFMAN_ONLY
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
    10
                HEAD_OS_CODE HEAD_RESERVED HEAD_EXTRA_FIELD HEAD_ORIG_NAME
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
    11
                HEAD_COMMENT HEAD_CRC GZ_MAGIC_ID'
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
    12
        poolDictionaries:''
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
    13
        category:'A-Compress'
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
    14
!
c73aee830691 initial checkin
ca
parents:
diff changeset
    15
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    16
!ZipStream primitiveDefinitions!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    17
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    18
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    19
/*
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    20
 * includes, defines, structure definitions
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    21
 * and typedefs come here.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    22
 */
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    23
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    24
#include "compress/zlib.h"
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    25
#include "compress/zutil.h"
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    26
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    27
typedef struct {
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
    28
        z_stream        stream;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
    29
        Bytef *         in_ref;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
    30
        uLong           in_total;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    31
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
    32
        Bytef *         out_ref;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
    33
        uLong           out_total;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    34
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
    35
        uLong           crc_32;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    36
} zstream_s;
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    37
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    38
%}
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    39
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    40
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    41
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    42
!ZipStream class methodsFor:'initialization'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    43
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    44
initialize
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    45
    |varZ_NO_FLUSH varZ_SYNC_FLUSH varZ_FULL_FLUSH varZ_FINISH varZ_DEFLATED
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    46
     varZ_DEFAULT_COMPRESSION varZ_BEST_COMPRESSION  varZ_DEF_MEM_LEVEL
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    47
     varZ_DEFAULT_STRATEGY varZ_FILTERED varZ_HUFFMAN_ONLY
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    48
     varHEAD_OS_CODE
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    49
    |
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    50
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    51
    varZ_NO_FLUSH            = __MKSMALLINT( Z_NO_FLUSH );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    52
    varZ_SYNC_FLUSH          = __MKSMALLINT( Z_SYNC_FLUSH );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    53
    varZ_FULL_FLUSH          = __MKSMALLINT( Z_FULL_FLUSH );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    54
    varZ_FINISH              = __MKSMALLINT( Z_FINISH );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    55
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    56
    varZ_DEFLATED            = __MKSMALLINT( Z_DEFLATED );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    57
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    58
    varZ_DEFAULT_COMPRESSION = __MKSMALLINT( Z_DEFAULT_COMPRESSION );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    59
    varZ_BEST_COMPRESSION    = __MKSMALLINT( Z_BEST_COMPRESSION  );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    60
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    61
    varZ_DEF_MEM_LEVEL       = __MKSMALLINT( DEF_MEM_LEVEL );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    62
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    63
    varZ_DEFAULT_STRATEGY    = __MKSMALLINT( Z_DEFAULT_STRATEGY );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    64
    varZ_FILTERED            = __MKSMALLINT( Z_FILTERED );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    65
    varZ_HUFFMAN_ONLY        = __MKSMALLINT( Z_HUFFMAN_ONLY );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    66
    varHEAD_OS_CODE          = __MKSMALLINT( OS_CODE );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    67
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    68
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    69
    Z_NO_FLUSH            := varZ_NO_FLUSH.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    70
    Z_SYNC_FLUSH          := varZ_SYNC_FLUSH.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    71
    Z_FULL_FLUSH          := varZ_FULL_FLUSH.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    72
    Z_FINISH              := varZ_FINISH.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    73
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    74
    Z_DEFLATED            := varZ_DEFLATED.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    75
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    76
    Z_DEFAULT_COMPRESSION := varZ_DEFAULT_COMPRESSION.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    77
    Z_DEFAULT_LEVEL       := 6.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    78
    Z_BEST_COMPRESSION    := varZ_BEST_COMPRESSION.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    79
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    80
    Z_DEF_MEM_LEVEL       := varZ_DEF_MEM_LEVEL.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    81
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    82
    Z_DEFAULT_STRATEGY    := varZ_DEFAULT_STRATEGY.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    83
    Z_FILTERED            := varZ_FILTERED.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    84
    Z_HUFFMAN_ONLY        := varZ_HUFFMAN_ONLY.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    85
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    86
    HEAD_OS_CODE          := varHEAD_OS_CODE.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    87
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    88
    HEAD_RESERVED         := 16rE0.     " bits 5..7:  reserved "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    89
    HEAD_EXTRA_FIELD      := 16r04.     " bit 2 set:  extra field present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    90
    HEAD_ORIG_NAME        := 16r08.     " bit 3 set:  original file name present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    91
    HEAD_COMMENT          := 16r10.     " bit 4 set:  file comment present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    92
    HEAD_CRC              := 16r02.     " bit 1 set:  header CRC present "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    93
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    94
    GZ_MAGIC_ID           := #[ 16r1f 16r8b ]
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    95
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    96
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    97
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    98
!ZipStream class methodsFor:'instance creation'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
    99
1046
79d5f461a3ad *** empty log message ***
ca
parents: 1045
diff changeset
   100
readOpenOn:aStream
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   101
    ^ self basicNew readOpenOn:aStream
1046
79d5f461a3ad *** empty log message ***
ca
parents: 1045
diff changeset
   102
!
79d5f461a3ad *** empty log message ***
ca
parents: 1045
diff changeset
   103
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   104
writeOpenOn:aStream
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   105
    ^ self writeOpenOn:aStream level:Z_DEFAULT_LEVEL
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   106
                            memLevel:Z_DEF_MEM_LEVEL
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   107
                            strategy:Z_DEFAULT_STRATEGY.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   108
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   109
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   110
writeOpenOn:aStream level:level memLevel:memLevel strategy:strategy
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   111
    |z|
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   112
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   113
    z := self basicNew.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   114
    z writeOpenOn:aStream level:level memLevel:memLevel strategy:strategy.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   115
  ^ z
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   116
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   117
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   118
!ZipStream class methodsFor:'test'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   119
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   120
test
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   121
"
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   122
ZipStream test
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   123
"
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   124
   |original compressed contents in out zip|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   125
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   126
   original := 'smalltalk.rc' asFilename contentsOfEntireFile.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   127
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   128
   in := original readStream.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   129
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   130
   [ |b|
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   131
        out := #[] writeStream.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   132
        zip := self writeOpenOn:out.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   133
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   134
        [in atEnd] whileFalse:[
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   135
            (b := in next) ifNotNil:[zip nextPut:b]
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   136
        ]
1046
79d5f461a3ad *** empty log message ***
ca
parents: 1045
diff changeset
   137
   ] valueNowOrOnUnwindDo:[ zip ifNotNil:[ zip close ] ].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   138
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   139
   compressed := out contents.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   140
   [ |b|
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   141
        zip := self readOpenOn:(compressed readStream).
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   142
        out := '' writeStream.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   143
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   144
        [ (b := zip next) notNil ] whileTrue:[ out nextPut:b ]
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   145
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   146
   ] valueNowOrOnUnwindDo:[
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   147
        zip ifNotNil:[ zip close ].
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   148
        contents := out contents.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   149
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   150
        Transcript showCR:(contents   size).
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   151
        Transcript showCR:(compressed size).
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   152
   ].
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   153
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   154
   original = contents ifFalse:[
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   155
        self halt:'contents differs'.
1046
79d5f461a3ad *** empty log message ***
ca
parents: 1045
diff changeset
   156
      ^ self
79d5f461a3ad *** empty log message ***
ca
parents: 1045
diff changeset
   157
   ].
79d5f461a3ad *** empty log message ***
ca
parents: 1045
diff changeset
   158
   Transcript showCR:'OK'.
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   159
!
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   160
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   161
testFile
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   162
"
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   163
ZipStream testFile
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   164
"
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   165
   |fileContents in zip out gzipCmd|
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   166
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   167
   fileContents := 'smalltalk.rc' asFilename contentsOfEntireFile.
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   168
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   169
   in  := fileContents readStream.
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   170
   out := FileStream newFileNamed:'YYY.gz'.
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   171
   out ifNil:[ ^ self ].
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   172
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   173
   [ zip := self writeOpenOn:out.
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   174
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   175
     [in atEnd] whileFalse:[ |buf|
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   176
        buf := in nextAvailable:512.
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   177
        buf do:[:n|
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   178
            zip nextPut:n
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   179
        ]
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   180
     ].
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   181
   ] valueNowOrOnUnwindDo:[
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   182
        zip ifNotNil:[ zip close ].
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   183
        out close.
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   184
   ].
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   185
   gzipCmd := 'gzip -dc YYY.gz > YYY; diff YYY smalltalk.rc'.
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   186
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   187
   Transcript showCR:gzipCmd.
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   188
   gzipCmd printCR.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   189
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   190
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   191
!ZipStream methodsFor:'accessing'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   192
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   193
binary
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   194
    "switch to binary mode - default is text
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   195
    "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   196
    binary := true.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   197
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   198
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   199
text
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   200
    "switch to text mode - default is text
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   201
    "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   202
    binary := false.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   203
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   204
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   205
!ZipStream methodsFor:'error handling'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   206
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   207
errorNotOpen
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   208
    self zerror:( self class name , ' not open' ).
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   209
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   210
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   211
invalidArgument
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   212
    self zerror:( 'invalid argument' ).
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   213
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   214
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   215
pastEnd
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   216
    self zerror:( 'end of stream' ).
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   217
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   218
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   219
zasByte:aByteOrChar
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   220
%{
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   221
    int _theByte;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   222
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   223
    if( __isCharacter(aByteOrChar) )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   224
        _theByte = __intVal(__characterVal(aByteOrChar)) & 0xFF;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   225
    else
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   226
        _theByte = __intVal( aByteOrChar );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   227
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   228
        if( (_theByte < 0) || (_theByte > 255) )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   229
            goto bad;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   230
    else
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   231
        goto bad;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   232
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   233
    RETURN( __MKSMALLINT(_theByte) );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   234
bad:;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   235
%}.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   236
    self invalidArgument
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   237
!
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   238
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   239
zerror:anErrorOrNumber
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   240
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   241
    onStream := nil.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   242
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   243
    self zclose.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   244
    self error:( 'error: ', anErrorOrNumber printString ).
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   245
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   246
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   247
!ZipStream methodsFor:'low level'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   248
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   249
zset_avail_in:count
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   250
%{
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   251
    OBJ _zstreamObj = __INST( zstream );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   252
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   253
    if( (_zstreamObj != nil) && __isSmallInteger(count) )
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   254
    {
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   255
        int         _count;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   256
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1049
b44c11236369 *** empty log message ***
ca
parents: 1048
diff changeset
   257
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   258
        if( (_count = __intVal( count )) > 0 )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   259
        {
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   260
            Bytef * _in_ref = _zstream->in_ref;
1049
b44c11236369 *** empty log message ***
ca
parents: 1048
diff changeset
   261
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   262
            _zstream->stream.avail_in = _count;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   263
            _zstream->stream.next_in  = _in_ref;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   264
            _zstream->crc_32 = crc32( _zstream->crc_32, _in_ref, _count );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   265
        } else {
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   266
            _zstream->stream.avail_in = 0;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   267
            _zstream->stream.next_in  = Z_NULL;
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   268
        }
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   269
        RETURN( self );
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   270
    }
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   271
%}.
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   272
    zstream ifNil:[ self errorNotOpen ].
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   273
    self invalidArguments.
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   274
!
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   275
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   276
zclose
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   277
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   278
    onStream := nil.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   279
    hitEOF   := true.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   280
    zstream ifNil:[^ self].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   281
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   282
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   283
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   284
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   285
    if( _zstreamObj != nil )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   286
    {
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   287
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   288
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   289
        __INST(zstream) = nil;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   290
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   291
        if( _zstream->stream.state != NULL )
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   292
        {
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   293
            if( __INST(isReadOpen) == true )
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   294
                inflateEnd( & _zstream->stream );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   295
            else
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   296
                deflateEnd( & _zstream->stream );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   297
        }
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   298
        free( _zstream );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   299
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   300
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   301
    zstream := nil.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   302
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   303
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   304
zdeflate:aLevel
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   305
    |errorNo|
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   306
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   307
    errorNo := nil.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   308
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   309
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   310
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   311
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   312
    if( (_zstreamObj != nil) && (__isSmallInteger(aLevel)) )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   313
    {
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   314
        int         _errorNo, _level;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   315
        uLong       _avout;
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   316
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   317
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   318
        if( _zstream->stream.state == NULL )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   319
        {
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   320
            /* processing finished */
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   321
            _zstream->stream.avail_in = 0;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   322
            _zstream->stream.next_in  = Z_NULL;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   323
            RETURN( nil );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   324
        }
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   325
        _level = __intVal( aLevel );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   326
        _avout = _zstream->out_total;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   327
        _zstream->stream.avail_out = _avout;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   328
        _zstream->stream.next_out  = _zstream->out_ref;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   329
        
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   330
        _errorNo = deflate( & _zstream->stream, __intVal(aLevel) );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   331
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   332
        if( _errorNo == Z_STREAM_END )
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   333
        {
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   334
            _zstream->stream.avail_in = 0;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   335
            _zstream->stream.next_in  = Z_NULL;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   336
            _errorNo = deflateEnd( & _zstream->stream );
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   337
        }
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   338
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   339
        if( _errorNo == Z_OK )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   340
        {
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   341
            if(   (_zstream->stream.avail_out != _avout)
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   342
               || (_zstream->stream.avail_in  != 0)
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   343
              )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   344
              RETURN( true );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   345
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   346
            RETURN( false );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   347
        }
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   348
        errorNo = __MKSMALLINT( _errorNo );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   349
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   350
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   351
    errorNo ifNil:[
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   352
        zstream ifNil:[self errorNotOpen].
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   353
        self invalidArguments.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   354
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   355
    self zerror:errorNo.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   356
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   357
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   358
zdeflateInit:aLevel memLevel:memLevel strategy:strategy
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   359
    |errorNo|
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   360
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   361
    errorNo := nil.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   362
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   363
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   364
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   365
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   366
    if(   (_zstreamObj != nil)
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   367
       && __isSmallInteger(aLevel)
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   368
       && __isSmallInteger(memLevel)
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   369
       && __isSmallInteger(strategy)
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   370
      )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   371
    {
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   372
        int         _errorNo;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   373
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   374
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   375
        _errorNo = deflateInit2( & _zstream->stream
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   376
                               , __intVal( aLevel )
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   377
                               , Z_DEFLATED
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   378
                               , -MAX_WBITS
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   379
                               , __intVal( memLevel )
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   380
                               , __intVal( strategy )
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   381
                               );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   382
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   383
        if( _errorNo == Z_OK )
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   384
            RETURN( self );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   385
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   386
        errorNo = __MKSMALLINT( _errorNo );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   387
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   388
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   389
    errorNo ifNil:[
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   390
        zstream ifNil:[ self errorNotOpen ].
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   391
        self invalidArguments .
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   392
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   393
    self zerror:errorNo.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   394
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   395
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   396
zflush
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   397
    |count|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   398
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   399
    count := 0.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   400
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   401
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   402
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   403
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   404
    if( _zstreamObj != nil )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   405
    {
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   406
        uInt        _count;
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   407
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   408
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   409
        _count = _zstream->out_total - _zstream->stream.avail_out;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   410
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   411
        if( _count == 0 )
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   412
            RETURN( __MKSMALLINT(0) );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   413
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   414
        _zstream->stream.avail_out = _zstream->out_total;
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   415
        _zstream->stream.next_out  = _zstream->out_ref;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   416
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   417
        count = __MKSMALLINT( _count );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   418
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   419
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   420
    zstream ifNil:[ self errorNotOpen ].
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   421
    self onStreamPutBytes:count from:outputBytes.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   422
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   423
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   424
zgetCrc32
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   425
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   426
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   427
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   428
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   429
    if( _zstreamObj != nil )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   430
    {
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   431
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   432
        RETURN ( __MKUINT(_zstream->crc_32) );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   433
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   434
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   435
    self errorNotOpen
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   436
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   437
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   438
zgetTotalIn
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   439
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   440
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   441
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   442
    if( _zstreamObj != nil )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   443
    {
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   444
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   445
        RETURN ( __MKUINT(_zstream->stream.total_in) );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   446
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   447
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   448
    self errorNotOpen
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   449
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   450
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   451
zinflate
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   452
    |errorNo|
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   453
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   454
    errorNo := nil.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   455
%{
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   456
    OBJ _zstreamObj = __INST( zstream );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   457
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   458
    if( _zstreamObj != nil )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   459
    {
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   460
        int         _errorNo, _count;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   461
        zstream_s * _zstream;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   462
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   463
        _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   464
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   465
        if( _zstream->stream.state == NULL )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   466
        {
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   467
            /* processing finished */
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   468
            _zstream->stream.avail_in = 0;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   469
            _zstream->stream.next_in  = Z_NULL;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   470
            RETURN( nil );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   471
        }
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   472
        if( _zstream->stream.avail_in == 0 )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   473
            RETURN( __MKSMALLINT (0) );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   474
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   475
        _zstream->stream.avail_out = _zstream->out_total;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   476
        _zstream->stream.next_out  = _zstream->out_ref;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   477
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   478
        _errorNo = inflate( & _zstream->stream, Z_NO_FLUSH );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   479
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   480
        if( _errorNo == Z_STREAM_END )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   481
            _errorNo = inflateEnd( & _zstream->stream );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   482
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   483
        if( _errorNo == Z_OK )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   484
        {
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   485
            _count = _zstream->out_total - _zstream->stream.avail_out;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   486
            RETURN( __MKSMALLINT (_count) );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   487
        }
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   488
        errorNo = __MKSMALLINT( _errorNo );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   489
    }
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   490
%}.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   491
    errorNo ifNil:[ self errorNotOpen ].
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   492
    self zerror:errorNo.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   493
!
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   494
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   495
zinflateInit
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   496
    |errorNo|
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   497
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   498
    errorNo := nil.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   499
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   500
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   501
    OBJ _zstreamObj = __INST( zstream );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   502
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   503
    if( _zstreamObj != nil )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   504
    {
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   505
        int         _errorNo;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   506
        zstream_s * _zstream = (zstream_s *) __externalBytesAddress( _zstreamObj );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   507
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   508
        _errorNo = inflateInit2( & _zstream->stream, -MAX_WBITS );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   509
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   510
        if( _errorNo == Z_OK )
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   511
            RETURN( self );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   512
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   513
        _zstream->stream.avail_in = 0;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   514
        errorNo = __MKSMALLINT( _errorNo );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   515
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   516
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   517
    errorNo ifNil:[ self errorNotOpen ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   518
    self zerror:errorNo.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   519
!
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   520
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   521
zopen:aStream
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   522
    |outTotal inTotal|
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   523
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   524
    (onStream := aStream) ifNil:[ self pastEnd ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   525
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   526
    outputBytes := ExternalBytes unprotectedNew:512.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   527
    inputBytes  := ExternalBytes unprotectedNew:512.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   528
    outTotal    := outputBytes size.
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   529
    readLimit   := readPosition := writePosition := 0.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   530
    inTotal     := outputBytes size.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   531
    binary      := false.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   532
%{
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   533
    zstream_s * _zstream = (zstream_s *) malloc( sizeof(zstream_s) );
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   534
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   535
    if( _zstream )
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   536
    {
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   537
        OBJ     _zobj   = __MKEXTERNALADDRESS( _zstream );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   538
        OBJ     _outObj = __INST( outputBytes );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   539
        OBJ     _inpObj = __INST( inputBytes  );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   540
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   541
        zmemzero( _zstream, sizeof(zstream_s) );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   542
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   543
        _zstream->in_total         = __intVal( inTotal );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   544
        _zstream->in_ref           = (Bytef *) __externalBytesAddress( _inpObj );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   545
        _zstream->stream.next_in   = Z_NULL;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   546
        _zstream->stream.avail_in  = 0;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   547
        _zstream->stream.total_in  = 0;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   548
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   549
        _zstream->out_total        = __intVal( outTotal );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   550
        _zstream->out_ref          = (Bytef *) __externalBytesAddress( _outObj );
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   551
        _zstream->stream.next_out  = _zstream->out_ref;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   552
        _zstream->stream.avail_out = _zstream->out_total;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   553
        _zstream->stream.total_out = 0;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   554
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   555
        _zstream->stream.zalloc    = (alloc_func)0;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   556
        _zstream->stream.zfree     = (free_func) 0;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   557
        _zstream->stream.opaque    = (voidpf)    0;
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   558
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   559
        _zstream->crc_32           = crc32( 0L, Z_NULL, 0 );
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   560
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   561
        __INST (zstream) = _zobj;
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   562
        __STORE(self, _zobj);
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   563
    }
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   564
%}.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   565
    zstream ifNil:[ self zerror:'cannot allocate zbuffer' ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   566
    hitEOF := false.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   567
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   568
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   569
!ZipStream methodsFor:'private'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   570
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   571
onStreamPutBytes:count from:data
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   572
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   573
    onStream ifNil:[ self errorNotOpen ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   574
    onStream nextPutBytes:count from:data startingAt:1
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   575
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   576
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   577
onStreamPutLong:aLong
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   578
    |bytes value|
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   579
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   580
    bytes := ByteArray new:4.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   581
    value := aLong.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   582
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   583
    1 to:4 do:[:i|
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   584
        bytes at:i put:(value bitAnd:16rff).
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   585
        value := value bitShift:-8.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   586
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   587
    self onStreamPutBytes:(bytes size) from:bytes
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   588
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   589
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   590
onStreamReadBytesInto:data
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   591
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   592
    onStream ifNil:[ self pastEnd ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   593
  ^ onStream nextBytes:(data size) into:data startingAt:1
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   594
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   595
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   596
!ZipStream methodsFor:'private todo'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   597
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   598
readHeader
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   599
    |method flags|
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   600
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   601
    self isReadOpen ifFalse:[ self pastEnd ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   602
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   603
    "Check the gzip magic id
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   604
    "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   605
    GZ_MAGIC_ID do:[:b|
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   606
        onStream nextByte ~~ b ifTrue:[ self zerror:'version error' ]
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   607
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   608
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   609
    method := onStream nextByte.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   610
    method ~~ Z_DEFLATED ifTrue:[
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   611
        self zerror:'invalid method (not deflated)'
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   612
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   613
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   614
    flags := onStream nextByte.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   615
    (flags bitAnd:HEAD_RESERVED) ~~ 0 ifTrue:[
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   616
        self zerror:'wrong data format'
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   617
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   618
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   619
    "discard time, xflags and OS code
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   620
    "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   621
    onStream skip:6.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   622
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   623
    (flags bitAnd:HEAD_EXTRA_FIELD) ~~ 0 ifTrue:[|len|
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   624
        "skip the extra field"
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   625
        len := onStream nextByte + (onStream nextByte bitShift:8).
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   626
        len timesRepeat:[ onStream nextByte ].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   627
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   628
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   629
    (flags bitAnd:HEAD_ORIG_NAME) ~~ 0 ifTrue:[|b|
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   630
        "skip the original file name"
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   631
        Transcript show:'header name: '.
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   632
        [ (b := onStream nextByte) ~~ 0 ] whileTrue:[
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   633
            Transcript show:(Character value:b)
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   634
        ].
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   635
        Transcript cr.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   636
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   637
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   638
    (flags bitAnd:HEAD_CRC) ~~ 0 ifTrue:[
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   639
        "skip the header crc"
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   640
        onStream skip:2.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   641
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   642
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   643
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   644
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   645
writeHeader
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   646
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   647
    self isWriteOpen ifFalse:[ self pastEnd ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   648
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   649
    "write the gzip magic id
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   650
    "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   651
    GZ_MAGIC_ID do:[:b| onStream nextPutByte:b ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   652
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   653
    "write the method
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   654
    "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   655
    onStream nextPutByte:Z_DEFLATED.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   656
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   657
    "write the flags
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   658
    "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   659
    onStream nextPutByte:0.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   660
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   661
    "write time
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   662
    "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   663
    4 timesRepeat:[ onStream nextPutByte:0 ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   664
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   665
    "write xflags
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   666
    "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   667
    onStream nextPutByte:0.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   668
    "write OS code
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   669
    "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   670
    onStream nextPutByte:HEAD_OS_CODE.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   671
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   672
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   673
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   674
!ZipStream methodsFor:'queries'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   675
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   676
atEnd
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   677
    ^ hitEOF ~~ false
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   678
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   679
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   680
isBinary
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   681
    "return true, if the stream is in binary (as opposed to text-) mode.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   682
     The default when created is false.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   683
    "
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   684
    ^ binary
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   685
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   686
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   687
isOpen
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   688
    ^ onStream notNil
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   689
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   690
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   691
isReadOpen
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   692
    ^ onStream notNil and:[isReadOpen == true]
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   693
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   694
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   695
isWriteOpen
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   696
    ^ onStream notNil and:[isReadOpen == false]
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   697
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   698
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   699
!ZipStream methodsFor:'reading'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   700
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   701
contents
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   702
    |out b|
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   703
" claus "
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   704
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   705
    out := (String new:1024) writeStream.
1049
b44c11236369 *** empty log message ***
ca
parents: 1048
diff changeset
   706
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   707
    [ (b := self next) notNil ] whileTrue:[
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   708
        out nextPut:b
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   709
    ].
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   710
    ^ out contents
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   711
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   712
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   713
next
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   714
    "return the next element, a character or byte (textmode)
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   715
     if there is  more element, nil is returned
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   716
    "
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   717
    |byte|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   718
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   719
    self atEnd ifTrue:[^ nil].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   720
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   721
    readPosition == readLimit ifTrue:[
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   722
        [ (readLimit := self zinflate) == 0 ] whileTrue:[ |n|
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   723
            n := onStream nextBytes:(inputBytes size) into:inputBytes startingAt:1.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   724
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   725
            (n notNil and:[n > 0]) ifFalse:[
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   726
                self pastEnd
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   727
            ].
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   728
            self zset_avail_in:n.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   729
        ].
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   730
        readLimit ifNil:[
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   731
            hitEOF := true.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   732
          ^ nil
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   733
        ].
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   734
        readPosition := 0.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   735
    ].
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   736
    readPosition := readPosition + 1.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   737
    byte := outputBytes at:readPosition.
1049
b44c11236369 *** empty log message ***
ca
parents: 1048
diff changeset
   738
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   739
    binary ifTrue:[^ byte ].
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   740
  ^ Character value:byte
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   741
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   742
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   743
!ZipStream methodsFor:'startup & release'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   744
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   745
close
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   746
    zstream ifNil:[^ self].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   747
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   748
    self isWriteOpen ifTrue:[
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   749
        self flush.
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   750
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   751
        [   self zflush.
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   752
            self zdeflate:Z_FINISH
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   753
        ] whileTrue.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   754
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   755
        self onStreamPutLong:(self zgetCrc32  ).    " write crc "
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   756
        self onStreamPutLong:(self zgetTotalIn).    " write total size "
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   757
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   758
    self zclose.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   759
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   760
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   761
readOpenOn:aStream
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   762
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   763
    isReadOpen := true.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   764
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   765
    self zopen:aStream.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   766
    self zinflateInit.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   767
    self readHeader.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   768
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   769
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   770
writeOpenOn:aStream level:level memLevel:memLevel strategy:strategy
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   771
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   772
    isReadOpen := false.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   773
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   774
    self zopen:aStream.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   775
    self zdeflateInit:level memLevel:memLevel strategy:strategy.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   776
    self writeHeader.
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   777
! !
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   778
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   779
!ZipStream methodsFor:'writing'!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   780
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   781
flush
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   782
    "flush the input and output buffer
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   783
    "
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   784
    |continue|
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   785
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   786
    self isWriteOpen ifFalse:[ ^ self ].
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   787
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   788
    self zset_avail_in:writePosition.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   789
    writePosition := 0.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   790
    continue      := true.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   791
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   792
    [continue] whileTrue:[
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   793
        self zflush.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   794
        continue := self zdeflate:Z_NO_FLUSH.
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   795
    ].
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   796
!
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   797
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   798
nextPut:something
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   799
    "write the argument, something
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   800
    "
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   801
    |byte|
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   802
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   803
    byte := nil.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   804
%{
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   805
    int _bval;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   806
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   807
    if( __INST(isReadOpen) == false )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   808
    {
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   809
        if( __INST(binary) != true )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   810
        {
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   811
            if( ! __isCharacter(something) )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   812
                goto bad;
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   813
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   814
            _bval = __intVal(__characterVal(something)) & 0xFF;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   815
        }
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   816
        else if( __isSmallInteger(something) )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   817
        {
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   818
            _bval = __intVal(something);
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   819
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   820
            if( (_bval < 0) || (_bval > 255) )
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   821
                goto bad;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   822
        }
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   823
        else
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   824
            goto bad;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   825
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   826
        byte = __MKSMALLINT( _bval );
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   827
    }
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   828
bad: ;
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   829
%}.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   830
    byte ifNil:[self invalidArguments].
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   831
    writePosition == inputBytes size ifTrue:[ self flush ].
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   832
    writePosition := writePosition + 1.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   833
    inputBytes at:writePosition put:byte.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   834
!
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   835
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   836
nextPutByte:aByte
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   837
    "write a byte; works in both binary and text modes.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   838
    "
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   839
    binary ifTrue:[
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   840
        self nextPut:aByte.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   841
    ] ifFalse:[
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   842
        binary := true.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   843
        self nextPut:aByte.
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   844
        binary := false.
1045
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   845
    ].
6f093ef80063 *** empty log message ***
ca
parents: 1044
diff changeset
   846
! !
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
   847
c73aee830691 initial checkin
ca
parents:
diff changeset
   848
!ZipStream class methodsFor:'documentation'!
c73aee830691 initial checkin
ca
parents:
diff changeset
   849
c73aee830691 initial checkin
ca
parents:
diff changeset
   850
version
1050
b7e7d51e0a9f *** empty log message ***
ca
parents: 1049
diff changeset
   851
    ^ '$Header: /cvs/stx/stx/libbasic2/ZipStream.st,v 1.7 2002-06-21 09:12:26 ca Exp $'
1044
c73aee830691 initial checkin
ca
parents:
diff changeset
   852
! !
1047
1cd99e473c08 *** empty log message ***
ca
parents: 1046
diff changeset
   853
ZipStream initialize!