Using ABZWEBn.EXE Normal ABC except: No double sharps or double flats (I'm working on it) No Part: No V: Note J: is allowed to specify sharps or flats n* or 0 * = # and ^ for sharp *= b or _ for flat Add on keynote if you want to over-ride final as keynote. J:Hp (highland bagpipe) is now accepted, and will give the true mode, not always the "Amixolydian" given by K:Hp. J:1# will specify 1 sharp on key signature, and the keynote will be taken as the last note (automatically) and the mode determined from these. This bypasses the K:specification. This doesn't give good result for tunes that change key if they don't change back to the original key for the ending. It's passable by not good for circular modes except in the case of a circular major ending on the 7th, which come out locrian. To change this default key add it to J: after the mb or n# or 0. [Actually there's sometimes a little flair at the ending, so the very last note isn't the 'final'. The program will look through the last 3 notes and pick 'final' as last note or the earlier one with time duration greater than 2.5 times that of last note, if there is such] Code: If one come to ::, or :|, or || before one has the required number (8) of stressed notes the program will ignore the repeat or internal end and proceed on the other side of it. Codes that proceed across any timing or key changes will be invalid. For tunes that end before the required 8 stressed notes are obtained the note code and qualifier (octave-sharp/flat) code are filled with 0s (zeros) to the end. Determining the number of stressed notes is a bit complicated because of 'musical math'. Real 2/4 tunes have 1 stressed note per measure, but 4/8 is called 2/4 and has 2 stressed notes per measure, (and 8/8 is called 4/4 or 2/2) so the timing on the staff (or stave) is not alone sufficient to determine the number of stressed notes per measure, and I count up (averaging over 4 measures) notes starting with the denominator of the staff timing as default and count those equal to or greater than the default time, which is specified individually for the various specified timings (3/2, 6/4, 12/, etc). 5/4 is the only timing with numerator not 2 or 3, or multiples of these, which can be stressed note coded. As noted in CODEMTHD.TXT complete qualifier codes would require hexidecimal notation for its code. That's awkward. The only problems I've seen so far are accidentals in the octave that is two below that of the keynote, so codes are 10 and 11 (so more than a single digit). I have elected to just raise the octave code by one octave, so these become 4 and 5, (octave base = 3, up from 9), and make note of the raised code in the display. An ABC of a circular mode doesn't tell you what the octave of the keynote is. For these I've taken the main octave to be below the end note if the tune is ascending at the end, and above the final if the tune is descending at the end. Note in coding: Coding will proceed across repeats, not start over, and will finish the measure started in one strain and ended by the leading notes in the next. Plotting: You can now specify up to 10 tunes of your choice, from a single large file of ABCs, for simultaneous plotting, offset one above the other. The vertical position is the logarithm of the frequency (or number of semitones for a given note) and the horizonal position is proportional to time from the start of the tune. One can do some editing, like interchanging two tunes (at a time) to put ones of interest adjacent to each other, and one can delete any, or all, to make room for new ones. One can offset any tune horizontally and also compress or expand its scale. There will occasionally be some slight overlapping, but the titles of each tune and its plot are of different collors, so there's no serious confusion resulting. The data file for the plotting remains until one exits the program, and you can plot after any number (up to 10) of tunes, and got back and forth between plot parameter editing and plotting, or you can go to playing the last tune in the list, or select a new tune. The horizontal increment is the normal full measure time divided by 72, and my 2/2:4/4 measure time is 40320 (5*7*9*2^7) so I'm always dealing with integers (except in the play routine where these scaled times are converted to real time). I have ignored repeats, and for tunes with multiple endings, [1 xyz :| [2 XYZ ||, I've skipped the first ending and used the second ending only and proceeded on from there. I've taken the time as a fixed fraction of the indicated time (4/4, 3/2, etc.) as the horizontal increment, so timings are normalized. E.g., "St. Patrick's Day", 4/4 (T039) and "St. Patrick's Day," gigga (6/8, T040) have nominally the same total points on the x axis. No account is taken of timing change, M:mspec, or key change, K:kspec/ J:jspec, so tunes with these in them won't be completely accurate after such a change. Grace notes are skipped for the saved files. The time they borrowed from a main note is restored to the main note before making the plotting file and subsequent note count. Error traps: If invalid integer that's too low is entered, then lowest valid integer is selected. Integer too high is replaced with highest valid integer.