diff --git a/features/org.eclipse.dd.debug.memory.renderings-feature/feature.xml b/features/org.eclipse.dd.debug.memory.renderings-feature/feature.xml
index d99f633af00..7eaf70ffb52 100644
--- a/features/org.eclipse.dd.debug.memory.renderings-feature/feature.xml
+++ b/features/org.eclipse.dd.debug.memory.renderings-feature/feature.xml
@@ -30,4 +30,11 @@ Memory Renderings
version="0.0.0"
unpack="false"/>
+
+
diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ExportMemoryAction.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ExportMemoryAction.java
deleted file mode 100644
index d45c3ba2022..00000000000
--- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ExportMemoryAction.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. 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:
- * Ted R Williams (Wind River Systems, Inc.) - initial implementation
- *******************************************************************************/
-
-package org.eclipse.dd.debug.memory.renderings.actions;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.math.BigInteger;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.debug.core.model.IMemoryBlock;
-import org.eclipse.debug.core.model.IMemoryBlockExtension;
-import org.eclipse.debug.core.model.MemoryByte;
-import org.eclipse.debug.internal.ui.DebugUIPlugin;
-import org.eclipse.debug.internal.ui.views.memory.MemoryView;
-import org.eclipse.debug.internal.ui.views.memory.MemoryViewIdRegistry;
-import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.debug.ui.memory.IMemoryRendering;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
-
-/**
- * Action for exporting memory.
- */
-public class ExportMemoryAction implements IViewActionDelegate {
-
- private MemoryView fView;
-
- public void init(IViewPart view) {
- if (view instanceof MemoryView)
- fView = (MemoryView) view;
- }
-
- public void run(IAction action) {
-
- String secondaryId = MemoryViewIdRegistry
- .getUniqueSecondaryId(IDebugUIConstants.ID_MEMORY_VIEW);
-
- ISelection selection = fView.getSite().getSelectionProvider()
- .getSelection();
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection strucSel = (IStructuredSelection) selection;
-
- // return if current selection is empty
- if (strucSel.isEmpty())
- return;
-
- Object obj = strucSel.getFirstElement();
-
- if (obj == null)
- return;
-
- IMemoryBlock memBlock = null;
-
- if (obj instanceof IMemoryRendering) {
- memBlock = ((IMemoryRendering) obj).getMemoryBlock();
- } else if (obj instanceof IMemoryBlock) {
- memBlock = (IMemoryBlock) obj;
- }
-
- Shell shell = DebugUIPlugin.getShell();
- ExportMemoryDialog dialog = new ExportMemoryDialog(shell, memBlock);
- dialog.open();
-
- Object results[] = dialog.getResult();
-
- if(results != null && results.length == 5)
- {
- String format = (String) results[0];
- BigInteger start = (BigInteger) results[1];
- BigInteger end = (BigInteger) results[2];
- File file = (File) results[4];
-
- if("S-Record".equals(format))
- {
- exportSRecord(file, start, end, (IMemoryBlockExtension) memBlock); // FIXME
- }
- }
- }
-
- }
-
- private void exportSRecord(final File outputFile, final BigInteger startAddress, final BigInteger endAddress, final IMemoryBlockExtension memblock)
- {
- Job job = new Job("Memory Export to S-Record File"){ //$NON-NLS-1$
- public IStatus run(IProgressMonitor monitor) {
-
- try
- {
- try
- {
- // FIXME 4 byte default
-
- BigInteger DATA_PER_RECORD = BigInteger.valueOf(16);
-
- BigInteger transferAddress = startAddress;
-
- FileWriter writer = new FileWriter(outputFile);
-
- BigInteger jobs = endAddress.subtract(transferAddress).divide(DATA_PER_RECORD);
- BigInteger factor = BigInteger.ONE;
- if(jobs.compareTo(BigInteger.valueOf(0x7FFFFFFF)) > 0)
- {
- factor = jobs.divide(BigInteger.valueOf(0x7FFFFFFF));
- jobs = jobs.divide(factor);
- }
-
- monitor.beginTask("Transferring Data", jobs.intValue());
-
- BigInteger jobCount = BigInteger.ZERO;
- while(transferAddress.compareTo(endAddress) < 0 && !monitor.isCanceled())
- {
- BigInteger length = DATA_PER_RECORD;
- if(endAddress.subtract(transferAddress).compareTo(length) < 0)
- length = endAddress.subtract(transferAddress);
-
- writer.write("S3"); // FIXME 4 byte address
-
- StringBuffer buf = new StringBuffer();
-
- BigInteger sRecordLength = BigInteger.valueOf(4); // address size
- sRecordLength = sRecordLength.add(length);
- sRecordLength = sRecordLength.add(BigInteger.ONE); // checksum
-
- String transferAddressString = transferAddress.toString(16);
-
- String lengthString = sRecordLength.toString(16);
- if(lengthString.length() == 1)
- buf.append("0");
- buf.append(lengthString);
- for(int i = 0; i < 8 - transferAddressString.length(); i++)
- buf.append("0");
- buf.append(transferAddressString);
-
- // data
-
- MemoryByte bytes[] = memblock.getBytesFromAddress(transferAddress,
- length.longValue() / memblock.getAddressableSize());
- for(MemoryByte b : bytes)
- {
- String bString = BigInteger.valueOf(0xFF & b.getValue()).toString(16);
- if(bString.length() == 1)
- buf.append("0");
- buf.append(bString);
- }
-
- /*
- * The least significant byte of the one's complement of the sum of the values
- * represented by the pairs of characters making up the records length, address,
- * and the code/data fields.
- */
- byte checksum = 0;
-
- for(int i = 0; i < buf.length(); i+=2)
- {
- BigInteger value = new BigInteger(buf.substring(i, i+2), 16);
- checksum += value.byteValue();
- }
-
- buf.append(BigInteger.valueOf(0xFF - checksum).and(BigInteger.valueOf(0xFF)).toString(16));
-
- writer.write(buf.toString().toUpperCase());
- writer.write("\n");
-
- transferAddress = transferAddress.add(length);
-
- jobCount = jobCount.add(BigInteger.ONE);
- if(jobCount.compareTo(factor) == 0)
- {
- jobCount = BigInteger.ZERO;
- monitor.worked(1);
- }
- }
-
- writer.close();
- monitor.done();
- }
- catch(Exception e) { e.printStackTrace();}
- }
- catch(Exception e) {e.printStackTrace();}
- return Status.OK_STATUS;
- }};
- job.setUser(true);
- job.schedule();
- }
-
- public void selectionChanged(IAction action, ISelection selection) {
-
- }
-
-}
diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ExportMemoryDialog.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ExportMemoryDialog.java
deleted file mode 100644
index 0df1a169e8c..00000000000
--- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ExportMemoryDialog.java
+++ /dev/null
@@ -1,400 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006-2007 Wind River Systems, Inc. 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:
- * Ted R Williams (Wind River Systems, Inc.) - initial implementation
- *******************************************************************************/
-
-package org.eclipse.dd.debug.memory.renderings.actions;
-
-import java.io.File;
-import java.math.BigInteger;
-
-import org.eclipse.debug.core.model.IMemoryBlock;
-import org.eclipse.debug.core.model.IMemoryBlockExtension;
-import org.eclipse.debug.internal.ui.DebugUIPlugin;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.FocusEvent;
-import org.eclipse.swt.events.FocusListener;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.events.VerifyEvent;
-import org.eclipse.swt.events.VerifyListener;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.SelectionDialog;
-
-public class ExportMemoryDialog extends SelectionDialog
-{
-
- private Combo formatCombo;
-
- private IMemoryBlock fMemoryBlock;
-
- private Text startText;
- private Text endText;
- private Text lengthText;
- private Text fileText;
-
- public ExportMemoryDialog(Shell parent, IMemoryBlock memoryBlock)
- {
- super(parent);
- super.setTitle("Export Memory");
- setShellStyle(getShellStyle() | SWT.RESIZE);
-
- fMemoryBlock = memoryBlock;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
- */
- protected void createButtonsForButtonBar(Composite parent) {
- super.createButtonsForButtonBar(parent);
- validate();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.dialogs.SelectionDialog#getResult()
- */
- public Object[] getResult() {
-
- Object[] results = super.getResult();
-
- if (results != null)
- {
- return results;
- }
- return new Object[0];
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
- */
- protected void cancelPressed() {
-
- setResult(null);
-
- super.cancelPressed();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#okPressed()
- */
- protected void okPressed() {
- setSelectionResult(new Object[]{ getFormat(), getStartAddress(), getEndAddress(), getLength(), getFile() });
-
- super.okPressed();
- }
-
- public String getFormat()
- {
- return formatCombo.getItem(formatCombo.getSelectionIndex());
- }
-
- public BigInteger getEndAddress()
- {
- String text = endText.getText();
- boolean hex = text.startsWith("0x");
- BigInteger endAddress = new BigInteger(hex ? text.substring(2) : text,
- hex ? 16 : 10);
-
- return endAddress;
- }
-
- public BigInteger getStartAddress()
- {
- String text = startText.getText();
- boolean hex = text.startsWith("0x");
- BigInteger startAddress = new BigInteger(hex ? text.substring(2) : text,
- hex ? 16 : 10);
-
- return startAddress;
- }
-
- public BigInteger getLength()
- {
- String text = lengthText.getText();
- boolean hex = text.startsWith("0x");
- BigInteger lengthAddress = new BigInteger(hex ? text.substring(2) : text,
- hex ? 16 : 10);
-
- return lengthAddress;
- }
-
- public File getFile()
- {
- return new File(fileText.getText());
- }
-
- private void validate()
- {
- boolean isValid = true;
-
- try
- {
- getEndAddress();
-
- getStartAddress();
-
- BigInteger length = getLength();
-
- if(length.compareTo(BigInteger.ZERO) <= 0)
- isValid = false;
-
- if(!getFile().getParentFile().exists())
- isValid = false;
- }
- catch(Exception e)
- {
- isValid = false;
- }
-
- getButton(IDialogConstants.OK_ID).setEnabled(isValid);
-
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
- */
- protected Control createDialogArea(Composite parent) {
-
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, DebugUIPlugin.getUniqueIdentifier() + ".AddMemoryRenderingDialog_context"); //$NON-NLS-1$ // FIXME
- Composite composite = new Composite(parent, SWT.NONE);
- FormLayout formLayout = new FormLayout();
- formLayout.spacing = 5;
- formLayout.marginWidth = formLayout.marginHeight = 9;
- composite.setLayout(formLayout);
-
- // format
-
- Label textLabel = new Label(composite, SWT.NONE);
- textLabel.setText("Format: ");
-
- formatCombo = new Combo(composite, SWT.BORDER | SWT.READ_ONLY);
-
- FormData data = new FormData();
- data.top = new FormAttachment(formatCombo, 0, SWT.CENTER);
- textLabel.setLayoutData(data);
-
- data = new FormData();
- data.left = new FormAttachment(textLabel);
- formatCombo.setLayoutData(data);
- formatCombo.setItems( new String[] { "S-Record" }); // TODO offer extension point
- formatCombo.select(0);
-
- // start address
-
- Label startLabel = new Label(composite, SWT.NONE);
- startLabel.setText("Start address: ");
- data = new FormData();
- data.top = new FormAttachment(formatCombo);
- startLabel.setLayoutData(data);
-
- startText = new Text(composite, SWT.NONE);
- data = new FormData();
- data.top = new FormAttachment(formatCombo);
- data.left = new FormAttachment(startLabel);
- data.width = 100;
- startText.setLayoutData(data);
-
- // end address
-
- Label endLabel = new Label(composite, SWT.NONE);
- endLabel.setText("End address: ");
- data = new FormData();
- data.top = new FormAttachment(startText, 0, SWT.CENTER);
- data.left = new FormAttachment(startText);
- endLabel.setLayoutData(data);
-
- endText = new Text(composite, SWT.NONE);
- data = new FormData();
- data.top = new FormAttachment(startText, 0, SWT.CENTER);
- data.left = new FormAttachment(endLabel);
- data.width = 100;
- endText.setLayoutData(data);
-
- // length
-
- Label lengthLabel = new Label(composite, SWT.NONE);
- lengthLabel.setText("Length: ");
- data = new FormData();
- data.top = new FormAttachment(startText, 0, SWT.CENTER);
- data.left = new FormAttachment(endText);
- lengthLabel.setLayoutData(data);
-
- lengthText = new Text(composite, SWT.NONE);
- data = new FormData();
- data.top = new FormAttachment(startText, 0, SWT.CENTER);
- data.left = new FormAttachment(lengthLabel);
- data.width = 100;
- lengthText.setLayoutData(data);
-
- // file
-
- Label fileLabel = new Label(composite, SWT.NONE);
- fileText = new Text(composite, SWT.NONE);
- Button fileButton = new Button(composite, SWT.PUSH);
-
- fileLabel.setText("File name: ");
- data = new FormData();
- data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
- fileLabel.setLayoutData(data);
-
- data = new FormData();
- data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
- data.left = new FormAttachment(fileLabel);
- data.width = 300;
- fileText.setLayoutData(data);
-
- fileButton.setText("Browse...");
- data = new FormData();
- data.top = new FormAttachment(lengthText);
- data.left = new FormAttachment(fileText);
- fileButton.setLayoutData(data);
-
- try
- {
- BigInteger startAddress = null;
- if(fMemoryBlock instanceof IMemoryBlockExtension)
- startAddress = ((IMemoryBlockExtension) fMemoryBlock)
- .getBigBaseAddress(); // FIXME use selection/caret address?
- else
- startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
-
- startText.setText("0x" + startAddress.toString(16));
- endText.setText("0x" + startAddress.toString(16));
- lengthText.setText("0");
- }
- catch(Exception e)
- {
- e.printStackTrace();
- // TODO
- }
-
- fileButton.addSelectionListener(new SelectionListener() {
-
- public void widgetDefaultSelected(SelectionEvent e) {
- // TODO Auto-generated method stub
-
- }
-
- public void widgetSelected(SelectionEvent e) {
- FileDialog dialog = new FileDialog(ExportMemoryDialog.this.getShell(), SWT.SAVE);
- dialog.setText("Choose memory export file");
- dialog.setFilterExtensions(new String[] { "*.*" } );
- dialog.setFilterNames(new String[] { "All Files (*.*)" } );
- dialog.setFileName(fileText.getText());
- dialog.open();
-
- if(dialog.getFileName() != null)
- {
- fileText.setText(dialog.getFilterPath() + File.separator + dialog.getFileName());
- }
-
- validate();
- }
-
- });
-
- startText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- boolean valid = true;
- try
- {
- getStartAddress();
- }
- catch(Exception ex)
- {
- valid = false;
- }
-
- startText.setForeground(valid ? Display.getDefault().getSystemColor(SWT.COLOR_BLACK) :
- Display.getDefault().getSystemColor(SWT.COLOR_RED));
-
- //
-
- BigInteger endAddress = getEndAddress();
- BigInteger startAddress = getStartAddress();
-
- lengthText.setText(endAddress.subtract(startAddress).toString());
-
- validate();
- }
-
- });
-
- endText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- try
- {
- getEndAddress();
- endText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
-
- BigInteger endAddress = getEndAddress();
- BigInteger startAddress = getStartAddress();
-
- String lengthString = endAddress.subtract(startAddress).toString();
-
- if(!lengthText.getText().equals(lengthString))
- lengthText.setText(lengthString);
- }
- catch(Exception ex)
- {
- endText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
- }
-
- validate();
- }
-
- });
-
- lengthText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- try
- {
- BigInteger length = getLength();
- lengthText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
- BigInteger startAddress = getStartAddress();
- String endString = "0x" + startAddress.add(length).toString(16);
- if(!endText.getText().equals(endString))
- endText.setText(endString);
- }
- catch(Exception ex)
- {
- lengthText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
- }
-
- validate();
- }
-
- });
-
- fileText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- validate();
- }
- });
-
- return composite;
- }
-
-
-}
diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/FindReplaceDialog.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/FindReplaceDialog.java
index ccc5607cd16..de0a9d3232f 100644
--- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/FindReplaceDialog.java
+++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/FindReplaceDialog.java
@@ -58,30 +58,30 @@ public class FindReplaceDialog extends SelectionDialog
final static int preFetchSize = 10 * 1024;
- private Text findText;
- private Text replaceText;
+ private Text fFindText;
+ private Text fReplaceText;
- private Combo startText;
- private Combo endText;
+ private Combo fStartText;
+ private Combo fEndText;
- private Button findButton;
- private Button replaceButton;
- private Button replaceFindButton;
- private Button replaceAllButton;
- private Button closeButton;
+ private Button fFindButton;
+ private Button fReplaceButton;
+ private Button fReplaceFindButton;
+ private Button fReplaceAllButton;
+ private Button fCloseButton;
private MemoryView fMemoryView;
- Button formatAsciiButton;
- Button formatHexButton;
- Button formatOctalButton;
- Button formatBinaryButton;
- Button formatDecimalButton;
- Button formatByteSequenceButton;
+ Button fFormatAsciiButton;
+ Button fFormatHexButton;
+ Button fFormatOctalButton;
+ Button fFormatBinaryButton;
+ Button fFormatDecimalButton;
+ Button fFormatByteSequenceButton;
- Button caseInSensitiveCheckbox;
+ Button fCaseInSensitiveCheckbox;
- Button forwardButton;
+ Button fForwardButton;
public FindReplaceDialog(Shell parent, IMemoryBlockExtension memoryBlock, MemoryView memoryView)
{
@@ -96,7 +96,7 @@ public class FindReplaceDialog extends SelectionDialog
private BigInteger getUserStart()
{
- String start = startText.getText();
+ String start = fStartText.getText();
if(start.toUpperCase().startsWith("0X")) //$NON-NLS-1$
start = start.substring(2);
return new BigInteger(start, 16);
@@ -104,7 +104,7 @@ public class FindReplaceDialog extends SelectionDialog
private BigInteger getUserEnd()
{
- String end = endText.getText();
+ String end = fEndText.getText();
if(end.toUpperCase().startsWith("0X")) //$NON-NLS-1$
end = end.substring(2);
return new BigInteger(end, 16);
@@ -112,39 +112,39 @@ public class FindReplaceDialog extends SelectionDialog
private boolean getIsDirectionForward()
{
- return forwardButton.getSelection();
+ return fForwardButton.getSelection();
}
private SearchPhrase getSearchPhrase()
{
SearchPhrase phrase = null;
- if(formatAsciiButton.getSelection())
+ if(fFormatAsciiButton.getSelection())
{
- phrase = new AsciiSearchPhrase(findText.getText(), caseInSensitiveCheckbox.getSelection());
+ phrase = new AsciiSearchPhrase(fFindText.getText(), fCaseInSensitiveCheckbox.getSelection());
}
- else if(formatHexButton.getSelection())
+ else if(fFormatHexButton.getSelection())
{
- phrase = new BigIntegerSearchPhrase(new BigInteger(findText.getText().toUpperCase().startsWith("0X")
- ? findText.getText().substring(2) : findText.getText(), 16), 16);
+ phrase = new BigIntegerSearchPhrase(new BigInteger(fFindText.getText().toUpperCase().startsWith("0X")
+ ? fFindText.getText().substring(2) : fFindText.getText(), 16), 16);
}
- else if(formatOctalButton.getSelection())
+ else if(fFormatOctalButton.getSelection())
{
- phrase = new BigIntegerSearchPhrase(new BigInteger(findText.getText().startsWith("0")
- ? findText.getText().substring(1) : findText.getText(), 8), 8);
+ phrase = new BigIntegerSearchPhrase(new BigInteger(fFindText.getText().startsWith("0")
+ ? fFindText.getText().substring(1) : fFindText.getText(), 8), 8);
}
- else if(formatBinaryButton.getSelection())
+ else if(fFormatBinaryButton.getSelection())
{
- phrase = new BigIntegerSearchPhrase(new BigInteger(findText.getText().toUpperCase().startsWith("0B")
- ? findText.getText().substring(2) : findText.getText(), 2), 2);
+ phrase = new BigIntegerSearchPhrase(new BigInteger(fFindText.getText().toUpperCase().startsWith("0B")
+ ? fFindText.getText().substring(2) : fFindText.getText(), 2), 2);
}
- else if(formatDecimalButton.getSelection())
+ else if(fFormatDecimalButton.getSelection())
{
- phrase = new BigIntegerSearchPhrase(new BigInteger(findText.getText(), 10), 10);
+ phrase = new BigIntegerSearchPhrase(new BigInteger(fFindText.getText(), 10), 10);
}
- else if(formatByteSequenceButton.getSelection())
+ else if(fFormatByteSequenceButton.getSelection())
{
- phrase = new ByteSequenceSearchPhrase(findText.getText());
+ phrase = new ByteSequenceSearchPhrase(fFindText.getText());
}
return phrase;
@@ -181,18 +181,18 @@ public class FindReplaceDialog extends SelectionDialog
private byte[] getReplaceData()
{
- if(formatAsciiButton.getSelection())
- return replaceText.getText().getBytes();
- else if(formatHexButton.getSelection())
- return removeZeroPrefixByte(new BigInteger(replaceText.getText().toUpperCase().startsWith("0X") ? replaceText.getText().substring(2) : replaceText.getText(), 16).toByteArray());
- else if(formatOctalButton.getSelection())
- return removeZeroPrefixByte(new BigInteger(replaceText.getText().startsWith("0") ? replaceText.getText().substring(1) : replaceText.getText(), 8).toByteArray());
- else if(formatBinaryButton.getSelection())
- return removeZeroPrefixByte(new BigInteger(replaceText.getText().toUpperCase().startsWith("0B") ? replaceText.getText().substring(2) : replaceText.getText(), 2).toByteArray());
- else if(formatDecimalButton.getSelection())
- return removeZeroPrefixByte(new BigInteger(replaceText.getText(), 10).toByteArray());
- else if(formatByteSequenceButton.getSelection())
- return parseByteSequence(replaceText.getText());
+ if(fFormatAsciiButton.getSelection())
+ return fReplaceText.getText().getBytes();
+ else if(fFormatHexButton.getSelection())
+ return removeZeroPrefixByte(new BigInteger(fReplaceText.getText().toUpperCase().startsWith("0X") ? fReplaceText.getText().substring(2) : fReplaceText.getText(), 16).toByteArray());
+ else if(fFormatOctalButton.getSelection())
+ return removeZeroPrefixByte(new BigInteger(fReplaceText.getText().startsWith("0") ? fReplaceText.getText().substring(1) : fReplaceText.getText(), 8).toByteArray());
+ else if(fFormatBinaryButton.getSelection())
+ return removeZeroPrefixByte(new BigInteger(fReplaceText.getText().toUpperCase().startsWith("0B") ? fReplaceText.getText().substring(2) : fReplaceText.getText(), 2).toByteArray());
+ else if(fFormatDecimalButton.getSelection())
+ return removeZeroPrefixByte(new BigInteger(fReplaceText.getText(), 10).toByteArray());
+ else if(fFormatByteSequenceButton.getSelection())
+ return parseByteSequence(fReplaceText.getText());
return new byte[0];
}
@@ -201,8 +201,8 @@ public class FindReplaceDialog extends SelectionDialog
* @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
*/
protected void createButtonsForButtonBar(Composite parent) {
- findButton = createButton(parent, 10, Messages.getString("FindReplaceDialog.ButtonFind"), true); //$NON-NLS-1$
- findButton.addSelectionListener(new SelectionListener()
+ fFindButton = createButton(parent, 10, Messages.getString("FindReplaceDialog.ButtonFind"), true); //$NON-NLS-1$
+ fFindButton.addSelectionListener(new SelectionListener()
{
public void widgetDefaultSelected(SelectionEvent e) { }
@@ -212,8 +212,8 @@ public class FindReplaceDialog extends SelectionDialog
}
});
- replaceFindButton = createButton(parent, 11, Messages.getString("FindReplaceDialog.ButtonReplaceFind"), false); //$NON-NLS-1$
- replaceFindButton.addSelectionListener(new SelectionListener()
+ fReplaceFindButton = createButton(parent, 11, Messages.getString("FindReplaceDialog.ButtonReplaceFind"), false); //$NON-NLS-1$
+ fReplaceFindButton.addSelectionListener(new SelectionListener()
{
public void widgetDefaultSelected(SelectionEvent e) { }
@@ -223,8 +223,8 @@ public class FindReplaceDialog extends SelectionDialog
}
});
- replaceButton = createButton(parent, 12, Messages.getString("FindReplaceDialog.ButtonReplace"), false); //$NON-NLS-1$
- replaceButton.addSelectionListener(new SelectionListener()
+ fReplaceButton = createButton(parent, 12, Messages.getString("FindReplaceDialog.ButtonReplace"), false); //$NON-NLS-1$
+ fReplaceButton.addSelectionListener(new SelectionListener()
{
public void widgetDefaultSelected(SelectionEvent e) { }
@@ -234,8 +234,8 @@ public class FindReplaceDialog extends SelectionDialog
}
});
- replaceAllButton = createButton(parent, 13, Messages.getString("FindReplaceDialog.ButtonReplaceAll"), false); //$NON-NLS-1$
- replaceAllButton.addSelectionListener(new SelectionListener()
+ fReplaceAllButton = createButton(parent, 13, Messages.getString("FindReplaceDialog.ButtonReplaceAll"), false); //$NON-NLS-1$
+ fReplaceAllButton.addSelectionListener(new SelectionListener()
{
public void widgetDefaultSelected(SelectionEvent e) { }
@@ -245,7 +245,7 @@ public class FindReplaceDialog extends SelectionDialog
}
});
- closeButton = createButton(parent, IDialogConstants.CANCEL_ID, Messages.getString("FindReplaceDialog.Close"), false); //$NON-NLS-1$
+ fCloseButton = createButton(parent, IDialogConstants.CANCEL_ID, Messages.getString("FindReplaceDialog.Close"), false); //$NON-NLS-1$
((GridLayout) parent.getLayout()).numColumns = 2;
@@ -287,7 +287,7 @@ public class FindReplaceDialog extends SelectionDialog
public BigInteger getEndAddress()
{
- String text = endText.getText();
+ String text = fEndText.getText();
boolean hex = text.startsWith("0x"); //$NON-NLS-1$
BigInteger endAddress = new BigInteger(hex ? text.substring(2) : text,
hex ? 16 : 10);
@@ -297,7 +297,7 @@ public class FindReplaceDialog extends SelectionDialog
public BigInteger getStartAddress()
{
- String text = startText.getText();
+ String text = fStartText.getText();
boolean hex = text.startsWith("0x"); //$NON-NLS-1$
BigInteger startAddress = new BigInteger(hex ? text.substring(2) : text,
hex ? 16 : 10);
@@ -325,10 +325,10 @@ public class FindReplaceDialog extends SelectionDialog
}
- findButton.setEnabled(valid);
- replaceButton.setEnabled(replaceValid);
- replaceFindButton.setEnabled(replaceValid);
- replaceAllButton.setEnabled(replaceValid);
+ fFindButton.setEnabled(valid);
+ fReplaceButton.setEnabled(replaceValid);
+ fReplaceFindButton.setEnabled(replaceValid);
+ fReplaceAllButton.setEnabled(replaceValid);
}
private String pad(int characterCount, String value)
@@ -451,32 +451,32 @@ public class FindReplaceDialog extends SelectionDialog
Label findLabel = new Label(composite, SWT.NONE);
Label replaceLabel = new Label(composite, SWT.NONE);
- replaceText = new Text(composite, SWT.BORDER);
+ fReplaceText = new Text(composite, SWT.BORDER);
findLabel.setText(Messages.getString("FindReplaceDialog.LabelFind")); //$NON-NLS-1$
- findText = new Text(composite, SWT.BORDER);
+ fFindText = new Text(composite, SWT.BORDER);
FormData data = new FormData();
- data.left = new FormAttachment(replaceText, 0, SWT.LEFT);
+ data.left = new FormAttachment(fReplaceText, 0, SWT.LEFT);
data.width = 260;
- findText.setLayoutData(data);
+ fFindText.setLayoutData(data);
data = new FormData();
- data.top = new FormAttachment(findText, 0, SWT.CENTER);
+ data.top = new FormAttachment(fFindText, 0, SWT.CENTER);
findLabel.setLayoutData(data);
// replace
replaceLabel.setText(Messages.getString("FindReplaceDialog.LabelReplaceWith")); //$NON-NLS-1$
data = new FormData();
- data.top = new FormAttachment(findText);
+ data.top = new FormAttachment(fFindText);
replaceLabel.setLayoutData(data);
data = new FormData();
data.top = new FormAttachment(replaceLabel, 0, SWT.CENTER);
data.left = new FormAttachment(replaceLabel);
data.width = 260;
- replaceText.setLayoutData(data);
+ fReplaceText.setLayoutData(data);
// group direction
@@ -489,13 +489,13 @@ public class FindReplaceDialog extends SelectionDialog
layout.numColumns = 1;
directionGroup.setLayout(layout);
- forwardButton = new Button(directionGroup, SWT.RADIO);
- forwardButton.setText(Messages.getString("FindReplaceDialog.ButtonForward")); //$NON-NLS-1$
+ fForwardButton = new Button(directionGroup, SWT.RADIO);
+ fForwardButton.setText(Messages.getString("FindReplaceDialog.ButtonForward")); //$NON-NLS-1$
Button backwardButton = new Button(directionGroup, SWT.RADIO);
backwardButton.setText(Messages.getString("FindReplaceDialog.ButtonBackward")); //$NON-NLS-1$
data = new FormData();
- data.top = new FormAttachment(replaceText);
+ data.top = new FormAttachment(fReplaceText);
data.right = new FormAttachment(formatGroup, 0, SWT.RIGHT);
data.left = new FormAttachment(formatGroup, 0, SWT.LEFT);
data.bottom = new FormAttachment(rangeGroup, 0, SWT.BOTTOM);
@@ -515,32 +515,32 @@ public class FindReplaceDialog extends SelectionDialog
Label startLabel = new Label(rangeGroup, SWT.NONE);
startLabel.setText(Messages.getString("FindReplaceDialog.LabelStartAddress")); //$NON-NLS-1$
- startText = new Combo(rangeGroup, SWT.BORDER);
+ fStartText = new Combo(rangeGroup, SWT.BORDER);
GridData gridData = new GridData();
gridData.widthHint = 200;
gridData.grabExcessHorizontalSpace = true;
- startText.setLayoutData(gridData);
+ fStartText.setLayoutData(gridData);
// group range - end address
Label endLabel = new Label(rangeGroup, SWT.NONE);
endLabel.setText(Messages.getString("FindReplaceDialog.LabelEndAddress")); //$NON-NLS-1$
- endText = new Combo(rangeGroup, SWT.BORDER);
+ fEndText = new Combo(rangeGroup, SWT.BORDER);
gridData = new GridData();
gridData.widthHint = 200;
gridData.grabExcessHorizontalSpace = true;
- endText.setLayoutData(gridData);
+ fEndText.setLayoutData(gridData);
data = new FormData();
data.left = new FormAttachment(directionGroup);
data.top = new FormAttachment(directionGroup, 0, SWT.TOP);
- data.right = new FormAttachment(findText, 0, SWT.RIGHT);
+ data.right = new FormAttachment(fFindText, 0, SWT.RIGHT);
rangeGroup.setLayoutData(data);
- startText.setItems(removeNullElements(new String[] { getViewportStart(), getStart(), getEnd(), getMemoryBlockBaseAddress() }));
- endText.setItems(removeNullElements(new String[] { getEnd(), getStart(), getMemoryBlockBaseAddress(), getViewportStart() }));
- startText.select(0);
- endText.select(0);
+ fStartText.setItems(removeNullElements(new String[] { getViewportStart(), getStart(), getEnd(), getMemoryBlockBaseAddress() }));
+ fEndText.setItems(removeNullElements(new String[] { getEnd(), getStart(), getMemoryBlockBaseAddress(), getViewportStart() }));
+ fStartText.select(0);
+ fEndText.select(0);
// format group
@@ -549,23 +549,23 @@ public class FindReplaceDialog extends SelectionDialog
layout.numColumns = 1;
formatGroup.setLayout(layout);
- formatAsciiButton = new Button(formatGroup, SWT.RADIO);
- formatAsciiButton.setText(Messages.getString("FindReplaceDialog.ButtonASCII")); //$NON-NLS-1$
+ fFormatAsciiButton = new Button(formatGroup, SWT.RADIO);
+ fFormatAsciiButton.setText(Messages.getString("FindReplaceDialog.ButtonASCII")); //$NON-NLS-1$
- formatHexButton = new Button(formatGroup, SWT.RADIO);
- formatHexButton.setText(Messages.getString("FindReplaceDialog.ButtonHexadecimal")); //$NON-NLS-1$
+ fFormatHexButton = new Button(formatGroup, SWT.RADIO);
+ fFormatHexButton.setText(Messages.getString("FindReplaceDialog.ButtonHexadecimal")); //$NON-NLS-1$
- formatOctalButton = new Button(formatGroup, SWT.RADIO);
- formatOctalButton.setText(Messages.getString("FindReplaceDialog.ButtonOctal")); //$NON-NLS-1$
+ fFormatOctalButton = new Button(formatGroup, SWT.RADIO);
+ fFormatOctalButton.setText(Messages.getString("FindReplaceDialog.ButtonOctal")); //$NON-NLS-1$
- formatBinaryButton = new Button(formatGroup, SWT.RADIO);
- formatBinaryButton.setText(Messages.getString("FindReplaceDialog.ButtonBinary")); //$NON-NLS-1$
+ fFormatBinaryButton = new Button(formatGroup, SWT.RADIO);
+ fFormatBinaryButton.setText(Messages.getString("FindReplaceDialog.ButtonBinary")); //$NON-NLS-1$
- formatDecimalButton = new Button(formatGroup, SWT.RADIO);
- formatDecimalButton.setText(Messages.getString("FindReplaceDialog.ButtonDecimal")); //$NON-NLS-1$
+ fFormatDecimalButton = new Button(formatGroup, SWT.RADIO);
+ fFormatDecimalButton.setText(Messages.getString("FindReplaceDialog.ButtonDecimal")); //$NON-NLS-1$
- formatByteSequenceButton = new Button(formatGroup, SWT.RADIO);
- formatByteSequenceButton.setText(Messages.getString("FindReplaceDialog.ButtonByteSequence")); //$NON-NLS-1$
+ fFormatByteSequenceButton = new Button(formatGroup, SWT.RADIO);
+ fFormatByteSequenceButton.setText(Messages.getString("FindReplaceDialog.ButtonByteSequence")); //$NON-NLS-1$
data = new FormData();
data.top = new FormAttachment(rangeGroup);
@@ -594,15 +594,15 @@ public class FindReplaceDialog extends SelectionDialog
wrapCheckbox.setText(Messages.getString("FindReplaceDialog.ButtonWrapSearch")); //$NON-NLS-1$
wrapCheckbox.setEnabled(false); // TODO implement wrap
- caseInSensitiveCheckbox = new Button(optionsGroup, SWT.CHECK);
- caseInSensitiveCheckbox.setText(Messages.getString("FindReplaceDialog.ButtonCaseInsensitive")); //$NON-NLS-1$
+ fCaseInSensitiveCheckbox = new Button(optionsGroup, SWT.CHECK);
+ fCaseInSensitiveCheckbox.setText(Messages.getString("FindReplaceDialog.ButtonCaseInsensitive")); //$NON-NLS-1$
- formatAsciiButton.addSelectionListener(new SelectionListener()
+ fFormatAsciiButton.addSelectionListener(new SelectionListener()
{
public void widgetDefaultSelected(SelectionEvent e) { }
public void widgetSelected(SelectionEvent e) {
- caseInSensitiveCheckbox.setEnabled(true);
+ fCaseInSensitiveCheckbox.setEnabled(true);
}
});
@@ -611,16 +611,16 @@ public class FindReplaceDialog extends SelectionDialog
public void widgetDefaultSelected(SelectionEvent e) { }
public void widgetSelected(SelectionEvent e) {
- caseInSensitiveCheckbox.setEnabled(false);
+ fCaseInSensitiveCheckbox.setEnabled(false);
}
};
- formatHexButton.addSelectionListener(nonAsciiListener);
- formatOctalButton.addSelectionListener(nonAsciiListener);
- formatBinaryButton.addSelectionListener(nonAsciiListener);
- formatDecimalButton.addSelectionListener(nonAsciiListener);
- formatByteSequenceButton.addSelectionListener(nonAsciiListener);
+ fFormatHexButton.addSelectionListener(nonAsciiListener);
+ fFormatOctalButton.addSelectionListener(nonAsciiListener);
+ fFormatBinaryButton.addSelectionListener(nonAsciiListener);
+ fFormatDecimalButton.addSelectionListener(nonAsciiListener);
+ fFormatByteSequenceButton.addSelectionListener(nonAsciiListener);
- startText.addModifyListener(new ModifyListener() {
+ fStartText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
boolean valid = true;
try
@@ -632,7 +632,7 @@ public class FindReplaceDialog extends SelectionDialog
valid = false;
}
- startText.setForeground(valid ? Display.getDefault().getSystemColor(SWT.COLOR_BLACK) :
+ fStartText.setForeground(valid ? Display.getDefault().getSystemColor(SWT.COLOR_BLACK) :
Display.getDefault().getSystemColor(SWT.COLOR_RED));
validate();
@@ -640,16 +640,16 @@ public class FindReplaceDialog extends SelectionDialog
});
- endText.addModifyListener(new ModifyListener() {
+ fEndText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
try
{
getEndAddress();
- endText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
+ fEndText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
}
catch(Exception ex)
{
- endText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ fEndText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
}
validate();
@@ -657,33 +657,33 @@ public class FindReplaceDialog extends SelectionDialog
});
- findText.addModifyListener(new ModifyListener() {
+ fFindText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e)
{
validate();
}
});
- replaceText.addModifyListener(new ModifyListener() {
+ fReplaceText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e)
{
validate();
}
});
- forwardButton.setSelection(true);
- formatAsciiButton.setSelection(true);
+ fForwardButton.setSelection(true);
+ fFormatAsciiButton.setSelection(true);
composite.setTabList(new Control[] {
- findText,
- replaceText,
+ fFindText,
+ fReplaceText,
directionGroup,
rangeGroup,
formatGroup,
optionsGroup,
});
- findText.setFocus();
+ fFindText.setFocus();
return composite;
}
diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ImportMemoryAction.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ImportMemoryAction.java
deleted file mode 100644
index d69b2f7fdd6..00000000000
--- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ImportMemoryAction.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007 Wind River Systems, Inc. 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:
- * Ted R Williams (Wind River Systems, Inc.) - initial implementation
- *******************************************************************************/
-
-package org.eclipse.dd.debug.memory.renderings.actions;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-import java.math.BigInteger;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.dd.debug.memory.renderings.traditional.TraditionalRenderingPlugin;
-import org.eclipse.debug.core.model.IMemoryBlock;
-import org.eclipse.debug.core.model.IMemoryBlockExtension;
-import org.eclipse.debug.internal.ui.DebugUIPlugin;
-import org.eclipse.debug.internal.ui.views.memory.MemoryView;
-import org.eclipse.debug.internal.ui.views.memory.MemoryViewIdRegistry;
-import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.debug.ui.memory.IMemoryRendering;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IViewActionDelegate;
-import org.eclipse.ui.IViewPart;
-
-/**
- * Action for downloading memory.
- */
-public class ImportMemoryAction implements IViewActionDelegate {
-
-
- private MemoryView fView;
-
- public void init(IViewPart view) {
- if (view instanceof MemoryView)
- fView = (MemoryView) view;
- }
-
- public void run(IAction action) {
-
- String secondaryId = MemoryViewIdRegistry
- .getUniqueSecondaryId(IDebugUIConstants.ID_MEMORY_VIEW);
-
- ISelection selection = fView.getSite().getSelectionProvider()
- .getSelection();
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection strucSel = (IStructuredSelection) selection;
-
- // return if current selection is empty
- if (strucSel.isEmpty())
- return;
-
- Object obj = strucSel.getFirstElement();
-
- if (obj == null)
- return;
-
- IMemoryBlock memBlock = null;
-
- if (obj instanceof IMemoryRendering) {
- memBlock = ((IMemoryRendering) obj).getMemoryBlock();
- } else if (obj instanceof IMemoryBlock) {
- memBlock = (IMemoryBlock) obj;
- }
-
- Shell shell = DebugUIPlugin.getShell();
- ImportMemoryDialog dialog = new ImportMemoryDialog(shell, memBlock);
- dialog.open();
-
- Object results[] = dialog.getResult();
-
- if(results != null && results.length == 4)
- {
- String format = (String) results[0];
- Boolean useCustomAddress = (Boolean) results[1];
- BigInteger start = (BigInteger) results[2];
- File file = (File) results[3];
-
- if("S-Record".equals(format)) //$NON-NLS-1$
- {
- downloadSRecord(file, start, useCustomAddress.booleanValue(), (IMemoryBlockExtension) memBlock); // FIXME
- }
- }
- }
-
- }
-
- private void downloadSRecord(final File inputFile, final BigInteger startAddress, final boolean useCustomAddress, final IMemoryBlockExtension memblock)
- {
- Job job = new Job("Memory Download from S-Record File"){ //$NON-NLS-1$
- @Override
- public IStatus run(IProgressMonitor monitor) {
-
- try
- {
- try
- {
- // FIXME 4 byte default
-
- final int CHECKSUM_LENGTH = 1;
-
- BigInteger offset = null;
- if(!useCustomAddress)
- offset = BigInteger.ZERO;
-
- BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile)));
-
- BigInteger jobs = BigInteger.valueOf(inputFile.length());
- BigInteger factor = BigInteger.ONE;
- if(jobs.compareTo(BigInteger.valueOf(0x7FFFFFFF)) > 0)
- {
- factor = jobs.divide(BigInteger.valueOf(0x7FFFFFFF));
- jobs = jobs.divide(factor);
- }
-
- monitor.beginTask("Transferring Data", jobs.intValue()); //$NON-NLS-1$
-
- BigInteger jobCount = BigInteger.ZERO;
- String line = reader.readLine();
- while(line != null && !monitor.isCanceled())
- {
- String recordType = line.substring(0, 2);
- int recordCount = Integer.parseInt(line.substring(2, 4), 16);
- int bytesRead = 4 + recordCount;
- int position = 4;
- int addressSize = 0;
-
- BigInteger recordAddress = null;
-
- if("S3".equals(recordType)) //$NON-NLS-1$
- addressSize = 4;
- else if("S1".equals(recordType)) //$NON-NLS-1$
- addressSize = 2;
- else if("S2".equals(recordType)) //$NON-NLS-1$
- addressSize = 3;
-
- recordAddress = new BigInteger(line.substring(position, position + addressSize * 2), 16);
- recordCount -= addressSize;
- position += addressSize * 2;
-
- if(offset == null)
- offset = startAddress.subtract(recordAddress);
-
- recordAddress = recordAddress.add(offset);
-
- byte data[] = new byte[recordCount - CHECKSUM_LENGTH];
- for(int i = 0; i < data.length; i++)
- {
- data[i] = new BigInteger(line.substring(position++, position++ + 1), 16).byteValue();
- }
-
- /*
- * The least significant byte of the one's complement of the sum of the values
- * represented by the pairs of characters making up the records length, address,
- * and the code/data fields.
- */
- StringBuffer buf = new StringBuffer(line.substring(2));
- byte checksum = 0;
-
- for(int i = 0; i < buf.length(); i+=2)
- {
- BigInteger value = new BigInteger(buf.substring(i, i+2), 16);
- checksum += value.byteValue();
- }
-
- /*
- * Since we included the checksum in the checksum calculation the checksum
- * ( if correct ) will always be 0xFF which is -1 using the signed byte size
- * calculation here.
- */
- if ( checksum != (byte) -1 ) {
- reader.close();
- monitor.done();
- return new Status( IStatus.ERROR, TraditionalRenderingPlugin.getUniqueIdentifier(), "Checksum failure of line = " + line); //$NON-NLS-1$
- }
-
- // FIXME error on incorrect checksum
-
- memblock.setValue(recordAddress.subtract(memblock.getBigBaseAddress()), data);
-
- jobCount = jobCount.add(BigInteger.valueOf(bytesRead));
- while(jobCount.compareTo(factor) >= 0)
- {
- jobCount = jobCount.subtract(factor);
- monitor.worked(1);
- }
-
- line = reader.readLine();
- }
-
- reader.close();
- monitor.done();
- }
- catch(Exception e) { e.printStackTrace();}
- }
- catch(Exception e) {e.printStackTrace();}
- return Status.OK_STATUS;
- }};
- job.setUser(true);
- job.schedule();
- }
-
- public void selectionChanged(IAction action, ISelection selection) {
-
- }
-
-}
diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ImportMemoryDialog.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ImportMemoryDialog.java
deleted file mode 100644
index bfbf83a9d11..00000000000
--- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/actions/ImportMemoryDialog.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006-2007 Wind River Systems, Inc. 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:
- * Ted R Williams (Wind River Systems, Inc.) - initial implementation
- *******************************************************************************/
-
-package org.eclipse.dd.debug.memory.renderings.actions;
-
-import java.io.File;
-import java.math.BigInteger;
-
-import javax.swing.ButtonGroup;
-
-import org.eclipse.debug.core.model.IMemoryBlock;
-import org.eclipse.debug.core.model.IMemoryBlockExtension;
-import org.eclipse.debug.internal.ui.DebugUIPlugin;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.SelectionDialog;
-
-public class ImportMemoryDialog extends SelectionDialog
-{
-
- private Combo formatCombo;
-
- private IMemoryBlock fMemoryBlock;
-
- private Text startText;
- private Text fileText;
-
- private Button comboRestoreToThisAddress;
- private Button comboRestoreToFileAddress;
-
- public ImportMemoryDialog(Shell parent, IMemoryBlock memoryBlock)
- {
- super(parent);
- super.setTitle("Download to Memory");
- setShellStyle(getShellStyle() | SWT.RESIZE);
-
- fMemoryBlock = memoryBlock;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
- */
- protected void createButtonsForButtonBar(Composite parent) {
- super.createButtonsForButtonBar(parent);
- validate();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.dialogs.SelectionDialog#getResult()
- */
- public Object[] getResult() {
-
- Object[] results = super.getResult();
-
- if (results != null)
- {
- return results;
- }
- return new Object[0];
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
- */
- protected void cancelPressed() {
-
- setResult(null);
-
- super.cancelPressed();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#okPressed()
- */
- protected void okPressed() {
- setSelectionResult(new Object[]{ getFormat(), new Boolean(comboRestoreToThisAddress.getSelection()),
- getStartAddress(), getFile() });
-
- super.okPressed();
- }
-
- public String getFormat()
- {
- return formatCombo.getItem(formatCombo.getSelectionIndex());
- }
-
- public BigInteger getStartAddress()
- {
- String text = startText.getText();
- boolean hex = text.startsWith("0x");
- BigInteger startAddress = new BigInteger(hex ? text.substring(2) : text,
- hex ? 16 : 10);
-
- return startAddress;
- }
-
- public File getFile()
- {
- return new File(fileText.getText());
- }
-
- private void validate()
- {
- boolean isValid = true;
-
- try
- {
- getStartAddress();
- }
- catch(Exception e)
- {
- isValid = false;
- }
-
- getButton(IDialogConstants.OK_ID).setEnabled(isValid);
-
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
- */
- protected Control createDialogArea(Composite parent) {
-
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, DebugUIPlugin.getUniqueIdentifier() + ".AddMemoryRenderingDialog_context"); //$NON-NLS-1$ // FIXME
- Composite composite = new Composite(parent, SWT.NONE);
- FormLayout formLayout = new FormLayout();
- formLayout.spacing = 5;
- formLayout.marginWidth = formLayout.marginHeight = 9;
- composite.setLayout(formLayout);
-
- // format
-
- Label textLabel = new Label(composite, SWT.NONE);
- textLabel.setText("Format: ");
-
- formatCombo = new Combo(composite, SWT.BORDER | SWT.READ_ONLY);
-
- FormData data = new FormData();
- data.top = new FormAttachment(formatCombo, 0, SWT.CENTER);
- textLabel.setLayoutData(data);
-
- data = new FormData();
- data.left = new FormAttachment(textLabel);
- formatCombo.setLayoutData(data);
- formatCombo.setItems( new String[] { "S-Record" }); // TODO offer extension point
- formatCombo.select(0);
-
- // restore to file address
-
- comboRestoreToFileAddress = new Button(composite, SWT.RADIO);
- comboRestoreToFileAddress.setText("Restore to address specified in the file");
- data = new FormData();
- data.top = new FormAttachment(formatCombo);
- comboRestoreToFileAddress.setLayoutData(data);
-
- // restore to this address
-
- comboRestoreToThisAddress = new Button(composite, SWT.RADIO);
- comboRestoreToThisAddress.setText("Restore to this address: ");
- data = new FormData();
- data.top = new FormAttachment(comboRestoreToFileAddress);
- comboRestoreToThisAddress.setLayoutData(data);
-
- startText = new Text(composite, SWT.NONE);
- data = new FormData();
- data.top = new FormAttachment(comboRestoreToFileAddress);
- data.left = new FormAttachment(comboRestoreToThisAddress);
- data.width = 100;
- startText.setLayoutData(data);
-
- // file
-
- Label fileLabel = new Label(composite, SWT.NONE);
- fileText = new Text(composite, SWT.NONE);
- Button fileButton = new Button(composite, SWT.PUSH);
-
- fileLabel.setText("File name: ");
- data = new FormData();
- data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
- fileLabel.setLayoutData(data);
-
- data = new FormData();
- data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
- data.left = new FormAttachment(fileLabel);
- data.width = 300;
- fileText.setLayoutData(data);
-
- fileButton.setText("Browse...");
- data = new FormData();
- data.top = new FormAttachment(startText);
- data.left = new FormAttachment(fileText);
- fileButton.setLayoutData(data);
-
- try
- {
- BigInteger startAddress = null;
- if(fMemoryBlock instanceof IMemoryBlockExtension)
- startAddress = ((IMemoryBlockExtension) fMemoryBlock)
- .getBigBaseAddress(); // FIXME use selection/caret address?
- else
- startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
-
- startText.setText("0x" + startAddress.toString(16));
- }
- catch(Exception e)
- {
- e.printStackTrace();
- // TODO
- }
-
- fileButton.addSelectionListener(new SelectionListener() {
-
- public void widgetDefaultSelected(SelectionEvent e) {
- // TODO Auto-generated method stub
-
- }
-
- public void widgetSelected(SelectionEvent e) {
- FileDialog dialog = new FileDialog(ImportMemoryDialog.this.getShell(), SWT.SAVE);
- dialog.setText("Choose memory export file");
- dialog.setFilterExtensions(new String[] { "*.*" } );
- dialog.setFilterNames(new String[] { "All Files (*.*)" } );
- dialog.setFileName(fileText.getText());
- dialog.open();
-
- if(dialog.getFileName() != null)
- {
- fileText.setText(dialog.getFilterPath() + File.separator + dialog.getFileName());
- }
-
- validate();
- }
-
- });
-
- startText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- boolean valid = true;
- try
- {
- getStartAddress();
- }
- catch(Exception ex)
- {
- valid = false;
- }
-
- startText.setForeground(valid ? Display.getDefault().getSystemColor(SWT.COLOR_BLACK) :
- Display.getDefault().getSystemColor(SWT.COLOR_RED));
-
- //
-
- validate();
- }
-
- });
- fileText.addModifyListener(new ModifyListener() {
- public void modifyText(ModifyEvent e) {
- validate();
- }
- });
-
- return composite;
- }
-
-
-}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/.classpath b/plugins/org.eclipse.dd.debug.ui.memory.transport/.classpath
new file mode 100644
index 00000000000..2fbb7a23e12
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/.project b/plugins/org.eclipse.dd.debug.ui.memory.transport/.project
new file mode 100644
index 00000000000..b1da30811d6
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/.project
@@ -0,0 +1,28 @@
+
+
+ org.eclipse.dd.debug.ui.memory.transport
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.dd.debug.ui.memory.transport/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..b51d4342d8d
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+#Fri May 09 21:44:48 PDT 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/META-INF/MANIFEST.MF b/plugins/org.eclipse.dd.debug.ui.memory.transport/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..457f0bad69f
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Memory Transport Plug-in
+Bundle-SymbolicName: org.eclipse.dd.debug.ui.memory.transport;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Localization: plugin
+Bundle-Vendor: Eclipse.org
+Require-Bundle: org.eclipse.debug.core,
+ org.eclipse.debug.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.swt,
+ org.eclipse.jface,
+ org.eclipse.ui
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.dd.debug.ui.memory.transport.MemoryTransportPlugin
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/about.html b/plugins/org.eclipse.dd.debug.ui.memory.transport/about.html
new file mode 100644
index 00000000000..cb740ae8bc8
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/about.html
@@ -0,0 +1,24 @@
+
+
+
+
+About
+About This Content
+
+June 5, 2007
+License
+
+The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at http://www.eclipse.org/legal/epl-v10.html.
+For purposes of the EPL, "Program" will mean the Content.
+
+If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at http://www.eclipse.org.
+
+
\ No newline at end of file
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/build.properties b/plugins/org.eclipse.dd.debug.ui.memory.transport/build.properties
new file mode 100644
index 00000000000..e14f8a09223
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/build.properties
@@ -0,0 +1,8 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ schema/,\
+ plugin.xml,\
+ build.properties,\
+ plugin.properties
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/icons/export.png b/plugins/org.eclipse.dd.debug.ui.memory.transport/icons/export.png
new file mode 100644
index 00000000000..91b2198825c
Binary files /dev/null and b/plugins/org.eclipse.dd.debug.ui.memory.transport/icons/export.png differ
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/icons/import.png b/plugins/org.eclipse.dd.debug.ui.memory.transport/icons/import.png
new file mode 100644
index 00000000000..fa02317c7fd
Binary files /dev/null and b/plugins/org.eclipse.dd.debug.ui.memory.transport/icons/import.png differ
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/plugin.properties b/plugins/org.eclipse.dd.debug.ui.memory.transport/plugin.properties
new file mode 100644
index 00000000000..1ce59a6a290
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/plugin.properties
@@ -0,0 +1,2 @@
+ExportMemoryAction.label=Export
+ImportMemoryAction.label=Import
\ No newline at end of file
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/plugin.xml b/plugins/org.eclipse.dd.debug.ui.memory.transport/plugin.xml
new file mode 100644
index 00000000000..27317e78ac8
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/plugin.xml
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/schema/MemoryTransport.exsd b/plugins/org.eclipse.dd.debug.ui.memory.transport/schema/MemoryTransport.exsd
new file mode 100644
index 00000000000..341130f5831
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/schema/MemoryTransport.exsd
@@ -0,0 +1,160 @@
+
+
+
+
+
+
+
+
+ Allows plug-ins to contribute arbitrary memory importers and exporters.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.0.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ /*******************************************************************************
+ * Copyright (c) 2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+
+
+
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/ExportMemoryDialog.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/ExportMemoryDialog.java
new file mode 100644
index 00000000000..f0f45a56c94
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/ExportMemoryDialog.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport;
+
+import java.util.Properties;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.dd.debug.ui.memory.transport.model.IMemoryExporter;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IMemoryBlock;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.SelectionDialog;
+
+public class ExportMemoryDialog extends SelectionDialog
+{
+
+ private Combo fFormatCombo;
+
+ private IMemoryBlock fMemoryBlock;
+
+ private Control fCurrentControl = null;
+
+ private IMemoryExporter fFormatExporters[];
+ private String fFormatNames[];
+
+ private Properties fProperties = new Properties();
+
+ public ExportMemoryDialog(Shell parent, IMemoryBlock memoryBlock)
+ {
+ super(parent);
+ super.setTitle("Export Memory");
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+
+ fMemoryBlock = memoryBlock;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+ */
+ protected void createButtonsForButtonBar(Composite parent) {
+ super.createButtonsForButtonBar(parent);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.dialogs.SelectionDialog#getResult()
+ */
+ public Object[] getResult() {
+
+ Object[] results = super.getResult();
+
+ if (results != null)
+ {
+ return results;
+ }
+ return new Object[0];
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
+ */
+ protected void cancelPressed() {
+
+ setResult(null);
+
+ super.cancelPressed();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+ */
+ protected void okPressed() {
+ if(fCurrentControl != null)
+ fCurrentControl.dispose();
+ fFormatExporters[fFormatCombo.getSelectionIndex()].exportMemory();
+
+ super.okPressed();
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
+ protected Control createDialogArea(Composite parent) {
+
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, DebugUIPlugin.getUniqueIdentifier() + ".AddMemoryRenderingDialog_context"); //$NON-NLS-1$ // FIXME
+ Composite composite = new Composite(parent, SWT.NONE);
+ FormLayout formLayout = new FormLayout();
+ formLayout.spacing = 5;
+ formLayout.marginWidth = formLayout.marginHeight = 9;
+ composite.setLayout(formLayout);
+
+ // format
+
+ Label textLabel = new Label(composite, SWT.NONE);
+ textLabel.setText("Format: ");
+
+ fFormatCombo = new Combo(composite, SWT.BORDER | SWT.READ_ONLY);
+
+ FormData data = new FormData();
+ data.top = new FormAttachment(fFormatCombo, 0, SWT.CENTER);
+ textLabel.setLayoutData(data);
+
+ data = new FormData();
+ data.left = new FormAttachment(textLabel);
+ fFormatCombo.setLayoutData(data);
+
+ Vector exporters = new Vector();
+
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IExtensionPoint extensionPoint =
+ registry.getExtensionPoint("org.eclipse.dd.debug.ui.memory.transport.memoryTransport");
+ IConfigurationElement points[] =
+ extensionPoint.getConfigurationElements();
+
+ for (int i = 0; i < points.length; i++)
+ {
+ IConfigurationElement element = points[i];
+ if("exporter".equals(element.getName()))
+ {
+ try
+ {
+ exporters.addElement((IMemoryExporter) element.createExecutableExtension("class"));
+ }
+ catch(Exception e) {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+ }
+ }
+
+ fFormatExporters = new IMemoryExporter[exporters.size()];
+ fFormatNames = new String[exporters.size()];
+ for(int i = 0; i < fFormatExporters.length; i++)
+ {
+ fFormatExporters[i] = (IMemoryExporter) exporters.elementAt(i);
+ fFormatNames[i] = ((IMemoryExporter) exporters.elementAt(i)).getName();
+ }
+
+ final Composite container = new Composite(composite, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(fFormatCombo);
+ data.left = new FormAttachment(0);
+ container.setLayoutData(data);
+
+ fFormatCombo.setItems(fFormatNames);
+
+ fFormatCombo.addSelectionListener(new SelectionListener(){
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ if(fCurrentControl != null)
+ fCurrentControl.dispose();
+ fCurrentControl = fFormatExporters[fFormatCombo.getSelectionIndex()].createControl(container,
+ fMemoryBlock, fProperties, ExportMemoryDialog.this);
+ }
+ });
+
+
+ fFormatCombo.select(0);
+ fCurrentControl = fFormatExporters[0].createControl(container,
+ fMemoryBlock, fProperties, ExportMemoryDialog.this);
+
+ return composite;
+ }
+
+ public void setValid(boolean isValid)
+ {
+ getButton(IDialogConstants.OK_ID).setEnabled(isValid);
+ }
+
+}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/ImportMemoryDialog.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/ImportMemoryDialog.java
new file mode 100644
index 00000000000..392e2dc6a14
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/ImportMemoryDialog.java
@@ -0,0 +1,205 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport;
+
+import java.util.Properties;
+import java.util.Vector;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.dd.debug.ui.memory.transport.model.IMemoryExporter;
+import org.eclipse.dd.debug.ui.memory.transport.model.IMemoryImporter;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IMemoryBlock;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.SelectionDialog;
+
+public class ImportMemoryDialog extends SelectionDialog
+{
+
+ private Combo fFormatCombo;
+
+ private IMemoryBlock fMemoryBlock;
+
+ private Control fCurrentControl = null;
+
+ private IMemoryImporter fFormatImporters[];
+ private String fFormatNames[];
+
+ private Properties fProperties = new Properties();
+
+ public ImportMemoryDialog(Shell parent, IMemoryBlock memoryBlock)
+ {
+ super(parent);
+ super.setTitle("Download to Memory");
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+
+ fMemoryBlock = memoryBlock;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+ */
+ protected void createButtonsForButtonBar(Composite parent) {
+ super.createButtonsForButtonBar(parent);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.dialogs.SelectionDialog#getResult()
+ */
+ public Object[] getResult() {
+
+ Object[] results = super.getResult();
+
+ if (results != null)
+ {
+ return results;
+ }
+ return new Object[0];
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
+ */
+ protected void cancelPressed() {
+
+ setResult(null);
+
+ super.cancelPressed();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+ */
+ protected void okPressed() {
+ if(fCurrentControl != null)
+ fCurrentControl.dispose();
+ fFormatImporters[fFormatCombo.getSelectionIndex()].importMemory();
+
+ super.okPressed();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
+ protected Control createDialogArea(Composite parent) {
+
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, DebugUIPlugin.getUniqueIdentifier() + ".AddMemoryRenderingDialog_context"); //$NON-NLS-1$ // FIXME
+ Composite composite = new Composite(parent, SWT.NONE);
+ FormLayout formLayout = new FormLayout();
+ formLayout.spacing = 5;
+ formLayout.marginWidth = formLayout.marginHeight = 9;
+ composite.setLayout(formLayout);
+
+ // format
+
+ Label textLabel = new Label(composite, SWT.NONE);
+ textLabel.setText("Format: ");
+
+ fFormatCombo = new Combo(composite, SWT.BORDER | SWT.READ_ONLY);
+
+ FormData data = new FormData();
+ data.top = new FormAttachment(fFormatCombo, 0, SWT.CENTER);
+ textLabel.setLayoutData(data);
+
+ data = new FormData();
+ data.left = new FormAttachment(textLabel);
+ fFormatCombo.setLayoutData(data);
+
+ Vector importers = new Vector();
+
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IExtensionPoint extensionPoint =
+ registry.getExtensionPoint("org.eclipse.dd.debug.ui.memory.transport.memoryTransport");
+ IConfigurationElement points[] =
+ extensionPoint.getConfigurationElements();
+
+ for (int i = 0; i < points.length; i++)
+ {
+ IConfigurationElement element = points[i];
+ if("importer".equals(element.getName()))
+ {
+ try
+ {
+ importers.addElement((IMemoryImporter) element.createExecutableExtension("class"));
+ }
+ catch(Exception e) {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+ }
+ }
+
+ fFormatImporters = new IMemoryImporter[importers.size()];
+ fFormatNames = new String[importers.size()];
+ for(int i = 0; i < fFormatImporters.length; i++)
+ {
+ fFormatImporters[i] = (IMemoryImporter) importers.elementAt(i);
+ fFormatNames[i] = ((IMemoryImporter) importers.elementAt(i)).getName();
+ }
+
+ final Composite container = new Composite(composite, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(fFormatCombo);
+ data.left = new FormAttachment(0);
+ container.setLayoutData(data);
+
+ fFormatCombo.setItems(fFormatNames);
+
+ fFormatCombo.addSelectionListener(new SelectionListener(){
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ if(fCurrentControl != null)
+ fCurrentControl.dispose();
+ fCurrentControl = fFormatImporters[fFormatCombo.getSelectionIndex()].createControl(container,
+ fMemoryBlock, fProperties, ImportMemoryDialog.this);
+ }
+ });
+
+
+ fFormatCombo.select(0);
+ fCurrentControl = fFormatImporters[0].createControl(container,
+ fMemoryBlock, fProperties, ImportMemoryDialog.this);
+
+ return composite;
+ }
+
+ public void setValid(boolean isValid)
+ {
+ getButton(IDialogConstants.OK_ID).setEnabled(isValid);
+ }
+
+
+}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/MemoryTransportPlugin.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/MemoryTransportPlugin.java
new file mode 100644
index 00000000000..10f6c6e0ea0
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/MemoryTransportPlugin.java
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+public class MemoryTransportPlugin extends AbstractUIPlugin
+{
+ private static final String PLUGIN_ID = "org.eclipse.dd.debug.ui.memory.transport"; //$NON-NLS-1$
+
+ private static MemoryTransportPlugin plugin;
+
+ public MemoryTransportPlugin()
+ {
+ super();
+ plugin = this;
+ }
+
+ /**
+ * Returns the shared instance.
+ */
+ public static MemoryTransportPlugin getDefault() {
+ return plugin;
+ }
+
+ /**
+ * Returns the unique identifier for this plugin.
+ */
+ public static String getUniqueIdentifier() {
+ return PLUGIN_ID;
+ }
+}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/Messages.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/Messages.java
new file mode 100644
index 00000000000..d10158d2367
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/Messages.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2007-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+public class Messages {
+ private static final String BUNDLE_NAME = "org.eclipse.dd.debug.ui.memory.transport.messages"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
+ .getBundle(BUNDLE_NAME);
+
+ private Messages() {
+ }
+
+ public static String getString(String key) {
+ try {
+ return RESOURCE_BUNDLE.getString(key);
+ } catch (MissingResourceException e) {
+ return '!' + key + '!';
+ }
+ }
+}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/PlainTextExporter.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/PlainTextExporter.java
new file mode 100644
index 00000000000..d4f5191448c
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/PlainTextExporter.java
@@ -0,0 +1,467 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.math.BigInteger;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.dd.debug.ui.memory.transport.model.IMemoryExporter;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IMemoryBlock;
+import org.eclipse.debug.core.model.IMemoryBlockExtension;
+import org.eclipse.debug.core.model.MemoryByte;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class PlainTextExporter implements IMemoryExporter {
+
+ File fOutputFile;
+ BigInteger fStartAddress;
+ BigInteger fEndAddress;
+
+ private Text fStartText;
+ private Text fEndText;
+ private Text fLengthText;
+ private Text fFileText;
+
+ private IMemoryBlock fMemoryBlock;
+
+ private ExportMemoryDialog fParentDialog;
+
+ private Properties fProperties;
+
+ public Control createControl(final Composite parent, IMemoryBlock memBlock, Properties properties, ExportMemoryDialog parentDialog)
+ {
+ fMemoryBlock = memBlock;
+ fParentDialog = parentDialog;
+ fProperties = properties;
+
+ Composite composite = new Composite(parent, SWT.NONE)
+ {
+ public void dispose()
+ {
+ fProperties.setProperty(TRANSFER_FILE, fFileText.getText());
+ fProperties.setProperty(TRANSFER_START, fStartText.getText());
+ fProperties.setProperty(TRANSFER_END, fEndText.getText());
+
+ fStartAddress = getStartAddress();
+ fEndAddress = getEndAddress();
+ fOutputFile = getFile();
+
+ super.dispose();
+ }
+ };
+
+ FormLayout formLayout = new FormLayout();
+ formLayout.spacing = 5;
+ formLayout.marginWidth = formLayout.marginHeight = 9;
+ composite.setLayout(formLayout);
+
+ // start address
+
+ Label startLabel = new Label(composite, SWT.NONE);
+ startLabel.setText("Start address: ");
+ FormData data = new FormData();
+ startLabel.setLayoutData(data);
+
+ fStartText = new Text(composite, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(startLabel);
+ data.left = new FormAttachment(startLabel);
+ data.width = 100;
+ fStartText.setLayoutData(data);
+
+ // end address
+
+ Label endLabel = new Label(composite, SWT.NONE);
+ endLabel.setText("End address: ");
+ data = new FormData();
+ data.top = new FormAttachment(fStartText, 0, SWT.CENTER);
+ data.left = new FormAttachment(fStartText);
+ endLabel.setLayoutData(data);
+
+ fEndText = new Text(composite, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(fStartText, 0, SWT.CENTER);
+ data.left = new FormAttachment(endLabel);
+ data.width = 100;
+ fEndText.setLayoutData(data);
+
+ // length
+
+ Label lengthLabel = new Label(composite, SWT.NONE);
+ lengthLabel.setText("Length: ");
+ data = new FormData();
+ data.top = new FormAttachment(fStartText, 0, SWT.CENTER);
+ data.left = new FormAttachment(fEndText);
+ lengthLabel.setLayoutData(data);
+
+ fLengthText = new Text(composite, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(fStartText, 0, SWT.CENTER);
+ data.left = new FormAttachment(lengthLabel);
+ data.width = 100;
+ fLengthText.setLayoutData(data);
+
+ // file
+
+ Label fileLabel = new Label(composite, SWT.NONE);
+ fFileText = new Text(composite, SWT.NONE);
+ Button fileButton = new Button(composite, SWT.PUSH);
+
+ fileLabel.setText("File name: ");
+ data = new FormData();
+ data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
+ fileLabel.setLayoutData(data);
+
+ data = new FormData();
+ data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
+ data.left = new FormAttachment(fileLabel);
+ data.width = 300;
+ fFileText.setLayoutData(data);
+
+ fileButton.setText("Browse...");
+ data = new FormData();
+ data.top = new FormAttachment(fLengthText);
+ data.left = new FormAttachment(fFileText);
+ fileButton.setLayoutData(data);
+
+
+ fFileText.setText(properties.getProperty(TRANSFER_FILE, ""));
+ try
+ {
+ BigInteger startAddress = null;
+ if(fMemoryBlock instanceof IMemoryBlockExtension)
+ startAddress = ((IMemoryBlockExtension) fMemoryBlock)
+ .getBigBaseAddress(); // FIXME use selection/caret address?
+ else
+ startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
+
+ if(properties.getProperty(TRANSFER_START) != null)
+ fStartText.setText(properties.getProperty(TRANSFER_START));
+ else
+ fStartText.setText("0x" + startAddress.toString(16));
+
+ if(properties.getProperty(TRANSFER_END) != null)
+ fEndText.setText(properties.getProperty(TRANSFER_END));
+ else
+ fEndText.setText("0x" + startAddress.toString(16));
+
+ fLengthText.setText(getEndAddress().subtract(getStartAddress()).toString());
+ }
+ catch(Exception e)
+ {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+
+ fileButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ FileDialog dialog = new FileDialog(parent.getShell(), SWT.SAVE);
+ dialog.setText("Choose memory export file");
+ dialog.setFilterExtensions(new String[] { "*.*" } );
+ dialog.setFilterNames(new String[] { "All Files (*.*)" } );
+ dialog.setFileName(fFileText.getText());
+ dialog.open();
+
+ if(dialog.getFileName() != null)
+ {
+ fFileText.setText(dialog.getFilterPath() + File.separator + dialog.getFileName());
+ }
+
+ validate();
+ }
+
+ });
+
+ fStartText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ boolean valid = true;
+ try
+ {
+ getStartAddress();
+ }
+ catch(Exception ex)
+ {
+ valid = false;
+ }
+
+ fStartText.setForeground(valid ? Display.getDefault().getSystemColor(SWT.COLOR_BLACK) :
+ Display.getDefault().getSystemColor(SWT.COLOR_RED));
+
+ //
+
+ BigInteger endAddress = getEndAddress();
+ BigInteger startAddress = getStartAddress();
+
+ fLengthText.setText(endAddress.subtract(startAddress).toString());
+
+ validate();
+ }
+
+ });
+
+ fEndText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ try
+ {
+ getEndAddress();
+ fEndText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
+
+ BigInteger endAddress = getEndAddress();
+ BigInteger startAddress = getStartAddress();
+
+ String lengthString = endAddress.subtract(startAddress).toString();
+
+ if(!fLengthText.getText().equals(lengthString))
+ fLengthText.setText(lengthString);
+ }
+ catch(Exception ex)
+ {
+ fEndText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ }
+
+ validate();
+ }
+
+ });
+
+ fLengthText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ try
+ {
+ BigInteger length = getLength();
+ fLengthText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
+ BigInteger startAddress = getStartAddress();
+ String endString = "0x" + startAddress.add(length).toString(16);
+ if(!fEndText.getText().equals(endString))
+ fEndText.setText(endString);
+ }
+ catch(Exception ex)
+ {
+ fLengthText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ }
+
+ validate();
+ }
+
+ });
+
+ fFileText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ validate();
+ }
+ });
+
+ composite.pack();
+
+ return composite;
+ }
+
+ public BigInteger getEndAddress()
+ {
+ String text = fEndText.getText();
+ boolean hex = text.startsWith("0x");
+ BigInteger endAddress = new BigInteger(hex ? text.substring(2) : text,
+ hex ? 16 : 10);
+
+ return endAddress;
+ }
+
+ public BigInteger getStartAddress()
+ {
+ String text = fStartText.getText();
+ boolean hex = text.startsWith("0x");
+ BigInteger startAddress = new BigInteger(hex ? text.substring(2) : text,
+ hex ? 16 : 10);
+
+ return startAddress;
+ }
+
+ public BigInteger getLength()
+ {
+ String text = fLengthText.getText();
+ boolean hex = text.startsWith("0x");
+ BigInteger lengthAddress = new BigInteger(hex ? text.substring(2) : text,
+ hex ? 16 : 10);
+
+ return lengthAddress;
+ }
+
+ public File getFile()
+ {
+ return new File(fFileText.getText());
+ }
+
+ private void validate()
+ {
+ boolean isValid = true;
+
+ try
+ {
+ getEndAddress();
+
+ getStartAddress();
+
+ BigInteger length = getLength();
+
+ if(length.compareTo(BigInteger.ZERO) <= 0)
+ isValid = false;
+
+ if(!getFile().getParentFile().exists())
+ isValid = false;
+ }
+ catch(Exception e)
+ {
+ isValid = false;
+ }
+
+ fParentDialog.setValid(isValid);
+
+ }
+
+ public String getId()
+ {
+ return "PlainTextExporter";
+ }
+
+ public String getName()
+ {
+ return "Plain Text";
+ }
+
+ public void exportMemory() {
+ Job job = new Job("Memory Export to S-Record File"){ //$NON-NLS-1$
+ public IStatus run(IProgressMonitor monitor) {
+
+ try
+ {
+ try
+ {
+ // FIXME 4 byte default
+
+ BigInteger CELLSIZE = BigInteger.valueOf(4);
+
+ BigInteger COLUMNS = BigInteger.valueOf(5); // FIXME
+
+ BigInteger DATA_PER_LINE = CELLSIZE.multiply(COLUMNS);
+
+ BigInteger transferAddress = fStartAddress;
+
+ FileWriter writer = new FileWriter(fOutputFile);
+
+ BigInteger jobs = fEndAddress.subtract(transferAddress).divide(DATA_PER_LINE);
+ BigInteger factor = BigInteger.ONE;
+ if(jobs.compareTo(BigInteger.valueOf(0x7FFFFFFF)) > 0)
+ {
+ factor = jobs.divide(BigInteger.valueOf(0x7FFFFFFF));
+ jobs = jobs.divide(factor);
+ }
+
+ monitor.beginTask("Transferring Data", jobs.intValue());
+
+ BigInteger jobCount = BigInteger.ZERO;
+ while(transferAddress.compareTo(fEndAddress) < 0 && !monitor.isCanceled())
+ {
+ BigInteger length = DATA_PER_LINE;
+ if(fEndAddress.subtract(transferAddress).compareTo(length) < 0)
+ length = fEndAddress.subtract(transferAddress);
+
+ StringBuffer buf = new StringBuffer();
+
+// String transferAddressString = transferAddress.toString(16);
+
+ // future option
+// for(int i = 0; i < 8 - transferAddressString.length(); i++)
+// buf.append("0");
+// buf.append(transferAddressString);
+// buf.append(" "); // TODO tab?
+
+ // data
+
+ for(int i = 0; i < length.divide(CELLSIZE).intValue(); i++)
+ {
+ if(i != 0)
+ buf.append(" ");
+ MemoryByte bytes[] = ((IMemoryBlockExtension) fMemoryBlock).getBytesFromAddress(
+ transferAddress.add(CELLSIZE.multiply(BigInteger.valueOf(i))),
+ CELLSIZE.longValue() / ((IMemoryBlockExtension) fMemoryBlock).getAddressableSize());
+ for(int byteIndex = 0; byteIndex < bytes.length; byteIndex++)
+ {
+ String bString = BigInteger.valueOf(0xFF & bytes[byteIndex].getValue()).toString(16);
+ if(bString.length() == 1)
+ buf.append("0");
+ buf.append(bString);
+ }
+ }
+
+ writer.write(buf.toString().toUpperCase());
+ writer.write("\n");
+
+ transferAddress = transferAddress.add(length);
+
+ jobCount = jobCount.add(BigInteger.ONE);
+ if(jobCount.compareTo(factor) == 0)
+ {
+ jobCount = BigInteger.ZERO;
+ monitor.worked(1);
+ }
+ }
+
+ writer.close();
+ monitor.done();
+ }
+ catch(Exception e)
+ {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+ }
+ catch(Exception e)
+ {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+ return Status.OK_STATUS;
+ }};
+ job.setUser(true);
+ job.schedule();
+ }
+}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/PlainTextImporter.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/PlainTextImporter.java
new file mode 100644
index 00000000000..23692b72e83
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/PlainTextImporter.java
@@ -0,0 +1,347 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.math.BigInteger;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.dd.debug.ui.memory.transport.model.IMemoryImporter;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IMemoryBlock;
+import org.eclipse.debug.core.model.IMemoryBlockExtension;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class PlainTextImporter implements IMemoryImporter {
+
+ File fInputFile;
+ BigInteger fStartAddress;
+ boolean fUseCustomAddress;
+ Boolean fScrollToStart;
+
+ private Text fStartText;
+ private Text fFileText;
+
+// private Button fComboRestoreToThisAddress;
+// private Button fComboRestoreToFileAddress;
+
+ private Button fScrollToBeginningOnImportComplete;
+
+ private IMemoryBlock fMemoryBlock;
+
+ private ImportMemoryDialog fParentDialog;
+
+ private Properties fProperties;
+
+ public Control createControl(final Composite parent, IMemoryBlock memBlock, Properties properties, ImportMemoryDialog parentDialog)
+ {
+ fMemoryBlock = memBlock;
+ fParentDialog = parentDialog;
+ fProperties = properties;
+
+ fUseCustomAddress = true;
+
+ Composite composite = new Composite(parent, SWT.NONE)
+ {
+ public void dispose()
+ {
+ fProperties.setProperty(TRANSFER_FILE, fFileText.getText());
+ fProperties.setProperty(TRANSFER_START, fStartText.getText());
+ fProperties.setProperty(TRANSFER_SCROLL_TO_START, fScrollToStart.toString());
+
+ fStartAddress = getStartAddress();
+ fInputFile = getFile();
+
+ super.dispose();
+ }
+ };
+ FormLayout formLayout = new FormLayout();
+ formLayout.spacing = 5;
+ formLayout.marginWidth = formLayout.marginHeight = 9;
+ composite.setLayout(formLayout);
+
+// // restore to file address
+//
+// fComboRestoreToFileAddress = new Button(composite, SWT.RADIO);
+// fComboRestoreToFileAddress.setText("Restore to address specified in the file");
+// //comboRestoreToFileAddress.setLayoutData(data);
+//
+// // restore to this address
+//
+// fComboRestoreToThisAddress = new Button(composite, SWT.RADIO);
+// fComboRestoreToThisAddress.setText("Restore to this address: ");
+ FormData data = new FormData();
+// data.top = new FormAttachment(fComboRestoreToFileAddress);
+// fComboRestoreToThisAddress.setLayoutData(data);
+
+ fStartText = new Text(composite, SWT.NONE);
+ data = new FormData();
+// data.top = new FormAttachment(fComboRestoreToFileAddress);
+// data.left = new FormAttachment(fComboRestoreToThisAddress);
+ data.width = 100;
+ fStartText.setLayoutData(data);
+
+ // file
+
+ Label fileLabel = new Label(composite, SWT.NONE);
+ fFileText = new Text(composite, SWT.NONE);
+ Button fileButton = new Button(composite, SWT.PUSH);
+
+ fileLabel.setText("File name: ");
+ data = new FormData();
+ data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
+ fileLabel.setLayoutData(data);
+
+ data = new FormData();
+ data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
+ data.left = new FormAttachment(fileLabel);
+ data.width = 300;
+ fFileText.setLayoutData(data);
+
+ fileButton.setText("Browse...");
+ data = new FormData();
+ data.top = new FormAttachment(fStartText);
+ data.left = new FormAttachment(fFileText);
+ fileButton.setLayoutData(data);
+
+ fFileText.setText(properties.getProperty(TRANSFER_FILE, ""));
+ fScrollToStart = new Boolean(properties.getProperty(TRANSFER_SCROLL_TO_START, "true"));
+ try
+ {
+ BigInteger startAddress = null;
+ if(fMemoryBlock instanceof IMemoryBlockExtension)
+ startAddress = ((IMemoryBlockExtension) fMemoryBlock)
+ .getBigBaseAddress(); // FIXME use selection/caret address?
+ else
+ startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
+
+ if(properties.getProperty(TRANSFER_START) != null)
+ fStartText.setText(properties.getProperty(TRANSFER_START));
+ else
+ fStartText.setText("0x" + startAddress.toString(16));
+
+ }
+ catch(Exception e)
+ {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+
+ fileButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ FileDialog dialog = new FileDialog(parent.getShell(), SWT.SAVE);
+ dialog.setText("Choose memory export file");
+ dialog.setFilterExtensions(new String[] { "*.*" } );
+ dialog.setFilterNames(new String[] { "All Files (*.*)" } );
+ dialog.setFileName(fFileText.getText());
+ dialog.open();
+
+ if(dialog.getFileName() != null)
+ {
+ fFileText.setText(dialog.getFilterPath() + File.separator + dialog.getFileName());
+ }
+
+ validate();
+ }
+
+ });
+
+ fStartText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ boolean valid = true;
+ try
+ {
+ getStartAddress();
+ }
+ catch(Exception ex)
+ {
+ valid = false;
+ }
+
+ fStartText.setForeground(valid ? Display.getDefault().getSystemColor(SWT.COLOR_BLACK) :
+ Display.getDefault().getSystemColor(SWT.COLOR_RED));
+
+ //
+
+ validate();
+ }
+
+ });
+ fFileText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ validate();
+ }
+ });
+
+ fScrollToBeginningOnImportComplete = new Button(composite, SWT.CHECK);
+ fScrollToBeginningOnImportComplete.setText("Scroll to File Start Address");
+ data = new FormData();
+ data.top = new FormAttachment(fileButton);
+ fScrollToBeginningOnImportComplete.setLayoutData(data);
+
+ composite.pack();
+ parent.pack();
+
+ return composite;
+ }
+
+ private void validate()
+ {
+ boolean isValid = true;
+
+ try
+ {
+ getStartAddress();
+ }
+ catch(Exception e)
+ {
+ isValid = false;
+ }
+
+ fParentDialog.setValid(isValid);
+ }
+
+ public boolean getScrollToStart()
+ {
+ return fScrollToBeginningOnImportComplete.getSelection();
+ }
+
+ public BigInteger getStartAddress()
+ {
+ String text = fStartText.getText();
+ boolean hex = text.startsWith("0x");
+ BigInteger startAddress = new BigInteger(hex ? text.substring(2) : text,
+ hex ? 16 : 10);
+
+ return startAddress;
+ }
+
+ public File getFile()
+ {
+ return new File(fFileText.getText());
+ }
+
+ public String getId()
+ {
+ return "PlainTextImporter";
+ }
+
+ public String getName()
+ {
+ return "Plain Text";
+ }
+
+ public void importMemory() {
+ Job job = new Job("Memory Download from Plain Text File"){ //$NON-NLS-1$
+
+ public IStatus run(IProgressMonitor monitor) {
+
+ try
+ {
+ try
+ {
+ BigInteger offset = null;
+ if(!fUseCustomAddress)
+ offset = BigInteger.ZERO;
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fInputFile)));
+
+ BigInteger jobs = BigInteger.valueOf(fInputFile.length());
+ BigInteger factor = BigInteger.ONE;
+ if(jobs.compareTo(BigInteger.valueOf(0x7FFFFFFF)) > 0)
+ {
+ factor = jobs.divide(BigInteger.valueOf(0x7FFFFFFF));
+ jobs = jobs.divide(factor);
+ }
+
+ monitor.beginTask("Transferring Data", jobs.intValue()); //$NON-NLS-1$
+
+ BigInteger jobCount = BigInteger.ZERO;
+ BigInteger recordAddress = fStartAddress;
+ String line = reader.readLine();
+ while(line != null && !monitor.isCanceled())
+ {
+ StringTokenizer st = new StringTokenizer(line, " ");
+ int bytesRead = 0;
+ while(st.hasMoreElements())
+ {
+ String valueString = (String) st.nextElement();
+ int position = 0;
+ byte data[] = new byte[valueString.length() / 2];
+ for(int i = 0; i < data.length; i++)
+ {
+ data[i] = new BigInteger(valueString.substring(position++, position++ + 1), 16).byteValue();
+ }
+
+ ((IMemoryBlockExtension) fMemoryBlock).setValue(recordAddress.subtract(((IMemoryBlockExtension)
+ fMemoryBlock).getBigBaseAddress()).add(BigInteger.valueOf(bytesRead)), data);
+
+ bytesRead += data.length;
+ }
+
+ recordAddress = recordAddress.and(BigInteger.valueOf(bytesRead));
+
+ jobCount = jobCount.add(BigInteger.valueOf(bytesRead));
+ while(jobCount.compareTo(factor) >= 0)
+ {
+ jobCount = jobCount.subtract(factor);
+ monitor.worked(1);
+ }
+
+ line = reader.readLine();
+ }
+
+ reader.close();
+ monitor.done();
+ }
+ catch(Exception e)
+ {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+ }
+ catch(Exception e) {e.printStackTrace();}
+ return Status.OK_STATUS;
+ }};
+ job.setUser(true);
+ job.schedule();
+ }
+}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/SRecordExporter.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/SRecordExporter.java
new file mode 100644
index 00000000000..ba1c44cc3d5
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/SRecordExporter.java
@@ -0,0 +1,479 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.math.BigInteger;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.dd.debug.ui.memory.transport.model.IMemoryExporter;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IMemoryBlock;
+import org.eclipse.debug.core.model.IMemoryBlockExtension;
+import org.eclipse.debug.core.model.MemoryByte;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class SRecordExporter implements IMemoryExporter
+{
+ File fOutputFile;
+ BigInteger fStartAddress;
+ BigInteger fEndAddress;
+
+ private Text fStartText;
+ private Text fEndText;
+ private Text fLengthText;
+ private Text fFileText;
+
+ private IMemoryBlock fMemoryBlock;
+
+ private ExportMemoryDialog fParentDialog;
+
+ private Properties fProperties;
+
+ public Control createControl(final Composite parent, IMemoryBlock memBlock, Properties properties, ExportMemoryDialog parentDialog)
+ {
+ fMemoryBlock = memBlock;
+ fParentDialog = parentDialog;
+ fProperties = properties;
+
+ Composite composite = new Composite(parent, SWT.NONE)
+ {
+ public void dispose()
+ {
+ fProperties.setProperty(TRANSFER_FILE, fFileText.getText());
+ fProperties.setProperty(TRANSFER_START, fStartText.getText());
+ fProperties.setProperty(TRANSFER_END, fEndText.getText());
+
+ fStartAddress = getStartAddress();
+ fEndAddress = getEndAddress();
+ fOutputFile = getFile();
+
+ super.dispose();
+ }
+ };
+ FormLayout formLayout = new FormLayout();
+ formLayout.spacing = 5;
+ formLayout.marginWidth = formLayout.marginHeight = 9;
+ composite.setLayout(formLayout);
+
+ // start address
+
+ Label startLabel = new Label(composite, SWT.NONE);
+ startLabel.setText("Start address: ");
+ FormData data = new FormData();
+ startLabel.setLayoutData(data);
+
+ fStartText = new Text(composite, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(startLabel);
+ data.left = new FormAttachment(startLabel);
+ data.width = 100;
+ fStartText.setLayoutData(data);
+
+ // end address
+
+ Label endLabel = new Label(composite, SWT.NONE);
+ endLabel.setText("End address: ");
+ data = new FormData();
+ data.top = new FormAttachment(fStartText, 0, SWT.CENTER);
+ data.left = new FormAttachment(fStartText);
+ endLabel.setLayoutData(data);
+
+ fEndText = new Text(composite, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(fStartText, 0, SWT.CENTER);
+ data.left = new FormAttachment(endLabel);
+ data.width = 100;
+ fEndText.setLayoutData(data);
+
+ // length
+
+ Label lengthLabel = new Label(composite, SWT.NONE);
+ lengthLabel.setText("Length: ");
+ data = new FormData();
+ data.top = new FormAttachment(fStartText, 0, SWT.CENTER);
+ data.left = new FormAttachment(fEndText);
+ lengthLabel.setLayoutData(data);
+
+ fLengthText = new Text(composite, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(fStartText, 0, SWT.CENTER);
+ data.left = new FormAttachment(lengthLabel);
+ data.width = 100;
+ fLengthText.setLayoutData(data);
+
+ // file
+
+ Label fileLabel = new Label(composite, SWT.NONE);
+ fFileText = new Text(composite, SWT.NONE);
+ Button fileButton = new Button(composite, SWT.PUSH);
+
+ fileLabel.setText("File name: ");
+ data = new FormData();
+ data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
+ fileLabel.setLayoutData(data);
+
+ data = new FormData();
+ data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
+ data.left = new FormAttachment(fileLabel);
+ data.width = 300;
+ fFileText.setLayoutData(data);
+
+ fileButton.setText("Browse...");
+ data = new FormData();
+ data.top = new FormAttachment(fLengthText);
+ data.left = new FormAttachment(fFileText);
+ fileButton.setLayoutData(data);
+
+ fFileText.setText(properties.getProperty(TRANSFER_FILE, ""));
+ try
+ {
+ BigInteger startAddress = null;
+ if(fMemoryBlock instanceof IMemoryBlockExtension)
+ startAddress = ((IMemoryBlockExtension) fMemoryBlock)
+ .getBigBaseAddress(); // FIXME use selection/caret address?
+ else
+ startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
+
+ if(properties.getProperty(TRANSFER_START) != null)
+ fStartText.setText(properties.getProperty(TRANSFER_START));
+ else
+ fStartText.setText("0x" + startAddress.toString(16));
+
+ if(properties.getProperty(TRANSFER_END) != null)
+ fEndText.setText(properties.getProperty(TRANSFER_END));
+ else
+ fEndText.setText("0x" + startAddress.toString(16));
+
+ fLengthText.setText(getEndAddress().subtract(getStartAddress()).toString());
+ }
+ catch(Exception e)
+ {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+
+ fileButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ FileDialog dialog = new FileDialog(parent.getShell(), SWT.SAVE);
+ dialog.setText("Choose memory export file");
+ dialog.setFilterExtensions(new String[] { "*.*" } );
+ dialog.setFilterNames(new String[] { "All Files (*.*)" } );
+ dialog.setFileName(fFileText.getText());
+ dialog.open();
+
+ if(dialog.getFileName() != null)
+ {
+ fFileText.setText(dialog.getFilterPath() + File.separator + dialog.getFileName());
+ }
+
+ validate();
+ }
+
+ });
+
+ fStartText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ boolean valid = true;
+ try
+ {
+ getStartAddress();
+ }
+ catch(Exception ex)
+ {
+ valid = false;
+ }
+
+ fStartText.setForeground(valid ? Display.getDefault().getSystemColor(SWT.COLOR_BLACK) :
+ Display.getDefault().getSystemColor(SWT.COLOR_RED));
+
+ //
+
+ BigInteger endAddress = getEndAddress();
+ BigInteger startAddress = getStartAddress();
+
+ fLengthText.setText(endAddress.subtract(startAddress).toString());
+
+ validate();
+ }
+
+ });
+
+ fEndText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ try
+ {
+ getEndAddress();
+ fEndText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
+
+ BigInteger endAddress = getEndAddress();
+ BigInteger startAddress = getStartAddress();
+
+ String lengthString = endAddress.subtract(startAddress).toString();
+
+ if(!fLengthText.getText().equals(lengthString))
+ fLengthText.setText(lengthString);
+ }
+ catch(Exception ex)
+ {
+ fEndText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ }
+
+ validate();
+ }
+
+ });
+
+ fLengthText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ try
+ {
+ BigInteger length = getLength();
+ fLengthText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
+ BigInteger startAddress = getStartAddress();
+ String endString = "0x" + startAddress.add(length).toString(16);
+ if(!fEndText.getText().equals(endString))
+ fEndText.setText(endString);
+ }
+ catch(Exception ex)
+ {
+ fLengthText.setForeground(Display.getDefault().getSystemColor(SWT.COLOR_RED));
+ }
+
+ validate();
+ }
+
+ });
+
+ fFileText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ validate();
+ }
+ });
+
+ composite.pack();
+
+ return composite;
+ }
+
+ public BigInteger getEndAddress()
+ {
+ String text = fEndText.getText();
+ boolean hex = text.startsWith("0x");
+ BigInteger endAddress = new BigInteger(hex ? text.substring(2) : text,
+ hex ? 16 : 10);
+
+ return endAddress;
+ }
+
+ public BigInteger getStartAddress()
+ {
+ String text = fStartText.getText();
+ boolean hex = text.startsWith("0x");
+ BigInteger startAddress = new BigInteger(hex ? text.substring(2) : text,
+ hex ? 16 : 10);
+
+ return startAddress;
+ }
+
+ public BigInteger getLength()
+ {
+ String text = fLengthText.getText();
+ boolean hex = text.startsWith("0x");
+ BigInteger lengthAddress = new BigInteger(hex ? text.substring(2) : text,
+ hex ? 16 : 10);
+
+ return lengthAddress;
+ }
+
+ public File getFile()
+ {
+ return new File(fFileText.getText());
+ }
+
+ private void validate()
+ {
+ boolean isValid = true;
+
+ try
+ {
+ getEndAddress();
+
+ getStartAddress();
+
+ BigInteger length = getLength();
+
+ if(length.compareTo(BigInteger.ZERO) <= 0)
+ isValid = false;
+
+ if(!getFile().getParentFile().exists())
+ isValid = false;
+ }
+ catch(Exception e)
+ {
+ isValid = false;
+ }
+
+ fParentDialog.setValid(isValid);
+
+ }
+
+
+ public String getId()
+ {
+ return "srecord";
+ }
+
+ public String getName()
+ {
+ return "SRecord";
+ }
+
+ public void exportMemory()
+ {
+ Job job = new Job("Memory Export to S-Record File"){ //$NON-NLS-1$
+ public IStatus run(IProgressMonitor monitor) {
+
+ try
+ {
+ try
+ {
+ // FIXME 4 byte default
+
+ BigInteger DATA_PER_RECORD = BigInteger.valueOf(16);
+
+ BigInteger transferAddress = fStartAddress;
+
+ FileWriter writer = new FileWriter(fOutputFile);
+
+ BigInteger jobs = fEndAddress.subtract(transferAddress).divide(DATA_PER_RECORD);
+ BigInteger factor = BigInteger.ONE;
+ if(jobs.compareTo(BigInteger.valueOf(0x7FFFFFFF)) > 0)
+ {
+ factor = jobs.divide(BigInteger.valueOf(0x7FFFFFFF));
+ jobs = jobs.divide(factor);
+ }
+
+ monitor.beginTask("Transferring Data", jobs.intValue());
+
+ BigInteger jobCount = BigInteger.ZERO;
+ while(transferAddress.compareTo(fEndAddress) < 0 && !monitor.isCanceled())
+ {
+ BigInteger length = DATA_PER_RECORD;
+ if(fEndAddress.subtract(transferAddress).compareTo(length) < 0)
+ length = fEndAddress.subtract(transferAddress);
+
+ writer.write("S3"); // FIXME 4 byte address
+
+ StringBuffer buf = new StringBuffer();
+
+ BigInteger sRecordLength = BigInteger.valueOf(4); // address size
+ sRecordLength = sRecordLength.add(length);
+ sRecordLength = sRecordLength.add(BigInteger.ONE); // checksum
+
+ String transferAddressString = transferAddress.toString(16);
+
+ String lengthString = sRecordLength.toString(16);
+ if(lengthString.length() == 1)
+ buf.append("0");
+ buf.append(lengthString);
+ for(int i = 0; i < 8 - transferAddressString.length(); i++)
+ buf.append("0");
+ buf.append(transferAddressString);
+
+ // data
+
+ MemoryByte bytes[] = ((IMemoryBlockExtension) fMemoryBlock).getBytesFromAddress(transferAddress,
+ length.longValue() / ((IMemoryBlockExtension) fMemoryBlock).getAddressableSize());
+ for(int byteIndex = 0; byteIndex < bytes.length; byteIndex++)
+ {
+ String bString = BigInteger.valueOf(0xFF & bytes[byteIndex].getValue()).toString(16);
+ if(bString.length() == 1)
+ buf.append("0");
+ buf.append(bString);
+ }
+
+ /*
+ * The least significant byte of the one's complement of the sum of the values
+ * represented by the pairs of characters making up the records length, address,
+ * and the code/data fields.
+ */
+ byte checksum = 0;
+
+ for(int i = 0; i < buf.length(); i+=2)
+ {
+ BigInteger value = new BigInteger(buf.substring(i, i+2), 16);
+ checksum += value.byteValue();
+ }
+
+ buf.append(BigInteger.valueOf(0xFF - checksum).and(BigInteger.valueOf(0xFF)).toString(16));
+
+ writer.write(buf.toString().toUpperCase());
+ writer.write("\n");
+
+ transferAddress = transferAddress.add(length);
+
+ jobCount = jobCount.add(BigInteger.ONE);
+ if(jobCount.compareTo(factor) == 0)
+ {
+ jobCount = BigInteger.ZERO;
+ monitor.worked(1);
+ }
+ }
+
+ writer.close();
+ monitor.done();
+ }
+ catch(Exception e)
+ {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+ }
+ catch(Exception e)
+ {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+ return Status.OK_STATUS;
+ }};
+ job.setUser(true);
+ job.schedule();
+ }
+
+}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/SRecordImporter.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/SRecordImporter.java
new file mode 100644
index 00000000000..965cbe2e1e0
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/SRecordImporter.java
@@ -0,0 +1,390 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.math.BigInteger;
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.dd.debug.ui.memory.transport.model.IMemoryImporter;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IMemoryBlock;
+import org.eclipse.debug.core.model.IMemoryBlockExtension;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class SRecordImporter implements IMemoryImporter {
+
+ File fInputFile;
+ BigInteger fStartAddress;
+ boolean fUseCustomAddress;
+ Boolean fScrollToStart;
+
+ private Text fStartText;
+ private Text fFileText;
+
+ private Button fComboRestoreToThisAddress;
+ private Button fComboRestoreToFileAddress;
+
+ private Button fScrollToBeginningOnImportComplete;
+
+ private IMemoryBlock fMemoryBlock;
+
+ private ImportMemoryDialog fParentDialog;
+
+ private Properties fProperties;
+
+ public Control createControl(final Composite parent, IMemoryBlock memBlock, Properties properties, ImportMemoryDialog parentDialog)
+ {
+ fMemoryBlock = memBlock;
+ fParentDialog = parentDialog;
+ fProperties = properties;
+
+ Composite composite = new Composite(parent, SWT.NONE)
+ {
+ public void dispose()
+ {
+ fProperties.setProperty(TRANSFER_FILE, fFileText.getText());
+ fProperties.setProperty(TRANSFER_START, fStartText.getText());
+ fProperties.setProperty(TRANSFER_SCROLL_TO_START, fScrollToStart.toString());
+
+ fStartAddress = getStartAddress();
+ fInputFile = getFile();
+
+ super.dispose();
+ }
+ };
+ FormLayout formLayout = new FormLayout();
+ formLayout.spacing = 5;
+ formLayout.marginWidth = formLayout.marginHeight = 9;
+ composite.setLayout(formLayout);
+
+ // restore to file address
+
+ fComboRestoreToFileAddress = new Button(composite, SWT.RADIO);
+ fComboRestoreToFileAddress.setText("Restore to address specified in the file");
+ //comboRestoreToFileAddress.setLayoutData(data);
+
+ // restore to this address
+
+ fComboRestoreToThisAddress = new Button(composite, SWT.RADIO);
+ fComboRestoreToThisAddress.setText("Restore to this address: ");
+ FormData data = new FormData();
+ data.top = new FormAttachment(fComboRestoreToFileAddress);
+ fComboRestoreToThisAddress.setLayoutData(data);
+
+ fStartText = new Text(composite, SWT.NONE);
+ data = new FormData();
+ data.top = new FormAttachment(fComboRestoreToFileAddress);
+ data.left = new FormAttachment(fComboRestoreToThisAddress);
+ data.width = 100;
+ fStartText.setLayoutData(data);
+
+ // file
+
+ Label fileLabel = new Label(composite, SWT.NONE);
+ fFileText = new Text(composite, SWT.NONE);
+ Button fileButton = new Button(composite, SWT.PUSH);
+
+ fileLabel.setText("File name: ");
+ data = new FormData();
+ data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
+ fileLabel.setLayoutData(data);
+
+ data = new FormData();
+ data.top = new FormAttachment(fileButton, 0, SWT.CENTER);
+ data.left = new FormAttachment(fileLabel);
+ data.width = 300;
+ fFileText.setLayoutData(data);
+
+ fileButton.setText("Browse...");
+ data = new FormData();
+ data.top = new FormAttachment(fStartText);
+ data.left = new FormAttachment(fFileText);
+ fileButton.setLayoutData(data);
+
+ fFileText.setText(properties.getProperty(TRANSFER_FILE, ""));
+ fScrollToStart = new Boolean(properties.getProperty(TRANSFER_SCROLL_TO_START, "true"));
+ try
+ {
+ BigInteger startAddress = null;
+ if(fMemoryBlock instanceof IMemoryBlockExtension)
+ startAddress = ((IMemoryBlockExtension) fMemoryBlock)
+ .getBigBaseAddress(); // FIXME use selection/caret address?
+ else
+ startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
+
+ if(properties.getProperty(TRANSFER_START) != null)
+ fStartText.setText(properties.getProperty(TRANSFER_START));
+ else
+ fStartText.setText("0x" + startAddress.toString(16));
+
+ }
+ catch(Exception e)
+ {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+
+ fileButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ FileDialog dialog = new FileDialog(parent.getShell(), SWT.SAVE);
+ dialog.setText("Choose memory export file");
+ dialog.setFilterExtensions(new String[] { "*.*" } );
+ dialog.setFilterNames(new String[] { "All Files (*.*)" } );
+ dialog.setFileName(fFileText.getText());
+ dialog.open();
+
+ if(dialog.getFileName() != null)
+ {
+ fFileText.setText(dialog.getFilterPath() + File.separator + dialog.getFileName());
+ }
+
+ validate();
+ }
+
+ });
+
+ fStartText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ boolean valid = true;
+ try
+ {
+ getStartAddress();
+ }
+ catch(Exception ex)
+ {
+ valid = false;
+ }
+
+ fStartText.setForeground(valid ? Display.getDefault().getSystemColor(SWT.COLOR_BLACK) :
+ Display.getDefault().getSystemColor(SWT.COLOR_RED));
+
+ //
+
+ validate();
+ }
+
+ });
+ fFileText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ validate();
+ }
+ });
+
+ fScrollToBeginningOnImportComplete = new Button(composite, SWT.CHECK);
+ fScrollToBeginningOnImportComplete.setText("Scroll to File Start Address");
+ data = new FormData();
+ data.top = new FormAttachment(fileButton);
+ fScrollToBeginningOnImportComplete.setLayoutData(data);
+
+ composite.pack();
+ parent.pack();
+
+ return composite;
+ }
+
+ private void validate()
+ {
+ boolean isValid = true;
+
+ try
+ {
+ getStartAddress();
+ }
+ catch(Exception e)
+ {
+ isValid = false;
+ }
+
+ fParentDialog.setValid(isValid);
+ }
+
+ public boolean getScrollToStart()
+ {
+ return fScrollToBeginningOnImportComplete.getSelection();
+ }
+
+ public BigInteger getStartAddress()
+ {
+ String text = fStartText.getText();
+ boolean hex = text.startsWith("0x");
+ BigInteger startAddress = new BigInteger(hex ? text.substring(2) : text,
+ hex ? 16 : 10);
+
+ return startAddress;
+ }
+
+ public File getFile()
+ {
+ return new File(fFileText.getText());
+ }
+
+ public String getId()
+ {
+ return "snfimporter";
+ }
+
+ public String getName()
+ {
+ return "SRecord";
+ }
+
+ public void importMemory() {
+ Job job = new Job("Memory Download from S-Record File"){ //$NON-NLS-1$
+
+ public IStatus run(IProgressMonitor monitor) {
+
+ try
+ {
+ try
+ {
+ // FIXME 4 byte default
+
+ final int CHECKSUM_LENGTH = 1;
+
+ BigInteger offset = null;
+ if(!fUseCustomAddress)
+ offset = BigInteger.ZERO;
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fInputFile)));
+
+ BigInteger jobs = BigInteger.valueOf(fInputFile.length());
+ BigInteger factor = BigInteger.ONE;
+ if(jobs.compareTo(BigInteger.valueOf(0x7FFFFFFF)) > 0)
+ {
+ factor = jobs.divide(BigInteger.valueOf(0x7FFFFFFF));
+ jobs = jobs.divide(factor);
+ }
+
+ monitor.beginTask("Transferring Data", jobs.intValue()); //$NON-NLS-1$
+
+ BigInteger jobCount = BigInteger.ZERO;
+ String line = reader.readLine();
+ while(line != null && !monitor.isCanceled())
+ {
+ String recordType = line.substring(0, 2);
+ int recordCount = Integer.parseInt(line.substring(2, 4), 16);
+ int bytesRead = 4 + recordCount;
+ int position = 4;
+ int addressSize = 0;
+
+ BigInteger recordAddress = null;
+
+ if("S3".equals(recordType)) //$NON-NLS-1$
+ addressSize = 4;
+ else if("S1".equals(recordType)) //$NON-NLS-1$
+ addressSize = 2;
+ else if("S2".equals(recordType)) //$NON-NLS-1$
+ addressSize = 3;
+
+ recordAddress = new BigInteger(line.substring(position, position + addressSize * 2), 16);
+ recordCount -= addressSize;
+ position += addressSize * 2;
+
+ if(offset == null)
+ offset = fStartAddress.subtract(recordAddress);
+
+ recordAddress = recordAddress.add(offset);
+
+ byte data[] = new byte[recordCount - CHECKSUM_LENGTH];
+ for(int i = 0; i < data.length; i++)
+ {
+ data[i] = new BigInteger(line.substring(position++, position++ + 1), 16).byteValue();
+ }
+
+ /*
+ * The least significant byte of the one's complement of the sum of the values
+ * represented by the pairs of characters making up the records length, address,
+ * and the code/data fields.
+ */
+ StringBuffer buf = new StringBuffer(line.substring(2));
+ byte checksum = 0;
+
+ for(int i = 0; i < buf.length(); i+=2)
+ {
+ BigInteger value = new BigInteger(buf.substring(i, i+2), 16);
+ checksum += value.byteValue();
+ }
+
+ /*
+ * Since we included the checksum in the checksum calculation the checksum
+ * ( if correct ) will always be 0xFF which is -1 using the signed byte size
+ * calculation here.
+ */
+ if ( checksum != (byte) -1 ) {
+ reader.close();
+ monitor.done();
+ return new Status( IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(), "Checksum failure of line = " + line); //$NON-NLS-1$
+ }
+
+ // FIXME error on incorrect checksum
+
+ ((IMemoryBlockExtension) fMemoryBlock).setValue(recordAddress.subtract(((IMemoryBlockExtension) fMemoryBlock).getBigBaseAddress()), data);
+
+ jobCount = jobCount.add(BigInteger.valueOf(bytesRead));
+ while(jobCount.compareTo(factor) >= 0)
+ {
+ jobCount = jobCount.subtract(factor);
+ monitor.worked(1);
+ }
+
+ line = reader.readLine();
+ }
+
+ reader.close();
+ monitor.done();
+ }
+ catch(Exception e)
+ {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+ }
+ catch(Exception e)
+ {
+ DebugUIPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
+ DebugException.INTERNAL_ERROR, "Failure", e));
+ }
+ return Status.OK_STATUS;
+ }};
+ job.setUser(true);
+ job.schedule();
+ }
+}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/actions/ExportMemoryAction.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/actions/ExportMemoryAction.java
new file mode 100644
index 00000000000..3ad72347562
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/actions/ExportMemoryAction.java
@@ -0,0 +1,78 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport.actions;
+
+import org.eclipse.dd.debug.ui.memory.transport.ExportMemoryDialog;
+import org.eclipse.debug.core.model.IMemoryBlock;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.internal.ui.views.memory.MemoryView;
+import org.eclipse.debug.internal.ui.views.memory.MemoryViewIdRegistry;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.debug.ui.memory.IMemoryRendering;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+/**
+ * Action for exporting memory.
+ */
+public class ExportMemoryAction implements IViewActionDelegate {
+
+ private MemoryView fView;
+
+ public void init(IViewPart view) {
+ if (view instanceof MemoryView)
+ fView = (MemoryView) view;
+ }
+
+ public void run(IAction action) {
+
+ ISelection selection = fView.getSite().getSelectionProvider()
+ .getSelection();
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection strucSel = (IStructuredSelection) selection;
+
+ // return if current selection is empty
+ if (strucSel.isEmpty())
+ return;
+
+ Object obj = strucSel.getFirstElement();
+
+ if (obj == null)
+ return;
+
+ IMemoryBlock memBlock = null;
+
+ if (obj instanceof IMemoryRendering) {
+ memBlock = ((IMemoryRendering) obj).getMemoryBlock();
+ } else if (obj instanceof IMemoryBlock) {
+ memBlock = (IMemoryBlock) obj;
+ }
+ if(memBlock == null)
+ return;
+
+ ExportMemoryDialog dialog = new ExportMemoryDialog(DebugUIPlugin.getShell(), memBlock);
+ dialog.open();
+
+ dialog.getResult();
+ }
+
+ }
+
+ public void selectionChanged(IAction action, ISelection selection) {
+
+ }
+
+}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/actions/ImportMemoryAction.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/actions/ImportMemoryAction.java
new file mode 100644
index 00000000000..4c87cd3bf4e
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/actions/ImportMemoryAction.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport.actions;
+
+import org.eclipse.dd.debug.ui.memory.transport.ImportMemoryDialog;
+import org.eclipse.debug.core.model.IMemoryBlock;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.internal.ui.views.memory.MemoryView;
+import org.eclipse.debug.internal.ui.views.memory.MemoryViewIdRegistry;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.debug.ui.memory.IMemoryRendering;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+/**
+ * Action for downloading memory.
+ */
+public class ImportMemoryAction implements IViewActionDelegate {
+
+
+ private MemoryView fView;
+
+ public void init(IViewPart view) {
+ if (view instanceof MemoryView)
+ fView = (MemoryView) view;
+ }
+
+ public void run(IAction action) {
+
+ ISelection selection = fView.getSite().getSelectionProvider()
+ .getSelection();
+ if (selection instanceof IStructuredSelection) {
+ IStructuredSelection strucSel = (IStructuredSelection) selection;
+
+ // return if current selection is empty
+ if (strucSel.isEmpty())
+ return;
+
+ Object obj = strucSel.getFirstElement();
+
+ if (obj == null)
+ return;
+
+ IMemoryBlock memBlock = null;
+
+ if (obj instanceof IMemoryRendering) {
+ memBlock = ((IMemoryRendering) obj).getMemoryBlock();
+ } else if (obj instanceof IMemoryBlock) {
+ memBlock = (IMemoryBlock) obj;
+ }
+ if(memBlock == null)
+ return;
+
+ ImportMemoryDialog dialog = new ImportMemoryDialog(DebugUIPlugin.getShell(), memBlock);
+ dialog.open();
+
+ dialog.getResult();
+ }
+
+ }
+
+ public void selectionChanged(IAction action, ISelection selection) {
+
+ }
+
+}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/messages.properties b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/messages.properties
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/model/IMemoryExporter.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/model/IMemoryExporter.java
new file mode 100644
index 00000000000..262cb4ca42f
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/model/IMemoryExporter.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport.model;
+
+import java.util.Properties;
+
+import org.eclipse.dd.debug.ui.memory.transport.ExportMemoryDialog;
+import org.eclipse.debug.core.model.IMemoryBlock;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public interface IMemoryExporter
+{
+ public static final String TRANSFER_FILE = "File";
+ public static final String TRANSFER_START = "Start";
+ public static final String TRANSFER_END = "End";
+
+ public Control createControl(Composite parent, IMemoryBlock memBlock, Properties properties, ExportMemoryDialog parentDialog);
+
+ public void exportMemory();
+
+ public String getId();
+
+ public String getName();
+}
diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/model/IMemoryImporter.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/model/IMemoryImporter.java
new file mode 100644
index 00000000000..cf494524772
--- /dev/null
+++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/model/IMemoryImporter.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2006-2008 Wind River Systems, Inc. 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:
+ * Ted R Williams (Wind River Systems, Inc.) - initial implementation
+ *******************************************************************************/
+
+package org.eclipse.dd.debug.ui.memory.transport.model;
+
+import java.util.Properties;
+
+import org.eclipse.dd.debug.ui.memory.transport.ImportMemoryDialog;
+import org.eclipse.debug.core.model.IMemoryBlock;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public interface IMemoryImporter
+{
+ public static final String TRANSFER_FILE = "File";
+ public static final String TRANSFER_START = "Start";
+ public static final String TRANSFER_END = "End";
+ public static final String TRANSFER_SCROLL_TO_START = "ScrollToStart";
+
+ public Control createControl(Composite parent, IMemoryBlock memBlock, Properties properties, ImportMemoryDialog parentDialog);
+
+ public void importMemory();
+
+ public String getId();
+
+ public String getName();
+}