| 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 |