/******************************************************************************* * 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.output; /** * GDB/MI data read memor info extraction. */ public class MIDataReadMemoryInfo extends MIInfo { String addr; long nextRow; long prevRow; long nextPage; long prevPage; long numBytes; long totalBytes; MIMemory[] memories; public MIDataReadMemoryInfo(MIOutput rr) { super(rr); parse(); } public String getAddress() { return addr; } public long getNumberBytes() { return numBytes; } public long getTotalBytes() { return totalBytes; } public long getNextRow() { return nextRow; } public long getPreviousRow() { return prevRow; } public long getNextPage() { return nextPage; } public long getPreviousPage() { return prevPage; } public MIMemory[] getMemories() { return memories; } /* public String toString() { MIMemory[] mem = getMemories(); StringBuffer buffer = new StringBuffer(); for (int i = 0; i < mem.length; i++) { buffer.append(Long.toHexString(mem[i].getAddress())); buffer.append(":"); long[] data = mem[i].getData(); for (int j = 0; j < data.length; j++) { buffer.append(" ").append(Long.toHexString(data[j])); } buffer.append("\t").append(mem[i].getAscii()); } return buffer.toString(); } */ void parse() { if (isDone()) { MIOutput out = getMIOutput(); MIResultRecord rr = out.getMIResultRecord(); if (rr != null) { MIResult[] results = rr.getMIResults(); for (int i = 0; i < results.length; i++) { String var = results[i].getVariable(); MIValue value = results[i].getMIValue(); String str = ""; //$NON-NLS-1$ if (value != null && value instanceof MIConst) { str = ((MIConst)value).getCString(); } if (var.equals("addr")) { //$NON-NLS-1$ try { addr = str.trim(); } catch (NumberFormatException e) { } } else if (var.equals("nr-bytes")) { //$NON-NLS-1$ try { numBytes = Long.decode(str.trim()).longValue(); } catch (NumberFormatException e) { } } else if (var.equals("total-bytes")) { //$NON-NLS-1$ try { totalBytes = Long.decode(str.trim()).longValue(); } catch (NumberFormatException e) { } } else if (var.equals("next-row")) { //$NON-NLS-1$ try { nextRow = Long.decode(str.trim()).longValue(); } catch (NumberFormatException e) { } } else if (var.equals("prev-row")) { //$NON-NLS-1$ try { prevRow = Long.decode(str.trim()).longValue(); } catch (NumberFormatException e) { } } else if (var.equals("next-page")) { //$NON-NLS-1$ try { nextPage = Long.decode(str.trim()).longValue(); } catch (NumberFormatException e) { } } else if (var.equals("prev-page")) { //$NON-NLS-1$ try { prevPage = Long.decode(str.trim()).longValue(); } catch (NumberFormatException e) { } } else if (var.equals("memory")) { //$NON-NLS-1$ if (value instanceof MIList) { parseMemory((MIList)value); } } } } } if (memories == null) { memories = new MIMemory[0]; } } void parseMemory(MIList list) { MIValue[] values = list.getMIValues(); memories = new MIMemory[values.length]; for (int i = 0; i < values.length; i++) { if (values[i] instanceof MITuple) { memories[i] = new MIMemory((MITuple)values[i]); } } } }