For the benefit of the newer members of this list, I'd like to give some information about the way we got here.
Those that have been reading this list for a while will know that I have a bee in my bonnet about the U: field, macros and the mess which the abc 1.7 "standard" has created around them. About eight years ago, there were two abc lists, this one and a closed developers list. The U: field came about as a result of discussions on the developers list. I don't remember who made the original suggestion, but it was adopted as a means of defining the meanings of the single characters H..Z, which the standard explicitly made available to represent all of the other musical symbols which were not already defined. Since there are hundreds of possible musical symbols and only 19 letters, a method was needed to reassign the symbols to different letters, and it was suggested that this should be done as follows: U: K = segno Now, a program which knows what a segno is can draw one (or use it to control playing sequence) whenever it encounters the letter K. This was consistent with the existing standard, and since it's unlikely that any one piece of music would need more than 19 different extra symbols it provided a complete solution to the problem. I implemented it in BarFly, and documented exactly how I'd done it on my web site so that any other developers could see how to do it. Note that this is not a macro definition; it's not implemented by substituting text in the original abc but by re-mapping the meaning of the letter K, and can only be used for those symbols which a program knows how to draw or play. Macros were my suggestion; I was looking for a flexible way of playing ornaments, given only a few symbols to represent them in the abc. I suggested that to play the ornament represented by the tilde character in abc you could use a definition like this: m: ~G3 = G{A}G{F}G When playing the abc, a program would search the tune for every instance of the string ~G3 and substitute the string G{A}G{F}G (it's an Irish roll the way a whistle or flute player would do it). Of course you would need a separate static macro for every different note with a roll on it, and Henrik Norbeck suggested an extension to this - use the letter n to represent the principal note, and other lower case letters adjacent to n in the alphabet for related scale steps, then let the program transpose this to produce the correct ornament on any principal note: m: ~n3 = n{o}n{m}n Once again, I implemented this in BarFly, in such a way that the user can turn it on or off separately for both playing and display of music. Again, I documented it on my website. It proved a very useful extension, and the program now comes with several files of symbol and macro definitions which define how rolls, turns mordents and trills are to be played or displayed for different purposes. Using it I was able to transcribe the entire Golberg Variations into abc, and have it play and display complete with all the baroque ornaments Bach prescibed. Likewise I can play a traditional Irish reel with the rolls sounding correct as played in Donegal or in Clare depending on which external macro file is selected. Many years later, along came John Atchley, a developer with a burning desire to fix the abc standard. He put together the draft 1.7 standard and persuaded Chris Walshaw to put it on the abc home page. Most of what he put into it was (and is) uncontroversial, and simply codified what the more advanced abc programs were already doing. Unfortunately, he didn't look much beyond abc2ps and his own clone of it, and he had different ideas about what to do with the U: field. He introduced the !...! format (breaking zillions of old abc2win files on the net) and totally confused the two concepts of symbol redefinition and macros. Then he went away, and we haven't heard from him for a couple of years. I argued against this draft standard on this list (the developers list was dead by this time), first politely and then LOUDLY. I made it clear that I was not going to give up an extension system which was very successful and appreciated by my users in favour of of something which was demonstrably inferior. I was ignored. Jef Moine went ahead and incorporated the !...! into abcm2ps, and James Allwright used it in abc2midi. Everybody else thought this was the "de facto" standard and so here we are. John Chambers doesn't understand what I'm talking about, and neither, I suspect, does anybody else who hasn't used BarFly. This list is dominated by Linux users, none of whom seems capable of even giving consideration to anything which isn't open source, and doesn't run on their platform. I'm not averse to compromise - I've made lots of changes to my program to improve compatibility. I support the %%staves directive from abcm2ps, even though it's utterly cryptic, and so badly documented that I had to run the program and experiment with it to figure out how it works. I deprecated the use of V: fields on the same line as the music because nobody on this list liked it. I introduced the middle directive so that BarFly users could have clefs other than the treble work the way they do in abcx2ps. Every extension I have introduced has been announced and discussed here, and publicly documented. I've got to draw the line somewhere however. I will accept no new abc standard unless it sorts out the mess surrounding the current use of the U: field. Phil Taylor To subscribe/unsubscribe, point your browser to: http://www.tullochgorm.com/lists.html