So far this is what I have. Thanks to Dan Mauch for sharing his tool changer macro.
 My tool changer is a ratcheting type with 8 positions.
 Right now it will change tools if the next tool is a higher number(CW move), If it is a lower number it wants to spin CCW against the ratcheting mechanism. I'd like to be able to home the C axis and then do the tool change. I haven't figured out how to make that work, it will Home the C Axis but then it wont do the tool change after.
-- Mach4Turn 8 positon tool Turret 
 function m6() 
 inst = mc.mcGetInstance()
 selectedtool = mc.mcToolGetSelected(inst)
 currenttool = mc.mcToolGetCurrent(inst)
 Ulock = 10    --'  Sets the Unlock Movement in Degrees Value
 Rlock = 10   -- ' Sets the Relock Movement in Degrees Value  
 T1SafePosX =  2.25
 T1SafePosZ =  1.5 
  if (selectedtool > 

 or (selectedtool < 1) then
    --DoButton(3)  --'Stop Program Run
    mc.mcCntlSetLastError(inst,"Program Stopped due to Tool Number Out of Range")
      do return end
      end          
 if (selectedtool == currenttool) then
     mc.mcCntlSetLastError(inst,"Tool is the same NO tool change needed")
    do return end
    end         
 local Tp = 0      --' Zero's the Tool Positon values DO NOT CHANGE   
 --'------------------- Move to Safe Tool Position -----------
 mc.mcCntlSetLastError(inst," Move to Tool Safe Pos")
 mc.mcCntlGcodeExecuteWait(inst, "G1 F30 X" .. T1SafePosX);
 mc.mcCntlGcodeExecuteWait(inst, "G1 F40 Z" .. T1SafePosZ);
mc.mcCntlSetLastError(inst,"Safe XZ Move Completed") 
 --'------ Begin Tool Change , UNLOCK turret -------------- 
 mc.mcCntlSetLastError(inst," Tool Turret UNLOCKING ")
 --mc.mcCntlGcodeExecuteWait(inst, " G91");   --'Set to INC
 mc.mcCntlGcodeExecuteWait(inst, " G52 C0");
 mc.mcCntlGcodeExecuteWait(inst, " G00 C " ..Ulock);    --'  Unlock turret
 mc.mcCntlGcodeExecuteWait(inst, " G52 C0"); 
 --'------ Select Tool ------------------------------------ 
 if (selectedtool == 1) then 
  mc.mcCntlSetLastError(inst,"Moving to Tool# " ..selectedtool )   
    if (selectedtool > currenttool) then
       Moves =  selectedtool - currenttool       
       Moves = (Moves * 45)       
         mc.mcCntlSetLastError("  G00 C" ..Moves);
    end            
         if (selectedtool < currenttool) then            
               Moves = ((8 - currenttool) + selectedtool)               
               Moves = (Moves * 45)            
        mc.mcCntlSetLastError(" G00 C " ..Moves);
    end           
    Tp = 0
       mc.mcCntlSetLastError(inst,"Tool#1 Loaded")
    end
--'------------------------------------------------------------- 
    if (selectedtool == 2) then
        mc.mcCntlSetLastError(inst, "Moving to Tool# " ..selectedtool )       
        if (selectedtool > currenttool) then
            Moves =  selectedtool - currenttool       
            Moves = (Moves * 45)                  
           mc.mcCntlGcodeExecuteWait(inst, " G00 C" ..Moves);
    end                    
        if (selectedtool < currenttool) then            
            Moves = ((8 - currenttool) + selectedtool)               
               Moves = (Moves * 45)
                mc.mcCntlGcodeExecuteWait(inst, " G00 C " ..Moves);
    end      
     Tp = 45
       mc.mcCntlSetLastError(inst,"Tool#2 Loaded")
    end
 --'----------------------------------------------------------  
 if (selectedtool == 3) then 
  mc.mcCntlSetLastError(inst,"Moving to Tool# " ..selectedtool )     
        if (selectedtool > currenttool) then
            Moves =  selectedtool - currenttool            
            Moves = (Moves * 45)                
           mc.mcCntlGcodeExecuteWait(inst, " G00 C" ..Moves);
    end                      
         if (selectedtool < currenttool) then                
               Moves = ((8 - currenttool) + selectedtool)               
               Moves = (Moves * 45)
       mc.mcCntlGcodeExecuteWait(inst, " G00 C " ..Moves);        
    end              
   Tp = 90
      mc.mcCntlSetLastError(inst, "Tool#3 Loaded")   
    end
--'--------------------------------------------------------------      
    if selectedtool == 4 then
        mc.mcCntlSetLastError(inst,"Moving to Tool# " ..selectedtool )    
        if selectedtool > currenttool then           
            Moves =  selectedtool - currenttool       
            Moves = (Moves * 45)       
            mc.mcCntlGcodeExecuteWait(inst, " G00 C" ..Moves);
    end                
         if selectedtool < currenttool then                  
             Moves = ((8 - currenttool) + selectedtool)                           
               Moves = (Moves * 45)
       mc.mcCntlGcodeExecuteWait(inst, " G00 C " ..Moves);
     end   
   Tp = 135
       mc.mcCntlSetLastError(inst,"Tool#4 Loaded")     
    end
--'-------------------------------------------------------------- 
 if (selectedtool == 5) then 
  mc.mcCntlSetLastError(inst,"Moving to Tool# " ..selectedtool )   
    if (selectedtool > currenttool) then
       Moves =  selectedtool - currenttool       
       Moves = (Moves * 45)       
         mc.mcCntlSetLastError("  G00 C" ..Moves);
    end                 
         if (selectedtool < currenttool) then            
               Moves = ((8 - currenttool) + selectedtool)               
                Moves = (Moves * 45)            
        mc.mcCntlSetLastError(" G00 C " ..Moves);
    end   
    Tp = 180
       mc.mcCntlSetLastError(inst,"Tool#1 Loaded")
   end
--'-------------------------------------------------------------- 
 if (selectedtool == 6) then 
  mc.mcCntlSetLastError(inst,"Moving to Tool# " ..selectedtool )   
    if (selectedtool > currenttool) then
       Moves =  selectedtool - currenttool       
       Moves = (Moves * 45)       
         mc.mcCntlSetLastError("  G00 C" ..Moves);
    end                 
         if (selectedtool < currenttool) then            
               Moves = ((8 - currenttool) + selectedtool)
               Moves = (Moves * 45)            
        mc.mcCntlSetLastError(" G00 C " ..Moves);
    end   
    Tp = 225
       mc.mcCntlSetLastError(inst,"Tool#1 Loaded")
   end
--'-------------------------------------------------------------- 
 if (selectedtool == 7) then 
  mc.mcCntlSetLastError(inst,"Moving to Tool# " ..selectedtool )   
    if (selectedtool > currenttool) then
       Moves =  selectedtool - currenttool       
       Moves = (Moves * 45)       
         mc.mcCntlSetLastError("  G00 C" ..Moves);
    end               
         if (selectedtool < currenttool) then            
               Moves = ((8 - currenttool) + selectedtool)                
               Moves = (Moves * 45)            
        mc.mcCntlSetLastError(" G00 C " ..Moves);
    end   
    Tp = 270
       mc.mcCntlSetLastError(inst,"Tool#1 Loaded")
   end
--'-------------------------------------------------------------- 
 if (selectedtool == 

 then 
  mc.mcCntlSetLastError(inst,"Moving to Tool# " ..selectedtool )   
    if (selectedtool > currenttool) then
       Moves =  selectedtool - currenttool       
       Moves = (Moves * 45)
    end
         mc.mcCntlSetLastError("  G00 C" ..Moves);                    
         if (selectedtool < currenttool) then            
               Moves = ((8 - currenttool) + selectedtool)               
               Moves = (Moves * 45)            
        mc.mcCntlSetLastError(" G00 C " ..Moves);
    end   
    Tp = 315
       mc.mcCntlSetLastError(inst,"Tool#1 Loaded")
   end
--'------------ end Tool Change ------------------------
mc.mcCntlSetLastError(inst," Tool Turret LOCKING ")   
mc.mcCntlGcodeExecuteWait(inst, " G52 C0");
mc.mcCntlGcodeExecuteWait(inst, " G00 H-" ..Rlock ); --   ' Lock Turret
mc.mcCntlGcodeExecuteWait(inst,  "G52 C" ..Tp);
--mc.mcCntlGcodeExecuteWait(inst,  "G90");   --' Reset to ABS      
     tool = selectedtool 
 mc.mcToolSetCurrent(inst, selectedtool) 
  if (mc.mcInEditor() == 1) then
    m6()
    end                                                                        
end