Option Explicit ' Ambit.vbs, ver 1.0 ' NWC2 UserTool to show all notes used in selection ' &Command: WScript Scripts\Ambit.vbs Const Template = "|Chord|Dur:Whole,Grace|Pos:?|Opts:Muted" Dim d: Set d = CreateObject("Scripting.Dictionary") Dim a1, a2, e, i, s For Each e In Array("", "n", "b", "#", "x", "v") Set d(e) = CreateObject("Scripting.Dictionary") Next Dim aIn: aIn = Split(WScript.StdIn.ReadAll, vbCrLf) For i = 1 To UBound(aIn) - 2 a1 = Split(aIn(i), "|") Select Case a1(1) Case "Note", "Chord", "RestChord" For Each e In Filter(a1, "Pos") For Each s In Split(Split(e, ":")(1), ",") a2 = aPos(s) d(a2(0))(a2(0) & a2(1)) = "" Next Next End Select Next For Each e In d s = Join(d(e).Keys, ",") If Len(s) Then aIn(0) = aIn(0) & vbCrLf & Replace(Template, "?", s) Next If InStr(aIn(0), vbLf) Then aIn(0) = aIn(0) & vbCrLf & "|Bar|XBarCnt:Y" WScript.Stdout.Write Join(aIn, vbCrLf) Function aPos(s) ' NotePitchPos to array Dim test: test = Split("nb#xv ? oxXz ^") Dim r(3), c, i ' retval, char, index r(1) = s: c = Left(s, 1) ' acc? For Each i In Array(0, 3, 2) If InStr(test(i), c) Then r(i) = c r(1) = Replace(r(1), r(i), "", 1, 1) c = Right(r(1), 1) ' tie?, head? Next: aPos = r ' acc, pos, head, tie End Function