[gsharp-devel] Gsharp progress report

Robert Strandh strandh at labri.fr
Wed Feb 15 18:35:38 UTC 2006

Dear mailing list member,

As promised, here is another Gsharp progress report, again mainly for
those who follow neither the CVS mailing list nor the #lisp IRC

I have worked on several different things since the last progress

  * Key signatures are now Gsharp objects (as opposed to just
    vectors) with their own protocol.  I did not change the external
    format yet again, and instead made it possible for the current one
    to deal with either representation; 

  * Gsharp can now handle elements with zero duration.  That turned
    out to be a major reorganization of the code.  This functionality
    will be used for elements such as key signature changes and clef

  * I changed the class hierarchy of elements according to a
    suggestion by Christophe Rhodes, so that there is now an
    additional class `rhythmic-element' that represents elements with
    non-zero duration; 

  * The external format for representing buffer objects has been
    modified, though Gsharp can still read the old format.  The new
    format is easier to extend with new types of objects.  Instead of
    using a dispatch macro character, there is now a single macro
    character `[', which is followed by a fully qualified symbol name
    that indicates the name of the class of the object;

  * I reorganized the command tables so that the one used by the
    command loop can be determined by the type of the current layer,
    and the type of the element preceding the cursor.  This makes it
    easier to use the same key strokes for different kinds of elements
    and different kinds of layers;

  * I started implementing ties.  The code for representing ties in
    the buffer seems to be working.  However, rendering ties is hard,
    and requires access to the book by Ted Ross, which I have now
    ordered so that I can finish this work.  Rendering ties turns out
    to be messy in other ways as well, since most rendering code at
    the moment works "vertically" by measures, whereas ties need to be
    processed "horizontally" by layers;

  * I introduced two new packages esa-buffer and esa-io (that I hope
    will become part of a separate ESA library one day) which contain
    code adapted from Climacs that manages buffer/file i/o in an
    application independent way.  I made Gsharp take advantage of
    these new packages to behave more like an editor application
    should, with named buffers and Emacs-style file i/o (C-x C-s, C-x
    C-w, etc);

  * Gsharp now has an `info pane' (what Emacs calls "mode line") that
    shows the name of the buffer, whether it needs saving, etc. 

Documentation changes:

  * I updated the documentation to reflect an old change from using a
    CLIM interactor pane to using an ESA minibuffer.  The
    documentation is still not fully up-to-date, nor is it complete,
    but it is better than it was. 

New score:

  * There is a new, partially-completed score in the Scores
    directory.  It is a tune used in a commercial on NZ TV.

Minor fixes:

  * Fixed a bug that made Gsharp crash for empty clusters.  These were
    used in one of the scores in the Scores directory, but I had not
    used that particular score to test Gsharp for a while.  Now, all
    the scores in the Scores directory should work;

  * Fixed a bug that ignored the explicit x-offset of elements.  This
    bug was introduced when the spacing algorithm was altered.  One of
    the scores in the Scores directory needs explicit x-offsets in
    order to avoid overlaps of elements in crossing voices;

  * The temporary midi file generated by the `play' commands is not
    put in /tmp.  It is still not uniquely named, nor is it cleaned

  * Fixed a bug that did not recognize modifications to lyrics
    elements so did not invalidate the corresponding element.  

Related fixes:

  * I modified the font viewer in the Fonts directory (another CLIM
    application) to play nicely with the others, and not destroy the
    port.  Now the viewer can be used from the CLIM Desktop.

That's all for this time.
Robert Strandh

Greenspun's Tenth Rule of Programming: any sufficiently complicated C
or Fortran program contains an ad hoc informally-specified bug-ridden
slow implementation of half of Common Lisp.

More information about the gsharp-devel mailing list