Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.debug.ui/plugin.properties1
-rw-r--r--org.eclipse.debug.ui/plugin.xml5
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexIntegerRendering.java105
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexIntegerRenderingDelegate.java26
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexRendering.java85
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/RenderingsUtil.java82
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/TableRenderingLine.java2
7 files changed, 222 insertions, 84 deletions
diff --git a/org.eclipse.debug.ui/plugin.properties b/org.eclipse.debug.ui/plugin.properties
index 092c4562a..861da32bd 100644
--- a/org.eclipse.debug.ui/plugin.properties
+++ b/org.eclipse.debug.ui/plugin.properties
@@ -288,6 +288,7 @@ Endianess = Endianess
BigEndianActionName = Big Endian
LittleEndianActionName = Little Endian
RestoreDefEndianessActionName = Restore Default
+HexIntegerName = Hex Integer
ViewManagementAction.label=&View Management...
diff --git a/org.eclipse.debug.ui/plugin.xml b/org.eclipse.debug.ui/plugin.xml
index ad5656ecf..1eb56d343 100644
--- a/org.eclipse.debug.ui/plugin.xml
+++ b/org.eclipse.debug.ui/plugin.xml
@@ -2199,6 +2199,11 @@ M4 = Platform-specific fourth key
class="org.eclipse.debug.internal.ui.views.memory.renderings.UnsignedIntegerRenderingTypeDelegate"
name="%UnsignedIntegerName"
id="org.eclipse.debug.ui.rendering.unsignedint"/>
+ <renderingType
+ class="org.eclipse.debug.internal.ui.views.memory.renderings.HexIntegerRenderingDelegate"
+ id="org.eclipse.debug.ui.rendering.hexint"
+ name="%HexIntegerName">
+ </renderingType>
</extension>
<extension
point="org.eclipse.ui.workingSets">
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexIntegerRendering.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexIntegerRendering.java
new file mode 100644
index 000000000..07242208b
--- /dev/null
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexIntegerRendering.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * David Pickens - [Memory View] Endian in hex view and ASCII view doesn't work
+ *******************************************************************************/
+package org.eclipse.debug.internal.ui.views.memory.renderings;
+
+import java.math.BigInteger;
+
+import org.eclipse.debug.core.model.MemoryByte;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.ui.IDebugUIConstants;
+
+/**
+ * @since 3.3
+ */
+public class HexIntegerRendering extends AbstractIntegerRendering {
+
+ public HexIntegerRendering(String renderingId)
+ {
+ super(renderingId);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.views.memory.AbstractTableRendering#getString(java.lang.String, java.math.BigInteger, org.eclipse.debug.core.model.MemoryByte[], java.lang.String)
+ */
+ public String getString(String dataType, BigInteger address,
+ MemoryByte[] data) {
+ StringBuffer strBuffer = new StringBuffer();
+ int endianess = getEndianness(data);
+
+ String paddedStr = DebugUIPlugin.getDefault().getPreferenceStore().getString(IDebugUIConstants.PREF_PADDED_STR);
+
+ if (endianess == RenderingsUtil.LITTLE_ENDIAN) {
+ MemoryByte[] swapped = new MemoryByte[data.length];
+ for (int i = 0; i < data.length; i++){
+ swapped[data.length-i-1] = data[i];
+ }
+ data = swapped;
+ }
+
+ for (int i=0; i<data.length; i++)
+ {
+ if (data[i].isReadable())
+ {
+ strBuffer.append(new String(RenderingsUtil.convertByteToCharArray(data[i].getValue())));
+ }
+ else
+ {
+ // pad with padded string
+ strBuffer.append(paddedStr);
+ }
+ }
+
+ return strBuffer.toString().toUpperCase();
+ }
+
+ /**
+ * @todo davidp needs to add a method comment.
+ * @param data
+ * @return
+ */
+ private int getEndianness (MemoryByte[] data) {
+ // if the user has not set an endianess to the rendering
+ // take default
+ int endianess = getDisplayEndianess();
+ if (endianess == RenderingsUtil.ENDIANESS_UNKNOWN)
+ endianess = getBytesEndianess(data);
+ return endianess;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.views.memory.AbstractTableRendering#getBytes(java.lang.String, java.math.BigInteger, org.eclipse.debug.core.model.MemoryByte[], java.lang.String)
+ */
+ public byte[] getBytes(String dataType, BigInteger address,
+ MemoryByte[] currentValues, String data) {
+
+ int endianess = getEndianness(currentValues);
+ byte[] bytes = RenderingsUtil.convertHexStringToByteArray(data, currentValues.length, getNumCharsPerByte());
+
+
+ if (endianess == RenderingsUtil.LITTLE_ENDIAN) {
+ byte[] swapped = new byte[bytes.length];
+ for (int i = 0; i < bytes.length; i++){
+ swapped[bytes.length-i-1] = bytes[i];
+ }
+ bytes = swapped;
+ }
+
+ return bytes;
+ }
+
+ public int getNumCharsPerByte()
+ {
+ return 2;
+ }
+
+
+}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexIntegerRenderingDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexIntegerRenderingDelegate.java
new file mode 100644
index 000000000..8ccbde884
--- /dev/null
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexIntegerRenderingDelegate.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.debug.internal.ui.views.memory.renderings;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.ui.memory.IMemoryRendering;
+import org.eclipse.debug.ui.memory.IMemoryRenderingTypeDelegate;
+
+public class HexIntegerRenderingDelegate implements IMemoryRenderingTypeDelegate {
+
+ public HexIntegerRenderingDelegate() {
+ }
+
+ public IMemoryRendering createRendering(String id) throws CoreException {
+ return new HexIntegerRendering(id);
+ }
+
+}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexRendering.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexRendering.java
index e23db098a..23d0fd727 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexRendering.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexRendering.java
@@ -41,7 +41,7 @@ public class HexRendering extends AbstractAsyncTableRendering {
{
if (data[i].isReadable())
{
- strBuffer.append(new String(convertByteToCharArray(data[i].getValue())));
+ strBuffer.append(new String(RenderingsUtil.convertByteToCharArray(data[i].getValue())));
}
else
{
@@ -58,7 +58,7 @@ public class HexRendering extends AbstractAsyncTableRendering {
*/
public byte[] getBytes(String dataType, BigInteger address,
MemoryByte[] currentValues, String data) {
- byte[] bytes = convertHexStringToByteArray(data, currentValues.length);
+ byte[] bytes = RenderingsUtil.convertHexStringToByteArray(data, currentValues.length, getNumCharsPerByte());
return bytes;
}
@@ -67,86 +67,5 @@ public class HexRendering extends AbstractAsyncTableRendering {
{
return 2;
}
-
- /**
- * byte array to Hex string helper
- * replaces the Integer.toHexString() which can't convert byte values properly
- * (always pads with FFFFFF)
- */
- static public String convertByteArrayToHexString(byte[] byteArray)
- {
- StringBuffer strBuffer = new StringBuffer();
- char charArray[];
-
- for (int i=0; i<byteArray.length;i ++)
- {
- charArray = convertByteToCharArray(byteArray[i]);
- strBuffer.append(charArray);
- }
-
- return strBuffer.toString();
- }
-
- static private char[] convertByteToCharArray(byte aByte)
- {
- char charArray[] = new char[2];
- int val = aByte;
- if (val<0) val += 256;
- charArray[0] = Character.forDigit(val/16, 16);
- charArray[1] = Character.forDigit(val%16, 16);
-
- return charArray;
- }
-
- /**
- * Convert raw memory data to byte array
- * @param str
- * @param numBytes
- * @return an array of byte, converted from a hex string
- * @throws NumberFormatException
- */
- public byte[] convertHexStringToByteArray(String str, int numBytes) throws NumberFormatException
- {
- if (str.length() == 0)
- return null;
-
- StringBuffer buf = new StringBuffer(str);
-
- // pad string with zeros
- int requiredPadding = numBytes * getNumCharsPerByte() - str.length();
- while (requiredPadding > 0) {
- buf.insert(0, "0"); //$NON-NLS-1$
- requiredPadding--;
- }
-
- byte[] bytes = new byte[numBytes];
- str = buf.toString();
-
- // set data in memory
- for (int i=0; i<bytes.length; i++)
- {
- // convert string to byte
- String oneByte = str.substring(i*2, i*2+2);
-
- Integer number = Integer.valueOf(oneByte, 16);
- if (number.compareTo(Integer.valueOf(Byte.toString(Byte.MAX_VALUE))) > 0)
- {
- int temp = number.intValue();
- temp = temp - 256;
-
- String tempStr = Integer.toString(temp);
-
- Byte myByte = Byte.valueOf(tempStr);
- bytes[i] = myByte.byteValue();
- }
- else
- {
- Byte myByte = Byte.valueOf(oneByte, 16);
- bytes[i] = myByte.byteValue();
- }
- }
-
- return bytes;
- }
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/RenderingsUtil.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/RenderingsUtil.java
index 2b806c3f8..686902c59 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/RenderingsUtil.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/RenderingsUtil.java
@@ -494,5 +494,87 @@ public class RenderingsUtil {
buf[j] = new Integer(i>>(1-j)*8).byteValue();
}
return buf;
+ }
+
+ /**
+ * byte array to Hex string helper
+ * replaces the Integer.toHexString() which can't convert byte values properly
+ * (always pads with FFFFFF)
+ */
+ static public String convertByteArrayToHexString(byte[] byteArray)
+ {
+ StringBuffer strBuffer = new StringBuffer();
+ char charArray[];
+
+ for (int i=0; i<byteArray.length;i ++)
+ {
+ charArray = RenderingsUtil.convertByteToCharArray(byteArray[i]);
+ strBuffer.append(charArray);
+ }
+
+ return strBuffer.toString();
+ }
+
+ static public char[] convertByteToCharArray(byte aByte)
+ {
+ char charArray[] = new char[2];
+ int val = aByte;
+ if (val<0) val += 256;
+ charArray[0] = Character.forDigit(val/16, 16);
+ charArray[1] = Character.forDigit(val%16, 16);
+
+ return charArray;
+ }
+
+ /**
+ * Convert raw memory data to byte array
+ * @param str
+ * @param numBytes
+ * @param numCharsPerByte - number of characters per byte of data
+ * @return an array of byte, converted from a hex string
+ * @throws NumberFormatException
+ */
+ public static byte[] convertHexStringToByteArray(String str, int numBytes, int numCharsPerByte) throws NumberFormatException
+ {
+ if (str.length() == 0)
+ return null;
+
+ StringBuffer buf = new StringBuffer(str);
+
+ // pad string with zeros
+ int requiredPadding = numBytes * numCharsPerByte - str.length();
+ while (requiredPadding > 0) {
+ buf.insert(0, "0"); //$NON-NLS-1$
+ requiredPadding--;
+ }
+
+ byte[] bytes = new byte[numBytes];
+ str = buf.toString();
+
+ // set data in memory
+ for (int i=0; i<bytes.length; i++)
+ {
+ // convert string to byte
+ String oneByte = str.substring(i*2, i*2+2);
+
+ Integer number = Integer.valueOf(oneByte, 16);
+ if (number.compareTo(Integer.valueOf(Byte.toString(Byte.MAX_VALUE))) > 0)
+ {
+ int temp = number.intValue();
+ temp = temp - 256;
+
+ String tempStr = Integer.toString(temp);
+
+ Byte myByte = Byte.valueOf(tempStr);
+ bytes[i] = myByte.byteValue();
+ }
+ else
+ {
+ Byte myByte = Byte.valueOf(oneByte, 16);
+ bytes[i] = myByte.byteValue();
+ }
+ }
+
+ return bytes;
}
}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/TableRenderingLine.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/TableRenderingLine.java
index 4ab7cbba5..2c7e30ecd 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/TableRenderingLine.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/TableRenderingLine.java
@@ -81,7 +81,7 @@ public class TableRenderingLine extends PlatformObject {
if (fStrRep == null)
{
StringBuffer buffer = new StringBuffer();
- fStrRep = HexRendering.convertByteArrayToHexString(getByteArray());
+ fStrRep = RenderingsUtil.convertByteArrayToHexString(getByteArray());
fStrRep = fStrRep.toUpperCase();
buffer = buffer.append(fStrRep);

Back to the top