private CNCState.CNCState ProcessDirectMove(Arguments block,
                                                    ActionProgram.ActionProgram program,
                                                    CNCState.CNCState state)
        {
            decimal?X = GetValue(block.X, state);
            decimal?Y = GetValue(block.Y, state);
            decimal?Z = GetValue(block.Z, state);
            decimal?I = GetValue(block.I, state);
            decimal?J = GetValue(block.J, state);
            decimal?K = GetValue(block.K, state);
            decimal?R = GetValue(block.R, state);

            CNCState.AxisState.MType moveType;

            var cmd = block.Options.FirstOrDefault((arg) => arg.letter == 'G');

            if (cmd != null)
            {
                switch (cmd.ivalue1)
                {
                case 0:
                    moveType = AxisState.MType.FastLine;
                    break;

                case 1:
                    moveType = AxisState.MType.Line;
                    break;

                case 2:
                    moveType = AxisState.MType.ArcCW;
                    break;

                case 3:
                    moveType = AxisState.MType.ArcCCW;
                    break;

                default:
                    return(state);
                }
            }
            else
            {
                moveType = state.AxisState.MoveType;
            }

            state.AxisState.MoveType = moveType;
            switch (moveType)
            {
            case AxisState.MType.FastLine:
                return(builder.ProcessLineMove(X, Y, Z, true, program, state));

            case AxisState.MType.Line:
                return(builder.ProcessLineMove(X, Y, Z, false, program, state));

            case AxisState.MType.ArcCW:
                return(builder.ProcessArcMove(X, Y, Z, I, J, K, R, false, program, state));

            case AxisState.MType.ArcCCW:
                return(builder.ProcessArcMove(X, Y, Z, I, J, K, R, true, program, state));
            }
            return(state);
        }