/*****************************************************
font.h : 
  μITRONトレーナcmtoy サンプルプログラム
  Copyright(C) 2019 佐々木芳

タスクの実装

Windowsのシミュレーション環境上で動作するアプリケーションプログラムのコンパイル時には以下のマクロ定義が必要
	_CMTOY
*****************************************************/

WORD CalcChecksum(BYTE* p, int count);

CC_RESULT ExecCustomCommandLine(char* p, UINT wp, void* pv);
BOOL DisplayFontBlocks(int addr);
BOOL DisplayFontImage(code);

typedef unsigned char	CODE8;		/*8ビット		半角コード*/

/*半角フォント１の定数*/
#define	HAN_SIZE		16			/*BYTES*/
#define	HAN_WIDTH		8			/*DOTS*/
#define	HAN_HEIGHT		16			/*DOTS*/

/*メモリブロックのタイプ*/
#define	BT_TIMBLOCK		-2				/*生成年月日*/
#define	BT_CRTBLOCK		-1				/*生成プログラム、バージョン*/
#define	BT_HANFONT		2				/*（半角用フォント）*/

/*ブロック配置テーブル*/
struct tagBlockCount{
	BYTE			count;				/*格納ブロック数*/
	BYTE			filler;				//0とする
};
typedef struct tagBlockCount BLOCK_COUNT;

struct tagBlockTable{
	BLOCK_COUNT	nBlocks;				/*格納ブロック数*/
	WORD		blk_loc[1];				/*各メモリブロックのファイル内ロケーション(ブロック数)*/
//	WORD		checksum;
};
typedef struct tagBlockTable BLOCK_TABLE;

/*---------------------------------
メモリブロックの構造
---------------------------------*/
/*ブロックヘッダ*/
struct tagBlockHeader{
	WORD			type;				/*メモリブロックのタイプ（BT_HANFONT）*/
	WORD			size;				/*メモリブロックのサイズ*/
	/*BYTE buf[size]*/
};
typedef struct tagBlockHeader BLOCK_HEADER;
/*生成プログラム名、バージョン*/
struct creatorblock{
	BLOCK_HEADER	header;
	char			creator[40];
};
typedef struct creatorblock CRTBLOCK;
/*生成年月日*/
struct timestampblock{
	BLOCK_HEADER	header;
	char			timestamp[20];
};
typedef struct timestampblock TIMBLOCK;

/*（半角フォント１）*/
#define	NUMBER_OF_CHAR	(0x7f-0x20+1)		/*登録できるの最大数=96*/
typedef struct hankaku_bitmap{
	BYTE	bitmap[HAN_SIZE];//1文字16バイト
}HANKAKU_BITMAP;
struct hanfont{
	BLOCK_HEADER	header;
	WORD			slots;				/*登録できるフォントの数＝９６*/
	WORD			used;				/*定義したフォント数*/
	CODE8			code1;				/*先頭コード*/
	CODE8			code2;				/*終了コード*/
	HANKAKU_BITMAP	font[NUMBER_OF_CHAR];	/*フォント*/
};
typedef struct hanfont HANFONT;
//#define	NUMBER_OF_HANFONT	2			/*定義できるHANFONTの最大数*/
