Commit | Line | Data |
---|---|---|
fac14bbe MW |
1 | /* Copyright (c) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, |
2 | * 2006 by Arkkra Enterprises */ | |
3 | /* All rights reserved */ | |
4 | /* | |
5 | * defines.h | |
6 | * | |
7 | * This file defines the constants needed for the music publication | |
8 | * program. | |
9 | */ | |
10 | ||
11 | #include <math.h> | |
12 | #ifndef _DEFINES | |
13 | #define _DEFINES | |
14 | #include "muschar.h" | |
15 | ||
16 | /* | |
17 | * Define the environment ============================================= | |
18 | */ | |
19 | ||
20 | /* for all forms of DOS we've tried, make sure __DOS__ is defined */ | |
21 | #if defined(__TURBOC__) || defined(__WATCOMC__) || defined(__MINGW32__) | |
22 | #ifndef __DOS__ | |
23 | #define __DOS__ | |
24 | #endif | |
25 | #endif | |
26 | ||
27 | /* if you are short on memory or know you'll never use the extended character | |
28 | * set (with accented characters, etc) you can undefine EXTCHAR | |
29 | */ | |
30 | #ifndef __TURBOC__ | |
31 | #define EXTCHAR | |
32 | #endif | |
33 | #include "extchar.h" | |
34 | ||
35 | /* the following is needed for the DOS port of the GNU C compiler */ | |
36 | #ifdef __DJGPP__ | |
37 | #define __DOS__ | |
38 | #undef unix | |
39 | #endif | |
40 | ||
41 | /* | |
42 | * Based on system type, #define or don't #define various symbols, as follows: | |
43 | * | |
44 | * UNIX_LIKE_FILES If defined, files can be simultaneously read from and | |
45 | * written to and invisibly unlinked. | |
46 | * UNIX_LIKE_PATH_RULES If defined, use these rules for MUPPATH. | |
47 | * DOS_LIKE_PATH_RULES If defined, use these rules for MUPPATH. | |
48 | * CORE_MESSAGE If defined, then a creating core error message will be | |
49 | * printed in debug mode. | |
50 | * NEED_GETOPT If defined, the getopt suite is not available, | |
51 | * therefore use the limited one in main.c. | |
52 | * MAGIC_FILE_HOME If defined, check for magic file in $HOME. | |
53 | * MAGIC_FILE_NAME Name of magic file. | |
54 | * OPTION_MARKER The char which preceeds command line options. | |
55 | */ | |
56 | #ifdef unix | |
57 | #define UNIX_LIKE_FILES | |
58 | #define UNIX_LIKE_PATH_RULES | |
59 | #define CORE_MESSAGE | |
60 | #define MAGIC_FILE_HOME | |
61 | #define MAGIC_FILE_NAME ".mup" | |
62 | #define OPTION_MARKER '-' | |
63 | #endif | |
64 | ||
65 | #ifdef VMS | |
66 | #define MAGIC_FILE_HOME | |
67 | #define MAGIC_FILE_NAME ".mup" | |
68 | #define OPTION_MARKER '-' | |
69 | #endif | |
70 | ||
71 | #ifdef AMIGA | |
72 | #undef UNIX_LIKE_FILES | |
73 | #define NEED_GETOPT | |
74 | #define MAGIC_FILE_HOME | |
75 | #define MAGIC_FILE_NAME ".mup" | |
76 | #define OPTION_MARKER '-' | |
77 | #endif | |
78 | ||
79 | #ifdef __DOS__ | |
80 | #define DOS_LIKE_PATH_RULES | |
81 | #define NEED_GETOPT | |
82 | #define MAGIC_FILE_NAME "mup.ok" | |
83 | #define OPTION_MARKER '/' | |
84 | #endif | |
85 | ||
86 | #ifdef Mac_BBEdit | |
87 | #undef UNIX_LIKE_FILES | |
88 | #define NEED_GETOPT | |
89 | /* skip length byte of Pascal string literal */ | |
90 | #define MAGIC_FILE_NAME (char *)(MupRegFileName + 1); | |
91 | #define OPTION_MARKER '-' | |
92 | #endif | |
93 | ||
94 | #ifdef __EMX__ | |
95 | #undef UNIX_LIKE_FILES | |
96 | #define DOS_LIKE_PATH_RULES | |
97 | #define MAGIC_FILE_HOME | |
98 | #define MAGIC_FILE_NAME ".mup" | |
99 | #define OPTION_MARKER '-' | |
100 | #endif | |
101 | ||
102 | #ifndef OPTION_MARKER | |
103 | /* use - as default if nothing has been defined for it */ | |
104 | #define OPTION_MARKER '-' | |
105 | #endif | |
106 | ||
107 | /* | |
108 | * Define ranges for variables ============================================= | |
109 | */ | |
110 | ||
111 | /* | |
112 | * Define maximum value for exit code from Mup. Must be less than 128 | |
113 | * to be able to distinguish from WAIT_ABANDONED value on Windows. | |
114 | */ | |
115 | #define MAX_ERRORS (127) | |
116 | ||
117 | /* text point sizes */ | |
118 | #define MINSIZE (1) | |
119 | #define MAXSIZE (100) | |
120 | ||
121 | /* key signatures */ | |
122 | #define MINSHARPS (-7) | |
123 | #define MAXSHARPS (7) | |
124 | #define DEFSHARPS (0) | |
125 | ||
126 | /* octave */ | |
127 | #define MINOCTAVE (0) | |
128 | #define MAXOCTAVE (9) | |
129 | #define DEFOCTAVE (4) | |
130 | ||
131 | /* staves */ | |
132 | #define MINSTAFFS (1) | |
133 | #define MAXSTAFFS (40) | |
134 | #define DEFSTAFFS (1) | |
135 | ||
136 | /* voices */ | |
137 | #define MINVOICES (1) | |
138 | #define NORMVOICES (2) | |
139 | #define MAXVOICES (3) | |
140 | ||
141 | /* number of lines in a tablature staff */ | |
142 | #define MINTABLINES (1) | |
143 | #define DEFTABLINES (6) /* see Guitar[] in globals.c */ | |
144 | #define MAXTABLINES (9) | |
145 | ||
146 | /* number of ticks on a string designation for tablature */ | |
147 | #define MINTICKS (0) | |
148 | #define MAXTICKS (MAXTABLINES - 1) | |
149 | ||
150 | #define TABDEFOCT (4) | |
151 | ||
152 | /* tablature fret numbers, including pseudo fret numbers */ | |
153 | #define MINFRET (0) | |
154 | #define MAXFRET (99) | |
155 | #define DEFFRET (0) | |
156 | #define NOFRET (MAXFRET + 1) | |
157 | #define IN_UPWARD (MAXFRET + 2) /* slur from nowhere, going up */ | |
158 | #define IN_DOWNWARD (MAXFRET + 3) /* slur from nowhere, going down */ | |
159 | #define OUT_UPWARD (MAXFRET + 4) /* slur to nowhere, going up */ | |
160 | #define OUT_DOWNWARD (MAXFRET + 5) /* slur to nowhere, going down */ | |
161 | #define IS_NOWHERE(fret) ((fret) >= IN_UPWARD && (fret) <= OUT_DOWNWARD) | |
162 | ||
163 | /* range of frets that can be printed by a chord grid */ | |
164 | #define MINGRIDFRET (2) | |
165 | #define MAXGRIDFRET (MAXFRET) | |
166 | #define DEFGRIDFRET (4) | |
167 | #define NOGRIDFRET (-1) /* must be negative so user can't enter it */ | |
168 | ||
169 | /* USE_DFLT_OCTAVE has to be number that is not a valid octave, nor a */ | |
170 | /* valid fret number. But it has to be positive and small enough to be */ | |
171 | /* able to add MAX_OCTAVE to it */ | |
172 | #define USE_DFLT_OCTAVE (MAXFRET + 6) | |
173 | ||
174 | /* min and max numbers for bend integers, numerators, and denominators */ | |
175 | #define BENDINTBITS (4) | |
176 | #define MINBENDINT (0) | |
177 | #define MAXBENDINT ((1 << BENDINTBITS) - 1) | |
178 | #define BENDNUMBITS (6) | |
179 | #define MINBENDNUM (0) | |
180 | #define MAXBENDNUM ((1 << BENDNUMBITS) - 1) | |
181 | #define BENDDENBITS (6) | |
182 | #define MINBENDDEN (1) | |
183 | #define MAXBENDDEN ((1 << BENDDENBITS) - 1) | |
184 | ||
185 | /* time unit */ | |
186 | /* -1 means quadruple whole and 0 means double whole. Actually, less than -1 */ | |
187 | /* is allowed, and it's minus the number of measures in a multirest */ | |
188 | #define MINBASICTIME (-1) | |
189 | #define MAXBASICTIME (256) | |
190 | ||
191 | /* the biggest number that is allowed on a multirest */ | |
192 | #define MAXMULTINUM (1000) | |
193 | ||
194 | /* limits for scaling the output */ | |
195 | #define MINSCALE (0.1) | |
196 | #define MAXSCALE (10.0) | |
197 | #define DEFSCALE (1.0) | |
198 | ||
199 | /* limits for scaling a staff relative to the output as a whole */ | |
200 | #define MINSTFSCALE (0.1) | |
201 | #define MAXSTFSCALE (10.0) | |
202 | #define DEFSTFSCALE (1.0) | |
203 | ||
204 | #define MINGRIDSCALE (0.1) | |
205 | #define MAXGRIDSCALE (10.0) | |
206 | #define DEFGRIDSCALE (1.0) | |
207 | ||
208 | /* limits on min distance required between a chord and its staff (stepsizes) */ | |
209 | #define MINCHORDDIST (0) | |
210 | #define MAXCHORDDIST (50) | |
211 | #define DEFCHORDDIST (3) | |
212 | ||
213 | /* limits on min dist required between other stuff and its staff (stepsizes) */ | |
214 | #define MINDIST (0) | |
215 | #define MAXDIST (50) | |
216 | #define DEFDIST (2) | |
217 | ||
218 | /* limits on min distance required between a cresc and its staff (stepsizes) */ | |
219 | #define MINDYNDIST (0) | |
220 | #define MAXDYNDIST (50) | |
221 | #define DEFDYNDIST (0) | |
222 | ||
223 | /* vertical space between staffs and scores, in units of stepsize */ | |
224 | #define MINMINSTSEP (6) /* min user-specified min between staffs */ | |
225 | #define DEFMINSTSEP (10) /* default min between staffs */ | |
226 | #define MINMINSCSEP (6) /* min user-specified min between scores */ | |
227 | #define DEFMINSCSEP (12) /* default min between scores */ | |
228 | #define MINMAXSCSEP MINMINSCSEP /* min user-specified max between scores */ | |
229 | #define DEFMAXSCSEP (20) /* default max between scores */ | |
230 | #define MAXSEPVAL ((int)(PGHEIGHT / STEPSIZE)) /* max for either one */ | |
231 | #define MINSTPAD (-MAXSEPVAL) /* min user-spec. white between staffs */ | |
232 | #define MAXSTPAD (MAXSEPVAL) /* max user white between staffs */ | |
233 | #define DEFSTPAD (0) /* default white between staffs */ | |
234 | #define MINMINSCPAD (-MAXSEPVAL) /* min user-spec. white between scores */ | |
235 | #define DEFMINSCPAD (2) /* default white between scores */ | |
236 | #define MINMAXSCPAD (-MAXSEPVAL) /* min user-spec. white between scores */ | |
237 | #define DEFMAXSCPAD (2) /* default white between scores */ | |
238 | #define MAXPADVAL (MAXSEPVAL) /* max user white between scores */ | |
239 | ||
240 | /* distance from center line a rest should be forced to be */ | |
241 | #define MINRESTDIST (-50) | |
242 | #define MAXRESTDIST (50) | |
243 | #define NORESTDIST (11111) /* this means it is not set */ | |
244 | ||
245 | /* number of mr needed to combine into a multirest (like -c option) */ | |
246 | #define MINRESTCOMBINE (2) | |
247 | #define MAXRESTCOMBINE (1000) | |
248 | #define NORESTCOMBINE (-1) /* must be negative so user can't enter it */ | |
249 | ||
250 | /* page number to be put on the first page (like -p option) */ | |
251 | #define MINFIRSTPAGE (1) | |
252 | #define MAXFIRSTPAGE (5000) | |
253 | #define NOFIRSTPAGE (0) /* this means it is not set */ | |
254 | ||
255 | /* number to multiply linear regression slope by to get beam's slope */ | |
256 | #define MINBEAMFACT (0.0) | |
257 | #define MAXBEAMFACT (1.0) | |
258 | #define DEFBEAMFACT (1.0) | |
259 | ||
260 | /* maximum beam angle allowed, in degrees */ | |
261 | #define MINBEAMMAX (0.0) | |
262 | #define MAXBEAMMAX (45.0) | |
263 | #define DEFBEAMMAX (20.0) | |
264 | ||
265 | /* angle of beam specified by the "slope" interchord attribute */ | |
266 | #define MINBEAMANGLE (-MAXBEAMMAX) | |
267 | #define MAXBEAMANGLE (MAXBEAMMAX) | |
268 | #define NOBEAMANGLE (2 * MAXBEAMANGLE) /* something out of range */ | |
269 | ||
270 | /* padding to be applied on the left of every group (and the right of the */ | |
271 | /* last group in the measure), in stepsizes */ | |
272 | #define MINPAD (-5.0) | |
273 | #define MAXPAD (50.0) | |
274 | #define DEFPAD (0.0) | |
275 | ||
276 | /* for setting and testing unknown stem length */ | |
277 | #define STEMLEN_UNKNOWN (-1.0) | |
278 | #define IS_STEMLEN_KNOWN(x) ((x) >= 0.0) /* avoid using "==" on floats */ | |
279 | #define IS_STEMLEN_UNKNOWN(x) ((x) < 0.0) /* avoid using "==" on floats */ | |
280 | ||
281 | /* other stem length definitions */ | |
282 | #define MINSTEMLEN (0.0) | |
283 | #define DEFSTEMLEN (7.0) | |
284 | #define MAXSTEMLEN (100.0) | |
285 | #define SM_STEMFACTOR (5.0 / 7.0) /* grace/cue factor */ | |
286 | ||
287 | /* number of stepsizes by which a beamed stem can be shortened */ | |
288 | #define MINSTEMSHORTEN (0.0) | |
289 | #define MAXSTEMSHORTEN (2.0) | |
290 | #define DEFSTEMSHORTEN (1.0) | |
291 | ||
292 | /* what fraction of each lyrics syllable goes left of the center of chord */ | |
293 | #define MINLYRICSALIGN (0.0) | |
294 | #define MAXLYRICSALIGN (1.0) | |
295 | #define DEFLYRICSALIGN (0.25) | |
296 | ||
297 | /* size of the paper */ | |
298 | #define MINPAGEHEIGHT (2.0) | |
299 | #define MAXPAGEHEIGHT (24.0) | |
300 | #define DEFPAGEHEIGHT (11.0) | |
301 | #define MINPAGEWIDTH (2.0) | |
302 | #define MAXPAGEWIDTH (24.0) | |
303 | #define DEFPAGEWIDTH (8.5) | |
304 | ||
305 | /* top and bottom margins */ | |
306 | #define MINVMARGIN (0.0) | |
307 | #define MAXVMARGIN (3.0) | |
308 | #define DEFVMARGIN (0.5) | |
309 | ||
310 | /* left and right margins */ | |
311 | #define MINHMARGIN (0.0) | |
312 | #define MAXHMARGIN (3.0) | |
313 | #define DEFHMARGIN (0.5) | |
314 | ||
315 | /* panels per page */ | |
316 | #define MINPANELSPERPAGE (1) | |
317 | #define MAXPANELSPERPAGE (2) | |
318 | #define DEFPANELSPERPAGE (1) | |
319 | ||
320 | /* how tightly to pack the stuff horizontally (default value) */ | |
321 | #define MINPACKFACT (0.0) | |
322 | #define DFLTPACKFACT (1.0) | |
323 | #define MAXPACKFACT (10.0) | |
324 | ||
325 | /* how much to expand long notes relative to short ones */ | |
326 | #define MINPACKEXP (0.0) | |
327 | #define DFLTPACKEXP (0.8) | |
328 | #define MAXPACKEXP (1.0) | |
329 | ||
330 | /* time signature */ | |
331 | #define MINNUMERATOR (1) | |
332 | #define MAXNUMERATOR (99) | |
333 | ||
334 | #define MINDENOMINATOR (1) | |
335 | #define MAXDENOMINATOR (64) | |
336 | ||
337 | #define MINDIVISION (1) | |
338 | #define DEFDIVISION (192) | |
339 | #define MAXDIVISION (3 * 512) | |
340 | ||
341 | /* define values for the "release" parameter, in milliseconds */ | |
342 | #define MINRELEASE (0) | |
343 | #define DEFRELEASE (20) | |
344 | #define MAXRELEASE (500) | |
345 | ||
346 | /* define values for the "sylposition" parameter, in points */ | |
347 | #define MINSYLPOSITION (-100) | |
348 | #define MAXSYLPOSITION (100) | |
349 | #define DEFSYLPOSITION (-5) | |
350 | #define NOSYLPOSITION (11111) /* this means it is not set */ | |
351 | ||
352 | ||
353 | /* | |
354 | * Define sets of symbols which probably should have been done as enums, | |
355 | * but in ANSI C enums aren't much good anyhow. ============================= | |
356 | * Also define some macros for testing these enums. | |
357 | */ | |
358 | ||
359 | /* | |
360 | * To limit the number of terminal symbols so that yacc won't blow up, | |
361 | * several tokens map to the same terminal symbol, and we set a variable | |
362 | * (yylval) to say which particular one was actually seen. | |
363 | */ | |
364 | #define F_STAFFS (1) | |
365 | #define F_OCTAVE (2) | |
366 | #define F_LYRSIZE (3) | |
367 | #define F_VERTSPACE (4) | |
368 | #define F_SIZE (5) | |
369 | ||
370 | #define F_TOPMARGIN (6) | |
371 | #define F_BOTMARGIN (7) | |
372 | #define F_LEFTMARGIN (8) | |
373 | #define F_RIGHTMARGIN (9) | |
374 | ||
375 | #define F_TIMEUNIT (10) | |
376 | #define F_VSCHEME (11) | |
377 | ||
378 | #define F_BRACKET (12) | |
379 | #define F_BRACE (13) | |
380 | #define F_BARSTYLE (14) | |
381 | ||
382 | #define F_LABEL (15) | |
383 | #define F_LABEL2 (16) | |
384 | ||
385 | #define F_FONT (17) | |
386 | #define F_LYRFONT (18) | |
387 | ||
388 | #define F_VISIBLE (19) | |
389 | #define F_VERSES (20) | |
390 | ||
391 | /* | |
392 | * Define all the types of context in the input. Make each one a bit, so that | |
393 | * we can also define a couple groupings of them. | |
394 | */ | |
395 | #define C_HEADER (0x1) /* first page header */ | |
396 | #define C_FOOTER (0x2) /* first page footer */ | |
397 | #define C_HEAD2 (0x4) /* later page header */ | |
398 | #define C_FOOT2 (0x8) /* later page footer */ | |
399 | #define C_TOP (0x10) /* initial block at top */ | |
400 | #define C_BOT (0x20) /* initial block at bottom */ | |
401 | #define C_TOP2 (0x40) /* later block at top */ | |
402 | #define C_BOT2 (0x80) /* later block at bottom */ | |
403 | #define C_BLOCK (0x100) /* other block */ | |
404 | #define C_SCORE (0x200) /* the whole score */ | |
405 | #define C_STAFF (0x400) /* a staff */ | |
406 | #define C_VOICE (0x800) /* a voice */ | |
407 | #define C_MUSIC (0x1000) /* notes, etc. */ | |
408 | #define C_GRIDS (0x2000) /* chord grids */ | |
409 | #define C_HEADSHAPES (0x4000) /* head shapes for notehead characters */ | |
410 | ||
411 | /* context classes--combining things that mostly have the same rules */ | |
412 | #define C_BLOCKHEAD (C_HEADER | C_FOOTER | C_HEAD2 | C_FOOT2 | \ | |
413 | C_TOP | C_BOT | C_TOP2 | C_BOT2 | C_BLOCK) | |
414 | #define C_SSV (C_SCORE | C_STAFF | C_VOICE) | |
415 | ||
416 | /* define whether things are measured in inches or centimeters */ | |
417 | #define INCHES (0) | |
418 | #define CM (1) | |
419 | ||
420 | /* | |
421 | * Define the voice schemes. V_1 means just one voice is on the staff; | |
422 | * the program will decide the stem direction of each group. V_2OPSTEM | |
423 | * means there are two voices with opposing stems: the first voice always | |
424 | * points up, and the second one always points down. V_2FREESTEM means there | |
425 | * are two voices. If, at any time, one has a space, the other one's stems | |
426 | * can point either way (as with one voice). Otherwise, the first voice | |
427 | * points up and the second one down. | |
428 | * V_3OPSTEM and V_3FREESTEM are just like the "2" ones, except that a third | |
429 | * voice is allowed to exist. Its stem direction is determined elsewhere. | |
430 | */ | |
431 | #define V_1 (0) | |
432 | #define V_2OPSTEM (1) | |
433 | #define V_2FREESTEM (2) | |
434 | #define V_3OPSTEM (3) | |
435 | #define V_3FREESTEM (4) | |
436 | ||
437 | /* | |
438 | * Define the modes of the voicecombine parameter. | |
439 | */ | |
440 | /* bottom note of high voice must be higher than top note of low voice */ | |
441 | #define VC_NOOVERLAP (0) | |
442 | /* bottom note of high voice must be no lower than top note of low voice */ | |
443 | #define VC_SHAREONE (1) | |
444 | /* no restrictions */ | |
445 | #define VC_OVERLAP (2) | |
446 | ||
447 | /* | |
448 | * Define the staff style vis-a-vis printing of clefs, accidentals (in key | |
449 | * signatures and otherwise), and tranposing. WARNING: SS_NOTHING must be | |
450 | * defined to be 0 so that calloc inits the field to this. | |
451 | */ | |
452 | #define SS_NOTHING (0) /* no transpose; print no clef, no accidentals*/ | |
453 | #define SS_NORMAL (1) /* normal printing */ | |
454 | #define SS_DRUM (2) /* like SS_NOTHING, but print a "drum clef" */ | |
455 | ||
456 | /* | |
457 | * Define the time signature types. NUMERIC is the usual two-number | |
458 | * signature. INVISNUM is the same, except that it will not be printed. | |
459 | * Common and cut time are noted here separately. But for all other | |
460 | * purposes they are treated as 4/4 and 2/2 respectively. | |
461 | */ | |
462 | #define TS_NUMERIC (0) | |
463 | #define TS_INVISNUM (1) | |
464 | #define TS_COMMON (2) | |
465 | #define TS_CUT (3) | |
466 | ||
467 | /* | |
468 | * Special bytes used inside time signature representation. | |
469 | * These values need to be outside the range of time signature numerators | |
470 | * and denominators, but small enough to fit in a byte. | |
471 | * Probably safer to keep them under 128 as well, to avoid any possible | |
472 | * issues with negative chars. | |
473 | * | |
474 | * Here's how the encoding works: | |
475 | * cut and common get stored as TSR_CUT and TSR_COMMON respectively. | |
476 | * If a + is used between a denominator of one fraction | |
477 | * and numerator of another, it is encoded as TSR_ADD. | |
478 | * When a + is used inside a numerator, nothing is stored at all, | |
479 | * since it is clear all numbers up to the slash | |
480 | * must be components of the numerator. | |
481 | * White space rather than + after a denominator | |
482 | * means alternating time signatures, marked internally by TSR_ALTERNATING. | |
483 | * Numbers are stored as their binary values. | |
484 | * A TSR_END is placed at the end of everything to mark the end. | |
485 | * A null is used for that, so one could use things like strlen or strcpy | |
486 | * on a representation. | |
487 | */ | |
488 | #define TSR_CUT (MAXNUMERATOR + 1) | |
489 | #define TSR_COMMON (MAXNUMERATOR + 2) | |
490 | #define TSR_SLASH (MAXNUMERATOR + 3) | |
491 | #define TSR_ADD (MAXNUMERATOR + 4) | |
492 | #define TSR_ALTERNATING (MAXNUMERATOR + 5) | |
493 | #define TSR_END (0) | |
494 | ||
495 | /* | |
496 | * This is the maximum length of an internal time signature representation. | |
497 | * Note that the internal form is more compact than the input form, | |
498 | * so even something so ridiculously complicated that it's doubtful any | |
499 | * human could keep it straight, like | |
500 | * 3+1+4/16 + cut + 7+11+41/2 9+2/64 + 5+7+31+29/1 + com | |
501 | * would only take 28 bytes, so 40 should be plenty! | |
502 | * The maximum number of numerator components 40 bytes could accomodate | |
503 | * would be 37, so maximum theoretical effective time signature | |
504 | * would be thirty-seven 99's or 3663 counts. | |
505 | */ | |
506 | #define MAXTSLEN 40 | |
507 | ||
508 | /* | |
509 | * Define when time signatures should be printed. "Once" means when it | |
510 | * changes. "Always" makes sense only when there is an alternating time sig, | |
511 | * and it means print it at each measure. | |
512 | */ | |
513 | #define PTS_NEVER (0) /* user input "n" */ | |
514 | #define PTS_ONCE (1) /* user input nothing */ | |
515 | #define PTS_ALWAYS (2) /* user input "y" */ | |
516 | ||
517 | /* | |
518 | * Define the clefs that are allowed. The values are important, so that | |
519 | * the program can conveniently figure note positions without having a | |
520 | * separate case for each value. | |
521 | */ | |
522 | #define TREBLE_8A (-7) | |
523 | #define FRENCHVIOLIN (-2) | |
524 | #define TREBLE (0) | |
525 | #define SOPRANO (2) | |
526 | #define MEZZOSOPRANO (4) | |
527 | #define ALTO (6) | |
528 | #define TREBLE_8 (7) | |
529 | #define TENOR (8) | |
530 | #define BARITONE (10) | |
531 | #define BASS (12) | |
532 | #define TABCLEF (-1) /* tablature "clef" */ | |
533 | #define NOCLEF (-99) /* no clef is present */ | |
534 | ||
535 | /* | |
536 | * Define what a GRPSYL structure can represent. | |
537 | */ | |
538 | #define GS_GROUP (0) | |
539 | #define GS_SYLLABLE (1) | |
540 | ||
541 | /* | |
542 | * Define the different contents a group can have. | |
543 | */ | |
544 | #define GC_NOTES (0) | |
545 | #define GC_REST (1) | |
546 | #define GC_SPACE (2) | |
547 | ||
548 | /* | |
549 | * Define the time values a group can have. Only note groups can be other than | |
550 | * normal (grace notes). There are no grace rests or spaces. | |
551 | */ | |
552 | #define GV_NORMAL (0) | |
553 | #define GV_ZERO (1) | |
554 | ||
555 | /* | |
556 | * Define the unknown value for headshapes. The other values aren't defined | |
557 | * here because they are established as headshapes are loaded at run time. | |
558 | * There is a built-in set of these that are loaded, and then the user can use | |
559 | * the "headshapes" context to load more. Each headshape number corresponds to | |
560 | * a headshape name, such as "norm", "xnote", "rect", etc., and stands for the | |
561 | * set of music characters used to print note heads of the various basictimes. | |
562 | */ | |
563 | #define HS_UNKNOWN (0) | |
564 | ||
565 | /* | |
566 | * Define the size of a group. Spaces are always normal, but notes and rests | |
567 | * can have different sizes. For note groups, this can vary on a per-note | |
568 | * basis. | |
569 | */ | |
570 | #define GS_NORMAL (0) | |
571 | #define GS_SMALL (1) | |
572 | ||
573 | /* | |
574 | * Define position that you can be in relative to a list of objects. | |
575 | */ | |
576 | #define NOITEM (0) /* not within a list */ | |
577 | #define STARTITEM (1) /* first item in a list */ | |
578 | #define INITEM (2) /* interior item in a list */ | |
579 | #define ENDITEM (3) /* last item in a list */ | |
580 | #define LONEITEM (4) /* only item in a list */ | |
581 | ||
582 | ||
583 | /* | |
584 | * Define the directions for various items. | |
585 | */ | |
586 | #define UNKNOWN (0) | |
587 | #define UP (1) | |
588 | #define DOWN (2) | |
589 | ||
590 | ||
591 | /* | |
592 | * Define values for controlling printing of tuplet numbers and brackets. | |
593 | * For PT_DEFAULT, the bracket will be printed unless all the notes of the | |
594 | * tuplet (and no other notes) form a beamed set. | |
595 | */ | |
596 | #define PT_NEITHER (0) /* never print number or bracket */ | |
597 | #define PT_DEFAULT (1) /* always print number; maybe print bracket */ | |
598 | #define PT_BOTH (2) /* always print number and bracket */ | |
599 | #define PT_NUMBER (3) /* always print just the number */ | |
600 | ||
601 | ||
602 | /* | |
603 | * Coordinate types that can have location variables associated with them. | |
604 | */ | |
605 | #define CT_BUILTIN (1) | |
606 | #define CT_GRPSYL (2) | |
607 | #define CT_BAR (4) | |
608 | #define CT_NOTE (8) | |
609 | #define CT_INVISIBLE (128) | |
610 | ||
611 | ||
612 | /* | |
613 | * Define the types of STUFF structure. "Stuff" is things that are to be | |
614 | * printed other than the actual music and lyrics. | |
615 | */ | |
616 | #define ST_ROM (0) | |
617 | #define ST_BOLD (1) | |
618 | #define ST_ITAL (2) | |
619 | #define ST_BOLDITAL (3) | |
620 | #define ST_CRESC (4) | |
621 | #define ST_DECRESC (5) | |
622 | #define ST_MUSSYM (6) | |
623 | #define ST_PEDAL (7) | |
624 | #define ST_TIESLUR (8) | |
625 | #define ST_TABSLUR (9) | |
626 | #define ST_BEND (10) | |
627 | #define ST_PHRASE (11) | |
628 | #define ST_OCTAVE (12) | |
629 | #define ST_MIDI (13) | |
630 | ||
631 | #define IS_TEXT(stype) ((stype) == ST_ROM || (stype) == ST_ITAL || \ | |
632 | (stype) == ST_BOLD || (stype) == ST_BOLDITAL) | |
633 | ||
634 | /* | |
635 | * Define the places where the stuff can be printed, relative to staff(s). | |
636 | */ | |
637 | #define PL_ABOVE (0) | |
638 | #define PL_BELOW (1) | |
639 | #define PL_BETWEEN (2) | |
640 | #define PL_UNKNOWN (3) | |
641 | #define NUM_PLACE (3) /* number of "good" places (exclude unknown) */ | |
642 | ||
643 | /* | |
644 | * Define the ways a user can specify the horizonal offset of a group from the | |
645 | * chord's X coordinate. | |
646 | */ | |
647 | #define HO_NONE (0) /* not specified */ | |
648 | #define HO_LEFT (1) /* "-" (next to other group(s), on the left) */ | |
649 | #define HO_RIGHT (2) /* "+" (next to other group(s), on the right) */ | |
650 | #define HO_VALUE (3) /* "+/-N" (offset given by GRPSYL.ho_value) */ | |
651 | ||
652 | /* | |
653 | * Define text modifiers: different flavors of rom, bold, ital, and | |
654 | * boldital. TM_DYN also applies automatically to the hairpin stuffs, < and >. | |
655 | */ | |
656 | #define TM_NONE (0) | |
657 | #define TM_CHORD (1) | |
658 | #define TM_ANALYSIS (2) | |
659 | #define TM_FIGBASS (3) | |
660 | #define TM_DYN (4) | |
661 | ||
662 | #define IS_CHORDLIKE(x) ((x) == TM_CHORD || (x) == TM_ANALYSIS || \ | |
663 | (x) == TM_FIGBASS) | |
664 | ||
665 | /* | |
666 | * Define values for dist_usage in STUFF. | |
667 | */ | |
668 | #define SD_NONE (0) /* user did not specify */ | |
669 | #define SD_MIN (1) /* user specified minimum distance */ | |
670 | #define SD_FORCE (2) /* user is forcing this distance */ | |
671 | ||
672 | /* | |
673 | * Define all the types of marks that the user can request to be stacked in | |
674 | * different orders. This list is in increasing order of the default priority | |
675 | * of stacking, except that by default MK_DYN, MK_OTHERTEXT, and MK_CHORD are | |
676 | * of equal priority. If this list changes, make sure that Defmarkorder[] | |
677 | * is updated too. For each place (above, below, between), the user can | |
678 | * specify a different ordering of priority to be used. There is a restriction | |
679 | * that the last ones (MK_LYRICS, MK_ENDING, MK_REHEARSAL, MK_PEDAL) must | |
680 | * have a different priority from each other and any of the other ones. Also, | |
681 | * MK_PEDAL is allowed only below; MK_ENDING and MK_REHEARSAL are allowed only | |
682 | * above; and those three and MK_OCTAVE are not allowed between. | |
683 | */ | |
684 | #define MK_MUSSYM (0) /* ST_MUSSYM */ | |
685 | #define MK_OCTAVE (1) /* ST_OCTAVE */ | |
686 | #define MK_DYN (2) /* ST_CRESC or ST_DECRESC; or ST_ROM, */ | |
687 | /* ST_ITAL, ST_BOLD, ST_BOLDITAL with "dyn" */ | |
688 | /* (TM_DYN is set for these and only these) */ | |
689 | #define MK_OTHERTEXT (3) /* ST_ROM, ST_ITAL, ST_BOLD, ST_BOLDITAL */ | |
690 | /* without chord/analysis/figbass or dyn */ | |
691 | #define MK_CHORD (4) /* ST_ROM, ST_ITAL, ST_BOLD, ST_BOLDITAL */ | |
692 | /* with chord, analysis, or figbass */ | |
693 | /* (TM_CHORD is set for these and only these) */ | |
694 | #define MK_LYRICS (5) /* lyrics */ | |
695 | #define MK_ENDING (6) /* ending mark */ | |
696 | #define MK_REHEARSAL (7) /* rehearsal mark */ | |
697 | #define MK_PEDAL (8) /* ST_PEDAL */ | |
698 | #define NUM_MARK (9) /* this must follow the last MK */ | |
699 | ||
700 | /* | |
701 | * While parsing, we need to temporarily store some things as pseudo-pitches. | |
702 | * When the user does not specify any pitch for the first group of a measure, | |
703 | * we temporarily use PP_NO_PITCH, since not specifying a pitch is legal iff it | |
704 | * is for one or more 1-line staffs, but it's not easy to check on that until | |
705 | * later. We also need to save rest, space, and rpt as pseudo notes until we | |
706 | * later map them to groups. | |
707 | */ | |
708 | #define PP_NO_PITCH 'h' | |
709 | #define PP_REST 'r' | |
710 | #define PP_SPACE 's' | |
711 | #define PP_RPT 'p' | |
712 | ||
713 | /* | |
714 | * Define the other staff that a given staff's groups are beamed or stemmed to. | |
715 | */ | |
716 | #define CS_SAME (0) | |
717 | #define CS_ABOVE (1) | |
718 | #define CS_BELOW (2) | |
719 | ||
720 | /* | |
721 | * Define symbols for indexing coordinate arrays. The first 12 are X, Y, | |
722 | * north, south, east, and west, both relative and absolute. Not all things | |
723 | * that have coordinates bother to set all 12 of these. There should be | |
724 | * comments in structs.h saying which things get set for what. | |
725 | * | |
726 | * In GRPSYL, during the time that positions of phrase marks are being | |
727 | * figured out, AN and AS are used in a strange way. But later, they get | |
728 | * set to their intended values. | |
729 | * | |
730 | * The 13th is a special number used by nongrace notes and GRPSYLs, and BARs | |
731 | * only. For notes and GRPSYLs, it has the following meaning. It indicates | |
732 | * how many inches of horizontal space would be allocated to this object | |
733 | * if it were a whole note instead of whatever it actually is, but were | |
734 | * allocated space proportionally. That is, fulltime times this number | |
735 | * is the amount of space between the X coordinates of this GRPSYL and | |
736 | * the next one in the measure (or the bar line if this is the last GRPSYL | |
737 | * in the measure). Notice that even for notes, it's the X coordinate of | |
738 | * the note's GRPSYL that count, even if the note head is on the "wrong" | |
739 | * side of the stem. For BARs, this 13th number has a similiar use. If | |
740 | * you pretend that a bar line is count 0 of the following measure, and | |
741 | * the first GRPSYL of the measure is at count 1 (whichever type of note | |
742 | * constitutes a "count"), this number is how many inches would be allocated | |
743 | * to a whole note instead of the one count of space that is there. | |
744 | */ | |
745 | #define RX (0) | |
746 | #define RY (1) | |
747 | #define RN (2) | |
748 | #define RS (3) | |
749 | #define RE (4) | |
750 | #define RW (5) | |
751 | #define AX (6) | |
752 | #define AY (7) | |
753 | #define AN (8) | |
754 | #define AS (9) | |
755 | #define AE (10) | |
756 | #define AW (11) | |
757 | #define INCHPERWHOLE (12) | |
758 | #define NUMCTYPE (13) | |
759 | ||
760 | ||
761 | /* | |
762 | * AN and AS of group coordinates are used temporarily to store the distance | |
763 | * from the group to any phrase marks, to be used to make sure nesting phrases | |
764 | * don't impinge on that space. But if a group has a phrase ending on it and | |
765 | * another beginning on it, those won't collide. So use bitmap to keep track | |
766 | * of whether the AN and AS values apply to east side, west side, or both. | |
767 | * (phraseside in GRPSYL is a bit map.) | |
768 | */ | |
769 | #define EAST_SIDE (1 << 0) | |
770 | #define WEST_SIDE (1 << 1) | |
771 | ||
772 | ||
773 | /* | |
774 | * Define the types of bar line. | |
775 | */ | |
776 | #define INVISBAR (0) | |
777 | #define SINGLEBAR (1) | |
778 | #define DOUBLEBAR (2) | |
779 | #define REPEATSTART (3) | |
780 | #define REPEATEND (4) | |
781 | #define REPEATBOTH (5) | |
782 | #define ENDBAR (6) | |
783 | #define RESTART (7) | |
784 | ||
785 | /* | |
786 | * Define the types of font, leaving 0 unused to avoid ending up having | |
787 | * null characters appear in strings where this number is stored, | |
788 | * and to have something convenient to use to flag an unknown font. | |
789 | * WARNING: the getfontinfo.c program depends on all the font names | |
790 | * beginning with "FONT_", and on MAXFONTS being at the end of the list. | |
791 | */ | |
792 | #define FONT_UNKNOWN (0) | |
793 | #define FAMILY_DFLT (-1) | |
794 | ||
795 | #define BASE_TIMES (0) | |
796 | #define FONT_TR (1) | |
797 | #define FONT_TI (2) | |
798 | #define FONT_TB (3) | |
799 | #define FONT_TX (4) | |
800 | ||
801 | #define BASE_AVANTGARDE (FONT_TX) | |
802 | #define FONT_AR (BASE_AVANTGARDE + FONT_TR) | |
803 | #define FONT_AI (BASE_AVANTGARDE + FONT_TI) | |
804 | #define FONT_AB (BASE_AVANTGARDE + FONT_TB) | |
805 | #define FONT_AX (BASE_AVANTGARDE + FONT_TX) | |
806 | ||
807 | #define BASE_COURIER (FONT_AX) | |
808 | #define FONT_CR (BASE_COURIER + FONT_TR) | |
809 | #define FONT_CI (BASE_COURIER + FONT_TI) | |
810 | #define FONT_CB (BASE_COURIER + FONT_TB) | |
811 | #define FONT_CX (BASE_COURIER + FONT_TX) | |
812 | ||
813 | #define BASE_HELVETICA (FONT_CX) | |
814 | #define FONT_HR (BASE_HELVETICA + FONT_TR) | |
815 | #define FONT_HI (BASE_HELVETICA + FONT_TI) | |
816 | #define FONT_HB (BASE_HELVETICA + FONT_TB) | |
817 | #define FONT_HX (BASE_HELVETICA + FONT_TX) | |
818 | ||
819 | #define BASE_BOOKMAN (FONT_HX) | |
820 | #define FONT_BR (BASE_BOOKMAN + FONT_TR) | |
821 | #define FONT_BI (BASE_BOOKMAN + FONT_TI) | |
822 | #define FONT_BB (BASE_BOOKMAN + FONT_TB) | |
823 | #define FONT_BX (BASE_BOOKMAN + FONT_TX) | |
824 | ||
825 | #define BASE_NEWCENTURY (FONT_BX) | |
826 | #define FONT_NR (BASE_NEWCENTURY + FONT_TR) | |
827 | #define FONT_NI (BASE_NEWCENTURY + FONT_TI) | |
828 | #define FONT_NB (BASE_NEWCENTURY + FONT_TB) | |
829 | #define FONT_NX (BASE_NEWCENTURY + FONT_TX) | |
830 | ||
831 | #define BASE_PALATINO (FONT_NX) | |
832 | #define FONT_PR (BASE_PALATINO + FONT_TR) | |
833 | #define FONT_PI (BASE_PALATINO + FONT_TI) | |
834 | #define FONT_PB (BASE_PALATINO + FONT_TB) | |
835 | #define FONT_PX (BASE_PALATINO + FONT_TX) | |
836 | ||
837 | #ifdef EXTCHAR | |
838 | /* extra fonts that contain the extended character set start here. | |
839 | * They go in the same order as their corresponding standard ASCII fonts */ | |
840 | #define EXT_FONT_OFFSET (FONT_PX - BASE_TIMES) | |
841 | ||
842 | #define FONT_XTR (FONT_TR + EXT_FONT_OFFSET) | |
843 | #define FONT_XTI (FONT_TI + EXT_FONT_OFFSET) | |
844 | #define FONT_XTB (FONT_TB + EXT_FONT_OFFSET) | |
845 | #define FONT_XTX (FONT_TX + EXT_FONT_OFFSET) | |
846 | ||
847 | #define FONT_XAR (FONT_AR + EXT_FONT_OFFSET) | |
848 | #define FONT_XAI (FONT_AI + EXT_FONT_OFFSET) | |
849 | #define FONT_XAB (FONT_AB + EXT_FONT_OFFSET) | |
850 | #define FONT_XAX (FONT_AX + EXT_FONT_OFFSET) | |
851 | ||
852 | #define FONT_XCR (FONT_CR + EXT_FONT_OFFSET) | |
853 | #define FONT_XCI (FONT_CI + EXT_FONT_OFFSET) | |
854 | #define FONT_XCB (FONT_CB + EXT_FONT_OFFSET) | |
855 | #define FONT_XCX (FONT_CX + EXT_FONT_OFFSET) | |
856 | ||
857 | #define FONT_XHR (FONT_HR + EXT_FONT_OFFSET) | |
858 | #define FONT_XHI (FONT_HI + EXT_FONT_OFFSET) | |
859 | #define FONT_XHB (FONT_HB + EXT_FONT_OFFSET) | |
860 | #define FONT_XHX (FONT_HX + EXT_FONT_OFFSET) | |
861 | ||
862 | #define FONT_XBR (FONT_BR + EXT_FONT_OFFSET) | |
863 | #define FONT_XBI (FONT_BI + EXT_FONT_OFFSET) | |
864 | #define FONT_XBB (FONT_BB + EXT_FONT_OFFSET) | |
865 | #define FONT_XBX (FONT_BX + EXT_FONT_OFFSET) | |
866 | ||
867 | #define FONT_XNR (FONT_NR + EXT_FONT_OFFSET) | |
868 | #define FONT_XNI (FONT_NI + EXT_FONT_OFFSET) | |
869 | #define FONT_XNB (FONT_NB + EXT_FONT_OFFSET) | |
870 | #define FONT_XNX (FONT_NX + EXT_FONT_OFFSET) | |
871 | ||
872 | #define FONT_XPR (FONT_PR + EXT_FONT_OFFSET) | |
873 | #define FONT_XPI (FONT_PI + EXT_FONT_OFFSET) | |
874 | #define FONT_XPB (FONT_PB + EXT_FONT_OFFSET) | |
875 | #define FONT_XPX (FONT_PX + EXT_FONT_OFFSET) | |
876 | ||
877 | #define BASE_MISC (FONT_XPX) | |
878 | #else | |
879 | #define BASE_MISC (FONT_PX) | |
880 | #endif | |
881 | #define FONT_ZD (BASE_MISC + 1) | |
882 | #define FONT_ZI (BASE_MISC + 2) | |
883 | #define FONT_MUSIC (BASE_MISC + 3) | |
884 | #define FONT_MUSIC2 (BASE_MISC + 4) | |
885 | #define MAXFONTS (BASE_MISC + 5) | |
886 | ||
887 | /* number of music fonts */ | |
888 | #define NUM_MFONTS (2) | |
889 | ||
890 | /* first printable character in a font */ | |
891 | #define FIRST_CHAR (32) | |
892 | ||
893 | /* | |
894 | * The following value plus FIRST_CHAR needs to be at least as large as | |
895 | * one more than the largest value in either muschar.h or extchar.h | |
896 | */ | |
897 | #define CHARS_IN_FONT (96) | |
898 | ||
899 | /* | |
900 | * Find array offset into height, width, and ascent tables. This is character | |
901 | * code -FIRST_CHAR, to skip ASCII control characters. | |
902 | */ | |
903 | #define CHAR_INDEX(c) ((c) - FIRST_CHAR) | |
904 | ||
905 | /* | |
906 | * Test if a font is a "music" font. | |
907 | */ | |
908 | #define IS_MUSIC_FONT(f) ((f) == FONT_MUSIC || (f) == FONT_MUSIC2) | |
909 | ||
910 | /* | |
911 | * Special commands to use inside internal format of strings. | |
912 | * All use high-bit==1 to indicate a command. | |
913 | * Note that the low order bits of STR_MUS_CHAR* specify which music font it is. | |
914 | */ | |
915 | #define STR_MUS_CHAR 0x80 /* followed by 1-byte size and 1-byte \ | |
916 | * music character code */ | |
917 | #define STR_MUS_CHAR2 0x81 /* same rules as above */ | |
918 | #define STR_FONT 0xe0 /* followed by 1-byte font number */ | |
919 | #define STR_SIZE 0xe1 /* followed by 1-byte size */ | |
920 | #define STR_PAGENUM 0xe2 /* followed by '%' */ | |
921 | #define STR_NUMPAGES 0xe3 /* followed by '#' */ | |
922 | #define STR_PRE 0xe4 /* pre-syl <--->, ignored in spacing */ | |
923 | #define STR_U_PRE 0xe5 /* pre-syl <...>, used in spacing */ | |
924 | #define STR_PRE_END 0xe6 /* end of pre-syllable <...> */ | |
925 | #define STR_PST 0xe7 /* post-syl <...>, ignored in spacing */ | |
926 | #define STR_U_PST 0xe8 /* post-syl <...>, used in spacing */ | |
927 | #define STR_PST_END 0xe9 /* end of post-syllable <...> */ | |
928 | /* | |
929 | * Backspace is a bit strange. The amount to back up varies because of | |
930 | * proportionally spaced fonts. So we save the distance in terms of the width | |
931 | * in 250ths of an inch in the default size. The actual distance to back up is | |
932 | * then that number times the ratio of the current actual size to the default | |
933 | * size divided by 250. 250 was chosen because that means a range of 1-127 | |
934 | * (to make sure it is non-zero and with high-bit of zero) | |
935 | * will give a range of .004 to 0.508 inches, which should cover all | |
936 | * characters we have today (the widest of which is currently just over 1/4"). | |
937 | * This is done in floating point, so no reason to use a power of 2 like 256. | |
938 | */ | |
939 | #define STR_BACKSPACE 0xea /* followed by how much to back up */ | |
940 | ||
941 | #define BACKSP_FACTOR (250.0) | |
942 | ||
943 | /* string commands for boxed text */ | |
944 | #define STR_BOX 0xeb | |
945 | #define STR_BOX_END 0xec | |
946 | #define IS_BOXED(string) (((string[2] & 0xff) == (STR_BOX & 0xff)) ? YES : NO) | |
947 | ||
948 | #define STR_VERTICAL 0xed /* vert move followed by 1-byte dist */ | |
949 | #define STR_L_ALIGN 0xee /* align at left edge of next char */ | |
950 | #define STR_C_ALIGN 0xef /* align at center of next char */ | |
951 | #define STR_PILE 0xf0 /* toggle for piling, \: */ | |
952 | #define STR_SLASH 0xf1 /* slash used by figbass, \/ */ | |
953 | ||
954 | /* string commands for circled text */ | |
955 | #define STR_CIR 0xf2 | |
956 | #define STR_CIR_END 0xf3 | |
957 | #define IS_CIRCLED(string) (((string[2] & 0xff) == (STR_CIR & 0xff)) ? YES : NO) | |
958 | ||
959 | /* | |
960 | * Define macros relating to vertical movement within a string. It is stored | |
961 | * in points, offset by a bias so that the number will always be positive when | |
962 | * stored in the byte after the STR_VERTICAL in a string. | |
963 | */ | |
964 | #define MINVERTICAL (-50) | |
965 | #define MAXVERTICAL (50) | |
966 | #define VERT_BIAS (1 - MINVERTICAL) | |
967 | #define ENCODE_VERT(x) (x + VERT_BIAS) | |
968 | #define DECODE_VERT(x) (x - VERT_BIAS) | |
969 | ||
970 | /* | |
971 | * Macro to determine if a character in an internal-format string is a | |
972 | * command character. | |
973 | */ | |
974 | #define IS_STR_COMMAND(c) ((c) & 0x80) | |
975 | ||
976 | ||
977 | #define DFLT_SIZE (12) | |
978 | #define SMALLSIZE ((int)(DFLT_SIZE * SM_FACTOR)) | |
979 | ||
980 | /* | |
981 | * Define the default font size of a measure number. | |
982 | */ | |
983 | #define MNUM_SIZE (11) | |
984 | ||
985 | /* | |
986 | * Define types of lines and curves. | |
987 | */ | |
988 | #define L_NORMAL (0) | |
989 | #define L_MEDIUM (1) | |
990 | #define L_WIDE (2) | |
991 | #define L_WAVY (3) | |
992 | #define L_DOTTED (4) | |
993 | #define L_DASHED (5) | |
994 | ||
995 | /* | |
996 | * Define the kinds of justification. | |
997 | */ | |
998 | #define J_LEFT (1) | |
999 | #define J_RIGHT (2) | |
1000 | #define J_CENTER (3) | |
1001 | #define J_NONE (4) | |
1002 | #define J_RAGPARA (5) /* ragged-right paragraph */ | |
1003 | #define J_JUSTPARA (6) /* justified paragraph */ | |
1004 | ||
1005 | /* | |
1006 | * Define the ending styles (which staffs 1st, 2nd, etc. endings are to | |
1007 | * be drawn on). | |
1008 | */ | |
1009 | #define ENDING_TOP (0) /* only above top visible staff */ | |
1010 | #define ENDING_BARRED (1) /* above each group of staffs barred together*/ | |
1011 | #define ENDING_GROUPED (2) /* above each group of staffs grouped */ | |
1012 | /* together by braces or brackets */ | |
1013 | ||
1014 | /* | |
1015 | * Define types of rehearsal letters/numbers. | |
1016 | */ | |
1017 | #define REH_NONE (0) /* none at all */ | |
1018 | #define REH_STRING (1) /* user-supplied string */ | |
1019 | #define REH_NUM (2) /* consecutive numbers 1, 2, 3, . . . */ | |
1020 | #define REH_LET (3) /* consecutive letters A, B, C, . . . */ | |
1021 | #define REH_MNUM (4) /* use current measure number */ | |
1022 | ||
1023 | /* | |
1024 | * Define the style of (ways of drawing) rehearsal letters/numbers. | |
1025 | */ | |
1026 | #define RS_PLAIN (0) /* just the letter/number */ | |
1027 | #define RS_BOXED (1) /* enclosed in a box */ | |
1028 | #define RS_CIRCLED (2) /* enclosed in a circle */ | |
1029 | ||
1030 | /* | |
1031 | * Define the ways to print pedal markings. | |
1032 | */ | |
1033 | #define P_LINE (0) /* draw a line under where the pedal is down */ | |
1034 | #define P_PEDSTAR (1) /* print "Ped." and the start and "*" at end */ | |
1035 | #define P_ALTPEDSTAR (2) /* like P_PEDSTAR but only "Ped." when bounce*/ | |
1036 | ||
1037 | /* | |
1038 | * Define the side of a stem that a partial beam can be on. There is code in | |
1039 | * prntdata.c that depends on these values, -1 and 1. | |
1040 | */ | |
1041 | #define PB_LEFT (-1) | |
1042 | #define PB_RIGHT (1) | |
1043 | ||
1044 | /* | |
1045 | * Define types of intervals. There is code that depends on these being in | |
1046 | * this order, starting from 0, counting up (like in trnspose.c). | |
1047 | */ | |
1048 | #define DIMINISHED (0) | |
1049 | #define MINOR (1) | |
1050 | #define PERFECT (2) | |
1051 | #define MAJOR (3) | |
1052 | #define AUGMENTED (4) | |
1053 | ||
1054 | /* | |
1055 | * Define the input style. | |
1056 | */ | |
1057 | #define IS_VOICE_INPUT (0) /* voice-at-a-time (must be zero) */ | |
1058 | #define IS_CHORD_INPUT (1) /* chord-at-a-time */ | |
1059 | ||
1060 | /* | |
1061 | * Define the valid page sizes. The values must match the indexes of | |
1062 | * pagesztbl in gram.y. | |
1063 | */ | |
1064 | #define PS_LETTER (0) | |
1065 | #define PS_LEGAL (1) | |
1066 | #define PS_FLSA (2) | |
1067 | #define PS_HALFLETTER (3) | |
1068 | #define PS_A4 (4) | |
1069 | #define PS_A5 (5) | |
1070 | #define PS_A6 (6) | |
1071 | ||
1072 | /* Define page orientations */ | |
1073 | #define O_PORTRAIT (0) | |
1074 | #define O_LANDSCAPE (1) | |
1075 | ||
1076 | /* | |
1077 | * Define various constants ============================================= | |
1078 | */ | |
1079 | ||
1080 | /* the number of PostScript points in one inch */ | |
1081 | #define PPI (72.0) | |
1082 | ||
1083 | /* the size of a point in inches */ | |
1084 | #define POINT (1.0 / PPI) | |
1085 | ||
1086 | /* the distance between a note and the next higher note */ | |
1087 | #define STEPSIZE (3.0 * POINT) | |
1088 | ||
1089 | /* size of white space for surrounding things that should be padded thus */ | |
1090 | #define STDPAD (STEPSIZE / 3.0) | |
1091 | ||
1092 | /* (distance between tab staff lines) / (distance between normal staff lines)*/ | |
1093 | #define TABRATIO (1.735) | |
1094 | ||
1095 | /* scaling factor giving size of "sm" (small) music chars relative to normal */ | |
1096 | #define SM_FACTOR (0.65) | |
1097 | ||
1098 | /* scaling factor giving size of a grace fret number relative to normal */ | |
1099 | #define SMFRETSIZE ((int)(0.80 * DFLT_SIZE)) | |
1100 | ||
1101 | /* font character size information is stored in FONTFACTORs of an inch */ | |
1102 | #define FONTFACTOR (1000.0) | |
1103 | ||
1104 | /* widths of various types of lines, in points */ | |
1105 | #define W_NORMAL (0.7) | |
1106 | #define W_MEDIUM (1.5) | |
1107 | #define W_WIDE (3.0) | |
1108 | ||
1109 | /* vertical distance between two flags or two beams */ | |
1110 | #define FLAGSEP (1.6 * STEPSIZE) /* for normal notes */ | |
1111 | #define SMFLAGSEP (FLAGSEP * SM_FACTOR) /* for cue or grace notes */ | |
1112 | ||
1113 | /* minimum width to be given to a multirest */ | |
1114 | #define MINMULTIWIDTH (0.7) | |
1115 | ||
1116 | /* temporary width for a measure rest, serves as a marker */ | |
1117 | #define TEMPMRPTWIDTH (0.02) | |
1118 | ||
1119 | /* half the width of a restart bar */ | |
1120 | #define HALF_RESTART_WIDTH (12 * POINT) | |
1121 | ||
1122 | /* padding provided to force more room between groups for various reasons */ | |
1123 | #define TIESLURPAD (0.12) /* ties and slurs */ | |
1124 | #define SLASHPAD (0.06) /* slashes through stems */ | |
1125 | #define ALTPAD (0.12) /* alternation beams between groups */ | |
1126 | #define ROLLPADDING (12 * STDPAD) /* a roll to the left of a group */ | |
1127 | ||
1128 | /* padding to be put after a clef */ | |
1129 | #define CLEFPAD (2.0 * STDPAD) | |
1130 | ||
1131 | /* how high certain things are */ | |
1132 | #define TUPHEIGHT (10.0/3.0 * STEPSIZE) /* tuplet bracket */ | |
1133 | #define OCTHEIGHT (10.0/3.0 * STEPSIZE) /* octave bracket */ | |
1134 | #define ENDINGHEIGHT (13.0/3.0 * STEPSIZE) /* ending bracket */ | |
1135 | #define MULTIHEIGHT (12.0/3.0 * STEPSIZE) /* multirest number */ | |
1136 | #define MINWITHHEIGHT (2.2 * STEPSIZE) /* minimum "with" list item */ | |
1137 | ||
1138 | /* horizontal extent of a slash, in stepsizes */ | |
1139 | #define SLASHHORZ (5.0 / 3.0) | |
1140 | ||
1141 | /* | |
1142 | * The maximum number of notes there could ever be in a "hand" (the notes of a | |
1143 | * chord that occur on a given staff) is the number of unique notes that can | |
1144 | * exist, C0 through B9. | |
1145 | */ | |
1146 | #define MAXHAND ((MAXOCTAVE - MINOCTAVE + 1) * 7) | |
1147 | ||
1148 | /* the length in the X direction of a tabslur to or from nowhere */ | |
1149 | #define SLIDEXLEN (3.0 * STEPSIZE) | |
1150 | ||
1151 | /* define the default distance, in stepsizes, between the lines of a grid */ | |
1152 | #define WHEREUSED_GS (1.6) /* when printed by the music */ | |
1153 | #define ATEND_GS (2.0) /* when printed at the end of the song */ | |
1154 | ||
1155 | #define NO (0) | |
1156 | #define YES (1) | |
1157 | ||
1158 | /* the "used" field in input SSVs uses the following in addition to YES/NO */ | |
1159 | #define UNSET (2) | |
1160 | ||
1161 | #ifndef PI | |
1162 | #define PI (3.141592653589793) | |
1163 | #endif | |
1164 | ||
1165 | #define CMPERINCH (2.54) /* centimeters per inch */ | |
1166 | ||
1167 | /* | |
1168 | * Define miscellaneous macros ============================================= | |
1169 | */ | |
1170 | ||
1171 | /* number of elements in an array */ | |
1172 | #define NUMELEM(a) (sizeof(a) / sizeof((a)[0])) | |
1173 | ||
1174 | /* | |
1175 | * Define macros for allocating structures. | |
1176 | */ | |
1177 | #define MALLOC(structtype, new_p, numelem) { \ | |
1178 | if ((new_p = (struct structtype *)malloc((unsigned) \ | |
1179 | (((numelem) == 0 ? 1 : (numelem)) * \ | |
1180 | sizeof(struct structtype)))) == 0) \ | |
1181 | l_no_mem(__FILE__, __LINE__); \ | |
1182 | } | |
1183 | #define CALLOC(structtype, new_p, numelem) { \ | |
1184 | if ((new_p = (struct structtype *)calloc( \ | |
1185 | (numelem) == 0 ? 1 : (numelem), \ | |
1186 | (unsigned)sizeof(struct structtype))) == 0) \ | |
1187 | l_no_mem(__FILE__, __LINE__); \ | |
1188 | } | |
1189 | #ifndef __STDC__ | |
1190 | #define REALLOC(structtype, new_p, numelem) { \ | |
1191 | if ((new_p = (struct structtype *)realloc((char *)(new_p), \ | |
1192 | (unsigned)(((numelem) == 0 ? 1 : (numelem)) * \ | |
1193 | sizeof(struct structtype)))) == 0) \ | |
1194 | l_no_mem(__FILE__, __LINE__); \ | |
1195 | } | |
1196 | #else | |
1197 | #define REALLOC(structtype, new_p, numelem) { \ | |
1198 | if ((new_p = (struct structtype *)realloc((void *)(new_p), \ | |
1199 | (unsigned)(((numelem) == 0 ? 1 : (numelem)) * \ | |
1200 | sizeof(struct structtype)))) == 0) \ | |
1201 | l_no_mem(__FILE__, __LINE__); \ | |
1202 | } | |
1203 | #endif | |
1204 | ||
1205 | /* | |
1206 | * Define macros for allocating other arrays. | |
1207 | */ | |
1208 | #define MALLOCA(type, new_p, numelem) { \ | |
1209 | if ((new_p = (type *)malloc((unsigned) \ | |
1210 | (((numelem) == 0 ? 1 : (numelem)) * \ | |
1211 | sizeof(type)))) == 0) \ | |
1212 | l_no_mem(__FILE__, __LINE__); \ | |
1213 | } | |
1214 | #define CALLOCA(type, new_p, numelem) { \ | |
1215 | if ((new_p = (type *)calloc((numelem) == 0 ? 1 : (numelem), \ | |
1216 | (unsigned)sizeof(type))) == 0) \ | |
1217 | l_no_mem(__FILE__, __LINE__); \ | |
1218 | } | |
1219 | #ifndef __STDC__ | |
1220 | #define REALLOCA(type, new_p, numelem) { \ | |
1221 | if ((new_p = (type *)realloc((char *)(new_p), \ | |
1222 | (unsigned)(((numelem) == 0 ? 1 : (numelem)) * \ | |
1223 | sizeof(type)))) == 0) \ | |
1224 | l_no_mem(__FILE__, __LINE__); \ | |
1225 | } | |
1226 | #else | |
1227 | #define REALLOCA(type, new_p, numelem) { \ | |
1228 | if ((new_p = (type *)realloc((void *)(new_p), \ | |
1229 | (unsigned)(((numelem) == 0 ? 1 : (numelem)) * \ | |
1230 | sizeof(type)))) == 0) \ | |
1231 | l_no_mem(__FILE__, __LINE__); \ | |
1232 | } | |
1233 | #endif | |
1234 | ||
1235 | /* define macro for freeing memory */ | |
1236 | #ifdef __STDC__ | |
1237 | #define FREE(mem_p) free((void *)mem_p) | |
1238 | #else | |
1239 | #define FREE(mem_p) free((char *)mem_p) | |
1240 | #endif | |
1241 | ||
1242 | /* convert a RATIONAL to a float */ | |
1243 | #define RAT2FLOAT(rat) ( (float)(rat).n / (float)(rat).d ) | |
1244 | ||
1245 | /* the usual minimum and maximum macros */ | |
1246 | #define MAX(a, b) ( (a) > (b) ? (a) : (b) ) | |
1247 | #define MIN(a, b) ( (a) < (b) ? (a) : (b) ) | |
1248 | ||
1249 | /* absolute value of the difference of a and b */ | |
1250 | #define ABSDIFF(a, b) ( (a) > (b) ? (a) - (b) : (b) - (a) ) | |
1251 | ||
1252 | /* even and odd numbers (positive, zero, or negative; works on any compiler) */ | |
1253 | #define EVEN(a) (abs(a) % 2 == 0) | |
1254 | #define ODD(a) (abs(a) % 2 == 1) | |
1255 | ||
1256 | #define SQUARED(x) ((x) * (x)) | |
1257 | #define NEARESTQUARTER(x) ( (int)((x) * 4.0 + 0.5) / 4.0 ) | |
1258 | ||
1259 | /* half the height of a staff in stepsizes; use 1 for 1-line staffs */ | |
1260 | #define HALFSTAFF(s) ((svpath(s, STAFFLINES)->stafflines == 5) ? 4 : 1) | |
1261 | ||
1262 | /* given ptr to a group, return the NOTE struct for note nearest to the beam */ | |
1263 | #define BNOTE(gs_p) \ | |
1264 | (gs_p)->notelist[ (gs_p)->stemdir == UP ? 0 : (gs_p)->nnotes - 1 ] | |
1265 | ||
1266 | /* | |
1267 | * Define indices into GRPSYL.notelist for the first (FNNI) and last (LNNI) | |
1268 | * non-cross-staff-stemmed notes. Also define indices for the first (FCNI) | |
1269 | * and last (LCNI) cross-staff-stemmed notes. | |
1270 | * | |
1271 | * For FNNI and LNNI to work, there must be non-CSS notes, although even if | |
1272 | * not, it's still okay to have loops like | |
1273 | * for (n = FNNI(gs_p); n <= LNNI(gs_p); n++) | |
1274 | * and the NNN macro, which uses them, always works. | |
1275 | * | |
1276 | * LCNI and FCNI only work if there are CSS notes. | |
1277 | */ | |
1278 | #define FNNI(gs_p) ((gs_p)->stemto == CS_ABOVE ? \ | |
1279 | (gs_p)->stemto_idx + 1 : 0) | |
1280 | #define LNNI(gs_p) ((gs_p)->stemto == CS_BELOW ? \ | |
1281 | (gs_p)->stemto_idx - 1 : (gs_p)->nnotes - 1) | |
1282 | #define FCNI(gs_p) ((gs_p)->stemto == CS_ABOVE ? \ | |
1283 | 0 : (gs_p)->stemto_idx) | |
1284 | #define LCNI(gs_p) ((gs_p)->stemto == CS_BELOW ? \ | |
1285 | (gs_p)->nnotes - 1 : (gs_p)->stemto_idx) | |
1286 | ||
1287 | /* define the Number of Normal Notes (non-CSS notes) in a group */ | |
1288 | #define NNN(gs_p) (LNNI(gs_p) - FNNI(gs_p) + 1) | |
1289 | ||
1290 | /* test whether the note given via the index is CSS */ | |
1291 | #define IS_CSS_NOTE(gs_p, idx) ( \ | |
1292 | (((gs_p)->stemto == CS_ABOVE && idx <= (gs_p)->stemto_idx) || \ | |
1293 | ((gs_p)->stemto == CS_BELOW && idx >= (gs_p)->stemto_idx)) \ | |
1294 | ) | |
1295 | ||
1296 | /* test whether any CSS notes that exist would be on stem side of the group */ | |
1297 | #define STEMSIDE_CSS(gs_p) \ | |
1298 | ((gs_p)->stemto == CS_ABOVE && (gs_p)->stemdir == UP || \ | |
1299 | (gs_p)->stemto == CS_BELOW && (gs_p)->stemdir == DOWN) | |
1300 | ||
1301 | /* | |
1302 | * Define CSS_STEPS to be an offset to be applied to "stepsup" when the note is | |
1303 | * on the other staff. It needs to be at twice as big as the interval between | |
1304 | * the highest and lowest notes so that stepsup plus or minus half of it will | |
1305 | * become a value that it could never be for a normal note (see doacc()), and | |
1306 | * it has to be an even number, because, for example, that matters for vertical | |
1307 | * dot placement. | |
1308 | */ | |
1309 | #define CSS_STEPS (MAXHAND * 2) | |
1310 | ||
1311 | /* is this FEED followed by a CLEFSIG (music), not a block? */ | |
1312 | #define IS_CLEFSIG_FEED(mll_p) ((mll_p)->str == S_FEED && \ | |
1313 | (mll_p)->next != 0 && (mll_p)->next->str == S_CLEFSIG) | |
1314 | ||
1315 | /* | |
1316 | * This macro is to be used as in this example: | |
1317 | * extern int func P((int parm1, float parm2)); | |
1318 | * The ANSI version will result in a function prototype. The other version | |
1319 | * will result in a function declaration (no parameters). | |
1320 | */ | |
1321 | #ifdef __STDC__ | |
1322 | #define P(parms) parms | |
1323 | #else | |
1324 | #define P(parms) () | |
1325 | #endif | |
1326 | ||
1327 | #endif |