RELATIONSHIPS AMONG MUSIC TYPESETTING PROGRAMS
           ──────────────────────────────────────────────
                          (rev. 11/30/09)

At the moment, we have seven classes of related programs.  Related
programs are defined as programs that are built on the same source
code or very similar source code.  The functions of related programs
need not be similar.  For example, dskpage.z and pspage.z are built
on the same source code, but the former displays music whereas the
latter creates postscript files.

                          Related programs
                    ─────────────────────────────

autoset  z    mskpage  z    dskpage  z    eskpage  z   scorecon.z   kskpage  z  formtext z
s2ed     z    xmskpage z    pskpage  z    vskpage  z   sconpage.z
ss2ed    z    mkpart   z    pspage   z
autoscr  z    spaging  z    vspace   z
              mscroll  z    dscroll  z
              scrpage  z    fskpage  z
                            ufskpage z
                            xdskpage z

    = current as of 01/09/09
    = current as of 04/24/09
    = current as of 04/24/09
    = current as of 11/30/09


╔═══════════════════════════════════╗
║ I.  The autoset class of programs ║
╨───────────────────────────────────╨

autoset.z is the program that builds i-file representations from stage2
files.  The program operates on one stage2 file at a time, and the
output is one long, non-system specific line of music, stored in a
library called i-files.  There currently is no program that can display
these i-files; they must first be made into parts or into a multi-part
system by the program mskpage.z.

s2ed.z and ss2ed.z have the same source.  ss2ed.z uses notesize 6
fonts, which are more practical for the smaller screens on notebook
computers.  s2ed.z contains most of the elements of autoset.z, a
bare minimum of elements from mskpage.z, and the display logic from
dskpage.z.  The purpose of s2ed.z is the provide a graphics based
method for adding information to bare-bones Stage2 files as they
emerge from the music data-entry process.  Because the purpose is
simply to add data, s2ed.z does not contain some of the subtleties
of autoset.z.  s2ed.z can also be used to add print suggestions
which provide for some vertical space editing of the music notation.

autoscr.z is the SCORE conversion version of autoset.z.  They now
have the same source.


╔═══════════════════════════════════╗
║ II. The page-making programs      ║
╨───────────────────────────────────╨

mskpage.z and xmskpage.z have the same source.  The purpose of
these programs is to combine one or more non-page specific
i-files into a set of page specific i-files, which serve as the
source files for music display and printing.  The difference
between these two programs is that xmskpage.z contains a
display component (based on dskpage.z), which shows the user
each line of music as it is being typeset and allows the user
to alter the horizontal space between musical objects (notes,
rests, barlines, etc.).  mskpage.z and xmskpage.z can produce
and also read from a format file, which provides information
from earlier sessions of running the program (useful when
i-files have been updated with changes or new information).
The format file generated (and read) by xmskpage.z includes
specific information about the horizontal location of musical
objects (so that these modifications can be propagated through
successive runnings of the program).  The xmskpage.z program
also has bugs, so its performance is not guarenteed.

For the last year (2009), xmskpage.z has not been used, mostly
because of its complexity and unpredictable behavior.
As of 11/30/09, it has not been updated and is not current.

spaging.z is the SCORE conversion version of mskpage.z.  As of
10/13/07, they have the same source.

mscroll.z and scrpage.z are programs based on the mskpage.z
source that produce a one long, single system of output suitable
for scrolling.  The mskpage family may thus be described as
follows:
                     Output to pages      Scroll output
                     (SCROLL_OUT = 0)    (SCROLL_OUT = 1)
                 ┌────────────────────┬────────────────────┐
Regular output,  │     mskpage.zmscroll.z      │
  no paramters   │    Pars = (0,0)    │    Pars = (0,1)    │
(SCORE_PARS = 0) │                    │                    │
                 ├────────────────────┼────────────────────┤
Include score    │     spaging.zscrpage.z      │
  parameters     │    Pars = (1,0)    │    Pars = (1,1)    │
(SCORE_PARS = 1) │                    │                    │
                 └────────────────────┴────────────────────┘
                Compiling Paramaters (SCORE_PARS, SCROLL_OUT)


mkpart.z is based on an older version of mskpage.z, and, to
my knowledge, has not kept up with changes.  There may come
a time (and situation) where mkpart.z's unique orientation is
deemed useful and we will want to bring the program into the
present.


╔═══════════════════════════════════════════════╗
║ III. The music display and related programs.  ║
╨───────────────────────────────────────────────╨

dskpage.z, pskpage.z, dscroll.z, and pspage.z have the same source.

dskpage.z  displays music from page specific i-files
pskpage.z  prints from the same files.
dscroll.z  displays music from a long-format page specific i-file
pspage.z   makes postscript files from page specific i-files

The vspace.z program has a different purpose entirely, but it
also has an important connection to dskpage.z.  The purpose of the
vspace.z program is to compile an edition of a score from a set
of page specific i-files spread out over a set of (movement)
sub-libraries.  In particular, the output of the mskpage.z programs
is directed to a set of sub-libraries in a library called pages.
An edition, on the other hand, is contained in a library called
score, with each page of the edition being a separate file in
that library.  The vspace.z program assembles these page files
from the dispersed page files in the pages sub-library.  But
that is not all that vspace.z does.  The source files have four
additional short-comings: 1) they need to have .mpg information
added (as Z records), 2) they need page and copyright information
added, 3) they need to have the musical lines adjusted vertically
to avoid clashes between lines and to justify lines to the bottom
of the page, and 4) they need to have text lines adjusted so as
to avoid clashes with the music.  To do its work, vspace.z needs
an instruction file (usually called scform).  An example of such
a file is edform.doc in the current library.  The vspace.z program
incorporates large sections of dskpage.z for the purpose of
determining if there is an actual clash between separate lines.
This feature is used only in certain cases; never-the-less, it
must be maintained using the current version of dskpage.z.

fskpage.z and ufskpage.z share the same source.

The purpose of fskpage.z is to add kerning data to (older) page specific
i-files.  The reason this is desirable is that the kerning matrix
was developed in parallel with the glyph spacings for the various
text fonts.  In some cases, glyph spacings were changed to optimize
the kerning matrix.  Without kerning, and using the newer version of the fonts, some
of the inter-glyph spacings will be inappropriate.  fskpage.z should
be run on any (older) page specific i-files before they are re-printed
or released for display.  At the moment, the program can process
all files in a particular library.  Note: Any page specific files
compiled before (05/06/04) would probably be improved by having
fskpage.z run on them.  This would include most of our Handel
editions.

ufskpage.z removes kerning from one or more page specific files.


╔═══════════════════════════════════╗
║ IV. The page editing programs     ║
╨───────────────────────────────────╨

eskpage.z and vskpage.z use the same source, but have different
purposes and send output to different formats.  eskpage.z is the
original program.  It is a page specific editing program, used
to "top off" the pages of a particular edition, mainly for
cosmetic purposes.  The problem with using eskpage.z is that the
output (usually directed back to the source page file) provides
the only record of what was done.  In essence, the output is
an orphan -- no longer automatically derived from upstream
sources.  vskpage.z is a pared-down version of eskpage.z; the
only elements that can be moved are musical lines and text
lines.  The output, however, is a set of instructions which
can be incorporated in an scform file and used as a source for
the vspace.z program.  In this case, the process contributes to
the downstream flow of data.   eskpage.z contains most of the
display modules from dskpage.z

The eskpage.z and vskpage.z programs implement the use of macros.
For these programs, a preset group of macros is stored in the file
eskmac.k.  In practice, this preset group has become a "standard"
set of commands, as follows:
 F5 = move up a line.
 F6 = store results and redisplay at half size.
 F7 = move down a line


╔═══════════════════════════════════╗
║ V. The score conversion programs  ║
╨───────────────────────────────────╨

scorecon.z and sconpage.z are built on the same source code.

scorecon.z converts page specific i-files (output from spaging.z)
to Lelend Smith's SCORE .pmx format.  The output is directed to
the same library that contains the input.  Note: scorecon.z only
works with notesize=14.

sconpage.z operates on one long-format, page specific i-file
(created by scrpage.z)  The output is pseudo-SCORE .pmx format,
because the P3 parameters (horizontal position) are allowed to
grow to any size.


╔═══════════════════════════════════╗
║ VI. Other programs                ║
╨───────────────────────────────────╨

kskpage.z is an orphaned program used for displaying output from
the music scanning process.  I haven't worked on this process
since 2002, so I am unsure of the state of this program.  In
any case, it is not part of the regular music data-entry/display
process.

formtext.z is a new program which takes as input flat files with
format instructions and creates a set of X-records that can be
fed to dskpage.z or pskpage.z.  formtext.z could develop into a
full-fledged typesetting program.  It contains some intelligence
for handling fonts and special glyphs, as well as kerning.