Here is the code I did for pawl lock back type tool changers it uses incremental moves to stop the counting errors, it may not be right for a straight swap but the code may be of use.
 ' (C) Graham Waterworth Mach forum.
' rough draft for a lock back to pawl type tool changer
' this has not been tried on any tool changer
' use/modify it as you wish, I take no responsability
' for any damage to you or your equipment.
If IsLoading() Then
  ' do now't, program loading
Else
' dim some vars
  Dim next_tool As Integer
  Dim current_tool As Integer
  Dim steps_per_tool As Integer
  Dim steps_after_pawl As Integer
  Dim max_tools As Integer
  Dim holdingDRO As Integer
  Dim rotateCW As Integer
  Dim moves As Integer
  Dim fast_feed As Integer
  Dim slow_feed As Integer
  Dim axis As String
  Dim zero As Integer
  Dim to_pawl As Integer
' set up some vars
  zero = 0
  axis = "A" ' change to what ever axis you use for tool changer
  rotateCW = 0 ' set to 1 for CCW and 0 for CW rotation
  max_tools = 6 ' number of tools on turret
  steps_per_tool= 100 ' set to what ever it needs to be
  steps_after_pawl = 10 ' set to amount to clear pawl
  steps_to_lock_back_on_pawl =10 ' number of steps to lock onto pawl
  holdingDRO=1050 ' or what ever you have set screen dro to
  next_tool = GetSelectedTool()
  current_tool = GetCurrentTool()
  fast_feed = 2500 ' set to safe rapid rotation speed
  slow_feed = 500 ' set to safe creep speed back onto pawl.
' do some tool changing
  If next_tool > max_tools Then
    Message "Tool number too high, program stopped."
    Code "M30"
    End
  End If 
  If next_tool<1 Then
    Message "Tool number too low, program stopped."
    Code "M30"
    End
  End If
  If next_tool=current_tool Then
    ' do nowt, we got it already
  Else
  ' lets do some changing
    If next_tool>current_tool Then moves=next_tool-current_tool  
    If next_tool<current_tool Then moves=max_tools-current_tool+next_tool
    rapid_move = (moves * steps_per_tool) + steps_after_pawl
    to_pawl = zero - steps_to_lock_back_on_pawl
    If rotateCW =1 Then
      rapid_move = zero - rapid_move
      to_pawl =  Abs(to_pawl)
    End If
    Code "G92 " & axis & "0"
    Code "G91 G94 G61"
    Code "G01 " & axis & rapid_move & "F" & fast_feed
    Code "G04 P250"
    While IsMoving()
    Wend
    Code "G01 " & axis & to_pawl &  "F" & slow_feed
    While IsMoving()
    Wend
    SetCurrentTool next_tool
    SetUserDRO holdingDRO, next_tool
    Code "G90" ' back to absolute movement
  End If 
End If
' end of tool change