💾 Archived View for runjimmyrunrunyoufuckerrun.com › src › foreign › pmw › src › outhdr.h captured on 2021-12-17 at 13:26:06.
View Raw
More Information
-=-=-=-=-=-=-
/*************************************************
- The PMW Music Typesetter - 3rd incarnation *
- ************************************************/
/* Copyright (c) Philip Hazel, 1991 - 2020 */
/* Written by Philip Hazel, starting November 1991 */
/* This file last modified: August 2020 */
/* This is the header file for the output routines. */
/* These capandjoin values were actually used directly on the
Acorn screen, but are now interpreted for PostScript output. */
#define caj_butt 0x00000000
#define caj_round 0x00010100
#define caj_square 0x00020200
#define caj_mitre_join 0x00000000
#define caj_round_join 0x00000001
#define caj_bevel_join 0x00000002
/* Bar line types are the relevant characters in the music font */
#define bar_single '@'
#define bar_double 'A'
#define bar_thick 'B'
#define bar_dotted '['
/* Types for repeat marks are indexes into a table */
#define rep_right 0
#define rep_left 15
#define rep_dright 30
#define rep_dleft 45
/* Path types */
#define path_end 0
#define path_move 2
#define path_curve 6
#define path_line 8
/*************************************************
- Enumerations *
- ************************************************/
/* Characters in a virtual musical font. These are used to index the table
out_mftable_ps, which is defined in tables.c and must be kept in step. The
order is arbitrary. */
enum {
mc_trebleclef, mc_trebleTclef, mc_trebleDclef,
mc_bassclef, mc_Cbassclef, mc_Sbassclef,
mc_cbaritoneclef, mc_tenorclef, mc_altoclef,
mc_mezzoclef, mc_sopranoclef, mc_natural,
mc_sharp, mc_dsharp, mc_flat,
mc_dflat, mc_rnatural, mc_rsharp,
mc_rdsharp, mc_rflat, mc_rdflat,
mc_snatural, mc_ssharp, mc_sdsharp,
mc_sflat, mc_sdflat, mc_common,
mc_cut, mc_longrest, mc_trebleTBclef,
mc_hclef, mc_baritoneclef, mc_deepbassclef,
mc_oldbassclef, mc_oldCbassclef, mc_oldSbassclef,
mc_oldcbaritoneclef, mc_oldtenorclef, mc_oldaltoclef,
mc_oldmezzoclef, mc_oldsopranoclef, mc_oldbaritoneclef,
mc_olddeepbassclef, mc_hsharp1, mc_hrsharp1,
mc_hssharp1, mc_hsharp2, mc_hrsharp2,
mc_hssharp2, mc_hflat1, mc_hrflat1,
mc_hsflat1, mc_hflat2, mc_hrflat2,
mc_hsflat2
};
/* Switch for join sign routine */
enum { join_barline, join_brace, join_bracket, join_thinbracket };
/* Note sizes */
enum { size_music, size_grace, size_cue, size_cuegrace };
/* Print configuration options */
enum { pc_a4sideways, pc_a4ona3, pc_a5ona4, pc_EPS };
/*************************************************
- Global variables *
- ************************************************/
extern contstr *bar_cont; /* Cont structure when in bar */
extern b_notestr *beam_first;
extern b_notestr *beam_last;
extern uschar *beam_stemadjusts;
extern int beam_accrit; /* Accel. or Rit. beam */
extern BOOL beam_continued; /* True if beam continued into bar */
extern int beam_count; /* Count of notes in beam */
extern int beam_firstmoff; /* Moff of first note */
extern int beam_firstpitch; /* Pitch of first note */
extern int beam_firstX; /* Coordinate of first note */
extern int beam_firstY;
extern int beam_forceslope; /* Forced slope */
extern int beam_lastmoff; /* Moff of last note */
extern int beam_offset; /* Vertical adjustment of beam */
extern int beam_offsetadjust; /* Forced adjustment */
extern int beam_overbeam; /* TRUE if going over bar line */
extern int beam_seq;
extern int beam_slope; /* Slope of beam */
extern int beam_splitOK; /* OK to have notes on both sides */
extern int beam_upflag; /* Above or below first note */
extern int beam_Xcorrection; /* Correction for stem position */
extern BOOL error_111; /* Flag for coupling error */
/* The information for the current note remains there afterwards, for
use by things which follow (e.g. ties). */
extern int n_acc; /* Current accidental */
extern int n_accleft; /* Current note's accleft value */
extern int n_beamed; /* Current note's beaming status */
extern int n_cueadjust; /* Horiz. adjustment for grace/cue */
extern int n_chordcount; /* Notes in current chord */
extern int n_chordflags; /* Flags for whole chord */
extern usint n_chordacflags; /* Ditto */
extern int n_dotxadjust; /* X adjustment for dot */
extern int n_firstacc; /* For first note in chord */
extern int n_flags; /* Current note */
extern usint n_acflags; /* Ditto */
extern int n_fontsize; /* Size of font for note */
extern int n_gracecount; /* Count of grace note run */
extern int n_gracemoff; /* Offset for grace notes */
extern BOOL n_nhtied; /* Tie at notehead end */
extern BOOL n_invertleft; /* True if left invert in chord */
extern BOOL n_invertright; /* Ditto right */
extern int n_lastacc; /* For last note in chord */
extern b_notestr *n_lastnote; /* Last note set */
extern int n_length; /* Length of current note */
extern int n_longrestmid; /* Long rest mid point */
extern int n_masq; /* Masquerade for current note */
extern int n_maxaccleft; /* Max accidental left in chord */
extern int n_maxpitch; /* Max pitch of current note/chord */
extern int n_minpitch; /* Min ditto */
extern b_tiestr *n_nexttie; /* Outgoing tie */
extern int n_notetype; /* Type of current note */
extern int n_orig_stemlength; /* Value for first note of chord */
extern b_ornamentstr *n_ornament; /* Ornament for current note */
extern int n_pcorrection; /* Pitch correction for grace etc. */
extern int n_pitch; /* Stave pitch of current note */
extern b_tiestr *n_prevtie; /* Incoming tie */
extern int n_restlevel; /* Rest level adjustment for note */
extern int n_stemlength; /* Adjust for stem length for note */
extern int n_upflag; /* TRUE if stem direction is up */
extern int n_upfactor; /* (+1)/(-1) according to direction */
extern int n_x; /* X coordinate of current note */
extern mfstr *out_mftable_ps[]; /* Points to music font table */
extern int out_acctable[]; /* Table of accidental chars */
extern int *out_depthvector; /* Vector for stave positions */
extern int out_bar; /* Current bar number */
extern int out_barchar; /* Barline character */
extern int out_barlinex; /* Current barline x position */
extern int out_barx; /* Coordinate of bar start */
extern int out_bbox[]; /* Approximate bounding box */
extern BOOL out_beaming; /* Set when beaming */
extern contstr *out_cont; /* Local cont structure */
extern int out_dashgaplength; /* Set dash gap length */
extern int out_dashlength; /* Set dash length */
extern int out_deepybarend; /* Full length bar depth */
extern int out_downgap; /* For coupled notes */
extern FILE *out_drawfile; /* For draw file writing */
extern b_drawstr *out_drawqueue[]; /* Queue of pending draws */
extern int out_drawqueueptr;
extern int out_drawstackptr; /* Draw stack pointer */
extern int out_dynmovef[]; /* Dynamic bracket flags */
extern int out_dynmovex[]; /* Dynamic moves */
extern int out_dynmovey[];
extern BOOL out_gracefound; /* Found grace note for this note */
extern int out_grace_fudge; /* Fudge for grace/accidental */
extern BOOL out_gracenotes; /* Outputting gracenotes */
extern BOOL out_hairpinhalf; /* True when starting "half" hairpin */
extern int out_joinxposition; /* Coordinate for joining signs */
extern int out_keycount; /* Count for successive keys */
extern int out_lastbarlinex; /* Coordinate of previous bar line */
extern BOOL out_lastbarwide; /* Last barline was wide */
extern int out_lastmoff; /* Previous note's moff */
extern BOOL out_lastnotebeamed; /* Last note was beamed */
extern int out_lastnotex; /* Only valid if last thing was a note */
extern int out_laststave; /* Current max stave number */
extern uschar out_laststemup[]; /* Flags for each stave*/
extern BOOL out_lineendflag; /* TRUE if setting last bar on line */
extern BOOL out_makedraw; /* Making a draw file */
extern int out_manyrest; /* Set > 1 for multi-rest bars */
extern int out_moff; /* Current musical offset */
extern b_notestr *out_notelist[]; /* List of notes in chord */
extern int out_notex; /* Coordinate of previous note */
extern BOOL out_omitbarline; /* Used for repeats, etc. */
extern overdrawstr *out_overdraw; /* For saving drawing till end of stave */
extern BOOL out_passedreset; /* Sic */
extern int out_pden; /* Plet denominator */
extern b_pletstr *out_plet; /* Current plet */
extern int out_plet_highest; /* Max y during a plet */
extern int out_plet_highest_head; /* Highest notehead */
extern int out_plet_lowest; /* Min y during a plet */
extern int out_plet_x; /* Starting x */
extern int out_pnum; /* And numerator */
extern posstr *out_poslast; /* Points to last entry in postable */
extern posstr *out_posptr; /* Pointer in postable */
extern posstr *out_postable; /* Points to postable */
extern int out_posxRL; /* RL value for this bar */
extern b_prevbarstr *out_prevbar; /* For previous barline (omitempty bars) */
extern int out_prevtieflag; /* Tie flag for previous note */
extern BOOL out_repeatonbarline; /* Left repeat printed on bar line */
extern int out_slurclx; /* Slur control point adjustments */
extern int out_slurcly;
extern int out_slurcrx;
extern int out_slurcry;
extern BOOL out_slurstarted; /* Force next note to set values */
extern BOOL out_startlinebar; /* TRUE at start of line */
extern int out_stave; /* Current stave */
extern uschar out_stavechar10[]; /* 100-point stave characters */
extern uschar out_stavechar1[]; /* 10-point stave characters */
extern int out_stavelines; /* Number of stave lines + old percussion flag */
extern int out_stavebottom; /* Bottom level of stave */
extern int out_stavetop; /* Top level of stave */
extern int out_string_endx; /* End x for a string */
extern int out_string_endy; /* End y for a string */
extern sysblock *out_sysblock; /* Current system block */
extern int out_textnextabove; /* Position for next string above */
extern int out_textnextbelow; /* Position for next string below */
extern b_textstr *out_textqueue[]; /* Queue of pending text */
extern int out_textqueueptr;
extern b_textXstr *out_textX; /* Current extra block */
extern b_textXstr *out_textXqueue[]; /* Queue of extra blocks */
extern int out_timecount; /* Count for successive times */
extern b_tremolostr *out_tremolo; /* Current tremolo */
extern BOOL out_tremupflag; /* Left-hand direction flag */
extern int out_tremx; /* Left-hand x for same */
extern int out_tremy; /* y value of left-hand note */
extern int out_upgap; /* For coupled notes */
extern int out_Xadjustment; /* Result of [move] */
extern int out_Yadjustment; /* Ditto */
extern int out_ybarend; /* Bottom of barline */
extern int out_yposition; /* Current system position */
extern int out_ystave; /* Ditto for stave */
extern int out_zcopycount; /* Count of stave zeros on this system */
extern int output_copies; /* Printing copies */
extern BOOL output_duplex;
extern BOOL output_incPMWfont; /* Include music font(s) in output */
extern stave_list *output_pagelist; /* List of pages being output */
extern BOOL output_manualfeed; /* Manualfeed flag */
extern BOOL output_tumble;
extern int print_xpageoffset; /* Values for printing */
extern int print_ypageoffset;
extern BOOL rendering_drawfile; /* True when rendering draw file */
extern FILE *ps_file; /* PostScript output file */
extern uschar *ps_header; /* name of header file */
/*************************************************
- Global procedures *
- ************************************************/
extern void out_dodraw(tree_node *, drawitem *, BOOL);
extern void out_dojoinsign(stave_list *, usint *, int, int, int, usint *);
extern void out_drawhairpin(b_hairpinstr *, int);
extern int out_drawnbar(BOOL, int);
extern void out_extension(int, int, int, int);
extern int out_findAoffset(int);
extern int out_findGoffset(int, int);
extern int out_findXoffset(int);
extern posstr *out_findTentry(int);
extern void out_freenbar(void);
extern void out_glissando(int, int);
extern void out_hyphens(int, int, int, int, BOOL);
extern void out_page(void);
extern void out_repeatstring(int, int, int, BOOL, BOOL, int);
extern void out_resetfont(void);
extern int out_setbar(void);
extern void out_setchordtie(b_notestr **, int, int, BOOL, int);
extern bstr *out_setnote(b_notestr *);
extern void out_setnotetie(int, BOOL, int);
extern void out_setother(bstr *);
extern void out_setstarthairpin(b_hairpinstr *, int);
extern void out_setstartnbar(b_nbarstr *, int, int);
extern BOOL out_setupbeam(b_notestr *, int, BOOL, BOOL);
extern void out_slur(int, int, int, int, int, int, int, int);
extern void out_text(b_textstr *, BOOL);
extern void out_shownote(void);
extern int out_string(uschar *, int, int, int, int, int);
extern void out_warnbar(void);
extern void out_writeclef(int, int, int, int, BOOL);
extern void out_writekey(int, int, int, int);
extern void out_writerepeat(int, int, int);
extern void out_writetime(int, int, int);
extern void ps_abspath(int *, int *, int *, int);
extern void ps_barline(int, int, int, int);
extern void ps_beam(int, int, int, int);
extern void ps_brace(int, int, int, int);
extern void ps_bracket(int, int, int, int);
extern void ps_grestore(void);
extern void ps_gsave(void);
extern void ps_headfoot(headstr *);
extern void ps_line(int, int, int, int, int, int);
extern void ps_lines(int *, int *, int, int);
extern void ps_muschar(int, int, int, int);
extern void ps_musstring(uschar *, int, int, int);
extern void ps_newmovt(void);
extern void ps_path(int *, int *, int *, int);
extern void ps_pstext(uschar *, int, int);
extern void ps_relmusstring(uschar *, int, int, int);
extern void ps_rotate(double);
extern void ps_setdash(int, int, BOOL);
extern void ps_setgray(int);
extern void ps_slur(int, int, int, int, int, int);
extern void ps_startbar(int, int);
extern void ps_stave(int, int, int, int);
extern void ps_string(uschar *, int, int, int *, int *, BOOL);
extern void ps_translate(int, int);
extern void ps_wtext(uschar *, int, int, int, int, int);
/* End of outhdr.h */