// Near Infinity - An Infinity Engine Browser and Editor // Copyright (C) 2001 - 2005 Jon Olav Hauglid // See LICENSE.txt for license information package org.infinity.datatype; import java.nio.ByteBuffer; import org.infinity.resource.AbstractStruct; import org.infinity.resource.StructEntry; public final class UnknownBinary extends Unknown { public UnknownBinary(ByteBuffer buffer, int offset, int length, String name) { this(null, buffer, offset, length, name); } public UnknownBinary(StructEntry parent, ByteBuffer buffer, int offset, int length, String name) { super(parent, buffer, offset, length, name); } // --------------------- Begin Interface Editable --------------------- @Override public boolean updateValue(AbstractStruct struct) { String value = textArea.getText().trim(); value = value.replaceAll("\r?\n", " "); int index = value.indexOf((int)' '); while (index != -1) { value = value.substring(0, index) + value.substring(index + 1); index = value.indexOf((int)' '); } if (value.length() != 8 * buffer.limit()) { return false; } byte newdata[] = new byte[buffer.limit()]; for (int i = 0; i < newdata.length; i++) { String bytechars = value.substring(8 * i, 8 * i + 8); try { newdata[i] = (byte)Integer.parseInt(bytechars, 2); } catch (NumberFormatException e) { return false; } } buffer.position(0); buffer.get(newdata); return true; } // --------------------- End Interface Editable --------------------- @Override public String toString() { if (buffer.limit() > 0) { StringBuffer sb = new StringBuffer(9 * buffer.limit() + 1); buffer.position(0); while (buffer.remaining() > 0) { int v = buffer.get() & 0xff; String text = Integer.toBinaryString(v); for (int j = 0, count = 8 - text.length(); j < count; j++) { sb.append('0'); } sb.append(text).append(' '); } sb.append('b'); return sb.toString(); } else return new String(); } }