/* ＡＩＧライブラリ　ＧＭＤサポート関数
	Copyright (C) 1997-98,2000 by AIG-SOFT
*/
#ifndef	__AIG_GMD__
#define	__AIG_GMD__	1	/* ヘッダー読み込みシンボル */

#ifndef	__CLASS_H
#include <class.h>
#endif

/* 定数 */
#define	GMD_SYMBOL	"AIG-GMD"	/* デバイスシンボル */
// 実際にはGMDDevName()を使えば、これらのデバイス名定数を使うことはない
//（通常は使わないように）
#define	GMD_NAME	"@MOJI"	/* デバイス名 通常 */
#define	GMD_NAME2	"@GMD"	/* デバイス名 /G時 */

#define	NOCHR		0xffff	/* 認識不可文字 */
#define	WTERR		0xfffe	/* 書き込みエラー */

#define	GMDNull		(0)	/* SetWriter/SetGroupの初期化コード */

// APIコマンド
#define	GMD_Read1	1	/* 1文字読みだし */
#define	GMD_ReadTango	2	/* 単語読みだし */
#define	GMD_Read	3	/* 指定文字数読みだし */
#define	GMD_SetWriter	4	/* 書き込みルーチン設定 */
#define	GMD_SetGroup	5	/* Groupルーチン設定 */
#define	GMD_MoveCursor	6	/* 文字幅に合わせたカーソル移動 */
#define	GMD_ReadVer	7	/* バージョン読みだし */
#define	GMD_JLock	8	/* 常駐ロック */
#define	GMD_JUnlock	9	/* 常駐アンロック */
#define	GMD_DevNameA	10	/* デバイス名取得 */
#define	GMD_RevMode	11	/* 反転文字読み取りモード */

/* GMD関数はプロトタイプ宣言のみ用意 */
// 実は、SetWriter/SetGroupの書き方には自身がない^^;
// 誰か直して・・・
#ifdef	__cplusplus	/* G++対応 */
extern	"C" {
#endif
	int	DevCheck(UBYTE *);
	int	GMDCheck(void);
	int	GMDReadData(UBYTE *);
	void	GMDDevName(UBYTE *);
	// API関数
	int	GMDSetAPI(void);
	long	GMDCallAPI(UBYTE);
	long	GMDCallAPI1d(UBYTE,long);
	void	*GMDCallAPI1a(UBYTE,void *);
	long	GMDCallAPI2(UBYTE,long ,long);
	//
	long	GMDRead1(int,int);
	long	GMDReadTango(int,int);
	long	GMDRead(int,int,int);
	int	(*GMDSetWriter)(int (*)());
	int	(*GMDSetGroup)(int (*)());
	void	GMDMoveCursor(int);
	int	GMDReadVer(void);
	int	GMDJLock(void);
	int	GMDJUnlock(void);
	void	GMDDevNameA(UBYTE *);
	int	GMDRevMode(int);
#ifdef	__cplusplus
}
#endif
// (x,y)の座標をxyにする定義
#define	Xyx(x,y)		((x)<<16|(y))
// API関数
// アセンブラーレベルのＡＰＩとは若干異なる
#define	GMDReadVer()		GMDCallAPI(GMD_ReadVer)
#define	GMDJLock()		GMDCallAPI(GMD_JLock)
#define	GMDJUnlock()		GMDCallAPI(GMD_JUnlock)
#define	GMDRead1(x,y)		GMDCallAPI1d(GMD_Read1,Xyx(x,y))
#define	GMDReadTango(x,y)	GMDCallAPI1d(GMD_ReadTango,Xyx(x,y))
#define	GMDMoveCursor(sz)	GMDCallAPI1d(GMD_MoveCursor,sz)
#define	GMDSetWriter(ad)	GMDCallAPI1a(GMD_SetWriter,ad)
#define	GMDSetGroup(ad)		GMDCallAPI1a(GMD_SetGroup,ad)
#define	GMDRead(x,y,size)	GMDCallAPI2(GMD_Read,Xyx(x,y),size)
#define	GMDDevNameA(nm)		GMDCallAPI1a(GMD_DevNameA,nm)
#define	GMDRevMode(md)		GMDCallAPI1d(GMD_RevMode,md)

#endif
