From bf013dc428a325a21ac205580d9d5e10caf76036 Mon Sep 17 00:00:00 2001 From: sshlien Date: Fri, 23 Feb 2024 14:26:37 -0500 Subject: [PATCH] 2024.02.23 --- VERSION | 2 +- doc/CHANGES | 30 ++++++++++++++++++++++++++++-- doc/readme.txt | 2 +- parseabc.c | 38 +++++++++++++++++++++++++++++--------- store.c | 2 +- 5 files changed, 60 insertions(+), 14 deletions(-) diff --git a/VERSION b/VERSION index a043501..158029f 100644 --- a/VERSION +++ b/VERSION @@ -1,2 +1,2 @@ -February 22 2024 +February 23 2024 diff --git a/doc/CHANGES b/doc/CHANGES index 6bdef68..519038f 100644 --- a/doc/CHANGES +++ b/doc/CHANGES @@ -15377,7 +15377,7 @@ it is only called if the token was a clef. Fix: commented out the line in isclef() which zeros the octave_offset. -February 22 2024 +February 23 2024 abcmidi bug: @@ -15387,7 +15387,33 @@ clef=treble^8 to be substituted for treble+8. abc2midi does not recognize these variants. Fix: extended the function get_clef_octave_offset in music_utils.c -to recognize these variants. +to recognize these variants. Unfortunately, readword() called by +parseclef breaks the clef string when it encounters either a ^ +or _. This was necessary to handle sharps and flats in the +K: declaration. (See note above April 8 2015.) It was necessary +to create a replacement function, readword_with_() which does +not break the string on underscore _ or caret ^. + +The following test file was used to verify the correct operation +of this feature. + +X:1 +T: clef= variants +M:4/4 +L:1/4 +V:1 clef=treble-8 +V:2 clef=treble_8 +V:3 clef=treble+8 +V:4 clef=treble^8 +K:C +[V:1] z z C z | +[V:2] z z z C | +[V:3] C z z z | +[V:4] z C z z | + + + + diff --git a/doc/readme.txt b/doc/readme.txt index de2259e..44e37c4 100644 --- a/doc/readme.txt +++ b/doc/readme.txt @@ -1,7 +1,7 @@ abcMIDI : abc <-> MIDI conversion utilities midi2abc version 3.59 February 08 2023 -abc2midi version 4.88 February 22 2024 +abc2midi version 4.89 February 23 2024 abc2abc version 2.21 February 19 2024 yaps version 1.93 February 19 2024 abcmatch version 1.83 February 19 2024 diff --git a/parseabc.c b/parseabc.c index 1fec55f..fccd682 100644 --- a/parseabc.c +++ b/parseabc.c @@ -742,6 +742,33 @@ readword (word, s) return (p); } +char * +readword_with_ (word, s) +/* This version allows ^ and _ characters to be embedded in*/ +/* the string. It is needed to parse clef=treble_8 or +/* clef=treble^8 . [SS] 2024-02-23 */ + char word[]; + char *s; +{ + char *p; + int i; + + p = s; + i = 0; + /* [SS] 2015-04-08 */ + while ((*p != '\0') && (*p != ' ') && (*p != '\t') && ((i == 0) || + ((*p != '=')))) + { + if (i < 29) + { + word[i] = *p; + i = i + 1; + }; + p = p + 1; + }; + word[i] = '\0'; + return (p); +} void lcase (s) /* convert word to lower case */ @@ -965,7 +992,7 @@ parseclef (s, word, gotclef, clefstr, newclef, gotoctave, octave) { int successful; skipspace (s); - *s = readword (word, *s); + *s = readword_with_ (word, *s); successful = 0; if (casecmp (word, "clef") == 0) { @@ -978,7 +1005,7 @@ parseclef (s, word, gotclef, clefstr, newclef, gotoctave, octave) { *s = *s + 1; skipspace (s); - *s = readword (clefstr, *s); + *s = readword_with_ (clefstr, *s); if (isclef (clefstr, newclef, gotoctave, octave, 1)) { *gotclef = 1; @@ -1743,13 +1770,6 @@ parsevoice (s) } event_voice (num, s, &vparams); -/* -if (gottranspose) printf("transpose = %d\n", vparams.transpose); - if (gotoctave) printf("octave= %d\n", vparams.octave); - if (gotclef) printf("clef= %s\n", vparams.clefstr); -if (gotname) printf("parsevoice: name= %s\n", vparams.namestring); -if(gotmiddle) printf("parsevoice: middle= %s\n", vparams.middlestring); -*/ } diff --git a/store.c b/store.c index b062b74..e8ad552 100644 --- a/store.c +++ b/store.c @@ -186,7 +186,7 @@ int main() */ -#define VERSION "4.88 February 22 2024 abc2midi" +#define VERSION "4.89 February 23 2024 abc2midi" /* enables reading V: indication in header */ #define XTEN1 1