module CTdsSwingEnumVariables
    use CVoidEventHandlerCollection
    use CLog4
    implicit none
    integer :: TdsSwing = 0
    
    public
    
    type(VoidEventHandlerCollection) :: OnTdsSwingChange
    
    enum, bind(c)
        enumerator TDS_SWING_NEUTRAL
        enumerator TDS_SWING_OFF_BEGIN
        enumerator TDS_SWING_OFF_END
        enumerator TDS_SWING_DRILL_BEGIN
        enumerator TDS_SWING_DRILL_END
        enumerator TDS_SWING_TILT_BEGIN
        enumerator TDS_SWING_TILT_END
    end enum
    
    private :: TdsSwing
    contains
    
    subroutine Set_TdsSwing(v)
        implicit none
        integer , intent(in) :: v
#ifdef ExcludeExtraChanges
        if(TdsSwing == v) return
#endif
        TdsSwing = v
#ifdef deb
        print*, 'TdsSwing=', TdsSwing
#endif
        call OnTdsSwingChange%RunAll()
    end subroutine
    
    integer function Get_TdsSwing()
        implicit none
        Get_TdsSwing = TdsSwing
    end function
    
    
    
    
    subroutine Set_TdsSwing_WN(v)
    !DEC$ ATTRIBUTES DLLEXPORT :: Set_TdsSwing_WN
    !DEC$ ATTRIBUTES ALIAS: 'Set_TdsSwing_WN' :: Set_TdsSwing_WN
        implicit none
        integer , intent(in) :: v
        call Set_TdsSwing(v)
    end subroutine
    
    integer function Get_TdsSwing_WN()
    !DEC$ ATTRIBUTES DLLEXPORT :: Get_TdsSwing_WN
    !DEC$ ATTRIBUTES ALIAS: 'Get_TdsSwing_WN' :: Get_TdsSwing_WN
        implicit none
        Get_TdsSwing_WN = TdsSwing
    end function
    
    
    
    subroutine TdsSwingOffEnd()
    !DEC$ ATTRIBUTES DLLEXPORT :: TdsSwingOffEnd
    !DEC$ ATTRIBUTES ALIAS: 'TdsSwingOffEnd' :: TdsSwingOffEnd
        implicit none
        !if(TdsSwing /= TDS_SWING_OFF_END) TdsSwing = TDS_SWING_OFF_END
        call Set_TdsSwing(TDS_SWING_OFF_END)
#ifdef deb
        print*, 'TDS_SWING_OFF_END'
#endif
    end subroutine
    
    
    subroutine TdsSwingDrillEnd()
    !DEC$ ATTRIBUTES DLLEXPORT :: TdsSwingDrillEnd
    !DEC$ ATTRIBUTES ALIAS: 'TdsSwingDrillEnd' :: TdsSwingDrillEnd
        implicit none
        !if(TdsSwing /= TDS_SWING_DRILL_END) TdsSwing = TDS_SWING_DRILL_END
        call Set_TdsSwing(TDS_SWING_DRILL_END)
#ifdef deb
        print*, 'TDS_SWING_DRILL_END'
#endif
    end subroutine
    
    
    subroutine TdsSwingTiltEnd()
    !DEC$ ATTRIBUTES DLLEXPORT :: TdsSwingTiltEnd
    !DEC$ ATTRIBUTES ALIAS: 'TdsSwingTiltEnd' :: TdsSwingTiltEnd
        implicit none
        !if(TdsSwing /= TDS_SWING_TILT_END) TdsSwing = TDS_SWING_TILT_END
        call Set_TdsSwing(TDS_SWING_TILT_END)
#ifdef deb
        print*, 'TDS_SWING_TILT_END'
#endif
    end subroutine
    
end module CTdsSwingEnumVariables