private CNCState.CNCState ProcessDrillingMove(Arguments block,
                                                      ActionProgram.ActionProgram program,
                                                      CNCState.CNCState state)
        {
            // TODO Handle G17, 18, 19

            decimal?X = GetValue(block.X, state);
            decimal?Y = GetValue(block.Y, state);
            decimal?Z = GetValue(block.Z, state);              // Drill depth
            decimal?R = GetValue(block.R, state);              // Retract
            decimal?Q = GetValue(block.Q, state);              // Pecking

            state.DrillingState.RetractDepth = DrillingState.RetractDepthType.RHeight;
            return(builder.ProcessDrillingMove(X, Y, Z, R, Q, program, state));
        }