Hi Ian,
I think there's a big problem with either MO3 or UNMO3 (I guess it's the former, but I really do hope it's not) concerning MIDI macros. If you read Impulse Tracker's MIDI.TXT carefully, you can see that MIDI macros can contain several variables, not only the "z" variable - those variables are (in lower-case) a,b,c,n,p,u,v,x,y,z. Compliant trackers / players should subsitute them by the appropriate content when parsing the macro. Upper-case letters A-F are constants.
What's the problem? Well, if you take a macro that has upper-case letters A-F (f.e. by simply taking the default resonance macros in the Z80-Z8F range), the resonance parameter (last two characters of the macro) are converted to lower case when converting the file back to IT with UNMO3. That is not correct. The default resonance macros have no variables in them, so they should be completely upper-case.
Now, when converting the attached IT file to MO3 and opening it with OpenMPT 1.19, it sounds OK, as OpenMPT 1.19 and older only handle the "z" variable and interpret all other characters als constants, but with the upcoming OpenMPT 1.20's new macro system (which can handle all variables, not just z), the resonance macros (in the Z80-ZFF range) are broken. If the letters are indeed stored as lower-case in the MO3 files, I'd suggest to cast them to upper-case in UNMO3.EXE/DLL, so that compliant applications can handle the macros correctly.