--- a/PCXReader.st Sat Feb 18 16:52:56 1995 +0100
+++ b/PCXReader.st Sat Feb 18 16:58:20 1995 +0100
@@ -10,7 +10,7 @@
hereby transferred.
"
-'From Smalltalk/X, Version:2.10.3 on 22-sep-1994 at 7:31:01 pm'!
+'From Smalltalk/X, Version:2.10.4 on 18-feb-1995 at 2:18:45 am'!
ImageReader subclass:#PCXReader
instanceVariableNames:''
@@ -23,7 +23,7 @@
COPYRIGHT (c) 1994 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libview2/PCXReader.st,v 1.4 1995-02-06 00:37:36 claus Exp $
+$Header: /cvs/stx/stx/libview2/PCXReader.st,v 1.5 1995-02-18 15:57:51 claus Exp $
'!
!PCXReader class methodsFor:'documentation'!
@@ -44,7 +44,7 @@
version
"
-$Header: /cvs/stx/stx/libview2/PCXReader.st,v 1.4 1995-02-06 00:37:36 claus Exp $
+$Header: /cvs/stx/stx/libview2/PCXReader.st,v 1.5 1995-02-18 15:57:51 claus Exp $
"
!
@@ -57,6 +57,14 @@
"
! !
+!PCXReader class methodsFor:'initialization'!
+
+initialize
+ "tell Image-class, that a new fileReader is present"
+
+ Image fileFormats at:'.pcx' put:self.
+! !
+
!PCXReader class methodsFor:'testing'!
isValidPCXHeader:aHeader
@@ -95,14 +103,6 @@
^ true
! !
-!PCXReader class methodsFor:'initialization'!
-
-initialize
- "tell Image-class, that a new fileReader is present"
-
- Image fileFormats at:'.pcx' put:self.
-! !
-
!PCXReader methodsFor:'reading from file'!
fromStreamWithHeader:header
@@ -128,8 +128,8 @@
compression := header at:3.
"/ 'compression=' print. compression printNL.
(#(0 1) includes:compression) ifFalse:[
- self error:'PCXREADER: unknown compression'.
- ^ nil
+ self error:'PCXREADER: unknown compression'.
+ ^ nil
].
inDepth := header at:4.
"/ 'depth=' print. inDepth printNL.
@@ -145,8 +145,8 @@
So its not (yet) implemented
"
((inDepth ~~ 8) or:[nPlanes ~~ 1]) ifTrue:[
- 'PCXReader: can only handle 1-plane 256 color images' errorPrintNL.
- ^ nil
+ 'PCXReader: can only handle 1-plane 256 color images' errorPrintNL.
+ ^ nil
].
xmin := header wordAt:5.
@@ -160,66 +160,66 @@
"/ 'height=' print. width printNL.
(version == 2) ifTrue:[
- "read the 16-entry colormap"
+ "read the 16-entry colormap"
- rawMap := ByteArray uninitializedNew:(16*3).
- rawMap replaceFrom:1 to:(16*3) with:header startingAt:17.
- rMap := Array new:16.
- gMap := Array new:16.
- bMap := Array new:16.
- srcIndex := 1.
- 1 to:16 do:[:i |
- rMap at:i put:(rawMap at:srcIndex).
- srcIndex := srcIndex + 1.
- gMap at:i put:(rawMap at:srcIndex).
- srcIndex := srcIndex + 1.
- bMap at:i put:(rawMap at:srcIndex).
- srcIndex := srcIndex + 1.
- ].
+ rawMap := ByteArray uninitializedNew:(16*3).
+ rawMap replaceFrom:1 to:(16*3) with:header startingAt:17.
+ rMap := Array new:16.
+ gMap := Array new:16.
+ bMap := Array new:16.
+ srcIndex := 1.
+ 1 to:16 do:[:i |
+ rMap at:i put:(rawMap at:srcIndex).
+ srcIndex := srcIndex + 1.
+ gMap at:i put:(rawMap at:srcIndex).
+ srcIndex := srcIndex + 1.
+ bMap at:i put:(rawMap at:srcIndex).
+ srcIndex := srcIndex + 1.
+ ].
].
compression == 1 ifTrue:[
- data := dataBytes := ByteArray new:(height * bytesPerRow).
+ data := dataBytes := ByteArray new:(height * bytesPerRow).
- buffer := ByteArray new:4096.
- bufferIndex := 1.
- bendIndex := 1.
+ buffer := ByteArray new:4096.
+ bufferIndex := 1.
+ bendIndex := 1.
- rowIndex := 1.
- h := height.
- 1 to:h do:[:row |
- dstIndex := rowIndex.
- endIndex := dstIndex + bytesPerRow.
- [dstIndex < endIndex] whileTrue:[
- bufferIndex == bendIndex ifTrue:[
- nBuffer := inStream nextBytes:4096 into:buffer.
- bufferIndex := 1.
- bendIndex := nBuffer + 1.
- ].
- byte := buffer at:bufferIndex.
- bufferIndex := bufferIndex + 1. "/ nBuffer := nBuffer - 1.
- ((byte bitAnd:2r11000000) ~~ 2r11000000) ifTrue:[
- dataBytes at:dstIndex put:byte.
- dstIndex := dstIndex + 1.
- ] ifFalse:[
- nByte := byte bitAnd:2r00111111.
- bufferIndex == bendIndex ifTrue:[
- nBuffer := inStream nextBytes:4096 into:buffer.
- bufferIndex := 1.
- bendIndex := nBuffer + 1.
- ].
- value := buffer at:bufferIndex.
- bufferIndex := bufferIndex + 1. "/ nBuffer := nBuffer - 1.
- value notNil ifTrue:[
- idx2 := endIndex min:(dstIndex + nByte - 1).
- dataBytes from:dstIndex to:idx2 put:value.
- dstIndex := dstIndex + nByte.
- ]
- ].
- ].
- rowIndex := rowIndex + bytesPerRow
- ].
- nBuffer := endIndex - bufferIndex.
+ rowIndex := 1.
+ h := height.
+ 1 to:h do:[:row |
+ dstIndex := rowIndex.
+ endIndex := dstIndex + bytesPerRow.
+ [dstIndex < endIndex] whileTrue:[
+ bufferIndex == bendIndex ifTrue:[
+ nBuffer := inStream nextBytes:4096 into:buffer.
+ bufferIndex := 1.
+ bendIndex := nBuffer + 1.
+ ].
+ byte := buffer at:bufferIndex.
+ bufferIndex := bufferIndex + 1. "/ nBuffer := nBuffer - 1.
+ ((byte bitAnd:2r11000000) ~~ 2r11000000) ifTrue:[
+ dataBytes at:dstIndex put:byte.
+ dstIndex := dstIndex + 1.
+ ] ifFalse:[
+ nByte := byte bitAnd:2r00111111.
+ bufferIndex == bendIndex ifTrue:[
+ nBuffer := inStream nextBytes:4096 into:buffer.
+ bufferIndex := 1.
+ bendIndex := nBuffer + 1.
+ ].
+ value := buffer at:bufferIndex.
+ bufferIndex := bufferIndex + 1. "/ nBuffer := nBuffer - 1.
+ value notNil ifTrue:[
+ idx2 := endIndex min:(dstIndex + nByte - 1).
+ dataBytes from:dstIndex to:idx2 put:value.
+ dstIndex := dstIndex + nByte.
+ ]
+ ].
+ ].
+ rowIndex := rowIndex + bytesPerRow
+ ].
+ nBuffer := endIndex - bufferIndex.
"/ rowIndex := 1.
"/ h := height.
@@ -244,55 +244,54 @@
"/ rowIndex := rowIndex + bytesPerRow
"/ ]
] ifFalse:[
- "
- actually untested ...
- "
- data := dataBytes := ByteArray uninitializedNew:(height * bytesPerRow).
- inStream nextBytes:(height * bytesPerRow) into:data.
- nBuffer := 0.
+ "
+ actually untested ...
+ "
+ data := dataBytes := ByteArray uninitializedNew:(height * bytesPerRow).
+ inStream nextBytes:(height * bytesPerRow) into:data.
+ nBuffer := 0.
].
(version == 5) ifTrue:[
- "read the 256-entry colormap"
+ "read the 256-entry colormap"
- nBuffer ~~ 0 ifTrue:[
- byte := buffer at:bufferIndex.
- bufferIndex := bufferIndex + 1. nBuffer := nBuffer - 1.
- ] ifFalse:[
- byte := inStream next
- ].
+ nBuffer ~~ 0 ifTrue:[
+ byte := buffer at:bufferIndex.
+ bufferIndex := bufferIndex + 1. nBuffer := nBuffer - 1.
+ ] ifFalse:[
+ byte := inStream next
+ ].
- byte == 16rC0 ifFalse:[
- 'PCXREADER: no valid 256-entry palette (got' errorPrint.
- byte errorPrint. '; expected ' errorPrint. 16rC0 errorPrint. ')' errorPrintNL.
- ].
- rawMap := ByteArray uninitializedNew:(256*3).
- nBuffer ~~ 0 ifTrue:[
- rawMap replaceFrom:1 to:(256*3) with:buffer startingAt:bufferIndex.
- nBuffer < (256*3) ifTrue:[
- inStream nextBytes:((256*3)-nBuffer) into:rawMap startingAt:nBuffer+1
- ]
- ] ifFalse:[
- inStream nextBytes:(256*3) into:rawMap.
- ].
- rMap := Array new:256.
- gMap := Array new:256.
- bMap := Array new:256.
- srcIndex := 1.
- 1 to:256 do:[:i |
- rMap at:i put:(rawMap at:srcIndex).
- srcIndex := srcIndex + 1.
- gMap at:i put:(rawMap at:srcIndex).
- srcIndex := srcIndex + 1.
- bMap at:i put:(rawMap at:srcIndex).
- srcIndex := srcIndex + 1.
- ].
+ byte == 16rC0 ifFalse:[
+ 'PCXREADER: no valid 256-entry palette (got' errorPrint.
+ byte errorPrint. '; expected ' errorPrint. 16rC0 errorPrint. ')' errorPrintNL.
+ ].
+ rawMap := ByteArray uninitializedNew:(256*3).
+ nBuffer ~~ 0 ifTrue:[
+ rawMap replaceFrom:1 to:(256*3) with:buffer startingAt:bufferIndex.
+ nBuffer < (256*3) ifTrue:[
+ inStream nextBytes:((256*3)-nBuffer) into:rawMap startingAt:nBuffer+1
+ ]
+ ] ifFalse:[
+ inStream nextBytes:(256*3) into:rawMap.
+ ].
+ rMap := Array new:256.
+ gMap := Array new:256.
+ bMap := Array new:256.
+ srcIndex := 1.
+ 1 to:256 do:[:i |
+ rMap at:i put:(rawMap at:srcIndex).
+ srcIndex := srcIndex + 1.
+ gMap at:i put:(rawMap at:srcIndex).
+ srcIndex := srcIndex + 1.
+ bMap at:i put:(rawMap at:srcIndex).
+ srcIndex := srcIndex + 1.
+ ].
].
photometric := #palette.
samplesPerPixel := 1.
bitsPerSample := #(8).
-"/ colorMap := Array with:rMap with:gMap with:bMap.
colorMap := Colormap redVector:rMap greenVector:gMap blueVector:bMap.
"
@@ -302,32 +301,28 @@
"
!
-fromFile:aFilename
+fromStream:aStream
| fileSize header img |
- inStream := self class streamReadingFile:aFilename.
- inStream isNil ifTrue:[^ nil].
+ inStream := aStream.
inStream binary.
- fileSize := inStream size.
+ fileSize := aStream size.
fileSize < 128 ifTrue:[
- inStream close.
- self error:'PCXREADER: short file'.
- ^ nil
+ self error:'PCXREADER: short file'.
+ ^ nil
].
header := ByteArray uninitializedNew:128.
- inStream nextBytes:128 into:header.
+ aStream nextBytes:128 into:header.
(self class isValidPCXHeader:header) ifFalse:[
- inStream close.
- self error:'PCXREADER: wrong header'.
- ^ nil
+ self error:'PCXREADER: wrong header'.
+ ^ nil
].
img := self fromStreamWithHeader:header.
- inStream close.
^ img
! !