/* ------------------------------------------------------------------
                        MML compiler [M2]
               programmed by S.Yamamoto (SHINNOSUKE)
                      m2.h  --  header file
------------------------------------------------------------------ */

/*
     LSI C 86 試食版でコンパイル
*/

/* エラーメッセージ  グローバル定義 */

extern	char	*MSG_cntopn;
extern	char	*MSG_cntcrt;
extern	char	*MSG_cntwrt;
extern	char	*MSG_cntalc;
extern	char	*MSG_misopd;
extern	char	*MSG_miscmt;
extern	char	*MSG_undmac;
extern	char	*MSG_undmml;
extern	char	*MSG_undctl;
extern	char	*MSG_undstm;
extern	char	*MSG_illfnc;
extern	char	*MSG_toonst;
extern	char	*MSG_toodfn;
extern	char	*MSG_syntax;
extern	char	*MSG_outwka;
extern	char	*MSG_lbover;
extern	char	*MSG_fndsmc;
extern	char	*MSG_unperr;
extern	char	*MSG_looper;
extern	char	*MSG_cdcomp;
extern	char	*MSG_freerr;
extern	char	*MSG_errdtv;

typedef	struct {
	int	wksize;
	int	div;
	int	part[16];
	int	rpart;
	int	rnote[26][2];
	int	tempo;
	int	signature[2];
	int	program[129];
} FLGDAT;

typedef struct {
	unsigned	short	num;
	unsigned	short	ct;
	unsigned	char	dat[3];
} WORKMEM;

/* m2main.c */
void	putDisp( char* ,... );	/* EX */
int	putData( int ,... );	/* EX */
void	sizeWrite( void );
void	title( void );
int	fNameCat( int ,char* ,char* );

/* m2ctrl.c */
void	makeHeader( int );
void	varNum(unsigned long );	/* EX */
void	putText( char* );
void	putTempo( int );	/* EX */
void	putSignature( int,int );	/* EX */
FLGDAT	ctrlLine( void );	/* EX */

/* m2comp.c */
void	dltSet( void );
int	readData( void );	/* EX */
int	readPara( int,int,int,char * );	/* EX */
int	blockName( void );
void	getPart( void );
void	exclBank( unsigned short,int,int,char * );	/* EX */
void	evntPut( unsigned short,int,int,int );	/* EX */
void	evntSort( void );
void	evntSort2( void );
void	evntCheck( void );
void	evntRtch( void );
void	evntWrite( void );
void	mmlNote( unsigned short *,int );
void	mmlSub1( unsigned short ,int );
void	mmlSub2( unsigned short );
void	mmlSub3( unsigned int );
void	mmlSub4( unsigned short * );
void	mmlRhythm( unsigned short * ,int );
void	mmlComp( void );
int	mmlLine( FLGDAT ,WORKMEM * ,int);	/* EX */

/* m2itlmac.c */
int	getIMPara( char ** ,int ,int ,int ,char * );
void	acvDispLtr( unsigned short ,char ** ,char * );
void	acvDispDot( unsigned short ,char ** ,char * );
void	itlMacro( char ** ,unsigned short * ,int * ,int );	/* EX */

/* m2pre.c */
int	errMsg( char * ,char * );	/* EX */
char	*lineGet( void );
int	delComment( void );
int	macCheck( char * );
int	macSort( void );
int	macExpand( char * );
void	macRepeat( char * );
int	preInclude( char * );
int	preDefine( char * );
int	preUndef( char * );
int	preCondition( char * ,int );
int	preForNext( char * ,int );
int	preDirective( void );
int	Pre_open( const char * );	/* EX */
char	*Pre_fgets( void );	/* EX */

/* m2libm.c */
void	readch( void );
int	number( void );
int	factor( void );
int	term( void );
int	expression( void );
int	calc( char ** );
int	comSearch( char **,char * );	/* EX */
char	*skipSpace( char * );	/* EX */
void	skipLine( char ** );	/* EX */
int	power( int ,int );	/* EX */
double	sine( double );	/* EX */
int	instr( const char * ,int );	/* EX */
int	strToInt( char ** ,int ,int ,int ,char * );	/* EX */

