;ChangeNoteEnharmonicUp
;; This script switches through enharmonic variants of the same in the direction of higher diatonic base notes
(if (Note?)
(let ((target (d-GetNoteAtCursor)))
    (define old (ANS::GetChordNotes))
    (define (proc ansNote thetarget)
        (if (eq? thetarget ansNote)
            (cond 
                ((= (ANS::GetHalfToneDistanceFromC ansNote) (ANS::GetHalfToneDistanceFromC (+ ansNote 40 ))) (+ ansNote 40 )) ; special rule for irregular notes
                ((= (ANS::GetHalfToneDistanceFromC ansNote) (ANS::GetHalfToneDistanceFromC (+ ansNote 30 ))) (+ ansNote 30)) ; all other notes 
                (else ansNote))
            ansNote)) ; else just stay on the same note
    ;body
    (if target
        (set! target (ANS::Ly2Ans (string->symbol target))))
    (ANS::ChangeChordNotes (map (lambda (x) (proc x target)) old))))
