--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/RIFFReader.st Mon Apr 14 13:59:34 1997 +0200
@@ -0,0 +1,170 @@
+'From Smalltalk/X, Version:3.1.5 on 11-apr-1997 at 6:49:46 pm' !
+
+ImageReader subclass:#RIFFReader
+ instanceVariableNames:'chunkSize streamTypes'
+ classVariableNames:'UnsupportedFormatErrorSignal'
+ poolDictionaries:''
+ category:'Graphics-Images-Support'
+!
+
+!RIFFReader class methodsFor:'documentation'!
+
+documentation
+"
+ Helper to read RIFF files.
+"
+! !
+
+!RIFFReader class methodsFor:'class initialization'!
+
+initialize
+ UnsupportedFormatErrorSignal isNil ifTrue:[
+ UnsupportedFormatErrorSignal := ErrorSignal newSignalMayProceed:true.
+ UnsupportedFormatErrorSignal nameClass:self message:#unsupportedFormatErrorSignal.
+ ].
+
+ "
+ RIFFReader initialize
+ "
+
+ "Created: 4.4.1997 / 22:35:52 / cg"
+ "Modified: 5.4.1997 / 16:12:16 / cg"
+! !
+
+!RIFFReader class methodsFor:'testing'!
+
+isRIFFFile:aFileName
+ "return true, if aFileName contains RIFF-encoded data"
+
+ |data1 inStream|
+
+ inStream := self streamReadingFile:aFileName.
+ inStream isNil ifTrue:[^ false].
+ inStream binary.
+
+ data1 := String new:4.
+ inStream nextBytes:4 into:data1.
+ inStream close.
+
+ ^ (data1 = 'RIFF')
+
+ "
+ RIFFReader isRIFFFile:'bitmaps/magtape.xpm'
+ RIFFReader isRIFFFile:'/home2/pd_stuff/movies/avi/drlair.avi'
+ "
+
+ "Created: 4.4.1997 / 22:35:52 / cg"
+ "Modified: 5.4.1997 / 16:12:16 / cg"
+! !
+
+!RIFFReader methodsFor:'reading from stream'!
+
+getChunk
+ "get a single chunk"
+
+ |id s sel streamNr streamType|
+
+ 'getChunk -> ' infoPrint.
+
+ id := ' '.
+ inStream nextBytes:4 into:id startingAt:1.
+ chunkSize := inStream nextLongMSB:false.
+
+ (id at:4) == Character space ifTrue:[
+ id := id copyTo:3
+ ].
+
+ (id at:1) isDigit ifTrue:[
+ streamNr := Number readFrom:(id copyTo:2).
+ streamType := streamTypes at:(streamNr + 1).
+ s := 'getChunk_' , streamType , '_' , (id copyFrom:3).
+ ] ifFalse:[
+ s := 'getChunk_' , id.
+ ].
+ sel := s asSymbolIfInterned.
+ (sel isNil or:[(self respondsTo:sel) not]) ifTrue:[
+ '[' infoPrint. s infoPrint. '] ' infoPrint.
+ sel := #'getChunk_Unknown'
+ ].
+
+ self perform:sel.
+
+ '' infoPrintCR.
+
+ "Created: 5.4.1997 / 16:29:40 / cg"
+ "Modified: 11.4.1997 / 14:00:42 / cg"
+!
+
+getChunk_LIST
+ "process a LIST chunk"
+
+ 'getChunk_LIST' infoPrint.
+
+ inStream skip:4.
+
+ "
+ AVIReader fromFile:'/home2/pd_stuff/movies/avi/hangldm.avi'
+ "
+
+ "Created: 4.4.1997 / 23:18:33 / cg"
+ "Modified: 5.4.1997 / 16:12:16 / cg"
+!
+
+getChunk_RIFF
+ "process a RIFF chunk"
+
+ 'getChunk_RIFF' infoPrint.
+
+ inStream skip:4.
+
+ "
+ AVIReader fromFile:'/home2/pd_stuff/movies/avi/hangldm.avi'
+ "
+
+ "Created: 4.4.1997 / 23:18:08 / cg"
+ "Modified: 5.4.1997 / 16:12:16 / cg"
+!
+
+getChunk_Unknown
+ "ignore any other chunk"
+
+ 'getChunk_Unknown -> ' infoPrint.
+
+ self skipChunk
+
+ "
+ AVIReader fromFile:'/home2/pd_stuff/movies/avi/hangldm.avi'
+ "
+
+ "Created: 5.4.1997 / 00:03:43 / cg"
+ "Modified: 5.4.1997 / 16:12:16 / cg"
+!
+
+skipChunk
+ "skip a chunk"
+
+ |sz|
+
+ 'skipChunk' infoPrint.
+
+ sz := chunkSize.
+ (sz bitTest:1) ifTrue:[
+ sz := sz + 1
+ ].
+
+ inStream skip:sz.
+
+ "
+ AVIReader fromFile:'/home2/pd_stuff/movies/avi/hangldm.avi'
+ "
+
+ "Created: 5.4.1997 / 14:13:43 / cg"
+ "Modified: 5.4.1997 / 16:12:16 / cg"
+! !
+
+!RIFFReader class methodsFor:'documentation'!
+
+version
+ ^ '$Header: /cvs/stx/stx/libview2/RIFFReader.st,v 1.1 1997-04-14 11:59:34 cg Exp $'
+! !
+RIFFReader initialize!