XPMReader.st
changeset 41 66edc847b9c8
parent 36 3a7ec58dff8e
child 46 c49b204c2ef0
--- a/XPMReader.st	Sat Feb 18 16:32:43 1995 +0100
+++ b/XPMReader.st	Sat Feb 18 16:52:52 1995 +0100
@@ -10,6 +10,8 @@
  hereby transferred.
 "
 
+'From Smalltalk/X, Version:2.10.4 on 18-feb-1995 at 2:24:00 am'!
+
 ImageReader subclass:#XPMReader
 	 instanceVariableNames:''
 	 classVariableNames:''
@@ -21,7 +23,7 @@
 COPYRIGHT (c) 1994 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libview2/XPMReader.st,v 1.5 1995-02-06 00:39:52 claus Exp $
+$Header: /cvs/stx/stx/libview2/XPMReader.st,v 1.6 1995-02-18 15:52:52 claus Exp $
 '!
 
 !XPMReader class methodsFor:'documentation'!
@@ -42,7 +44,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libview2/XPMReader.st,v 1.5 1995-02-06 00:39:52 claus Exp $
+$Header: /cvs/stx/stx/libview2/XPMReader.st,v 1.6 1995-02-18 15:52:52 claus Exp $
 "
 !
 
@@ -115,9 +117,10 @@
     ^ s
 !
 
-fromFile:aFileName
-    "read an XPM-image from aFileName. return the receiver (with all
-     relevant instance variables set for the image) or nil on error"
+fromStream:aStream
+    "read an XPM-image from aStream. Return the receiver 
+     (with all relevant instance variables set for the image) 
+     or nil on error"
 
     |line 
      srcIndex "{ Class: SmallInteger }"
@@ -125,36 +128,29 @@
      colorName colorMapSize redMap greenMap blueMap
      charsPerPixel xlation s bitsPerPixel char lineDone|
 
-    inStream := self class streamReadingFile:aFileName.
-    inStream isNil ifTrue:[
-	'XPM: file open error' errorPrintNL.
-	^ nil
-    ].
+    inStream := aStream.
 
-    line := inStream nextLine.
+    line := aStream nextLine.
     (line notNil and:[line startsWith:'/* XPM']) ifFalse:[
-	'XPM: format error (expected XPM)' errorPrintNL.
-	inStream close.
-	^ nil
+        'XPM: format error (expected XPM)' errorPrintNL.
+        ^ nil
     ].
 
-    line := inStream nextLine.
+    line := aStream nextLine.
     [line notNil and:[line startsWith:'/*']] whileTrue:[
-	line := inStream nextLine.
+        line := aStream nextLine.
     ].
     (line notNil and:[line startsWith:'static char']) ifFalse:[
-	'XPM: format error (expected static char)' errorPrintNL.
-	inStream close.
-	^ nil
+        'XPM: format error (expected static char)' errorPrintNL.
+        ^ nil
     ].
-    line := inStream nextLine.
+    line := aStream nextLine.
     [line notNil and:[line startsWith:'/*']] whileTrue:[
-	line := inStream nextLine.
+        line := aStream nextLine.
     ].
     (line notNil and:[line startsWith:'"']) ifFalse:[
-	'XPM: format error (expected "ww hh nn mm)' errorPrintNL.
-	inStream close.
-	^ nil
+        'XPM: format error (expected "ww hh nn mm)' errorPrintNL.
+        ^ nil
     ].
     s := ReadStream on:line.
     s next.  "skip quote"
@@ -163,97 +159,94 @@
     colorMapSize := Integer readFrom:s.
     charsPerPixel := Integer readFrom:s.
     charsPerPixel ~~ 1 ifTrue:[
-	'XPM: can only handle single-character xpm-files' errorPrintNL.
-	^ nil
+        'XPM: can only handle single-character xpm-files' errorPrintNL.
+        ^ nil
     ].
     xlation := Array new:256.
 
     redMap := Array new:colorMapSize.
     greenMap := Array new:colorMapSize.
     blueMap := Array new:colorMapSize.
-"/    colorMap := Array with:redMap with:greenMap with:blueMap.
     colorMap := Colormap redVector:redMap greenVector:greenMap blueVector:blueMap.
 
     1 to:colorMapSize do:[:colorIndex |
-	|index line color|
+        |index line color|
 
-	line := inStream nextLine.
-	[line notNil and:[line startsWith:'/*']] whileTrue:[
-	    line := inStream nextLine.
-	].
-	(line notNil and:[line startsWith:'"']) ifFalse:[
-	    'XPM: format error (expected color spec)' errorPrintNL.
-	    inStream close.
-	    ^ nil
-	].
+        line := aStream nextLine.
+        [line notNil and:[line startsWith:'/*']] whileTrue:[
+            line := aStream nextLine.
+        ].
+        (line notNil and:[line startsWith:'"']) ifFalse:[
+            'XPM: format error (expected color spec)' errorPrintNL.
+            ^ nil
+        ].
 
-	s := ReadStream on:line.
-	s next. "skip quote"
-	index := s next asciiValue.
-	xlation at:index put:colorIndex - 1.
+        s := ReadStream on:line.
+        s next. "skip quote"
+        index := s next asciiValue.
+        xlation at:index put:colorIndex - 1.
 
-	lineDone := false.
-	[lineDone] whileFalse:[
-	    s skipSeparators.
-	    char := s peek.
-	    char == $" ifTrue:[
-		lineDone := true
-	    ] ifFalse:[
-		char == $s ifTrue:[
-		    "
-		     symbolic name
-		    "
-		    s next.
-		    s skipSeparators.
-		    s nextWord.    
-		    s skipSeparators.
-		] ifFalse:[
-		    char == $m ifTrue:[
-			"
-			 monochrome data
-			"
-			s next.
-			s skipSeparators.
-			s nextWord.
-			s skipSeparators.
-		    ] ifFalse:[
-			(char == $g) ifTrue:[
-			    "
-			     greyscale data
-			    "
-			    s next.
-			    s peek == 4 ifTrue:[s next].
-			    s skipSeparators.
-			    s nextWord.
-			    s skipSeparators.
-			] ifFalse:[
-			    (char == $c) ifTrue:[
-				"
-				 color data
-				"
-				s next.
-				s skipSeparators.
-				colorName := self colorNameFrom:s.
-				s skipSeparators.
-			    ] ifFalse:[
-				'XPM: format error (expected ''c'',''m'',''g'' or ''s'')' errorPrintNL.
-				inStream close.
-				^ nil
-			    ].
-			]
-		    ]
-		]
-	    ].
-	].
-	((colorName = 'none') or:[colorName = 'None']) ifTrue:[
-	    "mhmh must add mask to Image-instances soon ..."
-	    color := Color white
-	] ifFalse:[
-	    color := Color name:colorName.
-	].
-	redMap at:colorIndex put:(color red * 255 // 100).
-	greenMap at:colorIndex put:(color green * 255 // 100).
-	blueMap at:colorIndex put:(color blue * 255 // 100).
+        lineDone := false.
+        [lineDone] whileFalse:[
+            s skipSeparators.
+            char := s peek.
+            char == $" ifTrue:[
+                lineDone := true
+            ] ifFalse:[
+                char == $s ifTrue:[
+                    "
+                     symbolic name
+                    "
+                    s next.
+                    s skipSeparators.
+                    s nextWord.    
+                    s skipSeparators.
+                ] ifFalse:[
+                    char == $m ifTrue:[
+                        "
+                         monochrome data
+                        "
+                        s next.
+                        s skipSeparators.
+                        s nextWord.
+                        s skipSeparators.
+                    ] ifFalse:[
+                        (char == $g) ifTrue:[
+                            "
+                             greyscale data
+                            "
+                            s next.
+                            s peek == 4 ifTrue:[s next].
+                            s skipSeparators.
+                            s nextWord.
+                            s skipSeparators.
+                        ] ifFalse:[
+                            (char == $c) ifTrue:[
+                                "
+                                 color data
+                                "
+                                s next.
+                                s skipSeparators.
+                                colorName := self colorNameFrom:s.
+                                s skipSeparators.
+                            ] ifFalse:[
+                                'XPM: format error (expected ''c'',''m'',''g'' or ''s'')' errorPrintNL.
+                                ^ nil
+                            ].
+                        ]
+                    ]
+                ]
+            ].
+        ].
+        ((colorName = 'none') or:[colorName = 'None']) ifTrue:[
+            "mhmh must add mask to Image-instances soon ..."
+            color := Color white
+        ] ifFalse:[
+            color := Color name:colorName.
+        ].
+        redMap at:colorIndex put:(color red * 255 // 100).
+        greenMap at:colorIndex put:(color green * 255 // 100).
+        blueMap at:colorIndex put:(color blue * 255 // 100).
     ].
 
     "actually, could make it an image with less depth most of the time ..."
@@ -266,24 +259,23 @@
 
     dstIndex := 1.
     1 to:height do:[:row |
-	line := inStream nextLine withoutSpaces.
-	[line notNil and:[line startsWith:'/*']] whileTrue:[
-	    line := inStream nextLine withoutSpaces.
-	].
-	(line notNil and:[line startsWith:'"']) ifFalse:[
-	    'XPM: format error (expected pixels)' errorPrintNL.
-	    inStream close.
-	    ^ nil
-	].
-	srcIndex := 2.
-	1 to: width do:[:col |
-	    |char|
+        line := aStream nextLine withoutSpaces.
+        [line notNil and:[line startsWith:'/*']] whileTrue:[
+            line := aStream nextLine withoutSpaces.
+        ].
+        (line notNil and:[line startsWith:'"']) ifFalse:[
+            'XPM: format error (expected pixels)' errorPrintNL.
+            ^ nil
+        ].
+        srcIndex := 2.
+        1 to: width do:[:col |
+            |char|
 
-	    char := line at:srcIndex.
-	    data at:dstIndex put:(xlation at:char asciiValue).
-	    srcIndex := srcIndex + 1.
-	    dstIndex := dstIndex + 1
-	]
+            char := line at:srcIndex.
+            data at:dstIndex put:(xlation at:char asciiValue).
+            srcIndex := srcIndex + 1.
+            dstIndex := dstIndex + 1
+        ]
     ].
 
     photometric := #palette.
@@ -291,8 +283,11 @@
     bitsPerSample := Array with:bitsPerPixel.
 
     "
-     XPMReader fromFile:'../fileIn/bitmaps/magtape.xpm' 
-     XPMReader fromFile:'../fileIn/bitmaps/pixmap.xpm' 
-     XPMReader fromFile:'../fileIn/bitmaps/ljet.xpm'
+     XPMReader fromStream:('bitmaps/ljet.xpm' asFilename readStream)
+     XPMReader fromStream:('bitmaps/magtape.xpm' asFilename readStream)
+     XPMReader fromStream:('bitmaps/pixmap.xpm' asFilename readStream) 
+     XPMReader fromStream:('bitmaps/SBrowser.xbm' asFilename readStream)
     " 
 ! !
+
+XPMReader initialize!