PCXReader.st
changeset 43 e85c7d392833
parent 35 f13cdd0b44c7
child 83 97fd04d167c8
--- 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
 ! !