/* both.h 1.2 29/7/88 */

/* where {pic,mus}_default live. Note: No trailing quotes. */
/* #define LIBDIR "/usr/lib/music */
/* Defined string with no trailing slash is a cleverness that doesn't work
 * everywhere.  You have to chang it in 2 places: post_put.c and pre_mus.c,
 * both flagged with LIBDIR as comment. -martin */

/* sizes */

#define WIDTH 750
#define HEIGHT 28

/* general limits */

#define NNOTES  1000
#define NBARS	200

/* staffs per stave, staves together */
#define NSTAFFS 8
#define NSTAVES 14

/* distinct parts */
#define NPARTS  8
#define MAXTEXT 2000

/* note lengths */

#define SBL 128

/* atoms, basic units for printing */

#define SHARP		0
#define FLAT		1
#define NATURAL		2
#define HOLLOW		3
#define SOLID		4
#define BARLINE		5
#define DBARLINE	6
#define REPEAT		7
#define DOT		8
#define STICK		9
#define TSIG	       10
#define TCLEF	       11
#define TOPHOOK	       12
#define BOTHOOK	       13
#define BCLEF	       14
#define LLINE	       15
#define THICKLINE      16
#define DDOT	       17
#define BREVE	       18
#define UPDOT	       19
#define BREREST	       20
#define SBRREST	       21
#define MINREST	       22
#define CROREST	       23
#define QUAREST	       24
#define SQUREST	       25
#define DSQREST	       26
#define SEMIBREVE      27
#define SCLEF	       28
#define ACLEF	       29
#define NCLEF	       30
/* #define THKLINE	  31 */
#define KNLINE	       32
#define NKNLINE	       33
#define REPSTLINE      34
#define DREPLINE       35

/* clefs */

#define TREBLE  1
#define BASS	2
#define SOPRANO 3
#define ALTO	4
#define TENOR	5

/* special characters */

#define ESCAPE	      '\\'
#define SHARPSYM      '+'
#define FLATSYM       '-'
#define SAMESYM       '='
#define RESTSYM	      '_'
#define IRESTSYM      '~'
#define BARSYM	      '|'
#define NBARSYM	      '!'

/* text delimiters */

#define OTEXTSYM       '\''
#define UTEXTSYM       '"'
#define NTEXTSYM       '@'

/* variables */

extern int  hgap,
            vgap;
extern int  clefsig,
            keysig,
            timesig,
            leadsig;
extern int  keysharp,
            keysemi;
extern int  width,
            height;
extern int  reduction;
extern int  page_width;

extern char *scale[];

extern int  stave,
            staff,
            part,
            bar,
            beat;
extern int  n_staves,
            n_staffs,
            n_parts,
            n_bars,
            n_beats;
extern int  tsig_n,
            tsig_d;
extern int  bps_now,
            width_now;
extern int  root,
            leadin;

extern char line[],
           *linep;
extern int  new;
extern int  fd;
extern int  within_ms;


#define BEAMSTART '['
#define TIESTART '('
#define GROUPSTART '{'
#define BEAMEND ']'
#define TIEEND ')'
#define GROUPEND '}'

struct notes {
    char    n_part;
    char    n_staff;
    char    n_pitch;		/* 'a' to 'l' */
    char    n_octv;		/* '0' to '9' */
    int     n_length;		/* 0 to 256 */
    char    n_accid;		/* ' ', '+' '-' '=' */
    char    n_dots;		/* 0 to 3 */
    char    n_hooks;		/* -2 to 4 */
    int     n_width;
    int     n_x_wrt_bar;
    int     n_mus_wrt_bar;
    char    n_y_wrt_staff;
    char    n_beam;		/* -1 to 1 */
    char    n_group;		/* -1 to 1 */
    char    n_grace;
    char    n_tie_start;	/* no of ties starting here */
    char    n_tie_end;		/* no of ties ending here */
    int     n_tie_height;
    char    stickup;		/* -1 to 1 */
    char    n_head_x;		/* from leading edge */
    char    n_x_stick;		/* from leading edge */
    int     n_y_end_stick;	/* other end of stick */
    char    n_miny,
            n_maxy;
    char   *n_tover;		/* text to appear above stave */
    char   *n_tunder;		/* ditto below */
    char   *n_tnote;		/* related to note */
    int     n_yover,
            n_yunder;
};

struct bars {
    int     b_x_wrt_staff;
    char    b_nnotes;
    int     b_note_start;
    int     b_width;
    int     b_s_width;
    int     b_first_note,
            b_last_note;
    char    b_clef[NSTAFFS];
    char    b_sig;
    char    b_n_tsig,
            b_d_tsig;
    char    b_key,
            b_root;
    int     b_yover[NSTAFFS],
            b_yunder[NSTAFFS];
    int     b_maxy,
            b_miny;
    char    b_stt_type;
    char    b_end_type;
    char    b_new_stave;
    int     b_length;
    char   *b_tover[NSTAFFS],
           *b_tunder[NSTAFFS];
    int     b_part_start[NPARTS];
    char    b_bps;
    char    b_restart;
};

struct staffs {
    int     s_y_wrt_stave;
    int     s_yover,
            s_yunder;
    int     s_t_over_y,
            s_t_under_y;
    int     sf_miny,
            sf_maxy;
    char    s_clef;
    char    s_key_offset;
    char    s_octv;
    char   *s_instrument;
    char    s_join_down;	/* join bar lines to staff below */
};

struct staves {
    int     s_y_wrt_page;
    int     s_x_left,
            s_x_start,
            s_x_right;
    int     s_first_bar,
            s_last_bar;
    int     s_fst_bar_type;
    int     sv_miny,
            sv_maxy;
};

struct pieces {
    char   *left_title;		/* left_title (left) */
    char   *right_title;	/* right left_title */
    char   *centre_title;	/* centre left_title */
    int     p_root;
    int     p_key;
    int     p_octv;
    int     p_mode;
    int     p_sharps;
    int     p_bars;
    int     p_nnotes;
    int     p_tsig_n;
    int     p_tsigd;
    int     p_bps;
    int     p_bar_length;
    int     p_beat_length;
    int     p_lead_notes;
};


struct parts {
    int     pt_updown;		/* sticks for this part up, down or either
				   */
    int     pt_ignore;		/* pt_ignore this part */
    int     pt_end_stave;	/* which stave for this part */
};

extern int  part;
extern struct notes notev[],
                   *notep;
extern struct bars  barv[],
                   *barp;
/* extern struct scores scorev[], *scorep; */
extern struct parts partv[],
                   *partp;
extern struct staffs    staffv[][NSTAFFS],
                       *staffp;
extern struct staves    stavev[],
                       *stavep;
extern int  clef_now,
            clefs_now[];;
extern int  part_now;
extern int  tsig_n_now;
extern int  tsig_d_now;
extern int  key_now,
            root_now,
            octv_now;
extern int  part_now,
            staff_now,
            offset_now;
extern int  in_beam,
            in_tie;
extern int  chordtransp;
extern int  i_stave_gap,
            i_staff_gap;
extern int  incl_ties;
extern int  prev_key;
extern int  nat_mode;
extern int  bar0start;
extern int  testing;
extern int  tieform;
