//	ＡＩＧライブラリ　定数・構造体定義
//		Copyright (C) 1989-1996 by AIG-SOFT

#ifndef	__DEFINES__
#define __DEFINES__	1

#include "deftype.h"

/* キー定数 */
#define BELL		'\a'	/* ベルコード */
#define TAB		'\t'
#define SPC		' '
#define ESC		0x1B
#define BREAK		0x03
#define CR		0x0D
#define LF		0x0A
#define	BS		'\b'
#define	CRLF		'\n'
#define CRIGHT		0x1c
#define CLEFT		0x1d
#define	CUP		0x1e
#define	CDOWN		0x1f
#define	FEND		0x1A	/* End of file code */

/* パス名要素長 */
#define MAXDRIVE	(2+1)
#define MAXDIR		(64+1)
#define MAXFILE		(18+1)
#define	MAXFNAME	MAXFILE
#define MAXEXT		(1+3+1)		/* '.'+拡張子+00 */
#define MAXPATH		(2+64+18+1+3+1)
#define	MAXDRVDIR	(2+64+1)	/* ドライブ名＋ディレクトリ */
#define MAXFILEEXT	(18+1+3+1)	/* ファイル名＋'.'＋拡張子＋00 */

#define DRIVES	26	/* X68に接続できるドライブ数は最大で'A'〜'Z'の26個 */
#define	CBASE	100	/* clock()の秒単位:1/CBASE秒 */

#define MAXENV		256	/* １環境変数名最大長 */

/* ファイル属性 */
#define FA_ARCH		0x20
#define FA_DIREC	0x10
#define FA_RONLY	0x01
#define FA_HIDE		0x02
#define FA_SYS		0x04
#define FA_VOL		0x08

/* ビット定数 */
#define BIT0		0x0001
#define BIT1		0x0002
#define BIT2		0x0004
#define BIT3		0x0008
#define BIT4		0x0010
#define BIT5		0x0020
#define BIT6		0x0040
#define BIT7		0x0080
#define BIT8		0x0100
#define BIT9		0x0200
#define BIT10		0x0400
#define BIT11		0x0800
#define BIT12		0x1000
#define BIT13		0x2000
#define BIT14		0x4000
#define BIT15		0x8000
#define	BIT0123		(BIT3|BIT2|BIT1|BIT0)
#define	BIT4567		(BIT4|BIT5|BIT6|BIT7)

#define BIT16		0x00010000
#define BIT17		0x00020000
#define BIT18		0x00040000
#define BIT19		0x00080000
#define BIT20		0x00100000
#define BIT21		0x00200000
#define BIT22		0x00400000
#define BIT23		0x00800000
#define BIT24		0x01000000
#define BIT25		0x02000000
#define BIT26		0x04000000
#define BIT27		0x08000000
#define BIT28		0x10000000
#define BIT29		0x20000000
#define BIT30		0x40000000
#define BIT31		0x80000000

#define	INTSFT	(BINT/2)	/* intの上位半分を取り出すに必要なシフト回数 */
#ifndef XYSFT
#define	XYSFT	INTSFT		/* xyカーソル座標の上位半分を取り出すに必要なシフト回数 */
#endif

/* テキスト画面属性（ＢＩＯＳサポート）*/
#define TBLACK		0
#define TCYAN		BIT0
#define TYELLOW		BIT1
#define TWHITE		(BIT0|BIT1)

#define HLIGHT		BIT2	/* 強調 */
#define REVERSE		BIT3	/* 反転 */

/* テキスト画面属性（拡張関数サポート）*/
#define UDREV		BIT4	/* 上下反転 */
#define LRREV		BIT5	/* 左右反転 */
#define LROT		BIT6	/* 左回転 */
#define RROT		BIT7	/* 右回転 */
#define KASURE		BIT8	/* かすれ */
#define SHAJI		BIT9	/* 斜字体 */
#define KESI		BIT10	/* 取消線 */
#define KASEN		BIT11	/* 下線 */
#define	NAKA		BIT12	/* 中抜き */

/* １６色モードのプレーンに関する定数 */
#define PINTENSY	BIT3
#define PGREEN		BIT2
#define PRED		BIT1
#define PBLUE		BIT0

/** 画面系定数 **/

/* CRTC */
#define CRTCREG		0xe80000	/* CRTC Register(top) */
#define CRTCR20		0xe80028	/* CRTC R20 */
#define CRTCR21		0xe8002a	/* CRTC R21 */
#define	CRTCR22		0xe8002c	/* CRTC R22 */
#define	CRTCR23		0xe8002e	/* CRTC R23 */
#define CRTCPORT	0xe80480	/* CRTC port */
#define GPIPCTRL	0xe88001	/* GPIP Contorol port */

/* Graphic VRAM */
#define GRAM		0xc00000	/* GRAM top address */
#define GRSIZE		0x080000	/* GRAM true size */
#define PALETG		0xe82000	/* グラフィックパレット */
#define	GRAME		0xdfffff	/* GRAM終了アドレス */

/* TEXT VRAM */
#define TPLANE0		0xe00000	/* TEXT plane 0 top address */
#define TPLANE1		0xe20000	/* TEXT plane 1 top address */
#define TPLANE2		0xe40000	/* TEXT plane 2 top address */
#define TPLANE3		0xe60000	/* TEXT plane 3 top address */
#define	TRAME		0xe7ffff	/* TEXT VRAM終了アドレス */
#define TPSIZE		0x020000	/* TEXT 1plane size */
#define TLSIZE		128		/* TEXT 1line bytes */

/* SPLITE */
#define	SPRAM		0xeb0000	/* スプライト先頭アドレス */
#define	SPRAME		0xebffff	/* スプライト終了アドレス */
#define	BG0RAM		0xebc000	/* BG0 address */
#define	BG1RAM		0xebe000	/* BG1 address */

/* CG */
#define	CGROM		0xf00000	/* ＣＧ−ＲＯＭ先頭アドレス */
#define	CGROME		0xfbffff	/* ＣＧ−ＲＯＭ終了アドレス */

/* SRAM系 */
#define	SRAM		0xed0000	/* SRAM先頭アドレス */
#define	SRAME		0xed3fff	/* SRAM終了アドレス */
#define	SCHRSW		0xed0059	/* キャラクタースイッチ */
#define	MLIMIT		0xed0008	/* ＲＡＭ領域終了＋１アドレス */

/* RAM/ROM */
#define	RAM		0x000000	/* RAM先頭アドレス */
#define	ROM		0xfe0000	/* システムＲＯＭ先頭アドレス */
#define	ROME		0xffffff	/* システムＲＯＭ終了アドレス */

/* テキスト画面最大幅 */
#define	DISPX	96
#define	DISPY	30	/* 最下行を除く */

#define	T1L	16	/* テキストテキスト１行のライン数 */
#define CL	(T1L/4)	/* テキスト１行あたりのラスター数 */

/* 再定義可能キーコード */
#define	K_F1		1
#define	K_F2		2
#define	K_F3		3
#define	K_F4		4
#define	K_F5		5
#define	K_F6		6
#define	K_F7		7
#define	K_F8		8
#define	K_F9		9
#define	K_F10		10
#define	K_F11		11
#define	K_F12		12
#define	K_F13		13
#define	K_F14		14
#define	K_F15		15
#define	K_F16		16
#define	K_F17		17
#define	K_F18		18
#define	K_F19		19
#define	K_F20		20
#define	K_RUP		21
#define	K_RDOWN		22
#define	K_INS		23
#define	K_DEL		24
#define	K_UP		25
#define	K_LEFT		26
#define	K_RIGHT		27
#define	K_DOWN		28
#define	K_CLR		29
#define	K_HELP		30
#define	K_HOME		31
#define	K_UNDO		32

/* 構造体定義 */
typedef struct KEY_XY {	/* マウスキーエリア定義構造体 */
	int	sx;
	int	sy;
	int	wx;
	int	wy;
	int	key;
	int	mode;	/* V1.1:追加:キー属性:0=シングル,1=リピート */
} _KEY_XY;

/* 座標ファイル Version 3 構造 */
/* ヘッダー バージョン サイズ ヘルプ座標 xx yy */
#define XYVER	3			/* 座標ファイル構造バージョン */
#define	XYMES	"%s/XY:%03d\x1a\n"	/* fgets()/fputs()のため'\n'を一番後にすること */

/* 参照環境変数名 */
#define	EXTENV		"EXTENV"
#define	DEFEXTENV	"EXTENV.ENV"

#endif
