MAJOR CHANGE!
[pygdb.git] / GdbTerminal.py
index f468f89fe1f718fb99e870bf3b21abe0b10ff2b9..8600c90d0a94e4e7f1f1733f15a1bf70f8551727 100755 (executable)
@@ -25,30 +25,20 @@ class GdbTerminal (DbgTerminal.DbgTerminal):
 
        def setPty(self, pty):
                ttyname = os.ttyname(pty)
-               his = self.getHistoryLen()
                self.feed_child("set inferior-tty %s\n" % (ttyname,))
-               self.waitForActivation(his)
 
        def setRun(self):
-               his = self.getHistoryLen()
                argv = string.join(string.split(self.clientCmd)[1:])
                self.feed_child("run " + argv + "\n")
-               return self.waitForActivation(his)
 
        def setContinue(self):
-               his = self.getHistoryLen()
                self.feed_child("cont\n");
-               return self.waitForActivation(his)
 
        def setStepover(self):
-               his = self.getHistoryLen()
                self.feed_child("next\n");
-               return self.waitForActivation(his)
 
        def setStepin(self):
-               his = self.getHistoryLen()
                self.feed_child("step\n");
-               return self.waitForActivation(his)
 
        def setQuit(self):
                self.feed_child("quit\n")
@@ -155,7 +145,7 @@ class GdbTerminal (DbgTerminal.DbgTerminal):
                for his in reversed(range(starthis+1,endhis)):
                        if self.history[his][0:2]=="\x1a\x1a":
                                tuples = string.split(self.history[his][2:], ":")
-                               return tuples[0:2]
+                               return tuples[0], int(tuples[1])
 
                return None
 
@@ -165,6 +155,46 @@ class GdbTerminal (DbgTerminal.DbgTerminal):
                return self.waitForRx(rx,his)
 
 
+       def testForActivity(self, his):
+               """Test whether debugger got active again"""
+               rx = re.compile("^\(gdb\) ")
+
+               #Aha! There is a prompt...
+               if rx.search(self.history[his]):
+                       line = self.history[his-1]
+
+                       if line[0:2]=="\x1a\x1a":
+                               tuples = string.split(line[2:], ":")
+                               tuples[1] = int(tuples[1])
+                               return "break", [tuples[0], int(tuples[1])]
+
+                       if string.find(line, "Program exited") == 0:
+                               code = string.split(line)[-1]
+                               code = code[:-1]
+                               return "exited", code
+
+               return None
+
+
+       def testForInactivity(self, his):
+               """Test whether debugger got inactive"""                
+               line = self.history[his]
+               rxcont = re.compile("^\(gdb\)\s+(cont|step|next|stepi|nexti)")
+
+               if string.find(line, "Starting program:") == 0:
+                       prog = string.join( string.split(line)[1:])
+                       return "started", prog
+
+               if rxcont.search(line):
+                       return "continued", None
+
+               return None
+
+
+
+
+
+
 
 
 if __name__ == "__main__":