--- probe_screen.py	2016-03-25 17:53:25.071066740 -0600
+++ probe_screen.py.orig	2016-03-14 01:20:04.766736686 -0600
@@ -128,8 +128,6 @@
         error = self.e.poll()
         if "axis" in self.display:
             error_pin= Popen('halcmd getp probe.user.error ', shell=True, stdout=PIPE).stdout.read()
-        elif "gscreen" in self.display:
-            error_pin= Popen('halcmd getp probe.ps_error ', shell=True, stdout=PIPE).stdout.read()
         else:
             error_pin= Popen('halcmd getp gmoccapy.error ', shell=True, stdout=PIPE).stdout.read()
         if error:
@@ -314,32 +312,12 @@
         self.halcomp["ps_offs_angle"] = gtkspinbutton.get_value()
         self.prefs.putpref( "ps_offs_angle", gtkspinbutton.get_value(), float )
 
-    saved_mode = -1
-
-    def mdi_start(self):
-        global saved_mode
-        self.stat.poll()
-        saved_mode = self.stat.task_mode
-        if self.stat.task_mode <> linuxcnc.MODE_MDI :
-            self.command.mode( linuxcnc.MODE_MDI )
-            self.command.wait_complete(4)
-
-    def mdi_end(self):
-        global saved_mode
-        self.command.mode( saved_mode )
-        self.command.wait_complete(1)
-
     def gcode(self,s, data = None): 
         for l in s.split("\n"):
             if "G1" in l :
                 l+= " F#<_ini[TOOLSENSOR]RAPID_SPEED>"
             self.command.mdi( l )
-            self.stat.poll()
-            while self.stat.interp_state <> linuxcnc.INTERP_IDLE :
-                time.sleep(0.1)
-                if self.error_poll() == -1:
-                    return -1
-                self.stat.poll()
+            self.command.wait_complete()
             if self.error_poll() == -1:
                 return -1
         return 0
@@ -347,11 +325,12 @@
     def ocode(self,s, data = None):	
         self.command.mdi(s)
         self.stat.poll()
-        while self.stat.interp_state <> linuxcnc.INTERP_IDLE :
-            time.sleep(0.1)
+        while self.stat.exec_state == 7 or self.stat.exec_state == 3 :
             if self.error_poll() == -1:
                 return -1
+            self.command.wait_complete()
             self.stat.poll()
+        self.command.wait_complete()
         if self.error_poll() == -1:
             return -1
         return 0
@@ -404,26 +383,30 @@
     # --------------  Touch off buttons -----------------
     def on_btn1_set_x_released(self, gtkbutton, data = None):
         self.prefs.putpref( "ps_offs_x", self.spbtn_offs_x.get_value(), float )
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         self.command.mdi( "G10 L20 P0 X%f" % self.spbtn_offs_x.get_value() )
-        self.mdi_end()
+        time.sleep(1)
 
     def on_btn1_set_y_released(self, gtkbutton, data = None):
         self.prefs.putpref( "ps_offs_y", self.spbtn_offs_y.get_value(), float )
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         self.command.mdi( "G10 L20 P0 Y%f" % self.spbtn_offs_y.get_value() )
-        self.mdi_end()
+        time.sleep(1)
 
     def on_btn1_set_z_released(self, gtkbutton, data = None):
         self.prefs.putpref( "ps_offs_z", self.spbtn_offs_z.get_value(), float )
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         self.command.mdi( "G10 L20 P0 Z%f" % self.spbtn_offs_z.get_value() )
-        self.mdi_end()
+        time.sleep(1)
 
     def on_btn1_set_angle_released(self, gtkbutton, data = None):
         self.prefs.putpref( "ps_offs_angle", self.spbtn_offs_angle.get_value(), float )
         self.lb_probe_a.set_text( "%.3f" % self.spbtn_offs_angle.get_value())
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         s="G10 L2 P0"
         if self.chk_set_zero.get_active() :
             s +=  " X%.4f"%self.spbtn_offs_x.get_value()      
@@ -437,7 +420,7 @@
         s +=  " R%.4f"%self.spbtn_offs_angle.get_value()
         print "s=",s                     
         self.gcode(s)
-        self.mdi_end()
+        time.sleep(1)
 
 
        
@@ -446,7 +429,8 @@
     # -------------------------------------------------
     # Down
     def on_down_released(self, gtkbutton, data = None):
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # Start down.ngc
         if self.ocode ("O<down> call") == -1:
             return
@@ -454,12 +438,11 @@
         self.lb_probe_z.set_text( "%.4f" % float(a[2]) )
         self.add_history(gtkbutton.get_tooltip_text(),"Z",0,0,0,0,0,0,0,0,a[2],0,0)
         self.set_zerro("Z",0,0,a[2])
-        self.mdi_end()
-
     # X+
     def on_xp_released(self, gtkbutton, data = None):
-        self.mdi_start()
-        # move X - xy_clearance
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
+         # move X - xy_clearance
         s="""G91
         G1 X-%f
         G90""" % (self.spbtn1_xy_clearance.get_value() )        
@@ -483,12 +466,12 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("X")
-        self.mdi_end()
 
     # Y+
     def on_yp_released(self, gtkbutton, data = None):
-        self.mdi_start()
-        # move Y - xy_clearance
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
+         # move Y - xy_clearance
         s="""G91
         G1 Y-%f
         G90""" % (self.spbtn1_xy_clearance.get_value() )        
@@ -512,12 +495,12 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("Y")
-        self.mdi_end()
 
     # X-
     def on_xm_released(self, gtkbutton, data = None):
-        self.mdi_start()
-        # move X + xy_clearance
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
+         # move X + xy_clearance
         s="""G91
         G1 X%f
         G90""" % (self.spbtn1_xy_clearance.get_value() )        
@@ -541,15 +524,15 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("X")
-        self.mdi_end()
 
     # Y-
     def on_ym_released(self, gtkbutton, data = None):
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
          # move Y + xy_clearance
         s="""G91
         G1 Y%f
-        G90""" % (self.spbtn1_xy_clearance.get_value() )
+        G90""" % (self.spbtn1_xy_clearance.get_value() )        
         if self.gcode(s) == -1:
             return
         if self.z_clearance_down() == -1:
@@ -570,13 +553,13 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("Y")
-        self.mdi_end()
 
     # Corners
     # Move Probe manual under corner 2-3 mm
-    # X+Y+
+    # X+Y+ 
     def on_xpyp_released(self, gtkbutton, data = None):
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move X - xy_clearance Y + edge_lenght
         s="""G91
         G1 X-%f Y%f
@@ -623,11 +606,11 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("XY")
-        self.mdi_end()
 
     # X+Y-
     def on_xpym_released(self, gtkbutton, data = None):
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move X - xy_clearance Y + edge_lenght
         s="""G91
         G1 X-%f Y-%f
@@ -673,11 +656,11 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("XY")
-        self.mdi_end()
 
     # X-Y+
     def on_xmyp_released(self, gtkbutton, data = None):
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move X + xy_clearance Y + edge_lenght
         s="""G91
         G1 X%f Y%f
@@ -724,11 +707,11 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("XY")
-        self.mdi_end()
 
     # X-Y-
     def on_xmym_released(self, gtkbutton, data = None):
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move X + xy_clearance Y - edge_lenght
         s="""G91
         G1 X%f Y-%f
@@ -775,11 +758,11 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("XY")
-        self.mdi_end()
 
     # Center X+ X- Y+ Y-
     def on_xy_center_released(self, gtkbutton, data = None):
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move X - edge_lenght- xy_clearance
         s="""G91
         G1 X-%f
@@ -881,7 +864,6 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("XY")
-        self.mdi_end()
 
     # --------------  Command buttons -----------------
     #               Measurement inside
@@ -891,7 +873,8 @@
     # Move Probe manual under corner 2-3 mm
     # X+Y+ 
     def on_xpyp1_released(self, gtkbutton, data = None):
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move Y - edge_lenght X - xy_clearance
         s="""G91
         G1 X-%f Y-%f
@@ -933,11 +916,11 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("XY")
-        self.mdi_end()
 
     # X+Y-
     def on_xpym1_released(self, gtkbutton, data = None):
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move Y + edge_lenght X - xy_clearance
         s="""G91
         G1 X-%f Y%f
@@ -979,11 +962,11 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("XY")
-        self.mdi_end()
 
     # X-Y+
     def on_xmyp1_released(self, gtkbutton, data = None):
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move Y - edge_lenght X + xy_clearance
         s="""G91
         G1 X%f Y-%f
@@ -1026,11 +1009,11 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("XY")
-        self.mdi_end()
 
     # X-Y-
     def on_xmym1_released(self, gtkbutton, data = None):
-	self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move Y + edge_lenght X + xy_clearance
         s="""G91
         G1 X%f Y%f
@@ -1072,11 +1055,11 @@
         if self.gcode(s) == -1:
             return
         self.set_zerro("XY")
-	self.mdi_end()
 
     # Hole Xin- Xin+ Yin- Yin+
     def on_xy_hole_released(self, gtkbutton, data = None):
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         if self.z_clearance_down() == -1:
             return
         # move X - edge_lenght Y + xy_clearance
@@ -1171,7 +1154,8 @@
     def on_angle_yp_released(self, gtkbutton, data = None):
         self.stat.poll()
         xstart=self.stat.position[0]-self.stat.g5x_offset[0] - self.stat.g92_offset[0] - self.stat.tool_offset[0]
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move Y - xy_clearance
         s="""G91
         G1 Y-%f
@@ -1212,13 +1196,13 @@
         if self.gcode(s) == -1:
             return
         self.rotate_coord_system(alfa)
-        self.mdi_end()
 
     # Y-Y- 
     def on_angle_ym_released(self, gtkbutton, data = None):
         self.stat.poll()
         xstart=self.stat.position[0]-self.stat.g5x_offset[0] - self.stat.g92_offset[0] - self.stat.tool_offset[0]
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move Y + xy_clearance
         s="""G91
         G1 Y%f
@@ -1258,13 +1242,13 @@
         if self.gcode(s) == -1:
             return
         self.rotate_coord_system(alfa)
-        self.mdi_end()
 
     # X+X+ 
     def on_angle_xp_released(self, gtkbutton, data = None):
         self.stat.poll()
         ystart=self.stat.position[1]-self.stat.g5x_offset[1] - self.stat.g92_offset[1] - self.stat.tool_offset[1]
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move X - xy_clearance
         s="""G91
         G1 X-%f
@@ -1304,13 +1288,13 @@
         if self.gcode(s) == -1:
             return
         self.rotate_coord_system(alfa)
-        self.mdi_end()
 
     # X-X- 
     def on_angle_xm_released(self, gtkbutton, data = None):
         self.stat.poll()
         ystart=self.stat.position[1]-self.stat.g5x_offset[1] - self.stat.g92_offset[1] - self.stat.tool_offset[1]
-        self.mdi_start()
+        self.command.mode( linuxcnc.MODE_MDI )
+        self.command.wait_complete()
         # move X + xy_clearance
         s="""G91
         G1 X%f
@@ -1350,61 +1334,8 @@
         if self.gcode(s) == -1:
             return
         self.rotate_coord_system(alfa)
-        self.mdi_end()
 
     def __init__(self, halcomp,builder,useropts):
         inipath = os.environ["INI_FILE_NAME"]
@@ -1495,46 +1423,20 @@
             self.halcomp["auto_rott"] = True
             self.hal_led_auto_rott.hal_pin.set(1)
         self.halcomp.newpin( "ps_error", hal.HAL_FLOAT, hal.HAL_OUT )
-# Parameter Defaults
-# Imperial
-        self.spbtn1_search_vel.set_value( self.prefs.getpref( "ps_searchvel", 10.0, float ) )
-        self.spbtn1_probe_vel.set_value( self.prefs.getpref( "ps_probevel", 0.3, float ) )
-        self.spbtn1_z_clearance.set_value( self.prefs.getpref( "ps_z_clearance", 0.1, float ) )
-        self.spbtn1_probe_max.set_value( self.prefs.getpref( "ps_probe_max", 0.04, float ) )
-        self.spbtn1_probe_latch.set_value( self.prefs.getpref( "ps_probe_latch", 0.02, float ) )
-        self.spbtn1_probe_diam.set_value( self.prefs.getpref( "ps_probe_diam", 0.0607, float ) )
-        self.spbtn1_xy_clearance.set_value( self.prefs.getpref( "ps_xy_clearance", 0.15, float ) )
-        self.spbtn1_edge_lenght.set_value( self.prefs.getpref( "ps_edge_lenght", 0.15, float ) )
-
-# Metric
-#        self.spbtn1_search_vel.set_value( self.prefs.getpref( "ps_searchvel", 300.0, float ) )
-#        self.spbtn1_probe_vel.set_value( self.prefs.getpref( "ps_probevel", 10.0, float ) )
-#        self.spbtn1_z_clearance.set_value( self.prefs.getpref( "ps_z_clearance", 3.0, float ) )
-#        self.spbtn1_probe_max.set_value( self.prefs.getpref( "ps_probe_max", 1.0, float ) )
-#        self.spbtn1_probe_latch.set_value( self.prefs.getpref( "ps_probe_latch", 0.5, float ) )
-#        self.spbtn1_probe_diam.set_value( self.prefs.getpref( "ps_probe_diam", 2.0, float ) )
-#        self.spbtn1_xy_clearance.set_value( self.prefs.getpref( "ps_xy_clearance", 5.0, float ) )
-#        self.spbtn1_edge_lenght.set_value( self.prefs.getpref( "ps_edge_lenght", 5.0, float ) )
+        self.spbtn1_search_vel.set_value( self.prefs.getpref( "ps_searchvel", 300.0, float ) )
+        self.spbtn1_probe_vel.set_value( self.prefs.getpref( "ps_probevel", 10.0, float ) )
+        self.spbtn1_z_clearance.set_value( self.prefs.getpref( "ps_z_clearance", 3.0, float ) )
+        self.spbtn1_probe_max.set_value( self.prefs.getpref( "ps_probe_max", 1.0, float ) )
+        self.spbtn1_probe_latch.set_value( self.prefs.getpref( "ps_probe_latch", 0.5, float ) )
+        self.spbtn1_probe_diam.set_value( self.prefs.getpref( "ps_probe_diam", 2.0, float ) )
+        self.spbtn1_xy_clearance.set_value( self.prefs.getpref( "ps_xy_clearance", 5.0, float ) )
+        self.spbtn1_edge_lenght.set_value( self.prefs.getpref( "ps_edge_lenght", 5.0, float ) )
 
         self.spbtn_offs_x.set_value( self.prefs.getpref( "ps_offs_x", 0.0, float ) )
         self.spbtn_offs_y.set_value( self.prefs.getpref( "ps_offs_y", 0.0, float ) )
         self.spbtn_offs_z.set_value( self.prefs.getpref( "ps_offs_z", 0.0, float ) )
         self.spbtn_offs_angle.set_value( self.prefs.getpref( "ps_offs_angle", 0.0, float ) )
 
-# Set spinbox increments for imperal units
-        self.spbtn1_search_vel.set_increments(0.5, 0.5)
-        self.spbtn1_probe_vel.set_increments(0.1, 0.2)
-        self.spbtn1_z_clearance.set_increments(0.01, 0.01)
-        self.spbtn1_probe_max.set_increments(0.1, 0.1)
-        self.spbtn1_probe_latch.set_increments(0.01, 0.01)
-        self.spbtn1_probe_diam.set_increments(0.0001, 0.0001)
-        self.spbtn1_xy_clearance.set_increments(0.01, 0.01)
-        self.spbtn1_edge_lenght.set_increments(0.01, 0.01)
-        self.spbtn1_probe_diam.set_digits(4)
-        self.spbtn_offs_x.set_digits(4)
-        self.spbtn_offs_y.set_digits(4)
-        self.spbtn_offs_z.set_digits(4)
-
         self.halcomp["ps_searchvel"] = self.spbtn1_search_vel.get_value()
         self.halcomp["ps_probevel"] = self.spbtn1_probe_vel.get_value()
         self.halcomp["ps_z_clearance"] = self.spbtn1_z_clearance.get_value()
