Copyright 2011-01-06 Werner Randelshofer

ch.randelshofer.media.iff
Class MC68000InputStream

java.lang.Object
  extended by java.io.InputStream
      extended by java.io.FilterInputStream
          extended by ch.randelshofer.media.iff.MC68000InputStream
All Implemented Interfaces:
java.io.Closeable

public class MC68000InputStream
extends java.io.FilterInputStream

A MC 68000 input stream lets an application read primitive data types in the MC 68000 CPU format from an underlying input stream.

This stream filter is suitable for IFF-EA85 files.

Version:
1.3 2010-08-03 Moved unpackByteRun1 method into this class.
1.2.1 2004-08-09 Read methods for primitives throw now EOFException's, when the unexpected EOF's occur.
1.2 2003-04-01 Method skipFully added.
1.1 2000-06-11 Method readFully added.
1.0 1999-10-19
0.1 1999-01-02 Created.
Author:
Werner Randelshofer, Hausmatt 10, CH-6405 Immensee, Switzerland

Field Summary
 
Fields inherited from class java.io.FilterInputStream
in
 
Constructor Summary
MC68000InputStream(java.io.InputStream in)
          Creates a new instance.
 
Method Summary
 void align()
          Align to an even byte position in the input stream.
 long getScan()
          Get the current read position within the file (as seen by this input stream filter).
 void mark(int readlimit)
          Marks the input stream.
 int read()
          Reads one byte.
 int read(byte[] b, int offset, int length)
          Reads a sequence of bytes.
 int readFully(byte[] b, int offset, int length)
          Reads a sequence of bytes.
 int readLONG()
          Read 4 bytes from the input stream and interpret them as an MC 68000 32 Bit signed LONG value.
 int readUBYTE()
          Read 1 byte from the input stream and interpret them as an MC 68000 8 Bit unsigned UBYTE value.
 long readULONG()
          Read 4 Bytes from the input Stream and interpret them as an unsigned Integer value of MC 68000 type ULONG.
 int readUWORD()
          Read 2 bytes from the input stream and interpret them as an MC 68000 16 Bit unsigned UWORD value.
 short readWORD()
          Read 2 bytes from the input stream and interpret them as an MC 68000 16 Bit signed WORD value.
 void reset()
          Repositions the stream at the previously marked position.
 long skip(long n)
          Skips over and discards n bytes of data from this input stream.
 void skipFully(long n)
          Skips over and discards n bytes of data from this input stream.
static int unpackByteRun1(byte[] in, byte[] out)
          ByteRun1 run decoder.
 
Methods inherited from class java.io.FilterInputStream
available, close, markSupported, read
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MC68000InputStream

public MC68000InputStream(java.io.InputStream in)
Creates a new instance.

Parameters:
in - the input stream.
Method Detail

readUBYTE

public int readUBYTE()
              throws java.io.IOException
Read 1 byte from the input stream and interpret them as an MC 68000 8 Bit unsigned UBYTE value.

Throws:
java.io.IOException

readWORD

public short readWORD()
               throws java.io.IOException
Read 2 bytes from the input stream and interpret them as an MC 68000 16 Bit signed WORD value.

Throws:
java.io.IOException

readUWORD

public int readUWORD()
              throws java.io.IOException
Read 2 bytes from the input stream and interpret them as an MC 68000 16 Bit unsigned UWORD value.

Throws:
java.io.IOException

readLONG

public int readLONG()
             throws java.io.IOException
Read 4 bytes from the input stream and interpret them as an MC 68000 32 Bit signed LONG value.

Throws:
java.io.IOException

readULONG

public long readULONG()
               throws java.io.IOException
Read 4 Bytes from the input Stream and interpret them as an unsigned Integer value of MC 68000 type ULONG.

Throws:
java.io.IOException

align

public void align()
           throws java.io.IOException
Align to an even byte position in the input stream. This will skip one byte in the stream if the current read position is not even.

Throws:
java.io.IOException

getScan

public long getScan()
Get the current read position within the file (as seen by this input stream filter).


read

public int read()
         throws java.io.IOException
Reads one byte.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

readFully

public int readFully(byte[] b,
                     int offset,
                     int length)
              throws java.io.IOException
Reads a sequence of bytes.

Throws:
java.io.IOException

read

public int read(byte[] b,
                int offset,
                int length)
         throws java.io.IOException
Reads a sequence of bytes.

Overrides:
read in class java.io.FilterInputStream
Throws:
java.io.IOException

mark

public void mark(int readlimit)
Marks the input stream.

Overrides:
mark in class java.io.FilterInputStream
Parameters:
readlimit - The maximum limit of bytes that can be read before the mark position becomes invalid.

reset

public void reset()
           throws java.io.IOException
Repositions the stream at the previously marked position.

Overrides:
reset in class java.io.FilterInputStream
Throws:
java.io.IOException - If the stream has not been marked or if the mark has been invalidated.

skip

public long skip(long n)
          throws java.io.IOException
Skips over and discards n bytes of data from this input stream. This skip method tries to skip the p

Overrides:
skip in class java.io.FilterInputStream
Throws:
java.io.IOException

skipFully

public void skipFully(long n)
               throws java.io.IOException
Skips over and discards n bytes of data from this input stream. Throws

Parameters:
n - the number of bytes to be skipped.
Throws:
java.io.EOFException - if this input stream reaches the end before skipping all the bytes.
java.io.IOException

unpackByteRun1

public static int unpackByteRun1(byte[] in,
                                 byte[] out)
                          throws java.io.IOException
ByteRun1 run decoder.

The run encoding scheme by byteRun1 is best described by pseudo code for the decoder Unpacker (called UnPackBits in the Macintosh toolbox.

 UnPacker:
  LOOP until produced the desired number of bytes
      Read the next source byte into n
      SELECT n FROM
          [0..127] => copy the next n+1 bytes literally
          [-1..-127] => replicate the next byte -n+1 times
          -128    => no operation
      ENDCASE;
   ENDLOOP;
 

Parameters:
in -
out -
Throws:
ParseException
java.io.IOException

Copyright 2011-01-06 Werner Randelshofer