1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

New files.

This commit is contained in:
Alain Magloire 2003-01-29 03:48:05 +00:00
parent fdd0895a3d
commit 6a59dca287
3 changed files with 200 additions and 0 deletions

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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;
}
}