/******************************************************************************* * Copyright (c) 2000, 2006 QNX Software Systems 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: * QNX Software Systems - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.debug.mi.core.command; import org.eclipse.cdt.debug.mi.core.MIException; import org.eclipse.cdt.debug.mi.core.MIFormat; import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo; import org.eclipse.cdt.debug.mi.core.output.MIInfo; import org.eclipse.cdt.debug.mi.core.output.MIOutput; /** * * -data-read-memory [ -o BYTE-OFFSET ] * ADDRESS WORD-FORMAT WORD-SIZE * NR-ROWS NR-COLS [ ASCHAR ] * * where: * * `ADDRESS' * An expression specifying the address of the first memory word to be * read. Complex expressions containing embedded white space should * be quoted using the C convention. * * `WORD-FORMAT' * The format to be used to print the memory words. The notation is * the same as for GDB's `print' command (*note Output formats: * Output Formats.). * * `WORD-SIZE' * The size of each memory word in bytes. * * `NR-ROWS' * The number of rows in the output table. * * `NR-COLS' * The number of columns in the output table. * * `ASCHAR' * If present, indicates that each row should include an ASCII dump. * The value of ASCHAR is used as a padding character when a byte is * not a member of the printable ASCII character set (printable ASCII * characters are those whose code is between 32 and 126, * inclusively). * * `BYTE-OFFSET' * * */ public class MIDataReadMemory extends MICommand { public MIDataReadMemory( String miVersion, long offset, String address, int wordFormat, int wordSize, int rows, int cols, Character asChar) { super(miVersion, "-data-read-memory"); //$NON-NLS-1$ if (offset != 0) { setOptions(new String[] { "-o", Long.toString(offset)}); //$NON-NLS-1$ } String format = "x"; //$NON-NLS-1$ switch (wordFormat) { case MIFormat.UNSIGNED : format = "u"; //$NON-NLS-1$ break; case MIFormat.FLOAT : format = "f"; //$NON-NLS-1$ break; case MIFormat.ADDRESS : format = "a"; //$NON-NLS-1$ break; case MIFormat.INSTRUCTION : format = "i"; //$NON-NLS-1$ break; case MIFormat.CHAR : format = "c"; //$NON-NLS-1$ break; case MIFormat.STRING : format = "s"; //$NON-NLS-1$ break; case MIFormat.DECIMAL : format = "d"; //$NON-NLS-1$ break; case MIFormat.BINARY : format = "t"; //$NON-NLS-1$ break; case MIFormat.OCTAL : format = "o"; //$NON-NLS-1$ break; case MIFormat.HEXADECIMAL : default : format = "x"; //$NON-NLS-1$ break; } if (asChar == null) { setParameters( new String[] { address, format, Integer.toString(wordSize), Integer.toString(rows), Integer.toString(cols)}); } else { setParameters( new String[] { address, format, Integer.toString(wordSize), Integer.toString(rows), Integer.toString(cols), asChar.toString()}); } } public MIDataReadMemoryInfo getMIDataReadMemoryInfo() throws MIException { return (MIDataReadMemoryInfo)getMIInfo(); } public MIInfo getMIInfo() throws MIException { MIInfo info = null; MIOutput out = getMIOutput(); if (out != null) { info = new MIDataReadMemoryInfo(out); if (info.isError()) { throwMIException(info, out); } } return info; } }