/** Die Klasse "Decompress" ist eine ausführbare Hilfsklasse für die Klasse "RLE"
zu Demonstrationszwecken. Erwartet werden ein oder zwei Kommandozeilenparameter.
Der erste Parameter kann den Namen einer Datei beinhaltn, die dekomprimiert werden soll.
Wird diese Datei nicht gefunden, wird der erste Parameter als String gewertet, und
dieser String wird dekomprimiert. Der zweite Parameter kann den Namen einer Ausgabedatei
angeben. Wird der zweite Parameter weggelassen, wird auf die Standardausgabe geschrieben.
<BR><BR>
Autor:   Martin Klossek und Fabian Wleklinski <BR>
Sprache: JAVA 1.1+ <BR> <BR>
*/

import java.io.*;

public class Decompress {

  public static void main( String[] args ) {

    // Die Eingabedatei zum lesen öffnen
    String filename = args[0];
    FileInputStream fileInputStream = null;
    File file = new File( filename );
    int len = 0;
    byte[] b;
    boolean fileNotFound = false;
    // Aus der Eingabedatei lesen ...
    try {
      fileInputStream = new FileInputStream( file );
    } catch (Throwable dummy) { fileNotFound = true; }
    if (! fileNotFound) {
      try {
        len = fileInputStream.available();
      } catch (Throwable dummy)  {}
      b = new byte[ len ];
      try {
        fileInputStream.read( b );
      } catch (Throwable dummy) {}
    } else {
      // bzw. den ersten Parameter als String behandeln
      b = filename.getBytes();
    }

    // Den txt komprimieren
    RLE rle = new RLE();
    b = rle.decompress( b );

    if (args.length > 1) {
      // Die Ausgabedatei zum schreiben öffnen ...
      filename = args[1];
      file = new File(filename);
      try {
          FileOutputStream fileOutputStream = new FileOutputStream(file);
          // ... wir wollen ASCII schreiben ...
          PrintStream printStream = new PrintStream( fileOutputStream );
          // ... und raus mit dem Text
          printStream.write( b );
       } catch (IOException io) {
          // Hier noch Fehlerbehandlung hin
       }
    } else {
      // ... bzw. Auf die Std-Ausgabe schreiben
      System.out.println( new String( b ) );
    }
  }
}