#include "config.h"

typedef struct {		/* modulation */
	DWORD Mdelay;		/* delay */
	WORD Mdepth;		/* 深さ */
	WORD Mspeed;		/* モジュレーションスピード(拡張mod時) */
	BYTE Msync;			/* 同期モード(拡張mod時) */
	BYTE Mtype;			/* 波形タイプ(拡張mod時) */
	BYTE Mmode;			/* normal/拡張モード */
} MODDAT;

typedef struct {		/* ポルタメント */
	DWORD delay;		/* delay */
	WORD delta;			/* 増分 */
	WORD correct;		/* 補正パラメータ: autobendでベンド先の
						 * 値になるのでUBYTEではダメ */
	BYTE sign;			/* 符号 */
} PORTDAT;

typedef struct {		/* ＡＲＣＣ */
	UBYTE ARCCc;		/* コントロールチェンジの値 */
	BYTE ARCCv;			/* 制御値 */
	BYTE ARCCr;			/* リセット用の値 */
	BYTE ARCCn;			/* 中央値 */
	DWORD ARCCdelay;	/* delay */
	WORD ARCCspeed;		/* ARCCspeed(拡張ARCC時) */
	BYTE ARCCsync;		/* 同期モード(拡張ARCC時) */
	BYTE ARCCtype;		/* 波形タイプ(拡張ARCC時) */
	BYTE ARCCmode;		/* normal/拡張モード */
} ARCCDAT;

typedef struct {		/* 1/8 depth */
	BYTE eigMODm;		/* モジュレーション depth1/8mode使用フラグ */
	BYTE eigARCm;		/* ARCC depth1/8mode使用フラグ */
	BYTE eigAFTm;		/* アフタータッチ depth1/8mode使用フラグ */
	WORD eigMOD[8 + 1];	/* 1/8mod */
	WORD eigARC[8 + 1];	/* 1/8ARCC */
	WORD eigAFT[8 + 1];	/* 1/8after touch */
} EIGHTH;

typedef struct {		/* フェードイン・アウト */
	WORD delta;			/* vol増分 */
	UBYTE correct;		/* タイミング補正パラメータ */
	WORD volcor;		/* vol補正パラメータ(書き変わる) */
	WORD cor;			/* タイミング補正(書き変わる) */
	DWORD delay;		/* 無限ループをフェードアウトにする時のdelay*/
	BYTE sign;			/* 符号 */
	BYTE target;		/* 0:通常1tr 1:MT全tr 2:GS全tr */
} FADEDAT;

typedef struct {		/* 同期コマンド */
	DWORD midc;			/* SMFデータでの同期受信位置
						　　(負なら送信位置で、絶対値が送信元) */
	DWORD total;		/* 静的な絶対クロックでの同期送信/受信位置 */
	DWORD trk;			/* 対象トラック */
	DWORD offset;		/* 多段同期(^^;用オフセット
						   最初gate_oldが入るが、
						   sync.c内で動的な演奏での絶対時間になる */
	DWORD count;		/* 同クロック同トラックの何番目のMMLか.
						   TEMPODATのcountと合せて、同クロック時の
						   前後関係を判定するのに使用 */
} SYNCDAT;

typedef struct {		/* テンポ設定 */
	DWORD value;		/* 設定値 */
	DWORD total;		/* total */
	DWORD attribute;	/* 属性 0bit: 0=絶対指定 1=相対指定
								1bit: 0=T	 1=@T	*/
	DWORD trk;			/* 対象トラック */
	DWORD midc;			/* SMFデータでの同期受信位置 */
	DWORD count;		/* SYNCDATのcountと同様 */
} TEMPODAT;

typedef struct {
	DWORD total;
	DWORD trk;
	DWORD midc;
	BYTE  mode;
} DEBUGDAT;
