summaryrefslogtreecommitdiff
path: root/Build/source/utils/autosp/autosp-src/process_command.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/autosp/autosp-src/process_command.c')
-rw-r--r--Build/source/utils/autosp/autosp-src/process_command.c42
1 files changed, 33 insertions, 9 deletions
diff --git a/Build/source/utils/autosp/autosp-src/process_command.c b/Build/source/utils/autosp/autosp-src/process_command.c
index d2feb5ae19f..6ec9e8533ea 100644
--- a/Build/source/utils/autosp/autosp-src/process_command.c
+++ b/Build/source/utils/autosp/autosp-src/process_command.c
@@ -11,6 +11,7 @@ void analyze_notes (char **ln)
and initialize terminator[i] etc. */
{
int i; char *s; char *t;
+ int instr=1;
int newlines = 0;
s = *ln+1; /* skip "/" */
while (isalpha(*s)) {s++;} /* skip rest of the initial command */
@@ -52,6 +53,8 @@ void analyze_notes (char **ln)
if (tt == NULL) error ("can't parse note-spacing command.");
s = tt;
terminator[i] = *s;
+ staff_instr[i] = instr;
+ if (terminator[i] == '&') instr++;
if (*s != '$') s++;
}
lineno = lineno + newlines;
@@ -212,7 +215,7 @@ output_rests (void)
}
void initialize_notes ()
-{ int i; int instrument = 0; int staff = 0;
+{ int i;
if (debug)
{ fprintf (logfile, "\nEntering initialize_notes\n");
status_all ();
@@ -221,13 +224,10 @@ void initialize_notes ()
output_rests ();
fprintf (outfile, "\\scale");
- do /* determine instrument for spacing_staff */
- {
- instrument++;
- staff = staff + staffs[instrument];
- }
- while (staff < spacing_staff );
- fprintf (outfile, "%s\n", instrument_size[instrument]);
+ if (debug)
+ fprintf (logfile, "spacing_staff = %i, staff_instr[spacing_staff] = %i, instrument_size[staff_instr[spacing_staff]] = %s\n",
+ spacing_staff, staff_instr[spacing_staff], instrument_size[staff_instr[spacing_staff]]);
+ fprintf (outfile, "%s\n", instrument_size[staff_instr[spacing_staff]]);
oldspacing_staff = spacing_staff;
if (spacing == MAX_SPACING)
@@ -411,7 +411,10 @@ void generate_notes ()
spacing = spacings[i];
spacing_staff = i;
}
- else if (spacings[i] == spacing && vspacing[spacing_staff] > 0)
+ else if (spacings[i] == spacing &&
+ (vspacing[spacing_staff] > 0 ||
+ /* for staffs with equal spacing, use the one with larger instrument size */
+ instr_numsize[staff_instr[i]] > instr_numsize[staff_instr[spacing_staff]]))
spacing_staff = i;
}
if (appoggiatura)
@@ -519,7 +522,28 @@ void process_command (char **ln)
}
*p = '\0';
if (debug)
+ {
fprintf (logfile, "instrument_size[%d] = %s\n", n, instrument_size[n]);
+ fflush (logfile);
+ }
+ /* determine numerical instrument size to allow numerical comparison */
+ if (prefix ("\\normalvalue", instrument_size[n]))
+ instr_numsize[n] = 1.0;
+ else if (prefix ("\\smallvalue", instrument_size[n]))
+ instr_numsize[n] = 0.8;
+ else if (prefix ("\\tinyvalue", instrument_size[n]))
+ instr_numsize[n] = 0.64;
+ else if (prefix ("\\largevalue", instrument_size[n]))
+ instr_numsize[n] = 1.2;
+ else if (prefix ("\\Largevalue", instrument_size[n]))
+ instr_numsize[n] = 1.44;
+ else
+ error ("\\setsize argument unreadable.");
+ if (debug)
+ {
+ fprintf (logfile, "instr_numsize[%d] = %f\n", n, instr_numsize[n]);
+ fflush (logfile);
+ }
while (*ln <= s) { putc (**ln, outfile); (*ln)++;}
}