From 6a59dca2877f93d886fdfd56100a8deedb36449e Mon Sep 17 00:00:00 2001 From: Alain Magloire Date: Wed, 29 Jan 2003 03:48:05 +0000 Subject: [PATCH] New files. --- .../debug/mi/core/command/MIInfoSignals.java | 44 +++++++ .../mi/core/output/MIInfoSignalsInfo.java | 109 ++++++++++++++++++ .../cdt/debug/mi/core/output/MISignal.java | 47 ++++++++ 3 files changed, 200 insertions(+) create mode 100644 debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/MIInfoSignals.java create mode 100644 debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIInfoSignalsInfo.java create mode 100644 debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MISignal.java diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/MIInfoSignals.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/MIInfoSignals.java new file mode 100644 index 00000000000..c3617e11118 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/MIInfoSignals.java @@ -0,0 +1,44 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ + +package org.eclipse.cdt.debug.mi.core.command; + +import org.eclipse.cdt.debug.mi.core.MIException; +import org.eclipse.cdt.debug.mi.core.output.MIInfo; +import org.eclipse.cdt.debug.mi.core.output.MIInfoSignalsInfo; +import org.eclipse.cdt.debug.mi.core.output.MIOutput; + +/** + * + * info threads + * + */ +public class MIInfoSignals extends CLICommand +{ + public MIInfoSignals() { + super("info signals"); + } + + public MIInfoSignals(String name) { + super("info signal " + name); + } + + public MIInfoSignalsInfo getMIInfoSignalsInfo() throws MIException { + return (MIInfoSignalsInfo)getMIInfo(); + } + + public MIInfo getMIInfo() throws MIException { + MIInfo info = null; + MIOutput out = getMIOutput(); + if (out != null) { + info = new MIInfoSignalsInfo(out); + if (info.isError()) { + throw new MIException(info.getErrorMsg()); + } + } + return info; + } +} diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIInfoSignalsInfo.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIInfoSignalsInfo.java new file mode 100644 index 00000000000..9ab0fcea059 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIInfoSignalsInfo.java @@ -0,0 +1,109 @@ +/* + * (c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + */ +package org.eclipse.cdt.debug.mi.core.output; + +import java.util.ArrayList; +import java.util.List; +import java.util.StringTokenizer; + +/** + * GDB/MI signal table parsing. + info signals + &"info signals\n" + ~"Signal Stop\tPrint\tPass to program\tDescription\n" + ~"\n" + ~"SIGHUP Yes\tYes\tYes\t\tHangup\n" + ~"SIGINT Yes\tYes\tNo\t\tInterrupt\n" + ~"SIGQUIT Yes\tYes\tYes\t\tQuit\n" + ~"SIGILL Yes\tYes\tYes\t\tIllegal instruction\n" + ~"SIGTRAP Yes\tYes\tNo\t\tTrace/breakpoint trap\n" + ~"SIGABRT Yes\tYes\tYes\t\tAborted\n" + ~"SIGEMT Yes\tYes\tYes\t\tEmulation trap\n" + */ +public class MIInfoSignalsInfo extends MIInfo { + + MISignal[] signals; + + public MIInfoSignalsInfo(MIOutput out) { + super(out); + parse(); + } + + public MISignal[] getMISignals() { + return signals; + } + + void parse() { + List aList = new ArrayList(); + if (isDone()) { + MIOutput out = getMIOutput(); + MIOOBRecord[] oobs = out.getMIOOBRecords(); + for (int i = 0; i < oobs.length; i++) { + if (oobs[i] instanceof MIConsoleStreamOutput) { + MIStreamRecord cons = (MIStreamRecord) oobs[i]; + String str = cons.getString(); + // We are interested in the signal info + parseSignal(str.trim(), aList); + } + } + } + signals = new MISignal[aList.size()]; + for (int i = 0; i < aList.size(); i++) { + signals[i] = (MISignal)aList.get(i); + } + } + + void parseSignal(String str, List aList) { + if (str.length() > 0) { + // Pass the header and th tailer. + // ~"Signal Stop\tPrint\tPass to program\tDescription\n" + // ~"Use the \"handle\" command to change these tables.\n" + if (!str.startsWith("Signal ") && str.startsWith("Use ")) { + String signal = ""; + boolean stop = false; + boolean print = false; + boolean pass = false; + String desc = ""; + + StringTokenizer tokenizer = new StringTokenizer(str); + for (int i = 0; tokenizer.hasMoreTokens(); i++) { + String sub = null; + if (i == 3) { + sub = tokenizer.nextToken("\n"); + } else { + sub = tokenizer.nextToken(); + } + switch (i) { + case 0: // first column is "Signal" + signal = sub; + break; + case 1: // second column is "Stop" + stop = getBoolean(sub); + break; + case 2: // third column is "Print" + print = getBoolean(sub); + break; + case 3: // third column is "Pass to Program" + pass = getBoolean(sub); + break; + case 4: // last column is "Description" + desc = sub; + break; + } + } + MISignal s = new MISignal(signal, stop, print, pass, desc.trim()); + aList.add(s); + } + } + } + + static boolean getBoolean(String value) { + if (value != null && value.equalsIgnoreCase("Yes")) { + return true; + } + return false; + } + +} diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MISignal.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MISignal.java new file mode 100644 index 00000000000..944b6ea748b --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MISignal.java @@ -0,0 +1,47 @@ +/* + * (c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + */ +package org.eclipse.cdt.debug.mi.core.output; + + +/** + * GDB/MI shared information + */ +public class MISignal { + + String signal = ""; + boolean stop; + boolean print; + boolean pass; + String description = ""; + + public MISignal (String name, boolean stp, boolean prnt, boolean ps, String desc) { + signal = name; + stop = stp; + print = prnt; + pass = ps; + description = desc; + } + + public String getName() { + return signal; + } + + public boolean isStop() { + return stop; + } + + public boolean isPrint() { + return print; + } + + public boolean isPass() { + return pass; + } + + public String getDescription() { + return description; + } + +}