version info reader implemented
[idea/community.git] / tools / launcher-generator / src / com / pme / exe / Bin.java
index 338793924de744ab30f89fc724c8fbdfe8681f53..f73bf529ea076cbc0a2f018fbecb33baa9fb5741 100644 (file)
@@ -18,6 +18,7 @@
 package com.pme.exe;
 
 import com.pme.util.BitsUtil;
+import com.pme.util.OffsetTrackingInputStream;
 
 import java.io.*;
 import java.util.ArrayList;
@@ -356,6 +357,40 @@ public abstract class Bin {
     }
   }
 
+  public static class Padding extends Bin {
+    private int myBytes;
+
+    public Padding(int bytes) {
+      super("Padding");
+      myBytes = bytes;
+    }
+
+    @Override
+    public long sizeInBytes() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void read(DataInput stream) throws IOException {
+      if (stream instanceof OffsetTrackingInputStream) {
+        long offset = ((OffsetTrackingInputStream) stream).getOffset();
+        int offsetMask = myBytes-1;
+        long offsetBits = offset & offsetMask;
+        if (offsetBits > 0) {
+          stream.skipBytes((int) (myBytes - offsetBits));
+        }
+      }
+    }
+
+    @Override
+    public void write(DataOutput stream) throws IOException {
+    }
+
+    @Override
+    public void report(OutputStreamWriter writer) throws IOException {
+    }
+  }
+
   public static class Txt extends Bin {
     private StringBuffer myBuffer = new StringBuffer();
     private Bin.Value mySize;
@@ -367,6 +402,7 @@ public abstract class Bin {
       mySize = new DWord("").setValue(bytes.length);
       setValue();
     }
+
     public Txt(String name, String string) {
       super(name);
       myBytes = new byte[string.length() * 2];
@@ -423,6 +459,44 @@ public abstract class Bin {
     }
   }
 
+  public static class WChar extends Bin {
+    private String myValue;
+
+    public WChar(String name) {
+      super(name);
+    }
+
+    @Override
+    public long sizeInBytes() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void read(DataInput stream) throws IOException {
+      StringBuilder valueBuilder = new StringBuilder();
+      while(true) {
+        char c = BitsUtil.readChar(stream);
+        if (c == 0) break;
+        valueBuilder.append(c);
+      }
+      myValue = valueBuilder.toString();
+    }
+
+    @Override
+    public void write(DataOutput stream) throws IOException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void report(OutputStreamWriter writer) throws IOException {
+      _report(writer, myValue);
+    }
+
+    public String getValue() {
+      return myValue;
+    }
+  }
+
   public static class Bytes extends Bin {
     private byte[] myBytes;
     private Value myStartOffset;