----------------------------------------------------------------------------- This is the change log for jcabc2ps, John Chambers' clone of abc2ps. Like the original program, this is all licensed under the terms of the GPL (GNU Public License). See GPL.txt for details. Send bug reports to: John Chambers ----------------------------------------------------------------------------- 2013.10.03 Fixed a bug that caused O: info to be remembered past the end of a tune and reused for the next tune if it lacked O: info. An X: line now causes the O: info to be erased. ----------------------------------------------------------------------------- 2010.06.02 Corrected handling of a case of "K: B Flat" that Bill Black found at the Fiddler's Companion. The code correctly interpreted this as B major, but noticed the 'F', and interpreted it as F clef (i.e., bass). The parseKey() routine now requires clef=F for this. Similarly for clef=C and clef=G. I wonder if anyone actually names clefs this way? ----------------------------------------------------------------------------- 2010.01.15 Found code for drawing endings and adjusted them so they are somewhat lower and the verticals almost reach the top line of the staff. The changes were in the def_ends() routine. ----------------------------------------------------------------------------- 2009.12.30 Fixed compile problem with a name conflict caused by POSIX 2008: There is now a library getline() routine. I renamed our getline() to getaline(), which fixes it until some standard introduces that name. We alread had a get_line() routine, so that was out. ----------------------------------------------------------------------------- 2009.07.12 Fixed bug reported by Jon Finger: In parse.c, parseKey(), the variable k may be used before it's initialized. I added "=0" initializers for all the local ints, Just In Case. ----------------------------------------------------------------------------- 2009.02.03 Fixed problem with calls of Bskip(x), in which x got a huge random value. It seems to have been a weird problem with the macro definition of Bskip, and the fact that the actual bskip(x) function used the macro in its own definition. I rewrote the function declaration to not call Bskip, but to be the correct declaration instead. ----------------------------------------------------------------------------- 2007.01.21 Got patches from Solomon Foster who implemented both the !ann! and +ann+ annotations, and added a !segno! symbol. He also fixed a few bugs in the handling of multiple annotations. ----------------------------------------------------------------------------- 2006.09.15 Tested the handling of files with UTF-8 titles and lyrics. After a few minor tweaks, the PS output seems to work fine, and contains the (Russian, Chinese, Arabic) text in UTF-8 encoding. But I can't find software that displays or prints it correctly. Browsers will display the ABC correctly if they're told that it's UTF-8, which can be done with apache by including ".utf8" somewhere in the file name. ----------------------------------------------------------------------------- 2006.03.14 Expanded the title code to handle up to 6 titles. This should be rewritten as an array of titles, to avoid this problem in the future. ----------------------------------------------------------------------------- 2006.02.24 Added code to ignore the grave accent (`) char entirely. This is used by a few ABC tools to pad things to make them line up vertically. ----------------------------------------------------------------------------- 2005.01.16 Made both "ach" and "gch" work in voice declarations, to be consistent with the new "accompaniment chords" terminology, replacing "guitar chords". Some older abc uses gch=0 to suppress chords; newer abc uses ach=0. ----------------------------------------------------------------------------- 2005.01.06 Corrected bug that made +o non-functional in some cases. Modified buf[] to be a char* instead, malloc'd at run time, and increased BUFFSZ to 100000. Added V_jcabc2ps environment variable, as synonym for D_jcab2ps. ----------------------------------------------------------------------------- 2004.12.15 Tom Palarz and Limin Wang, two students in D.J. Bernstein's Fall 2004 UNIX Security Holes course (Dept of Mathematics at the University of Illinois at Chicago), discovered a remotely exploitable security hole in the parse.c switch_voice() routine. The t1[] and t2[] arrays were filled without bounds checks. They generated a demo of a bogus V: declaration that generates code that deletes a file. I added the t1z and t2z bounds pointers, plus overflow checks. [The arrays should also be made dynamic to avoid truncation.] ----------------------------------------------------------------------------- 2004.03.23 Incorporated the fonts in fonts.fmt as builtin fonts, so that fonts.fmt is no longer read by default. It can still be read via a +F option. One good question: Is there a list of reliable, universally-available fonts? ----------------------------------------------------------------------------- 2004.01.21 Incorporated half-sharp and half-flat code from Jeff Senn () and added a few abc/QT* tests. Now I should incorporate this into a few of my Scand and Scottish tunes ... ----------------------------------------------------------------------------- 2003.12.11 Completed (I think) the implementation of "chord lengths". This allows the use of note lengths after the final ']' of a chord. Each note in the chord may have a length, which is multiplied by the chord's length. ----------------------------------------------------------------------------- 2003.07.04 From Manuel Reiter : The character-handling now includes the following for all letters: \~x x with tilde above \'x x with acute accent \`x x with grave accent \=x x with macron (dash) above \^x x with circumflex \.x x with dot above \ux x with breve above \vx x with hacek/caron above \kx x with cedille/tail/ogonek below ----------------------------------------------------------------------------- 2003.04.07 The sequences \'Y and \'y now correctly produce accented Y and y chars. ----------------------------------------------------------------------------- 2003.01.28 V: definition lines can now be in the header section. Bug fixed: Bombing while parsing a weird "M:C6=140" line. ----------------------------------------------------------------------------- 2002.11.05 %%textbegin and %%textend Due to time spent diagnosing problems from these mispelings, I added them as synonyms for the %%begintext and %%endtext commands. Or is it the other way around? ----------------------------------------------------------------------------- 2002.11.02 thin+thick+thin triple bars The symbols |[| and |]| now correctly draw a thin+thick+thin triple bar in the middle of a staff. ----------------------------------------------------------------------------- 2002.09.30 Simplified EPS output option The EPS output is confusing: A name is needed because EPS is written one tune per file, and a 3-digit counter is added before the '.' in the output file name. The '+E' option now takes a file-name argument just like the '+o' option. What to do if no name is given is still not decided. What will be done now is to write them all, catenated, to stdout. Some PS software may be able to handle this ... ----------------------------------------------------------------------------- 2002.09.28 Fixed bug in |-less [ endings. Endings with just [ but no | weren't drawn when they were at the start of a line. ----------------------------------------------------------------------------- 2002.09.27 Bug fix: Wrong adjustment for V:...clef=bass Fixed a bug that sometimes put notes on the wrong line when clef=bass was used in a voice description. It was a wrong sign. ----------------------------------------------------------------------------- 2002.09.18 Option revision Converted the rest of the command-line options to consistently use '+' for "yes" or "enable" and '-' for "no" or "disable". This should help me keep my sanity when writing complicated commands. And it should make a general web interface a lot easier to write. ----------------------------------------------------------------------------- 2002.09.15 Tenor clef Added "tenor" as a clef name. It's really just an alias for "treble-8". ----------------------------------------------------------------------------- 2002.05.21 Option revision Converted the 'B' option to use "+B" for "on" and "-B" for "off". Also, the numeric arg may be attached or in the next arg. ----------------------------------------------------------------------------- 2002.05.20 Quoted ending text Added code to parse_ending() to recognize ["text" as an ending label. This should handle most of the special-case endings. ----------------------------------------------------------------------------- 2002.04.25 Option revision Added F to the list of +/- options. The following are recognized: jcabc2ps Foo.abc +F _75 % Read format from _75.fmt jcabc2ps Foo.abc +F_75 % Read format from _75.fmt jcabc2ps Foo.abc -F % Don't read a format file (default) ----------------------------------------------------------------------------- 2002.04.15 Option revision Started the process of revising the confusing command-line options. First (and probably most difficult) revision: The -O option is gone. The default PS output is to stdout, and all diagnostic output is to stderr. The 'o' option uses '-o' to mean "disable" and '+o' to mean "enable". For "+o", a file name can be appended (with or without a separating space); the default is stdout. This allows jcabc2ps to be used in pipelines like an ordinary unix filter process. If you want PS output, you can now ignore this option, and use >foo.ps to name the output file. The following are equivalent: jcabc2ps Foo.abc -o Foo.ps % Write output to Foo.ps jcabc2ps Foo.abc -oFoo.ps % Write output to Foo.ps jcabc2ps Foo.abc >Foo.ps % Redirect output to Foo.ps Part of the motive for this was writing the PShdr and PSftr tools that add header/footer info to arbitrary PS files. You can now do something like: jcabc2ps Foo.abc | PShdr Foo "" Foo | PSftr %D $(URL) %P >Foo.ps to get a page with the name at the top left and right, the date on the bottom left, the page number on the bottom right, and a URL at bottom center. The -n option is now +n; -n means to suppress printing the notes. The -x option is now +x; -x means to suppress the index numbers. The -b and -c options are less confusing: +b (break) means to break at all line ends, even if there's a \. -b means to honor \ at the end of a line. +c (continue) means to act as if all lines ended with \. -c means honor line/staff breaks. This is still somewhat confusing. The default is -b -c. The use of +/- option flags to mean "enable/disable" or "yes/no" is being encouraged in some circles ... The Makefile no longer makes any ps files by default. There were getting to be just too many test "tunes". Use "make test" to get them all. ----------------------------------------------------------------------------- 2002.04.01 Option revision The 'i' option has been changed to use the +/- system; +i enables interaction and -i disables it. Also, the help messages have been modified to show the changed options. The jcabc2ps.d document has been started, and information collected from various other places. ----------------------------------------------------------------------------- 2002.01.23 Spurious bar lines Added code to parse_bar() to reduce extra bar lines. These now work without any warnings: ||: ... :|| [|: ... :|] ||| ... ||| [|| ... ||] ----------------------------------------------------------------------------- 2001.11.29 Balkan tempos. This now works: Q: 4/8 3/8 4/8=70 The result is three notes (half, dotted eighths, half) plus "=70" drawn in the "tempo" slot above the staff. Now if we could only get the makers of electronic metronomes to implement Balkan rhythms ... ----------------------------------------------------------------------------- 2001.03.24 Clefs and Voices. Clefs with -8 and +8 modifiers. The clefs may have -8 or +8 appended, and the little 8's will be drawn below or above the clef. This doesn't affect anything else. Example: K: G treble+8 % piccolo or soprano recorder clef K: G treble-8 % tenor vocal clef K: F bass-8 % contrabass viol K: lines accept clef= and middle= In K: lines, only the bare words "treble", "alto" and "bass" were allowed. Now you can prefix them with "clef=", as is done in V: lines. Also, you can specify the mapping of ABC letters to staff lines with the "middle=" field. The defaults are: clef=treble middle=B clef=alto middle=c clef=bass middle=d Some ABC programs use a different mapping, for which the clefs are drawn but notes still have their treble values, giving bass notes with lots of commas. This sort of ABC can be handled by adding to the K: lines: K: ... clef=alto middle=C K: ... clef=bass middle=D, As a special kludge, by popular demand, we also accept the following: V: ... treble, % same as clef=treble middle=B, V: ... alto, % same as clef=alto middle=C V: ... bass,, % same as clef=bass middle=D, ----------------------------------------------------------------------------- 2000.07.18 Extended keysigs and repeats Implemented extended key signatures of the form: K: where all three of the fields are optional. If both and are given, the appropriate accidentals are generated. If there is a list of in addition, they are added to the mode's accidentals. K: gives only the listed accidentals; the tonic is effectively ignored (but may be used by other software such as search programs). Lots and lots of log messages added. ----------------------------------------------------------------------------- 2000.05.24 Extended ending syntax. The syntax for an ending may be any string consisting of the characters "0123456789,-x". The string is simply copied to the output under the ending bracket. Repeats have been extended in two ways. The colons at the start or end of a repeat may be repeated, and they will all appear in the music. Thus the notation |:: ... ::| means to play the phrase three times. Multiple endings may be indicated by any string of "0123456789,-.x" characters after a bar line. A four-times repeat with two endings might be: |::: ... |1,3 ... :|2,4 ... :| ----------------------------------------------------------------------------- 2000.05.20 Branch created by John Chambers Renamed abc2ps to jcabc2ps to make clear the split. ----------------------------------------------------------------------------- 2000.05.20 --------- jcabc2ps version 2.0 (experimental) -------------------- Branch created by John Chambers. It's version 2.0 to emphasize that it's a new edition. Also, I abandoned my first try at cloning abc2ps, and started over. This means that the first "released" version should be fairly clean, with the false starts all eliminated. I renamed abc2ps to jcabc2ps to make clear the split. This also makes it easy to keep the original abc2ps around for easy comparison. 2000.05.00 ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- 2000.05.20 The 'y' invisible rest added by cloning code for 'x' invisible rest. These are synonyms for a formatter like abc2ps. The differences is: The 'x' rest is played; the 'y' rest is not. Both produce a L-width space in displayed/printed music. ----------------------------------------------------------------------------- 1999.12.31 ----- Version 1.4.0 (experimental) ----- ----------------------------------------------------------------------------- 1999.12.13 Fixed slurs/ties into first and second endings. 1999.12.06 added audio playback. ----- Version 1.4.0 ----- Chords, grace notes, multiple voices, and repeats work. Note decorations are ignored. Usage: Flag -a instructs to write audio file Abc.au together with the usual postscript output. It is not possible to get the audio file alone. Flag -a implies -o. The tempo can be set with flag -Q and defaults to 100 quarter beats per minute. Thus: abc2ps -o infile - makes Postscript only abc2ps -o infile -a - makes both Abc.au and Postscript abc2ps -a infile - also writes both files abc2ps -a infile -Q 160 - does the same with tempo Q=160 To compile: you can use the supplied audio functions in sox.h (taken from playabc) or (on a Sun) use the system library. Edit Makefile to set CC, CFLAGS, and LDFLAGS appropriately then type make. The waveforms are generated on the fly, which is a bit slower than writing Postscript only. Try adding -O to CFLAGS if things work to speed up the program. ----------------------------------------------------------------------------- 1999.12.00 ----- Version 1.4.0 (experimental) ----- ----------------------------------------------------------------------------- 1999.07.08 Improvements by Christoph Dalitz: o Source spread over several source files. Makefile added. o cap_str (util.c): system call toupper used, so that umlauts are translated as well (depends on locale) o isdigit (util.c): removed (are already in ctype.h) o isblank (util.c): replaced with isblankstr (confusion with isblank in ctype.h) o def_staff (syms.c): linewidth increased (0.6 instead of 0.5) o new clef "treble8" (modern tenor clef) ----------------------------------------------------------------------------- 1999.00.00 ----- Version 1.3.2 ----- -------------------- jcabc2ps version 2.0 (experimental) -------------------- 1998.08.15 ----- Version 1.3.2 ----- ----------------------------------------------------------------------------- 1998.08.10 Added new codes for accents (cf. sample.abc): k: Accent which looks like > K: Accent which looks like an upside-down V. ----------------------------------------------------------------------------- 1998.08.05 Added bar numbering and bar labels. Bar numbers: to switch on bar numbering, use flag -k where: -k 1 numbers every bar -k 5 numbers every fifth bar, etc. -k 0 numbers the first bar in every staff. or, use the equivalent pseudocomment %%barnumbers . (Note: -k was used because it sounds a bit like "count".) The program counts through the bars automatically, trying to do the right thing at first and second endings. Namely: it remembers the bar number at the start of the first ending, then resets to that value at the start of the second ending. So, if there is a tune with 2x8 measures with first and second endings after the first 8 bars, we still end up with 16 bars in total. Within one tune, bar numbers are counted through over parts boundaries. However, if a T: title appears inside a tune, the bar number is reset to 1. You can use an empty T: line to reset the bar number without actually writing a title. Bar labels: This is intended for large letters A, B, C... to mark specific points in the music. They are coded by using a syntax similar to guitarchords, but placed before a bar line instead of a note or rest, e.g.: | abcd "A"| ABCD | places the letter A over the second bar line. Just in case somebody wants a label on the first bar (which is often not preceded by a bar line), a new symbol [|] was introduced for an "invisible" bar line. Fonts for bar numbers and bar labels: These can be set in the usual way with the two pseudocomments %%barnumberfont and %%barlabelfont. In printed music, the bar numbers are often made more visible by putting a box around them. This is now also possible. In fact, a box can be put around most bits of text by adding the word "box" to the font specification, e.g.: %%barnumberfont Times-Italic 11 box This can be done for the title, guitarchords, vocals, etc. To switch on the box without changing the font style and/or size, the character * can be used, as in: %%titlefont * * box A reminder: to see all the style specifications use 'jcabc2ps -H' (for the standard format) or 'jcabc2ps -PH' (pretty2 format). This gives a list suitable for placing in a .fmt file. To modify settings for a single tune only, place the pseudocomments after the 'T:' lines and before the 'K:' line in the tune header. Examples: look at celloprelude.abc for examples of bar numbers and bar labels. Try 'jcabc2ps -maxv 8 -k0 bran5' or 'jcabc2ps -k0 bach' to see bar numbers at the start of the line, as is often used for scores. ----------------------------------------------------------------------------- 1998.07.20 Fixed bug overwriting when lvoiceid too short. ----------------------------------------------------------------------------- 1998.07.16 ----- Version 1.3.1 ----- 1998.07.12 A number of enhancements to format multi-stave music nicely. For examples, see files trio.abc bran5.abc voices.abc bach.abc. In detail: indentation of the first staff, labels for voices, braces and brackets to group voices, and some additional parameters in the V: line to control the output. As before, the syntax of the V: line is V: