ImageReader.st
author claus
Sat, 18 Feb 1995 16:57:27 +0100
changeset 105 6a4a21c17e5d
parent 97 dd6116883ac0
child 118 25e775072a89
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     1
"
6
7ee0cfde237d *** empty log message ***
claus
parents: 5
diff changeset
     2
 COPYRIGHT (c) 1991 by Claus Gittinger
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
     3
	      All Rights Reserved
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     4
48194c26a46c Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
48194c26a46c Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
48194c26a46c Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
48194c26a46c Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
48194c26a46c Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
48194c26a46c Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
48194c26a46c Initial revision
claus
parents:
diff changeset
    11
"
48194c26a46c Initial revision
claus
parents:
diff changeset
    12
105
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
    13
'From Smalltalk/X, Version:2.10.4 on 18-feb-1995 at 2:18:34 am'!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
    14
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    15
Object subclass:#ImageReader
105
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
    16
	 instanceVariableNames:'width height data byteOrder inStream outStream photometric
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
    17
		samplesPerPixel bitsPerSample colorMap'
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
    18
	 classVariableNames:'ReverseBits'
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
    19
	 poolDictionaries:''
81
4ba554473294 *** empty log message ***
claus
parents: 77
diff changeset
    20
	 category:'Graphics-Images support'
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    21
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    22
48194c26a46c Initial revision
claus
parents:
diff changeset
    23
ImageReader comment:'
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    24
COPYRIGHT (c) 1991 by Claus Gittinger
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
    25
	      All Rights Reserved
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
    26
105
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
    27
$Header: /cvs/stx/stx/libview/ImageReader.st,v 1.15 1995-02-18 15:57:27 claus Exp $
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    28
'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    29
89
ea2bf46eb669 *** empty log message ***
claus
parents: 81
diff changeset
    30
!ImageReader primitiveFunctions!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    31
%{
48194c26a46c Initial revision
claus
parents:
diff changeset
    32
48194c26a46c Initial revision
claus
parents:
diff changeset
    33
/*
48194c26a46c Initial revision
claus
parents:
diff changeset
    34
 * ccitt decompression
48194c26a46c Initial revision
claus
parents:
diff changeset
    35
 */
48194c26a46c Initial revision
claus
parents:
diff changeset
    36
static short *whiteCountTable;
48194c26a46c Initial revision
claus
parents:
diff changeset
    37
static char  *whiteShiftTable;
48194c26a46c Initial revision
claus
parents:
diff changeset
    38
static short *blackCountTable;
48194c26a46c Initial revision
claus
parents:
diff changeset
    39
static char  *blackShiftTable;
48194c26a46c Initial revision
claus
parents:
diff changeset
    40
48194c26a46c Initial revision
claus
parents:
diff changeset
    41
struct ccitt_def {
48194c26a46c Initial revision
claus
parents:
diff changeset
    42
    unsigned short bits;
48194c26a46c Initial revision
claus
parents:
diff changeset
    43
    short nBits;
48194c26a46c Initial revision
claus
parents:
diff changeset
    44
};
48194c26a46c Initial revision
claus
parents:
diff changeset
    45
48194c26a46c Initial revision
claus
parents:
diff changeset
    46
static struct ccitt_def 
48194c26a46c Initial revision
claus
parents:
diff changeset
    47
whiteDef[] = {
48194c26a46c Initial revision
claus
parents:
diff changeset
    48
    { 0x3500, 8 }, /* 0 */
48194c26a46c Initial revision
claus
parents:
diff changeset
    49
    { 0x1c00, 6 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    50
    { 0x7000, 4 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    51
    { 0x8000, 4 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    52
    { 0xb000, 4 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    53
    { 0xc000, 4 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    54
    { 0xe000, 4 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    55
    { 0xf000, 4 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    56
    { 0x9800, 5 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    57
    { 0xA000, 5 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    58
    { 0x3800, 5 }, /* 10 */
48194c26a46c Initial revision
claus
parents:
diff changeset
    59
    { 0x4000, 5 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    60
    { 0x2000, 6 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    61
    { 0x0c00, 6 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    62
    { 0xd000, 6 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    63
    { 0xd400, 6 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    64
    { 0xa800, 6 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    65
    { 0xac00, 6 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    66
    { 0x4e00, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    67
    { 0x1800, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    68
    { 0x1000, 7 }, /* 20 */
48194c26a46c Initial revision
claus
parents:
diff changeset
    69
    { 0x2e00, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    70
    { 0x0600, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    71
    { 0x0800, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    72
    { 0x5000, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    73
    { 0x5600, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    74
    { 0x2600, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    75
    { 0x4800, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    76
    { 0x3000, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    77
    { 0x0200, 8 },
48194c26a46c Initial revision
claus
parents:
diff changeset
    78
    { 0x0300, 8 }, /* 30 */ 
48194c26a46c Initial revision
claus
parents:
diff changeset
    79
    { 0x1a00, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    80
    { 0x1b00, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    81
    { 0x1200, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    82
    { 0x1300, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    83
    { 0x1400, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    84
    { 0x1500, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    85
    { 0x1600, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    86
    { 0x1700, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    87
    { 0x2800, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    88
    { 0x2900, 8 }, /* 40 */
48194c26a46c Initial revision
claus
parents:
diff changeset
    89
    { 0x2a00, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    90
    { 0x2b00, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    91
    { 0x2c00, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    92
    { 0x2d00, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    93
    { 0x0400, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    94
    { 0x0500, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    95
    { 0x0a00, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    96
    { 0x0b00, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    97
    { 0x5200, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
    98
    { 0x5300, 8 }, /* 50 */
48194c26a46c Initial revision
claus
parents:
diff changeset
    99
    { 0x5400, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   100
    { 0x5500, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   101
    { 0x2400, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   102
    { 0x2500, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   103
    { 0x5800, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   104
    { 0x5900, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   105
    { 0x5a00, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   106
    { 0x5b00, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   107
    { 0x4a00, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   108
    { 0x4b00, 8 }, /* 60 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   109
    { 0x3200, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   110
    { 0x3300, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   111
    { 0x3400, 8 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   112
/* ---------------- */
48194c26a46c Initial revision
claus
parents:
diff changeset
   113
    { 0xd800, 5 }, /* 64 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   114
    { 0x9000, 5 }, /* 128 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   115
    { 0x5c00, 6 }, /* 192 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   116
    { 0x6e00, 7 }, /* 256 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   117
    { 0x3600, 8 }, /* 320 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   118
    { 0x3700, 8 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   119
    { 0x6400, 8 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   120
    { 0x6500, 8 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   121
    { 0x6800, 8 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   122
    { 0x6700, 8 }, /* 640 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   123
    { 0x6600, 9 }, /* 704 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   124
    { 0x6680, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   125
    { 0x6900, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   126
    { 0x6980, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   127
    { 0x6a00, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   128
    { 0x6a80, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   129
    { 0x6b00, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   130
    { 0x6b80, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   131
    { 0x6c00, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   132
    { 0x6c80, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   133
    { 0x6d00, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   134
    { 0x6d80, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   135
    { 0x4c00, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   136
    { 0x4c80, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   137
    { 0x4d00, 9 }, /* 1600 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   138
    { 0x6000, 6 }, /* 1664 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   139
    { 0x4d80, 9 }, /* 1728 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   140
/* -------------------------------- */
48194c26a46c Initial revision
claus
parents:
diff changeset
   141
    { 0x0100, 11 }, /* 1792 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   142
    { 0x0180, 11 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   143
    { 0x01a0, 11 }, /* 1920 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   144
    { 0x0120, 12 }, /* 1984 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   145
    { 0x0130, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   146
    { 0x0140, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   147
    { 0x0150, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   148
    { 0x0160, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   149
    { 0x0170, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   150
    { 0x01c0, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   151
    { 0x01d0, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   152
    { 0x01e0, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   153
    { 0x01f0, 12 }, /* 2560 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   154
/* -------------------------------- */
48194c26a46c Initial revision
claus
parents:
diff changeset
   155
    { 0x0010, 12 }, /* EOL */
48194c26a46c Initial revision
claus
parents:
diff changeset
   156
};
48194c26a46c Initial revision
claus
parents:
diff changeset
   157
48194c26a46c Initial revision
claus
parents:
diff changeset
   158
static struct ccitt_def 
48194c26a46c Initial revision
claus
parents:
diff changeset
   159
blackDef[] = {
48194c26a46c Initial revision
claus
parents:
diff changeset
   160
    { 0x0dc0, 10 }, /* 0 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   161
    { 0x4000, 3 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   162
    { 0xc000, 2 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   163
    { 0x8000, 2 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   164
    { 0x6000, 3 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   165
    { 0x3000, 4 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   166
    { 0x2000, 4 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   167
    { 0x1800, 5 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   168
    { 0x1400, 6 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   169
    { 0x1000, 6 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   170
    { 0x0800, 7 }, /* 10 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   171
    { 0x0a00, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   172
    { 0x0e00, 7 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   173
    { 0x0400, 8 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   174
    { 0x0700, 8 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   175
    { 0x0c00, 9 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   176
    { 0x05c0, 10 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   177
    { 0x0600, 10 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   178
    { 0x0200, 10 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   179
    { 0x0ce0, 11 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   180
    { 0x0d00, 11 }, /* 20 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   181
    { 0x0d80, 11 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   182
    { 0x06e0, 11 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   183
    { 0x0500, 11 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   184
    { 0x02e0, 11 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   185
    { 0x0300, 11 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   186
    { 0x0ca0, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   187
    { 0x0cb0, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   188
    { 0x0cc0, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   189
    { 0x0cd0, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   190
    { 0x0680, 12 }, /* 30 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   191
    { 0x0690, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   192
    { 0x06a0, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   193
    { 0x06b0, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   194
    { 0x0d20, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   195
    { 0x0d30, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   196
    { 0x0d40, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   197
    { 0x0d50, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   198
    { 0x0d60, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   199
    { 0x0d70, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   200
    { 0x06c0, 12 }, /* 40 */ 
48194c26a46c Initial revision
claus
parents:
diff changeset
   201
    { 0x06d0, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   202
    { 0x0da0, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   203
    { 0x0db0, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   204
    { 0x0540, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   205
    { 0x0550, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   206
    { 0x0560, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   207
    { 0x0570, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   208
    { 0x0640, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   209
    { 0x0650, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   210
    { 0x0520, 12 }, /* 50 */ 
48194c26a46c Initial revision
claus
parents:
diff changeset
   211
    { 0x0530, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   212
    { 0x0240, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   213
    { 0x0370, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   214
    { 0x0380, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   215
    { 0x0270, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   216
    { 0x0280, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   217
    { 0x0580, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   218
    { 0x0590, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   219
    { 0x02b0, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   220
    { 0x02c0, 12 }, /* 60 */ 
48194c26a46c Initial revision
claus
parents:
diff changeset
   221
    { 0x05a0, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   222
    { 0x0660, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   223
    { 0x0670, 12 }, 
48194c26a46c Initial revision
claus
parents:
diff changeset
   224
/* ---------------- */
48194c26a46c Initial revision
claus
parents:
diff changeset
   225
    { 0x03c0, 10 }, /* 64 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   226
    { 0x0c80, 12 }, /* 128 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   227
    { 0x0c90, 12 }, /* 192 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   228
    { 0x05b0, 12 }, /* 256 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   229
    { 0x0330, 12 }, /* 320 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   230
    { 0x0340, 12 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   231
    { 0x0350, 12 }, /* 448 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   232
    { 0x0360, 13 }, /* 512 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   233
    { 0x0368, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   234
    { 0x0250, 13 }, /* 640 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   235
    { 0x0258, 13 }, /* 704 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   236
    { 0x0260, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   237
    { 0x0268, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   238
    { 0x0390, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   239
    { 0x0398, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   240
    { 0x03a0, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   241
    { 0x03a8, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   242
    { 0x03b0, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   243
    { 0x03b8, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   244
    { 0x0290, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   245
    { 0x0298, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   246
    { 0x02a0, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   247
    { 0x02a8, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   248
    { 0x02d0, 13 },
48194c26a46c Initial revision
claus
parents:
diff changeset
   249
    { 0x02d8, 13 }, /* 1600 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   250
    { 0x0320, 13 }, /* 1664 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   251
    { 0x0328, 13 }, /* 1728 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   252
/* -------------------------------- */
48194c26a46c Initial revision
claus
parents:
diff changeset
   253
};
48194c26a46c Initial revision
claus
parents:
diff changeset
   254
48194c26a46c Initial revision
claus
parents:
diff changeset
   255
static
48194c26a46c Initial revision
claus
parents:
diff changeset
   256
initCCITTTables() {
48194c26a46c Initial revision
claus
parents:
diff changeset
   257
    register cnt, bits, value;
48194c26a46c Initial revision
claus
parents:
diff changeset
   258
    int nBits, index;
48194c26a46c Initial revision
claus
parents:
diff changeset
   259
48194c26a46c Initial revision
claus
parents:
diff changeset
   260
    if (whiteCountTable != (short *)0) return;
48194c26a46c Initial revision
claus
parents:
diff changeset
   261
48194c26a46c Initial revision
claus
parents:
diff changeset
   262
    whiteCountTable = (short *) malloc(sizeof(short) * 8192);
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   263
    if (! whiteCountTable) return;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   264
    whiteShiftTable = (char *) malloc(sizeof(char) * 8192);
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   265
    if (! whiteShiftTable) {
95
47ac85948d38 asText eliminated
claus
parents: 89
diff changeset
   266
	goto fail1;
47ac85948d38 asText eliminated
claus
parents: 89
diff changeset
   267
/*
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   268
	free(whiteCountTable); whiteCountTable = (short *)0;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   269
	return;
95
47ac85948d38 asText eliminated
claus
parents: 89
diff changeset
   270
*/
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   271
    }
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   272
    blackCountTable = (short *) malloc(sizeof(short) * 8192);
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   273
    if (! blackCountTable) {
95
47ac85948d38 asText eliminated
claus
parents: 89
diff changeset
   274
	goto fail2;
47ac85948d38 asText eliminated
claus
parents: 89
diff changeset
   275
/*
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   276
	free(whiteShiftTable); whiteShiftTable = (char *)0;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   277
	free(whiteCountTable); whiteCountTable = (short *)0;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   278
	return;
95
47ac85948d38 asText eliminated
claus
parents: 89
diff changeset
   279
*/
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   280
    }
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   281
    blackShiftTable = (char *) malloc(sizeof(char) * 8192);
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   282
    if (! blackShiftTable) {
95
47ac85948d38 asText eliminated
claus
parents: 89
diff changeset
   283
	free(blackCountTable); blackCountTable = (short *)0;
47ac85948d38 asText eliminated
claus
parents: 89
diff changeset
   284
fail2:
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   285
	free(whiteShiftTable); whiteShiftTable = (char *)0;
95
47ac85948d38 asText eliminated
claus
parents: 89
diff changeset
   286
fail1:
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   287
	free(whiteCountTable); whiteCountTable = (short *)0;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   288
	return;
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   289
    }
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   290
48194c26a46c Initial revision
claus
parents:
diff changeset
   291
    for (index = 0; index < 8192; index++) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   292
	whiteCountTable[index] = -1;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   293
	blackCountTable[index] = -1;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   294
    }
48194c26a46c Initial revision
claus
parents:
diff changeset
   295
48194c26a46c Initial revision
claus
parents:
diff changeset
   296
    for (value = 0; value <= 63; value++) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   297
	nBits = whiteDef[value].nBits;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   298
	bits = whiteDef[value].bits >> 3;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   299
	for (cnt = 1 << (13 - nBits); cnt; cnt--, bits++) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   300
	    whiteCountTable[bits] = value;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   301
	    whiteShiftTable[bits] = nBits;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   302
	}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   303
	nBits = blackDef[value].nBits;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   304
	bits = blackDef[value].bits >> 3;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   305
	for (cnt = 1 << (13 - nBits); cnt; cnt--, bits++) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   306
	    blackCountTable[bits] = value;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   307
	    blackShiftTable[bits] = nBits;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   308
	}
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   309
    }
48194c26a46c Initial revision
claus
parents:
diff changeset
   310
    index = value;
48194c26a46c Initial revision
claus
parents:
diff changeset
   311
48194c26a46c Initial revision
claus
parents:
diff changeset
   312
    for (; value <= 1728; value += 64) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   313
	nBits = whiteDef[index].nBits;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   314
	bits = whiteDef[index].bits >> 3;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   315
	for (cnt = 1 << (13 - nBits); cnt; cnt--, bits++) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   316
	    whiteCountTable[bits] = value;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   317
	    whiteShiftTable[bits] = nBits;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   318
	}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   319
	nBits = blackDef[index].nBits;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   320
	bits = blackDef[index].bits >> 3;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   321
	for (cnt = 1 << (13 - nBits); cnt; cnt--, bits++) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   322
	    blackCountTable[bits] = value;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   323
	    blackShiftTable[bits] = nBits;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   324
	}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   325
	index++;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   326
    }
48194c26a46c Initial revision
claus
parents:
diff changeset
   327
48194c26a46c Initial revision
claus
parents:
diff changeset
   328
    for (; value <= 2560; value += 64) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   329
	nBits = whiteDef[index].nBits;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   330
	bits = whiteDef[index].bits >> 3;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   331
	for (cnt = 1 << (13 - nBits); cnt; cnt--, bits++) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   332
	    whiteCountTable[bits] = value;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   333
	    whiteShiftTable[bits] = nBits;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   334
	    blackCountTable[bits] = value;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   335
	    blackShiftTable[bits] = nBits;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   336
	}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   337
	index++;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   338
    }
48194c26a46c Initial revision
claus
parents:
diff changeset
   339
}
48194c26a46c Initial revision
claus
parents:
diff changeset
   340
48194c26a46c Initial revision
claus
parents:
diff changeset
   341
static short 
48194c26a46c Initial revision
claus
parents:
diff changeset
   342
leftBits[] = {
48194c26a46c Initial revision
claus
parents:
diff changeset
   343
     0, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE, 0xFF
48194c26a46c Initial revision
claus
parents:
diff changeset
   344
};
48194c26a46c Initial revision
claus
parents:
diff changeset
   345
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   346
__decodeCCITTgroup3__(from, to, len)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   347
    unsigned char *from;
48194c26a46c Initial revision
claus
parents:
diff changeset
   348
    register unsigned char *to;
48194c26a46c Initial revision
claus
parents:
diff changeset
   349
{
48194c26a46c Initial revision
claus
parents:
diff changeset
   350
    register cnt;
48194c26a46c Initial revision
claus
parents:
diff changeset
   351
    register short *countPtr;
48194c26a46c Initial revision
claus
parents:
diff changeset
   352
    register char *shiftPtr;
48194c26a46c Initial revision
claus
parents:
diff changeset
   353
    unsigned bits, bits13;
48194c26a46c Initial revision
claus
parents:
diff changeset
   354
    int shift, outCount, nBitsLess13;
48194c26a46c Initial revision
claus
parents:
diff changeset
   355
    int outBitOffset;
48194c26a46c Initial revision
claus
parents:
diff changeset
   356
    int nLeft, t;
48194c26a46c Initial revision
claus
parents:
diff changeset
   357
48194c26a46c Initial revision
claus
parents:
diff changeset
   358
    if (! whiteCountTable) initCCITTTables();
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   359
    if (! whiteCountTable) return 0; /* malloc failed */
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   360
48194c26a46c Initial revision
claus
parents:
diff changeset
   361
    countPtr = whiteCountTable;
48194c26a46c Initial revision
claus
parents:
diff changeset
   362
    shiftPtr = whiteShiftTable;
48194c26a46c Initial revision
claus
parents:
diff changeset
   363
    outCount = 0;
48194c26a46c Initial revision
claus
parents:
diff changeset
   364
    outBitOffset = 0;
48194c26a46c Initial revision
claus
parents:
diff changeset
   365
    bits = *from++;
48194c26a46c Initial revision
claus
parents:
diff changeset
   366
    bits = (bits << 8) | *from++;
48194c26a46c Initial revision
claus
parents:
diff changeset
   367
    nBitsLess13 = 3;
48194c26a46c Initial revision
claus
parents:
diff changeset
   368
    for (;;) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   369
	bits13 = (bits >> nBitsLess13) & 0x1FFF;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   370
	cnt = countPtr[bits13];
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   371
	if (cnt < 0) return;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   372
	shift = shiftPtr[bits13];
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   373
	outCount += cnt;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   374
	if (countPtr == blackCountTable) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   375
	    /* toggle if it was a terminating code */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   376
	    if (cnt < 64) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   377
		countPtr = whiteCountTable;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   378
		shiftPtr = whiteShiftTable;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   379
	    }
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   380
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   381
	    /* draw cnt black bits */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   382
	    if (cnt) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   383
		if (outBitOffset) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   384
		    nLeft = 8 - outBitOffset;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   385
		    if (cnt < nLeft) nLeft = cnt;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   386
		    t = leftBits[nLeft] >> outBitOffset;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   387
		    *to |= t;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   388
		    cnt -= nLeft;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   389
		    outBitOffset += nLeft;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   390
		    if (outBitOffset >= 8) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   391
			to++;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   392
			outBitOffset -= 8;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   393
		    }
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   394
		}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   395
		if (cnt > 256) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   396
		    while ((int)to & 3) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   397
			*to++ = 0xFF;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   398
			cnt -= 8;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   399
		    }
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   400
		    while (cnt >= 32) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   401
			(*(long *)to) = 0xFFFFFFFF;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   402
			to += 4;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   403
			cnt -= 32;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   404
		    }
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   405
		}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   406
		while (cnt >= 8) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   407
		    *to++ = 0xFF;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   408
		    cnt -= 8;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   409
		}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   410
		*to |= leftBits[cnt];
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   411
		outBitOffset += cnt;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   412
	    }
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   413
	} else {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   414
	    /* toggle if it was a terminating code */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   415
	    if (cnt < 64) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   416
		countPtr = blackCountTable;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   417
		shiftPtr = blackShiftTable;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   418
	    }
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   419
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   420
	    /* skip cnt bits */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   421
	    to += cnt >> 3;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   422
	    outBitOffset += cnt & 7;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   423
	    if (outBitOffset >= 8) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   424
		to++;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   425
		outBitOffset -= 8;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   426
	    }
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   427
	}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   428
	if (outCount >= len) return 1;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   429
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   430
	nBitsLess13 -= shift;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   431
	while (nBitsLess13 < 0) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   432
	    bits = (bits << 8) | *from++;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   433
	    nBitsLess13 += 8;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   434
	}
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   435
    }
48194c26a46c Initial revision
claus
parents:
diff changeset
   436
}
48194c26a46c Initial revision
claus
parents:
diff changeset
   437
48194c26a46c Initial revision
claus
parents:
diff changeset
   438
/*
48194c26a46c Initial revision
claus
parents:
diff changeset
   439
 * LZW decompression
48194c26a46c Initial revision
claus
parents:
diff changeset
   440
 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   441
struct buffer {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   442
	struct buffer *prev;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   443
	unsigned char chars[8192 - 4];
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   444
};
48194c26a46c Initial revision
claus
parents:
diff changeset
   445
        
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   446
__decodeLZW__(from, to, inCount)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   447
    unsigned char *from;
48194c26a46c Initial revision
claus
parents:
diff changeset
   448
    unsigned char *to;
48194c26a46c Initial revision
claus
parents:
diff changeset
   449
{
48194c26a46c Initial revision
claus
parents:
diff changeset
   450
    register unsigned code;
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   451
    unsigned char **strings;
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   452
    short *stringLen;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   453
    struct buffer *scratchBuffer;
48194c26a46c Initial revision
claus
parents:
diff changeset
   454
    struct buffer *newBuffer;
48194c26a46c Initial revision
claus
parents:
diff changeset
   455
    unsigned char *scratchPtr;
48194c26a46c Initial revision
claus
parents:
diff changeset
   456
    int nScratch;
48194c26a46c Initial revision
claus
parents:
diff changeset
   457
    unsigned nextCode, oldCode;
48194c26a46c Initial revision
claus
parents:
diff changeset
   458
    register unsigned bits;
48194c26a46c Initial revision
claus
parents:
diff changeset
   459
    int nBits, mask, shift;
48194c26a46c Initial revision
claus
parents:
diff changeset
   460
    int i;
48194c26a46c Initial revision
claus
parents:
diff changeset
   461
    int len;
48194c26a46c Initial revision
claus
parents:
diff changeset
   462
    int codeLen = 9;
48194c26a46c Initial revision
claus
parents:
diff changeset
   463
48194c26a46c Initial revision
claus
parents:
diff changeset
   464
    scratchBuffer = (struct buffer *)malloc(sizeof(struct buffer));
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   465
    if (! scratchBuffer) return 0;
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   466
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   467
    strings = (unsigned char **)malloc(sizeof(unsigned char *) * 4096);
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   468
    if (! strings) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   469
	free(scratchBuffer);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   470
	return 0;
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   471
    }
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   472
    stringLen = (short *)malloc(sizeof(short) * 4096);
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   473
    if (! stringLen) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   474
	free(strings);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   475
	free(scratchBuffer);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   476
	return 0;
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   477
    }
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   478
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   479
    scratchBuffer->prev = (struct buffer *)0;
48194c26a46c Initial revision
claus
parents:
diff changeset
   480
    scratchPtr = scratchBuffer->chars;
48194c26a46c Initial revision
claus
parents:
diff changeset
   481
    nScratch = sizeof(scratchBuffer->chars);
48194c26a46c Initial revision
claus
parents:
diff changeset
   482
48194c26a46c Initial revision
claus
parents:
diff changeset
   483
    for (i = 0; i < 256; i++) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   484
	*scratchPtr = i;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   485
	strings[i] = scratchPtr++;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   486
	stringLen[i] = 1;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   487
    }
48194c26a46c Initial revision
claus
parents:
diff changeset
   488
48194c26a46c Initial revision
claus
parents:
diff changeset
   489
    nextCode = 258;
48194c26a46c Initial revision
claus
parents:
diff changeset
   490
    nScratch -= 256;
48194c26a46c Initial revision
claus
parents:
diff changeset
   491
    mask = 0x1FF;
48194c26a46c Initial revision
claus
parents:
diff changeset
   492
    nBits = 0;
48194c26a46c Initial revision
claus
parents:
diff changeset
   493
    bits = 0;
48194c26a46c Initial revision
claus
parents:
diff changeset
   494
    while (inCount) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   495
	/* fetch code */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   496
	while (nBits < codeLen) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   497
	    bits = (bits<<8) | *from++;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   498
	    inCount--;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   499
	    nBits += 8;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   500
	}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   501
	shift = nBits - codeLen;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   502
	code = (bits >> shift) & mask;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   503
	bits &= ~(mask << shift);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   504
	nBits -= codeLen;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   505
	if (code == 257) break;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   506
	if (code == 256) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   507
	    if (! inCount)
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   508
		break;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   509
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   510
	    /* free stuff */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   511
	    while (scratchBuffer->prev) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   512
		newBuffer = scratchBuffer;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   513
		scratchBuffer = scratchBuffer->prev;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   514
		free(newBuffer);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   515
	    }
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   516
	    /* reset everything */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   517
	    scratchPtr = scratchBuffer->chars + 256;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   518
	    nScratch = sizeof(scratchBuffer->chars) - 256;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   519
	    codeLen = 9;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   520
	    nextCode = 258;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   521
	    mask = 0x1FF;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   522
	    /* fetch code */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   523
	    while (nBits < codeLen) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   524
		bits = (bits<<8) | *from++;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   525
		inCount--;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   526
		nBits += 8;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   527
	    }
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   528
	    shift = nBits - codeLen;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   529
	    code = (bits >> shift) & mask;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   530
	    bits &= ~(mask << shift);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   531
	    nBits -= codeLen;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   532
	    if (code == 257) break;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   533
	    /* add to output */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   534
	    *to++ = code;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   535
	    oldCode = code;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   536
	} else {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   537
	    if (code < nextCode) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   538
		/* writeString(string[code]) */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   539
		len = stringLen[code];
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   540
		bcopy(strings[code], to, len);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   541
		to += len;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   542
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   543
		/* add( string[oldcode] + first(string[code]) ) */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   544
		len = stringLen[oldCode] + 1;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   545
		if (nScratch < len) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   546
		    newBuffer = (struct buffer *)malloc(sizeof(struct buffer));
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   547
		    if (! newBuffer) goto out;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   548
		    newBuffer->prev = scratchBuffer;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   549
		    scratchBuffer = newBuffer;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   550
		    scratchPtr = scratchBuffer->chars;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   551
		    nScratch = sizeof(scratchBuffer->chars);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   552
		}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   553
		stringLen[nextCode] = len;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   554
		strings[nextCode] = scratchPtr;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   555
		bcopy(strings[oldCode], scratchPtr, len-1);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   556
		scratchPtr += len-1;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   557
		*scratchPtr++ = strings[code][0];
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   558
		nScratch -= len;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   559
	    } else {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   560
		/* writeString(string[oldCode] + first(string[oldCode]) ) */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   561
		len = stringLen[oldCode];
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   562
		bcopy(strings[oldCode], to, len);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   563
		to += len;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   564
		*to++ = strings[oldCode][0];
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   565
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   566
		/* add( string[oldcode] + first(string[oldCode]) ) */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   567
		len++;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   568
		if (nScratch < len) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   569
		    newBuffer = (struct buffer *)malloc(sizeof(struct buffer));
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   570
		    if (! newBuffer) goto out;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   571
		    newBuffer->prev = scratchBuffer;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   572
		    scratchBuffer = newBuffer;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   573
		    scratchPtr = scratchBuffer->chars;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   574
		    nScratch = sizeof(scratchBuffer->chars);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   575
		}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   576
		stringLen[nextCode] = len;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   577
		strings[nextCode] = scratchPtr;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   578
		bcopy(strings[oldCode], scratchPtr, len-1);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   579
		scratchPtr += len-1;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   580
		*scratchPtr++ = strings[oldCode][0];
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   581
		nScratch -= len;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   582
	    }
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   583
	    oldCode = code;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   584
	    nextCode++;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   585
	    if (nextCode >= 511)
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   586
		if (nextCode == 511) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   587
		    codeLen = 10;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   588
		    mask = 0x3FF;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   589
		} else if (nextCode >= 1023)
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   590
		    if (nextCode == 1023) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   591
			codeLen = 11;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   592
			mask = 0x7FF;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   593
		    } else 
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   594
			if (nextCode == 2047) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   595
			    codeLen = 12;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   596
			    mask = 0xFFF;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   597
			}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   598
	}
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   599
    }
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   600
out: ;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   601
    /* free stuff */
48194c26a46c Initial revision
claus
parents:
diff changeset
   602
    while (scratchBuffer) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   603
	newBuffer = scratchBuffer;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   604
	scratchBuffer = scratchBuffer->prev;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   605
	free(newBuffer);
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   606
    }
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   607
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   608
    free(strings);
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   609
    free(stringLen);
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   610
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   611
    return 1;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   612
}
48194c26a46c Initial revision
claus
parents:
diff changeset
   613
48194c26a46c Initial revision
claus
parents:
diff changeset
   614
/*
48194c26a46c Initial revision
claus
parents:
diff changeset
   615
 * delta decoding (TIFF predictor = 2)
48194c26a46c Initial revision
claus
parents:
diff changeset
   616
 */
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   617
__decodeDelta__(bytes, width, height)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   618
    register unsigned char *bytes;
48194c26a46c Initial revision
claus
parents:
diff changeset
   619
{
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   620
	register w;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   621
	unsigned char r, g, b;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   622
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   623
	while (height--) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   624
	    r = g = b = 0;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   625
	    for (w = width; w; w--) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   626
		r += *bytes;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   627
		*bytes++ = r;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   628
		g += *bytes;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   629
		*bytes++ = g;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   630
		b += *bytes;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   631
		*bytes++ = b;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   632
	    }
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   633
	}
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   634
}
48194c26a46c Initial revision
claus
parents:
diff changeset
   635
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   636
/*
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   637
 * GIF decompression
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   638
 */
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   639
__decodeGIF__(from, to, inCount, initialCodeLen)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   640
    unsigned char *from;
48194c26a46c Initial revision
claus
parents:
diff changeset
   641
    unsigned char *to;
48194c26a46c Initial revision
claus
parents:
diff changeset
   642
{
48194c26a46c Initial revision
claus
parents:
diff changeset
   643
    register unsigned code;
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   644
    unsigned short *prefix;
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   645
    unsigned short *suffix;
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   646
    unsigned short *outCode;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   647
    int outCount;
48194c26a46c Initial revision
claus
parents:
diff changeset
   648
    unsigned maxCode, oldCode, fin, inCode, curCode;
48194c26a46c Initial revision
claus
parents:
diff changeset
   649
    register unsigned bits;
48194c26a46c Initial revision
claus
parents:
diff changeset
   650
    register int nBits, mask, shift;
48194c26a46c Initial revision
claus
parents:
diff changeset
   651
    int i;
48194c26a46c Initial revision
claus
parents:
diff changeset
   652
    int len;
48194c26a46c Initial revision
claus
parents:
diff changeset
   653
    int endCode, clearCode, freeCode;
48194c26a46c Initial revision
claus
parents:
diff changeset
   654
    int codeLen = initialCodeLen;
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   655
    static int ranges[] = {0, 1, 2, 4, 8, 16, 32, 64,
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   656
			   128, 256, 512, 1024, 2048 };
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   657
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   658
    prefix = (unsigned short *)malloc(sizeof(short) * 4096);
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   659
    if (! prefix) return 0;
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   660
    suffix  = (unsigned short *)malloc(sizeof(short) * 4096);
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   661
    if (! suffix) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   662
	free(prefix);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   663
	return 0;
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   664
    }
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   665
    outCode = (unsigned short *)malloc(sizeof(short) * 4096);
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   666
    if (! outCode) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   667
	free(prefix);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   668
	free(suffix);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   669
	return 0;
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   670
    }
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   671
    clearCode = ranges[codeLen]; /* 256 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   672
    endCode = clearCode + 1;     /* 257 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   673
    freeCode = clearCode + 2;    /* 258 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   674
    maxCode = clearCode << 1;    /* 512 */
48194c26a46c Initial revision
claus
parents:
diff changeset
   675
    outCount = 0;
48194c26a46c Initial revision
claus
parents:
diff changeset
   676
48194c26a46c Initial revision
claus
parents:
diff changeset
   677
    mask = maxCode - 1;          /* 1FF */
48194c26a46c Initial revision
claus
parents:
diff changeset
   678
    nBits = 0;
48194c26a46c Initial revision
claus
parents:
diff changeset
   679
    bits = 0;
48194c26a46c Initial revision
claus
parents:
diff changeset
   680
    while (inCount) {
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   681
	/* fetch code */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   682
	while (nBits < codeLen) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   683
	    bits = bits | (*from++ << nBits);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   684
	    inCount--;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   685
	    nBits += 8;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   686
	}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   687
	code = bits & mask;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   688
	bits >>= codeLen;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   689
	nBits -= codeLen;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   690
	if (code == endCode) break;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   691
	if (code == clearCode) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   692
	    if (! inCount)
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   693
		break;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   694
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   695
	    codeLen = initialCodeLen;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   696
	    maxCode = clearCode<<1;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   697
	    mask = maxCode - 1;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   698
	    freeCode = clearCode + 2;  
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   699
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   700
	    /* fetch code */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   701
	    while (nBits < codeLen) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   702
		bits = bits | (*from++ << nBits);
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   703
		inCount--;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   704
		nBits += 8;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   705
	    }
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   706
	    code = bits & mask;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   707
	    bits >>= codeLen;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   708
	    nBits -= codeLen;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   709
	    if (code == endCode) break;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   710
	    /* add to output */
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   711
	    *to++ = code;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   712
	    oldCode = fin = curCode = code;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   713
	} else {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   714
	    curCode = inCode = code;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   715
	    if (curCode >= freeCode) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   716
		curCode = oldCode;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   717
		outCode[outCount++] = fin;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   718
	    }
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   719
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   720
	    while (curCode >= clearCode) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   721
		if (outCount > 1024) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   722
		    goto out;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   723
		}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   724
		outCode[outCount++] = suffix[curCode];
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   725
		curCode = prefix[curCode];
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   726
	    }
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   727
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   728
	    fin = curCode;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   729
	    outCode[outCount++] = fin;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   730
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   731
	    for (i = outCount - 1; i >= 0; i--)
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   732
		*to++ = outCode[i];
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   733
	    outCount = 0;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   734
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   735
	    prefix[freeCode] = oldCode;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   736
	    suffix[freeCode] = fin;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   737
	    oldCode = inCode;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   738
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   739
	    freeCode++;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   740
	    if (freeCode >= maxCode) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   741
		if (codeLen < 12) {
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   742
		    codeLen++;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   743
		    maxCode *= 2;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   744
		    mask = (1 << codeLen) - 1;
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   745
		}
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   746
	    }
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   747
	}
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   748
    }
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   749
out: ;
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   750
    free(prefix);
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   751
    free(suffix);
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   752
    free(outCode);
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   753
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   754
    return 1;
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   755
}
48194c26a46c Initial revision
claus
parents:
diff changeset
   756
48194c26a46c Initial revision
claus
parents:
diff changeset
   757
%}
77
da4678fae5c8 *** empty log message ***
claus
parents: 72
diff changeset
   758
! !
105
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   759
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   760
!ImageReader class methodsFor:'documentation'!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   761
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   762
copyright
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   763
"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   764
 COPYRIGHT (c) 1991 by Claus Gittinger
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   765
	      All Rights Reserved
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   766
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   767
 This software is furnished under a license and may be used
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   768
 only in accordance with the terms of that license and with the
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   769
 inclusion of the above copyright notice.   This software may not
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   770
 be provided or otherwise made available to, or used by, any
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   771
 other person.  No title to or ownership of the software is
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   772
 hereby transferred.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   773
"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   774
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   775
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   776
version
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   777
"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   778
$Header: /cvs/stx/stx/libview/ImageReader.st,v 1.15 1995-02-18 15:57:27 claus Exp $
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   779
"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   780
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   781
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   782
documentation
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   783
"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   784
    Abstract class to provide common functions for image-readers 
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   785
    (i.e. TIFFReader, GIFReader etc.)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   786
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   787
    ImageReaders are created temporary to read an image from a stream.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   788
    They read the stream and collect all relevant information internally.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   789
    Once done with reading, the image is asked for.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   790
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   791
    See implementation of fromStream: in concrete subclasses.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   792
    The public interfaces are:
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   793
	 <ConcreteReaderClass> fromFile:aFilename
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   794
    or:
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   795
	 <ConcreteReaderClass> fromStream:aStream
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   796
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   797
    However, usually this is done indirectly through
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   798
	Image fromFile:aFileName
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   799
"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   800
! !
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   801
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   802
!ImageReader class methodsFor:'i/o support'!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   803
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   804
streamReadingFile:aFilename
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   805
    "return a stream to read aFilename.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   806
     If the filename ends with '.Z' or '.gz', return a stream
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   807
     to a pipe for the uncompressor. Otherwise, return a stream to read
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   808
     the file directly."
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   809
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   810
    |inStream name|
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   811
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   812
    name := aFilename asString.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   813
    ((name endsWith:'.Z') or:[name endsWith:'.gz']) ifTrue:[
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   814
	inStream := PipeStream readingFrom:'gunzip < ' , name.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   815
	inStream isNil ifTrue:[
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   816
	    inStream := PipeStream readingFrom:'uncompress < ' , name.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   817
	]
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   818
    ] ifFalse:[
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   819
	inStream := aFilename asFilename readStream.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   820
    ].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   821
    inStream isNil ifTrue:[
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   822
	'IMGREADER: open error on: ' errorPrint. aFilename errorPrintNL. 
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   823
    ].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   824
    ^ inStream
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   825
! !
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   826
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   827
!ImageReader class methodsFor:'fileIn / fileOut'!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   828
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   829
fromStream:aStream
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   830
    "read an image (in my format) from aStream"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   831
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   832
    |reader|
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   833
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   834
    reader := self new fromStream:aStream.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   835
    reader notNil ifTrue:[
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   836
	^ reader image
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   837
    ].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   838
    ^ nil
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   839
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   840
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   841
fromFile:aFileName
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   842
    "read an image (in my format) from aFileName. 
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   843
     Return the image or nil on error."
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   844
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   845
    |result inStream|
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   846
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   847
    inStream := self streamReadingFile:aFileName.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   848
    inStream isNil ifTrue:[
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   849
	'IMGREADER: file open error' errorPrintNL.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   850
	^ nil
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   851
    ].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   852
    result := self fromStream:inStream.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   853
    inStream close.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   854
    ^ result
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   855
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   856
    "
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   857
     XPMReader fromFile:'bitmaps/ljet.xpm'
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   858
     XBMReader fromFile:'bitmaps/SBrowser.xbm'
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   859
    " 
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   860
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   861
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   862
save:anImage onFile:aFileName
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   863
    "save the image in my format on aFileName"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   864
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   865
    ^ (self basicNew) save:anImage onFile:aFileName
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   866
! !
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   867
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   868
!ImageReader class methodsFor:'testing'!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   869
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   870
isValidImageFile:aFileName
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   871
    "return true, if aFileName contains an image this
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   872
     reader understands - should be redefined in subclasses"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   873
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   874
    ^ false
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   875
! !
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   876
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   877
!ImageReader class methodsFor:'constants'!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   878
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   879
reverseBits
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   880
    "return a table filled with bit reverse information.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   881
     To convert from msbit-first to lsbit-first bytes, use
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   882
     the value as index into the table, retrieving the reverse
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   883
     value. Since indexing must start at 1, use (value + 1) as
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   884
     index."
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   885
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   886
    |val "{ Class: SmallInteger }" |
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   887
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   888
    ReverseBits isNil ifTrue:[
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   889
	ReverseBits := ByteArray new:256.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   890
	0 to:255 do:[:i |
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   891
	    val := 0.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   892
	    (i bitTest:16r01) ifTrue:[val := val bitOr:16r80].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   893
	    (i bitTest:16r02) ifTrue:[val := val bitOr:16r40].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   894
	    (i bitTest:16r04) ifTrue:[val := val bitOr:16r20].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   895
	    (i bitTest:16r08) ifTrue:[val := val bitOr:16r10].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   896
	    (i bitTest:16r10) ifTrue:[val := val bitOr:16r08].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   897
	    (i bitTest:16r20) ifTrue:[val := val bitOr:16r04].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   898
	    (i bitTest:16r40) ifTrue:[val := val bitOr:16r02].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   899
	    (i bitTest:16r80) ifTrue:[val := val bitOr:16r01].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   900
	    ReverseBits at:(i + 1) put:val
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   901
	]
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   902
    ].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   903
    ^ ReverseBits
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   904
! !
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   905
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   906
!ImageReader class methodsFor:'cleanup'!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   907
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   908
lowSpaceCleanup
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   909
    "cleanup things we do not need"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   910
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   911
    ReverseBits := nil
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   912
! !
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   913
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   914
!ImageReader class methodsFor:'decompression support'!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   915
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   916
decompressCCITT3From:srcBytes into:dstBytes startingAt:offset count:count 
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   917
    "decompress CCITT Group 3 compressed image data.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   918
     count bytes from srcBytes are decompressed into dstBytes.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   919
     Calls primitive c function for speed"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   920
%{
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   921
    if (__isByteArray(srcBytes) 
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   922
     && __isByteArray(dstBytes)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   923
     && __bothSmallInteger(offset, count)) {
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   924
	if (__decodeCCITTgroup3__(_ByteArrayInstPtr(srcBytes)->ba_element,
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   925
			      _ByteArrayInstPtr(dstBytes)->ba_element
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   926
			      + _intVal(offset) - 1,
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   927
			      _intVal(count))) {
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   928
	    RETURN ( self );
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   929
	}
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   930
    }
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   931
%}
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   932
.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   933
    self primitiveFailed
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   934
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   935
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   936
decompressLZWFrom:srcBytes count:count into:dstBytes startingAt:offset
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   937
    "decompress LZW (tiff) compressed image data.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   938
     count bytes from srcBytes are decompressed into dstBytes.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   939
     Calls primitive c function for speed"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   940
%{
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   941
    if (__isByteArray(srcBytes) 
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   942
     && __isByteArray(dstBytes)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   943
     && __bothSmallInteger(offset, count)) {
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   944
	if (__decodeLZW__(_ByteArrayInstPtr(srcBytes)->ba_element,
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   945
		      _ByteArrayInstPtr(dstBytes)->ba_element
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   946
		      + _intVal(offset) - 1,
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   947
		      _intVal(count))) {
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   948
	    RETURN ( self );
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   949
	}
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   950
    }
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   951
%}
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   952
.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   953
    self primitiveFailed
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   954
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   955
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   956
decompressGIFFrom:srcBytes count:count into:dstBytes startingAt:offset codeLen:codeLen
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   957
    "decompress GIF compressed image data.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   958
     count bytes from srcBytes are decompressed into dstBytes.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   959
     Calls primitive c function for speed"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   960
%{
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   961
    if (__isByteArray(srcBytes) 
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   962
     && __isByteArray(dstBytes)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   963
     && __bothSmallInteger(codeLen, offset)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   964
     && __isSmallInteger(count)) {
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   965
	if (__decodeGIF__(_ByteArrayInstPtr(srcBytes)->ba_element,
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   966
		      _ByteArrayInstPtr(dstBytes)->ba_element
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   967
		      + _intVal(offset) - 1,
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   968
		      _intVal(count),
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   969
		      _intVal(codeLen))) {
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   970
	    RETURN ( self );
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   971
	}
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   972
    }
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   973
%}
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   974
.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   975
    self primitiveFailed
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   976
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   977
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   978
decodeDelta:step in:data width:width height:height
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   979
    "perform NeXT special predictor delta decoding inplace in data.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   980
     Calls primitive c function for speed"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   981
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   982
    (step ~~ 3) ifTrue:[
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   983
	^ self error:'only rgb pictures supported'
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   984
    ].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   985
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   986
%{
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   987
    if (__isByteArray(data)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   988
     && __bothSmallInteger(width, height)) {
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   989
	__decodeDelta__(_ByteArrayInstPtr(data)->ba_element,
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   990
		    _intVal(width), _intVal(height));
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   991
	RETURN ( self );
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   992
    }
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   993
%}
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   994
.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   995
    self primitiveFailed
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   996
! !
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   997
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   998
!ImageReader methodsFor:'accessing'!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
   999
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1000
image
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1001
    "return the image represented by myself"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1002
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1003
    |image depth|
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1004
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1005
    depth := self bitsPerPixel.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1006
    image := (Image implementorForDepth:depth) new.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1007
    image width:width.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1008
    image height:height.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1009
    image photometric:photometric.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1010
    image samplesPerPixel:samplesPerPixel.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1011
    image bitsPerSample:bitsPerSample.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1012
    image colorMap:colorMap.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1013
    image data:data.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1014
    ^ image
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1015
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1016
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1017
height 
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1018
    ^ height
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1019
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1020
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1021
photometric
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1022
    ^ photometric
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1023
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1024
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1025
width
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1026
    ^ width
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1027
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1028
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1029
samplesPerPixel
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1030
    ^ samplesPerPixel
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1031
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1032
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1033
data 
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1034
    ^ data
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1035
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1036
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1037
colorMap
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1038
    ^ colorMap
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1039
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1040
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1041
bitsPerSample
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1042
    ^ bitsPerSample
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1043
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1044
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1045
bitsPerPixel
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1046
    "return the number of bits per pixel"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1047
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1048
    ^ (bitsPerSample inject:0 into:[:sum :i | sum + i])
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1049
! !
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1050
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1051
!ImageReader methodsFor:'fileIn / fileOut'!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1052
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1053
save:image onFile:aFileName
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1054
    "save image in my format on aFile"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1055
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1056
    ^ self subclassResponsibility
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1057
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1058
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1059
fromStream:aStream
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1060
    "read imagedata in my format from aStream"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1061
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1062
    ^ self subclassResponsibility
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1063
! !
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1064
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1065
!ImageReader methodsFor:'i/o support'!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1066
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1067
readLong
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1068
    "return the next 4-byte long, honoring the byte-order"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1069
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1070
    ^ inStream nextLongMSB:(byteOrder ~~ #lsb)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1071
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1072
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1073
readShort
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1074
    "return the next 2-byte short, honoring the byte-order"
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1075
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1076
    ^ inStream nextUnsignedShortMSB:(byteOrder ~~ #lsb)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1077
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1078
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1079
readShortLong
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1080
    "return the next 2-byte short, honoring the byte-order.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1081
     There are actually 4 bytes read, but only 2 looked at."
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1082
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1083
    |bytes val|
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1084
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1085
    bytes := ByteArray new:4.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1086
    inStream nextBytes:4 into:bytes.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1087
    (byteOrder == #lsb) ifTrue:[
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1088
	val := bytes at:2.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1089
	val := val * 256 + (bytes at:1)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1090
    ] ifFalse:[
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1091
	val := bytes at:3.
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1092
	val := val * 256 + (bytes at:4)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1093
    ].
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1094
    ^ val
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1095
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1096
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1097
writeLong:anInteger
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1098
    "write a 4-byte long, honoring the byte-order."
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1099
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1100
    outStream nextPutLong:anInteger MSB:(byteOrder ~~ #lsb)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1101
!
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1102
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1103
writeShort:anInteger
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1104
    "write a 2-byte short, honoring the byte-order."
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1105
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1106
    outStream nextPutShort:anInteger MSB:(byteOrder ~~ #lsb)
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1107
! !
6a4a21c17e5d *** empty log message ***
claus
parents: 97
diff changeset
  1108