╔══════════════════════════════════════════════════╗
                                                            
                T H E    M P G    F I L E    F O R M A T    
              ════════════════════════════════════════════  
            ╚══════════════════════════════════════════════════╝

                 ┌────────────────────────────────────────┐
                 │ <shft> F1  =  Toggle to regular window │
                 └────────────────────────────────────────┘

    ┌──────────────────────────────────────────────────────────────────┐
                                                                    
          If you are reading this document for the first time and   
      are unfamiliar with the commands for scrolling the text, you  
      should be aware that <ctrl> ▲ (hold down the <ctrl> key and   
      push the cursor UP key) will scroll the text UP and <ctrl> ▼  
      will scroll the text DOWN.  You can also use the PageUp and   
      PageDown keys to scroll quickly through the document.         
                                                                    
    └──────────────────────────────────────────────────────────────────┘


1.1       MPG stands for Music Page File.  Files with the .mpg extention
      are supposed to be music page files and to follow a specific format.
      A music page file represents an (ASCII) encoded version of a page
      of musical notation.  The Dmuse program has a utility for
      constructing musical notation from music page files.

1.2       A music page file is basically a list of glyphs (characters)
      from a set of music fonts.  The musical notation is constructed
      from this list of glyphs.  If you are printing music, the music
      fonts must first be downloaded to the printer; if you are
      displaying music, the display utility puts the glyphs on the
      screen in the same manner that the printer puts them on the
      page.

1.3       To construct a page of music, you need to have a list of
      glyphs (characters) together with their location on the page.
      A musical note, for example, consists of a note head, one or
      more pieces of stem, possibly a flag, possibly an accidental,
      possibly some leger lines, etc., etc..

1.4       Since the HP PCL3 printer language is a full page language,
      the order of glyphs in the list is not relevent.  But for
      purposes of editing, some choices of ordering are better than
      others.  Let us imagine, for example, that we want to move the
      musical note described in the previous paragraph to a new (x,y)
      position on the page.  In order for the note to stay together,
      we must move all parts of it by the same amount.  It makes
      sense, therefore, to think of the note as a single unit, even
      though it has several parts.

1.5       To implement this concept, we define something we call an
      object.  The object is the basic unit of musical notation.  The
      object may consist of several glyphs, as in the case of a note.
      We call each of these glyphs, sub-objects, because they are
      members of the thing we call an object.  The position of
      sub-objects is specified in relation to the object to which
      they belong.  This way, if we want to move a note, we simply
      move the object, and all the parts of it (the sub-objects) will
      move together.

1.6       All basic units of musical notation (objects) are attached
      to a staff line (in our system of representation).  It therefore
      makes sense to specify the location of an object in relation to
      the staff line to which it belongs.  This way, if we want to
      move a staff line, all notes and other notation connected with
      that line will move together.

1.7       All staff lines belong to a system.  A system may have one
      or more staff lines associated with it.  As before, it makes
      sense to specify the location of a staff line in relation to
      the system to which it belongs.

1.8       Systems represent the highest level in the location hierarchy
      on the page.  The location of a system is therefore specified by
      absolute (x,y) co-ordinates on the page.

1.9       To summarize, let us take the example of a sharp (♯) attached
      to a note.  The absolute (x,y) of that sharp will be:

            The absolute location of the system (x,y), plus
            the (⌂x,⌂y) offset to the staff line in the system, plus
            the (⌂x,⌂y) offset to the note on the staff line, plus
            the (⌂x,⌂y) offset to the sharp (♯) from the note.

1.10      Much of musical notation can be represented in the manner
      described thus far: notes, rests, text attached to a note,
      musical ornaments, single articulation marks, dynamics, musical
      directions, bar lines, time signatures, key signatures, clefs,
      basically anything that stands by itself on the muscal page.
      There is a class of things, however, that cannot be represented
      as objects, because the position of these things depends on
      the position of more than one object.  Items in this class
      include: ties, beams, slurs, endings, long trills, transposition
      lines, figure contination lines, tuplets (and their brackets),
      dynamic wedges, and dashes associated with changes in dynamics,
      tempo, etc.   We call this class of things, super-objects,
      because their position (and shape) depend on more than one
      object.

1.11      In actual fact, most super-objects are printed using
      glyphs from the music fonts; however, they are not represented
      in the music page file in this manner, because, if we move
      a object which has a super-object associated with it, the
      position and the shape of that super-object (and therefore
      the glyphs that comprise it) will change.


    ──────────────────────────────────────────────────────────────────


2.1       A music page file consists of list of variable length
      records.  The order of the records is an integral part of
      the representation.  There are 14 types of records.  The
      character in column of a record identifies its type.

         Record Type                       Identifier (column 1)
       ──────────────────────────────      ─────────────────────
         Header Record                        Z
         Page oriented text                   X or Y
         System (page oriented)               S
         Staff Line                           L
         Objects                              J
         Sub-objects                          K
         Text (form of sub-object)            T
         Words (form of sub-object)           W
         Attribute (form for sub-object)      A
         Super-objects                        H
         End of Music Line                    E
         System Bar                           B
         Comment record                       @

2.2       The basic location hierarchy is: System ─► Line ─►
      Object ─► Sub-object.  The order of records in the music page
      file reflects this hierarchy.  A system record remains active
      in the list until a new system record is encountered.  A staff
      line record remains active until an End of Music Line record is
      encountered.  Objects on a staff line are listed in the time
      order (left to right) in which they occur on the staff line.
      The sub-objects that belong to an object are listed directly
      below the object.  System bars are listed after the last staff
      line of a system has been fully represented.  Page oriented
      text should be listed before or between systems.  Header records
      belong at the beginning of the file.


    ──────────────────────────────────────────────────────────────────

                        ┌─────────────────┐
                        │  Record Formats │
                        └─────────────────┘

          Each record in the file consists of two or more fields.
      All fields in a record are deliniated by a single space.
      Fields which contain text usually occur at the end of a record.
      In specifying (x,y) locations and offsets, x increases as you
      move to the right; y increases as you move down.  This is not
      the normal convention for (x,y) co-ordinates.  All distances
      and offsets are measured in dots.  For the moment, all music is
      represented at 300 dots = 1 inch.


      I. Header Information (required for all MPG page specific files)

         Field 1: Identifier = Z
         Field 2: information type (a number from 1 to 7)
         Field 3: actual data

                               Examples
                             ════════════

         1. In this example we have the full score of Beethoven's
              5th Symphony, sub-divided by movements.  This file
              represents the first page of the first movement.
              The resolution is 300 dots/inch, and the interval
              between staff lines is 14 dots.

                 Field 2                 Field 3
               ─────────────           ─────────────────────────
               1 = Composer:           Ludvig van Beethoven
               2 = Work:               Symphony No. 5 in C minor
               3 = Sub-division:       Movement 1
               4 = Representation:     Full Score
               5 = Resolution:         300 dots/inch
               6 = Notesize:           14 dots per staff line
               7 = Page:               1

         2. In this example we have a set of parts for Beethoven's
              5th Symphony, sub-divided by instruments.  This file
              represents the first page of the first violin part.

                 Field 2                 Field 3
               ─────────────           ─────────────────────────
               1 = Composer:           Ludvig van Beethoven
               2 = Work:               Symphony No. 5 in C minor
               3 = Sub-division:       Violin I
               4 = Representation:     Complete Parts
               5 = Resolution:         300 dots/inch
               6 = Notesize:           14 dots per staff line
               7 = Page:               1

         3. In this example we have the first violin part for
              Beethoven's 5th Symphony, sub-divided by movements.
              This file represents the first page of the first
              movement.

                 Field 2                 Field 3
               ─────────────           ─────────────────────────
               1 = Composer:           Ludvig van Beethoven
               2 = Work:               Symphony No. 5 in C minor
               3 = Sub-division:       Movement 1
               4 = Representation:     Violin I
               5 = Resolution:         300 dots/inch
               6 = Notesize:           14 dots per staff line
               7 = Page:               1

         The point of these examples is to show various ways in
         which a data set can be sub-divided.  At the present time,
         only one level of sub-division is possible.  In the second
         example above, we cannot sub-divide the Violin I part by
         movements, because the Violin I is already a sub-division
         of the catagory, "Complete Parts."   If we want to sub-divide
         the instrumental parts by movements, then we must have a
         separate data set for each instrumental part.

         (End of Header Information)

     II. Page oriented text

         Field 1: Identifier = X or Y
         Field 2: font number
         Field 3: x co-ordinate of beginning of text
         Field 4: y co-ordinate of text line
         Field 5: ASCII text

         When the Field 1 identifier is "Y" (possible tagged text),
         Field 2 may contain the value 0, in which case the line is
         neither displayed nor printed.  This feature is useful for,
         among other things, tagging page numbers which are not printed
         (beginnings of chapters, etc.)

         Field 3 is normally terminated by a blank, but in some cases it
         may be terminated by the 'C' character or the 'R' character, in
         which case the 'C' means center the string on the given x
         co-ordinate, and the 'R' means end the string on the given x
         co-ordinate.

         The ASCII text may contain font change instructions.  The
         sequence is the "!" character, followed by a two digit number
         between 31 and 48 followed by the "|" character, which serves
         as a terminator to the font change instruction.

         Special case: If the page text record has only two fields, the
         letter X and a number, then the number is interpreted as a new
         value for notesize.

         Tagged Page Text: If the field 1 identifier is Y, this record
         may contain a system of tagged fields.  Listed below are the
         tagging sequences and their functions.

           \< = begin tag structure.  A tag structure has two components:
                  the tag, and the data field being tagged.  The tag
                  comes first and may contain any ASCII characters
                  except the "|" character, which is interpreted as
                  "End of Tag."  Immediately following the "|" is the
                  data field.  This is terminated by the "end tag
                  structure" sequence.
           \> = end tag structure.
           \] = break tag structure.  It is possible for a tag data field
                  to continue over to a line or page boundary.  In this
                  case, the tag structure must be broken at the end of
                  the line and restarted at the beginning of the next
                  line.
           \[ = restart tag structure.  A tag structure can only be
                  restarted if it was broken on the previous line (or
                  last line of the previous page).  It is a requirement
                  that the tag (first component of the tag structure) be
                  restated.  In theory, the software could reconstruct
                  the tag, but in the case where the data field extends
                  over several lines, this could prove cumbersome.
                  Therefore, following the "\[" sequence comes the tag,
                  followed by the "|" character, followed by a
                  continuation of the data field.

         Under this structure, nested tags are also possible.

    III. Systems (page oriented)

         Field 1: Identifier = S
         Field 2: 0
         Field 3: x co-ordinate of the system on the page
         Field 4: y co-ordinate of the system on the page
         Field 5: horizontal length of the system
         Field 6: vertical length of the system
         Field 7: number of lines (L) in the system
         Field 8: control string in double quotes (null string allowed)

            The control string describes how the lines of the system
            are bound together on the left, and where bar lines stop
            and start between the staff lines.  The control string
            consists of the following elements:

               [  =  start bracket
               ]  =  end bracket
               {  =  start brace
               }  =  end brace
               (  =  start bar line
               )  =  end bar line
               .  =  part with a single staff line
               :  =  part with a grand staff (piano)

            What defines a system (holds it together) is a single
            vertical line on the left.  To the left of this line can
            appear an arrangement of brackets and braces, which help
            the reader group the lines in the systme.

            The bar lines in a system have their own (vertical) pattern
            of starting and stopping.  These are indicated in the comtrol
            string by the placement of the '(' and ')' characters.  The
            '(' character indicates the start of a bar line on the top
            staff line of the part indicated by the next dot (or ,:;);
            and the ')' character indicates the end of a bar line on the
            bottom staff line of the part indicated by the previous
            dot (,:;).

            Examples:  (.)     creates a bar line through one set of
                                 staff lines
                       (:)     creates a bar line through a grand staff
                                 (two sets of staff lines)
                       (.)     creates a bar line which starts at the top
                                 of the first staff line and ends at the
                                 bottom of the second staff (i.e., two
                                 independent parts with a bar line
                                 connecting them together).
                       (.)(.)  creates a bar line through each of the
                                 staff ;omes separately, with no
                                 connection between them.

            All segments of a system bar line must be specified.  The
            control string "{..}" will produce a brace on the left, but
            no bar lines will appear.  In this case, one must either
            specify "{(.)(.)}", meaning two bar lines with no connection,
            or "{(..)}", meaning one bar line crossing both staff lines.

            As a short cut for convenience, the '[' character also doubles
            as a '(' character, and the ']' character also doubles as a ')'
            character.  This allows one to write "[....]" as a shortcut for
            "[(....)]".

            The staff lines in a system are normally of the same size, but
            it is possible to combine staff lines of different note sizes
            in the same system.  When this is done, the print and display
            software must decide what fort size to use for printing the
            various bar line, braces, and brackets.  At the moment, the
            decision is made in the following way:

            1. The left line, and all braces and brackets are printed
               using the same font size.  The default is to use the font
               size from the bottome staff line.  If the size from a
               different staff line is desired, this should be indicated
               by replacing the dot for that staff line witha comma, or
               in the case of the grandstaff, replacing the colon with
               a semi-colon.  If more than one comma/semi-colon appears,
               the largest of the indicated sizes will be used.

            2. As stated above, bar lines can run through one or more
               staff lines, and they can be printed in different sizes
               (widths).

               (a) If a bar line run through only one staff, then it
                   is pritned in the font size of that staff.

               (b) If a bar line run through multiple staves of the
                   same font size, then it is printed in that font size.

               (b) If a bar line connects staves of different font sizes,
                   the default size for the bar line is given by the size
                   of the bottome staff.  If the size of another staff
                   is desired, this in indicated by replacing the dot
                   for that staff line with a comma, or in the case of
                   the grand staff, replacing the colon with s semi-colon.
                   If more than one comma/semi-colon appears, the largest
                   of the indicated sizes will be used.

            The control string for a score of a piano concerto with
            four woodwinds, timpani, paino and strings might look as
            follows:  "[(....)(.)(:)({..}...)]"

         (End of Systems)

     IV. Staff lines (system oriented)

         Field 1: Identifier = L
         Field 2: y offset in the system.  (y = 0 for top line)
         Field 3: text offset(s) from line (up to 10, separated by |)

            The text offset is the vertical distance between the top
            line of the staff and the base line of the text.  We are
            talking here about text underlay, i.e., text that goes
            with the music.  The representation permits up to 10
            lines (verses) of text.

         Fields 4--7:  parameters carried over from this line (musical
                         part) on previous system.

           Field 4: dyoff(s)
           Field 5: uxstart(s)
           Field 6: backloc(s)
           Field 7: xbyte(s)

              The parameters in fields 4 to 7 relay certain information
              required for the printing of text underlay.  If this part
              on the previous system of music (which might be on a
              previous page and therefore not even part of data in this
              file) ended with text that was being extended by dashes
              ( - - -) or a heavy line ( _____ ), these dashes or the
              heavy line would need to be continued under the present
              line of music.  xbyte, contains the terminating punctuation
              for a heavy line.

              In the case of fields 4, 5 and 6, the parameters are
              numeric and if there is more than one line of text, there
              will be multiple parameters, separated by |.  Field 7 is
              a character, and if there is more than one line of text,
              there will be multiple characters in this field.

         Field 8: y offset to second line of grand staff line (0 = none)
         Field 9: notesize (optional; 0 = no information supplied)

         (End of Staff lines)

      V. Objects

         Field 1: Identifier = J
         Field 2: type of object (a letter code)

                  B = bar line
                  C = clef
                  K = key signature
                  T = time signature
                  D = directive (e.g. time word, etc)
                  S = other symbol
                  N = note
                  R = rest
                  G = grace note
                  Q = cue note
                  F = figures
                  I = isolated directive or symbol (not
                        associated with a note, rest, or figure)
                  M = mark (a dummy object used mostly for
                        starting or ending super-objects such
                        as ties or slurs that extend beyond the
                        line)

         Field 3: object code (# = number)

            The meaning of this number depends on the type of object.

              Object type
              ───────────
               Bar line:   # = measure number if there be one,
                                 otherwise zero.

               Clef:       # = clef code

                                4 = treble clef (G-clef on line 4)
                               13 = alto clef   (C-clef on line 3)
                               12 = tenor clef  (C-clef on line 2)
                               22 = base clef   (F-clef on line 2)
                               34 = transposed treble clef (tenor
                                       voice clef)

               Key:        # = key code

                                0 = no flats or sharps
                                1 = 1 sharp (etc.)
                               -1 = 1 flat  (etc.)

               Time sig:   # = time code (100 * tnum + tden)

                                tnum = time numerator
                                tden = time denominator
                                special cases:
                                   1 1 = common time
                                   0 0 = alle breve
                                   2 0 = simple 2
                                   3 0 = simple 3

               Directive:  # = print flag

                           0 = print always (parts and score)
                           bit 0 set = print in parts
                           bit 1 set = print in score
                           bit 2 set = print if top part in score
                           bit 3 set = print if bottom part in score
                              (bit 1 over rides bits 2 and 3)

               Symbol:     # = symbol type

                           0 = not specifically identified
                           4 = extended rest
                           6 = whole measure rest

                           From the standpoint of typesetting for
                           a score the major difference between a
                           directive and a symbol is that a symbol
                           will always be printed whether or not
                           the part stands alone or is part of a
                           score (e.g., letter dynamics), whereas
                           a directive can be "made invisible" in
                           parts that are not at the top or the
                           bottom of a score (e.g., the segno
                           sign).

               Notes:      # = note type
               Rests:      # = rest type
               Grace note: # = note type
               Cue note:   # = note type

                                          Note types
                             ───────────────────────────────────────
                             11 = longa           5 = sixteenth note
                             10 = breve           4 = 32nd note
                              9 = whole note      3 = 64th note
                              8 = half note       2 = 128th note
                              7 = quarter note    1 = 256th note
                              6 = eighth note     0 = undefined

               Figure:     # = 0 always
               Isolated:   # = same as for Directives
               Mark:       # = 0 always


         Field 4: horizontal displacement from beginning of line

            For objects which are groups of notes (chords),
            the x co-ordinate is the position of the notes
            which fall on the proper side of the stem.  For
            stem up, the object's position is that of the
            note heads to the left of the stem; for stem down,
            the object's position is that of the note heads
            to the right of the stem.


         Field 5: vertical displacement from the first line
                    of the staff.

            For objects which are groups of notes (chords), the
            y co-ordinate is the position of the note which is
            farthest from the note-end of the stem (and hence
            closest to a beam, if there be one).  This is impor-
            tant for the proper setting of beams at print time.

            For objects to be placed on the lower staff of the
            grand staff, 1000 will be added to the displacement.
            This means that the print program must check the
            range of the displacement before placing the object.

            For Bar type objects, which always have a
            y co-ordinate of 0, this field contains instead
            the bar line code:

                 1 = single light bar
                 2 = single heave bar
                 3 = dotted bar
                 5 = double light bar
                 6 = light-heavy double bar
                 9 = heavy-light double bar
                10 = heavy-heavy double bar

            In case the bar object extends to the lower staff of
            the grand staff, 1000 is added to the bar line code.


         Field 6: print code (or if < 32, number of sub-objects)

            If this object can be printed with one glyph (character),
            then this field contains the glyph number (which will be
            32 or greater).  Otherwise, this field contains the
            number of sub-objects required to represent this object.


         Field 7: space node number

            This field is used to line up notes in a score.  The
            measure is is divided into 6912 (27 x 256) parts.
            Divisions run from 1 to 6912.  Each object is assigned
            the division number which most closely approximates
            it time location in the measure.

         Field 8: distance increment flag.

            This flag describes the distance from the preceding
            object, as well as an attribute of the object.

               0 = preceding distance should remain fixed
                    at print time

               # = preceding distance may vary at print time;
                    parameter is the notated duration of the preceding
                    object on this line, measured in units such that
                    576 = quarter note.

               10000 = object will be centered between bar lines
                        (used only with whole measure rests)

            Fields 7 and 8 do not effect the actual display and
            printing of the music, but they play an important role
            in the automatic editing of music (a possible future
            application for Dmuse).

         Field 9: number of super-objects associated with this object

         Fields 9a,b...,: super-object numbers

            A Super-object record will appear in the file after all
            objects that relate to the super-object have appeared.
            For example, a group of notes (note objects) may be
            connected by a beam.  After the last of these note
            objects has appeared as a record in the file, the
            super-object record representing the beam itself will
            appear.

         (End of Objects)


     VI. Sub-objects (these must follow directly after their associated
                        objects)

         Field 1: Identifier = K
         Field 2: horiz. displacement, relative to object co-ordinate
         Field 3: vertical displacement, relative to object co-ordinate
         Field 4: print code of sub-object (glyph number)


    VII. Text (a form of sub-object attached to a note or rest)

         Field 1: Identifier = T
         Field 2: horizontal displacement of text, relative to object
         Field 3: vertical code (text line number between 1 and 10)

            The vertical code may be followed by the "|" character
            and a y offset.  The interpretation of the offset is
            a displacement from the normal position of the line.
            This allows us to move individual words (syllables) up
            or down relative to the normal height of the line.

         Field 4: ASCII string (blanks represented by "_" character)

            If this field = "~" (the tilda character),  this means
            that this note is the termination of a forward underline.

         Field 5: single byte field indicating presence of a forward
                    hyphen or underline character

               Byte code        Meaning
               ─────────   ──────────────────────────────
                  -        forward hyphen
                  _        forward underline character alone
                  .            "         "       "     followed by  .
                  ,            "         "       "        "     "   ,
                  :            "         "       "        "     "   :
                  ;            "         "       "        "     "   ;
                  !            "         "       "        "     "   !
                  ?            "         "       "        "     "   ?
                  *        no forward hyphon or underline (normal case).

         Field 6: space required by ASCII string (in dots)

            Strictly speaking, this field is unnecessary, since Dmuse
            can calculate this space from the ASCII string in field 4.
            But it saves time to have this information, so it is
            included.

         (End of Text)

   VIII. Words (a form of sub-object attached to symbol)

         Field 1: Identifier = W
         Field 2: horizontal displacement of word(s), relative to
                     directive or symbol object
         Field 3: vertical displacement
         Field 4: font number
         Field 5: ASCII string (includine additional font designations)


     IX. Attributes (a form of sub-object attached to notes/rests)

         The purpose of attributes is to communication information
         about an object that is not represented precisely by
         purely graphical information.  An example is the duration
         of tuplets.  The tuplet super-object (H . X) references
         only the end points of a tuplet; there is no precise way
         to determine the remaining objects whose duration might
         be effected by the tuplet.  When converting music page
         files to SCORE pmx files, we need to know the precise
         duration of all notes.  The only foolproof way to convey
         this information is with an attribute.  Attributes are
         ignored in the printing process.

         Field 1: Identifier = A
         Field 2: type of attribute

         1. D = duration

            Field 3: numerator of duration
            Field 4: denominator of duration

               Duration is represented as a proper fraction.
                 1/4 = quarter note
                 1/2 = half note
                 etc.
               In terms of divisions (from stage2 source representation)
               the numerator is the number of divisions, and the
               denominator is four times the divisions per quarter.

            Field 5: tie (if present)

              (no field) = situation not determined (older files)
                0 = no tie
                1 = tie to following note
                2 = tie appended to selected pitches (nultiple pitches only)

                Note: In the case of a rest, field 5 may be used (optionally)
                      to indicate that the next duration in this track is
                      also a rest (a tied rest, in effect)

            NOTE: Field 5 was introduced in Feb-2006 and might be absent
                    from some older .mpg files.

         2. P = Pitch

            Field 3; track number (normally 1)
            Field 4; base-40 pitch number (C4 = 163)  (0 = rest)
            Field 5: tie (in case of multiple pitches and ties)

                0 = no tie
                1 = tie to following note

            NOTE: In case of multiple pitches, there will be multiple
                    A P ... records.  A P ... records should not precede
                    A D ... records

         (End of Attributes)

      X. Super-objects (these are things whose shapes depend on the
               locations of more than one object.  They generally follow
               after all of their associated objects have been described.

         Field 1: Identifier = H
         Field 2: super-object number
         Field 3: type of super-object

            There are currently eleven types of super-objects.  Since
            these represent quite different types of musical notation,
            the description of the remaining fields for each type of
            super-object will be given separately.

                            Types of super-objects
              ─────────────────────────────────────────────────────
                B = beam                E = ending
                T = tie                 R = long trills
                S = slur (dotted slur)  V = octave transposition
                X = tuple/bracket       F = figure extension
                W = wedge               N = null super-object (no action)
                D = word plus dashes

         Fields 4--: depend on the super-object type

         1. Beams    (type = B)

            Field 4: length of first stem (positive = stem up)
            Field 5: slope of beam
            Field 6: font number (full size vs. que size)
            Field 7: number of associated objects
            Fields 7a, b,...   beam codes

               beam code = from 1 to 6 digits

                  0 = no beam
                  1 = continue beam
                  2 = begin beam
                  3 = end beam
                  4 = forward hook
                  5 = backward hook
                  6 = single stem repeater
                  7 = begin repeated beam
                  8 = end repeated beam

                        1's digit = eight level beams
                       10's digit = 16th level beams
                      100's digit = 32nd level beams
                     1000's digit = 64th level beams
                    10000's digit = 128th level beams
                   100000's digit = 256th level beams

                  Example:  2 21 33   =   ╒═════╤═══╕
                                          │     ╞═══╡
                                          │     │   │
                                        ▐█▌   ▐█▌ ▐█▌

         2. Ties    (type = T)

            Field 4: vertical position of tied notes (position
                       measured in dots (300/inch) from top staff
                       line)

                     For ties on the lower grand staff, 1000 will
                     be added to this value.

            Field 5: horizontal displacement of first note head from
                       associated object (non-zero only with chords)

            Field 6: horizontal displacement of second note head from
                       associated object (non-zero only with hords)

            Field 7: horizontal displacement from note head one
            Field 8: vertical displacement from note head one
            Field 9: font number

            Field 10: situation flag

               interference     tips down       tips up
               stem   staff   space   line    space   line
               -----  -----   -----   ----    -----   ----
                no     yes      1       5        9     13
                no     no       2       6       10     14
                yes    yes      3       7       11     15
                yes    no       4       8       12     16

            Field 11: zero

         3. Slurs (and dotted slurs)    (type = S)

            Field 4: situation flag

                           bit clear            bit set
                         --------------       -------------
                bit 0:   full slur            dotted slur
                bit 1:   stock slur           custom slur
                bit 2:   first tip down       first tip up
           (*)  bit 3:   second tip down      second tip up
           (+)  bit 4:   compute stock slur   hold stock slur
                bit 5:   print slur           don't print slur

                (*) used on custom slurs only
                (+) used on stock slurs only

            Field 5--8:  position fields:

                For stock slurs, these are displacements added to
                   the note positions before the slur number is
                   calculated.  Displacements are measured in dots
                   (300/inch).  Horizontal positive is forward to
                   the right; vertical positive is down.

                For custom slurs, these displacements are the actual
                   starting point and ending points of the slur
                   relative to the first and second objects.

                Field 5: (extra) horizontal displacement from
                            associated object one
                Field 6: (extra) vertical displacement from
                            associated object one
                Field 7: (extra) horizontal displacement from
                            associated object two
                Field 8: (extra) vertical displacement from
                            associated object two

            Field 9--10:  parameter fields:

                Stock slurs:  Field 9:   post adjustment to curvature
                              Field 10:  beam flag  1 = set slur above beam
                                                    2 = set slur below beam

                Custom slurs:  Field 9:   vertical height parameter
                               Field 10:  length of flat portion as a
                                          percent of span between end
                                          points

            Field 11--12:  more parameters

                Stock slurs:  Field 11:  post adjustment to x-position
                                         negative = left; positive = right
                              Field 12:  post adjustment to y-position
                                         negative = up; positive = down


         4. Tuplets/brackets    (type = X)

            Field 4: situation flag

                           bit clear                   bit set
                         --------------              -------------
                bit 0:   no tuplet                   tuplet
                bit 1:   no bracket                  bracket
                bit 2:   tips down                   tips up
                bit 3:       0                       tuplet aligns with beam
                bit 4:   tuple near notes            tuple near beam
                         (bit 4 has meaning only if bit 3 is set)
                bit 5:   break bracket for number    bracket is continuous
                         (bit 5 has meaning only if bit 0 is set)
                bit 6:   number outside bracket      number inside bracket
                         (bit 6 has meaning only if bit 1 is set)
                bit 7:   bracket is square           bracket is curved
                         (bit 7 has meaning only if bit 1 is set)

            Field 5:  tuplet number:   value = 1000 * [second number] +
                        first or single number.

            Fields 6--10: parameters

               Case I: bit 3 of sitflag = 0 (tuple not aligned with beam)
                       or bit 3 of sitflag = 1 and bit 4 of sitflag = 0
                          (tuple aligned with notes of beam)

                  Field 6:  horizontal displacement from
                                  associated object one
                  Field 7:  vertical displacement from
                                  associated object one
                  Field 8:  horizontal displacement from
                                  associated object two
                  Field 9:  vertical displacement from
                                  associated object two
                  Field 10: not used

               Case II: bit 3 of sitflag = 1 (tuple aligned with beam)

                  Field 6:  horizontal post adjustment to tuple

                  Field 7:  vertical post adjustment to tuple

                  Field 8:  horizontal post adjustment to tuple

                  Field 9:  vertical post adjustment to tuple

                  Field 10: beam super-object number with which tuplet
                                  aligns

         5. Wedges    (type = W)

            Field 4: wedge size at left end (measured in dots)
            Field 5: wedge size at right end
            Field 6: horizontal displacement from associated object one
            Field 7: vertical displacement from top of staff
            Field 8: horizontal displacement from associated object two
            Field 9: vertical displacement from top of staff

         6. Word(s) plus dashes    (type = D)

            Field 4: horizontal displacement from associated object one
            Field 5: horizontal displacement from associated object two
            Field 6: vertical displacement from staff lines
            Field 7: spacing parameter
            Field 8: font designator

         7. Endings    (type = E)

            Field 4: situation flag

                      0 = ending with no number
                      1 = first ending
                      2 = second ending
                      3 = third ending
                      4 = fourth ending
                     11 = transposed 8av down
                     12 = transposed 8av up

            Field 5: horizontal displacement from associated object one
            Field 6: horizontal displacement from associated object two
            Field 7: vertical displacement from staff lines
            Field 8: length of left vertical hook
            Field 9: length of right vertical hook

         8. Long trills    (type = R)

            Field 4: situation    1 = no trill, 2 = trill
            Field 5: horizontal displacement from associated object one
            Field 6: horizontal displacement from associated object two
            Field 7: vertical displacement from associated object one

         9. Octave transposition     (type = V)

            Field 4: situation    0 = 8ve up, 1 = 8ve down
                                  2 = 15 up,  3 = 15 down
            Field 5: horizontal displacement from associated object one
            Field 6: horizontal displacement from associated object two
            Field 7: vertical displacement from associated object one
            Field 8: length of vertical hooks

        10. Figure extension    (type = F)

            The figure extension is a solid line indicating that a
            particular figure carries over to succeeding notes.
            There can be from 1 to 4 figures alligned vertically.

            Field 4: level   1,2,3 or 4
            Field 5: horizontal displacement from associated object one
            Field 6: horizontal displacement from associated object two

        11. Null super-object   (type = N)

            No additional fields

         (End of Super-objects)

     XI. End of Music Line

         Field 1: Identifier = E
         Field 2: xbyte(s) at end of line

            xbyte is the punction found at the end of a solid line
            ( ____ ).  * = no solid line (or no text).


    XII. System Bar

         Field 1: Identifier = B
         Field 2: bar type     Single bars   Double Bars
                               -----------   -----------
                               1 = simple    5 = double light
                               2 = heavy     6 = light-heavy
                               3 = dotted    9 = heavy-light
                                            10 = heavy-heavy
                                            25 = heavy-light with
                              99 = no bar            repeat dots

         Field 3: x off-set from beginning of line
         Field 4: number of breaks in line (to avoid interference with
                      text and other designations)
           Fields 5--: parameter pairs, beginning and ending of breaks


   XIII. Meta-data records

         These records are ignored by the display/print software, but
         they may contain important information relating to the
         description or structure of the data.

         Field 1: Identifier = @

         Some uses of @-records:

         1. Source IS.

            Field 2: "SOURCE:"

            Field 3: <File ID>

            Field 4: <[md4sum: ... ]>

            The idea is to represent all of the sources that contributed to
            making this page (or musical example).  The Source ID records
            should normally folow the Z-header records.  In cases where
            there are no Z-header records, the Source ID record should
            appear before the first system (and before any @ SYSTEM:
            records).

         2. Movement ID. + Info

            Field 2: "MVT:"

            Field 3: Type of data

              N = name  Field 4: = movement name

              P = part  Field 4: = part number
                        Field 5: = <sub-part numbers> enclosed in carrot
                                    bracket numbers separated by commas,
                                    null-set allowed
                        Filed 6: = part name

              L = line  Field 4: = line index number
                        Field 5: = <part numbers for each track> enclosed
                                    numbers separated by commas, no null set
                                    allowed.  If the first field inside the
                                    <..> string is an "x", this indicates a
                                    keyboard part, which is non-divisible and
                                    multi-track.  The numbers that follow,
                                    e.g., "<x,#,#,..>" are the part numbers
                                    assigned tp tje various keyboard tracks.
                        Filed 6: = line name

              Note: "part" means any part or group of parts.  If there are
                       oboes, then there are likely to be three parts:
                       oboe-1, oboe-2, and oboes.
                    "line" means any line compiled by the solfware for
                       purposes of make a score.  For the bass strings,
                       thre are often three lines: cello, basso, and
                       cello + basso.  These three lines never appear in
                       the same system; either the cello and bassp appear
                       as separate lines, or they appear combined on the
                       same, single line.

         3. System ID.

            Field 2: "SYSTEM:"

            Field 3: ASCII string

               The purpose of this record is to identify the composer,
               work, and movement to which this system belongs.  This
               information (if present) will be used by search programs
               to identify "hits."  This record should be located just
               above the System record to which it applies.

               There is an option t include a bar line number in this
               ASCII string.  If this is ot be used, the number must
               occur at the beginning of the string, and must be enclosed
               in < > brackets, e.g., ,28., with no space following.

         4. Line ID.

            Field 2: "LINE:"

            Field 3: line index number (for joining lines between systems)

            Field 4: ASCII string

               The purpose of this record is to identify the instrument(s)
               or the voice represented on this staff line.  This information
               (f present) will be used by the search program to identify
               "hits."  This record should be located just above the Line
               record to which it applies.

         5. Line Text(s)

            Field 2: "TEXT:"

            Field 3: ASCII string

               The purpose of this record is to provide a searchable ASCII
               string containing the text (underlay) represented on the
               line.  This record should be located just below the Line
               record to which it applies.  in cases where there is
               multiple text underlay (e.g., some Bach chorals), there
               will be multiple @ TEXT: records.

         5. Comment

            Field 2: "COMMENT:"

            Field 3: ASCII string


         (End of Meta-data records)


    ──────────────────────────────────────────────────────────────────


4.1       Nothing yet has been said about what shapes the glyph numbers
      represent.  The glyph numbers appear mainly as the fourth field
      of sub-ojbects.  Occasionally one finds a glyph number in field 6
      of an ojbect.  The table below shows the shapes assigned to
      the various glyph numbers.

                     Glyph Numbers for the Music Font
                   ════════════════════════════════════

      Lower numbers                 Higher numbers
      ═════════════                 ══════════════
      1. large clefs                1. small clefs
         ───────────                   ───────────
          33 treble (top)              161 treble (top)
          34 treble (bottom)           162 treble (bottom)
          35 C-clef                    163 C-clef
          36 bass                      164 bass

      2. large time signatures      2. small time signatures
         ─────────────────────         ─────────────────────
          37 common time               165 common time
          38 alle breve time           166 alle breve time
                                       167 duple
                                       168 triple
      3. full-size note heads
         ────────────────────
          39 longa                  3. grace/que-size note heads
          40 breve                     ─────────────────────────
          41 whole                     169 whole
          42 half                      170 half
          43 quarter                   171 quarter

      4. full-size dot, leger line  4. grace/que-size dot, leger line
         ─────────────────────────     ──────────────────────────────
          44 dot                       172 dot
          45 leger line                173 leger line

      5. full-size rests            5. que size rests
         ───────────────               ──────────────
          46 whole                     174 whole
          47 half                      175 half
          48 quarter                   176 quarter
          49 eighth                    177 eighth
          50 add-eighth                178 add-eighth

      6. full size flags            6. cue size flags
         ───────────────               ──────────────
          51 short up-eighth           179 up-eight + slash
          52 short down-eighth         180 down-eight + slash
          53 up-eighth                 181 up-eighth
          54 down-eighth               182 down-eighth
          55 up-sixteenth              183 up-sixteenth
          56 down-sixteenth            184 down-sixteenth
          57 up-add-flag               185 up-add-flag
          58 down-add-flag             186 down-add-flag

      7. full size stems            7. cue size stems
         ───────────────               ──────────────
          59 full length up            187 full length up
          60 full length down          188 full length down
          61 notesize up               189 notesize up
          62 notesize down             190 notesize down

      8. accidentals                8. small accidentals
         ───────────                   ─────────────────
          63 sharp                     191 sharp
          64 natural                   192 natural
          65 flat                      193 flat
          66 double sharp              194 double sharp

      9. editorial brackets         9. editorial brackets
         ──────────────────            ──────────────────
          67 square left               195 que square left
          68 square right              196 que square right
          69 round left                197 que round left
          70 round right               198 que round right

      10. big numbers               10. fingering/figured numbers
          ───────────                   ─────────────────────────
          71  0                        199  0
          72  1                        200  1
          73  2                        201  2
          74  3                        202  3
          75  4                        203  4
          76  5                        204  5
          77  6                        205  6
          78  7                        206  7
          79  8                        207  8
          80  9                        208  9

      11. staff lines               11. staff lines
          ───────────                   ───────────
          81 full-size staff           209 que-size staff

      12. vertical lines            12 & 13. other figures
          ──────────────                     ─────────────
          82 full length bar           210 small plus for figures (+)
          83 quarter length bar        211 small x for figures (x)
          84 full leng. thick bar      212 2+
          85 qtr. length thick bar     213 sharp
          86 full leng. dotted bar     214 4+
          87 thick vertical top        215 5+
          88 thick vertical bottom     216 6/
                                       217 7\
      13. horizontal lines             218 natural
          ────────────────             219 flat
          89 begin/end hook            220 small place holder
          90 solid line (30 dots)            for figures (-)
          91 dash line (30 dots)
          92 heavy line (30 dots)

      14. articulations (10)        14. tuple numbers (10)
          ──────────────────            ──────────────────
          93 horizontal accent         221  0
          94 ^ accent                  222  1
          95 v accent                  223  2
          96 staccato dot              224  3
          97 v stricht                 225  4
          98 ^ stricht                 226  5
          99 - legato                  227  6
         100 , breath                  228  7
         101 fermata up                229  8
         102 fermata down              230  9

      15. repetition (5)            15. octave (5)
          ──────────────                ──────────
         103 ./.                       231 big upright 8
         104 solid /                   232 little upright 8
         105 empty /                   233 big italic 8
         106 signet sign               234 little italic 8
         107 circle + cross sign ┼     235 big italic 15

      16. dynamics (6)              16. ornaments
          ────────────                  ─────────
         108 p                         236 tr.
         109 m                         237 ~~
         110 f                         238 mordent
         111 s                         239 shake
         112 z                         240 shake from above
         113 r                         241 shake from below
                                       242 turn from above
      17. performance indications      243 turn from below
          ───────────────────────      244
         114 Ped.                      245
         115 * (end pedal)             246
         116 up bow                    247
         117 down bow                  248
         118 pedal heel                249 colon for tuples
         119 pedal toe                 250 (blank)
         120 arpegiate                 251 (editorial piano)
         121 repeat notes              252 (editorial mezzo)
         122 harmonic a                253 (editorial forte)
         123 harmonic b                254 (editorial trill)
         124 thumb position            255

      18. miscellaneous
          ─────────────
         125 stem repeater (for quarters, etc.)
         126 stem repeater (for eights, etc.)
         127 stem repeater (for whole notes)


    ──────────────────────────────────────────────────────────────────