Instructions for running mskpage.z

mskpage.z is the program that combines several non-page specific
i-files into a set of page specific i-files.  Although mskpage.z
is smaller than autoset.z and its task is less complicated, we
have had many more difficulties getting mskpage.z to run properly,
The program today still leaves much to be desired in terms of
reliability, reporting of errors, and quality of output.

To run mskpage.z, the current working directory for your window
should be one of the sub-directories inside outputs, as determined
by the application you are working on.  If you are typesetting
a score for printing in notesize 16, your current working
directory would be outputs/skore16, inside of which there would
be the three sub-directories, i-files, formats, and pages.
Whatever sub-directories there are in i-files should also be
in pages.

When mskpage.z first starts up, it asks four questions:

(1) Input library name.  An example would be i-files/04 --
fourth movement of the work you are typesetting.

(2) Output library name.  An example would be pages/04

(3) Starting number

(4) Number of parts

Notice that mskpage.z can only typeset a set of parts in sequence;
there is no provision for combining, for example, parts 2, 3 and 6.
In most cases, you will either want to combine all of the parts (as
in a score) or typeset only one part (as in separate parts).  But
there are times when you may want to typeset a subset of parts.
Here are three examples:

  (1) When typesetting a full score.  If the mskpage.z fails for
  for some reason, the cause is almost certainly a mistake
  in one of your stage2 files.  This would be a logical mistake,
  not a mistake in format, so it wouldn't necessarily trip up
  the autoset.z program.  What I do in this case is try running
  mskpage.z on just parts 1 and 2, then on parts 2 and 3, then
  parts 3 and 4, and so on, until mskpage.z fails.  This is a
  good method for determining which stage2 file is causing the

  (2) When typesetting a part that splits.  In the second
  movement of Beethoven's 7th symphony, the Cellos are
  divided, with each section having its only staff line.
  The cello part, in this case, must be typeset as a score
  with three lines, Cello I, Cello II, and Cellos combined.
  Proper settings of the type-y general print suggestions
  in the stage2 files for these parts will insure that
  either Cello I and Cello II are printed, or that Cellos
  is printed, and that no other combination is printed.
  (See the s2-specs.ten file in j:/release/progs for further
  documentation on the format of stage2 files).

  (3) When constructing a combined part for a score from
  separate parts.  An example would be constructing a part
  for Oboes (1 and 2), from Oboe 1 and Oboe 2.  I find it
  handy to make a small score consisting of all three parts
  This way I can compare on a measure by measure basis the
  new part with the two sources and see immediately any
  discrepencies or omissions in the new part.

After these first four questions, mskpage.z makes a choice.  If
the starting number is 1 and if the number of parts equals the
number of source files in i-files and if there is a valid format
file for this movement, then mskpage.z asks no more questions and
runs automatically 'till it is done.

If the starting number is 1 and if the number of parts equals
the number of source files in i-files and there is NOT a valid
format file, then mskpage.z will ask you if you would like to
create one.  The format file essentially contains the answers
to the questions that follow, and this is what allows mskpage.z
to run automatically next time.  The "remembered" answers are
important also because they enable you to specify a format that
will be repeated each time mskpage.z is run on these files.

If the starting number is not 1, or if the number of parts does
not equal the number of source files in i-files, then no format
file can be created.

One more word about format files.  Format files can only be
created for full scores.  Fine.  But what about typesetting
parts.  We still have the problem of "remembering" the format
so that a part will be typeset the same way each time.  I
solve this problem in the following way:

  Format files take their names from the movement file names.  If
  the movement names are 01, 02, 03, and 04, then these are the
  names of the format files for these movements.  Any other file
  names in the sub-directory formats are ignored by mskpage.z.
  When typesetting parts, I allocate a set of sub-directories
  inside formats, one for each part, e.g., cb, cl_1, cl_2, etc.
  Inside each of these I store the working screen for mskpage.z
  for each of the movements.  The working screen will contain all
  of mskpage.z's question and also my anwsers as given the first
  time around.  If I need to run mskpage.z again for a particular
  part and movement, I simply load the stored screen and start
  pressing <enter>.

Now back to mskpage.z's questions.

(5) The simple test question.  Sometimes (see above), you may want
to run mskpage.z as a test, without actually generating output.
The answer to this quesion is not stored in the format file.

(6) Height of new typesetting (return = top).  This allows us to
being a new movement anywhere on the page.  This is very handy if
a previous movement leaves sufficient empty space on a page for a
new movement to begin.

(7) Line of tacit instructions? (return = none).  Actually text line
can go here.  Sometimes I like to put the movement number (in Roman
numerals) on this line.

(8) Right justify last line? (return = no)  Also, enter "wide"
command here.  This line actually asks two questions: (a) do you
want to justify the last line? and (b) would you like to change
the default left and right margins?  The only reason you might
type (return = no) is that you are running a test.  If you type
the word "wide" followed by two numbers (separated by spaces),
the numbers are interpreted as modifications to the left and
right margins.  Default right and left margins are about 240 dots
(.80 inch).  It is possible to spread these margins by up to 100
dots.  Positive numbers will spread the margins; negative numbers
will move them in.

(9) Movement title?  This is actually like question 7 above.
You can enter any line of text here you want.  One difference,
however, is that the text line entered at question 7 will
automatically be centered on the page.  If you want the text
entered at this question to be centered, you must begin the
line with the three character code, "(c)".

(10) Enter brace/bracket/bar structure.   This is a control string
that tells mskpage.z how to draw the left spine of the score and
where to start and stop bar lines (vertically).  [] = bracket and
bar; () = bar only: {} = brace; dot = part; colon = grandstaff.
The number of dots+colons must equal the number of parts, and
brackets, parentheses and braces must be balanced right and left.
Otherwise mskpage.z gets indigestion.

Shown below is the format file for typesetting the 1st movement of
Beethoven's 1st symphony:

001 Reduced size = no
002 Use default height for new typesetting
003 Beethoven Symphony No. 1 in C Major,  Op. 21
004 Justify = yes   wide 60 100
005 (c)I.
006 [(....)][(..)](.)[({..}..)]
007 192 192 192 208 192 192 208 176 176 176 200

The first line "Reduced size = no" is a vestage from the past
and is no longer relevant.  Lines 2 through 6 contain the
answers to questions (6) through (10).   Line 7 contains the
answer to question (11) below.

(11) Line spacing: text, no text  (return = no change)
     Otherwise, enter all spacings (max of 15 per line)
     200 160

This shows the default line spacing that mskpage.z will use in
typesetting the music.  The first number is for lines with text
underly; the second line is for lines without text.  For purposes
of testing and proofing, the defaults are fine; but for real
typesetting, you will want to put in your own values.  If you
do this, you must put in a number for each part.  The last number
is for system spacing.  Important point: the actual spacing is
not as important as the relative spacing.  The vspace.z program
will re-space the lines, but in a proportional way.  So if you
want more space separating the woodwinds from the brass, as is
done with the Beethoven above, it is a good idea to get the
proportions right at this stage in the process.  A good looking
score will have the same spacings across an entire movement,
so that the eye is not confused as it shifts from page to page.

After completing these questions, mskpage.z takes off and does
it's work.  The process of "casting off" done by mskpage.z is an
iterative process.  If mskpage.z reaches a measure line which
calls for a system break, and this measure line is in the middle
of the page, mskpage.z will look for a (last) measure on some
previous line to move down and will try a new "cast off."  It
sometimes can take mskpage.z 20 iterations or more for it to get
a "casting off" that it likes.  Still, you or I might not like
what mskpage.z has done, which is why we need to run dskpage.z on
the result.  If we see something we don't like, we must go back
to the stage2 files and make some changes.  It might be changing
the global spacing; it might be adding a new system break; it
might be changing the spacing in one section of a stage2 file.
Then we must run autoset.z again; and then run mskpage.z again.

The problem of "casting off" is actually quite complicated.  There
are so many variables.  I am not entirely happy with the way things
work now, but I'm not sure how to go about making things better.
The system as it now works is based on trial and error.  You never
know if there is a solution out there that you haven't seen but
would be much better.  I wonder sometimes whether this problem
would lend itself to a linear programming solution.  The objective
function would depend on such things as ideal spacing, equality of
measure size, avoidance of broken ties, slurs, etc., etc.  One
thing I have noticed: when there is lots of space between notes, it
is much easier to get things looking uniform across lines and among
lines on a page.  However, in my opinion, extra space is a sign of
low quality typesetting.  Compact musical typesetting is not only
more economical, it is more readable.  A musician needs merely to
glance at a set of musical notes in order to know exactly what he
or she is to play.  Music that is spread out requires more glances.