Exemplo n.º 1
0
UINT8 fontfm7_read(const OEMCHAR *filename, UINT8 loading) {

	FILEH	fh;
	UINT8	*work;
	OEMCHAR	fname[MAX_PATH];

	work = (UINT8 *)_MALLOC(0x20000, "fm7font");
	if (work == NULL) {
		goto frf7_err1;
	}
	file_cpyname(fname, filename, NELEMENTS(fname));

	// 8dot ANKを読み込む必要はある?
	if (loading & FONT_ANK8) {
		file_cutname(fname);
		file_catname(fname, fm7ankname, NELEMENTS(fname));
		fh = file_open_rb(fname);
		if (fh != FILEH_INVALID) {
			if (file_read(fh, work, 2048) == 2048) {
				loading &= ~FONT_ANK8;
				fontdata_ank8store(work + 0x100, 0x20, 0x60);
				fontdata_ank8store(work + 0x500, 0xa0, 0x40);
			}
			file_close(fh);
		}
	}

	// 16dot ASCII 及び 漢字を読み込む必要はあるか?
	if (loading & (FONT_ANK16a | FONT_KNJ1)) {
		file_cutname(fname);
		file_catname(fname, fm7knjname, NELEMENTS(fname));
		fh = file_open_rb(fname);
		if (fh != FILEH_INVALID) {
			if (file_read(fh, work, 0x20000) == 0x20000) {

				// 16dot ASCIIを読み込む?
				if (loading & FONT_ANK16a) {
					loading &= ~FONT_ANK16a;
					fm7ankcpy(fontrom + 0x80200, work, 0x20, 0x7f);
					fontdata_patch16a();
				}

				// 第一水準漢字を読み込む?
				if (loading & FONT_KNJ1) {
					loading &= ~FONT_KNJ1;
					fm7knjcpy(fontrom, work, 0x01, 0x30);
					fontdata_patchjis();
				}
			}
			file_close(fh);
		}
	}
	_MFREE(work);

frf7_err1:
	return(loading);
}
Exemplo n.º 2
0
UINT8 fontpc88_read(const OEMCHAR *filename, UINT8 loading) {

	FILEH	fh;
	UINT8	*work;
	OEMCHAR	fname[MAX_PATH];

	work = (UINT8 *)_MALLOC(0x20000, "pc88font");
	if (work == NULL) {
		goto fr88_err1;
	}
	file_cpyname(fname, filename, NELEMENTS(fname));

	// 第2水準以外を読む必要はある?
	if (loading & (FONT_ANK8 | FONTLOAD_ANK | FONT_KNJ1)) {

		// あったら読み込んでみる
		file_cutname(fname);
		file_catname(fname, pc88knj1name, NELEMENTS(fname));
		fh = file_open_rb(fname);
		if (fh != FILEH_INVALID) {
			if (file_read(fh, work, 0x20000) == 0x20000) {

				// 8dot ANKを読む必要があるか
				if (loading & FONT_ANK8) {
					loading &= ~FONT_ANK8;
					fontdata_ank8store(work + 0x1000, 0, 256);
				}

				// 16dot ASCIIを読む必要があるか
				if (loading & FONT_ANK16a) {
					loading &= ~FONT_ANK16a;
					CopyMemory(fontrom + 0x80000, work + 0x0000, 16*128);
				}

				// 16dot ANK(0x80〜)を読む必要があるか
				if (loading & FONT_ANK16b) {
					loading &= ~FONT_ANK16b;
					CopyMemory(fontrom + 0x80800, work + 0x0800, 16*128);
				}

				// 第一水準漢字を読み込む?
				if (loading & FONT_KNJ1) {
					loading &= ~FONT_KNJ1;
					pc88knjcpy1(fontrom, work, 0x01, 0x30);
					fontdata_patchjis();
				}
			}

			// クローズして セクション終わり
			file_close(fh);
		}
	}

	// 第2水準を読む必要はある?
	if (loading & FONT_KNJ2) {

		// あったら読み込んでみる
		file_cutname(fname);
		file_catname(fname, pc88knj2name, NELEMENTS(fname));
		fh = file_open_rb(fname);
		if (fh != FILEH_INVALID) {
			if (file_read(fh, work, 0x20000) == 0x20000) {

				loading &= ~FONT_KNJ2;
				pc88knjcpy2(fontrom, work, 0x31, 0x56);
			}

			// クローズして セクション終わり
			file_close(fh);
		}
	}

	// ANKを読み込む必要はある?
	if (loading & (FONT_ANK8 | FONTLOAD_ANK)) {

		// あったら読み込んでみる
		file_cutname(fname);
		file_catname(fname, pc88ankname, NELEMENTS(fname));
		fh = file_open_rb(fname);
		if (fh != FILEH_INVALID) {

			// 読み込んでみる
			if (file_read(fh, work, 0x1800) == 0x1800) {

				// 8dot ANKを読む必要があるか
				if (loading & FONT_ANK8) {
					loading &= ~FONT_ANK8;
					fontdata_ank8store(work + 0x0000, 0, 256);
				}

				// 16dot ASCIIを読む必要があるか
				if (loading & FONT_ANK16a) {
					loading &= ~FONT_ANK16a;
					CopyMemory(fontrom + 0x80000, work + 0x0800, 16*128);
				}

				// 16dot ANK(0x80〜)を読む必要があるか
				if (loading & FONT_ANK16b) {
					loading &= ~FONT_ANK16b;
					CopyMemory(fontrom + 0x80800, work + 0x1000, 16*128);
				}
			}

			// クローズして ANKは終わり
			file_close(fh);
		}
	}

	_MFREE(work);

fr88_err1:
	return(loading);
}
Exemplo n.º 3
0
UINT8 fontx1_read(const OEMCHAR *filename, UINT8 loading) {

	FILEH	fh;
	UINT8	*work;
	OEMCHAR	fname[MAX_PATH];

	work = (UINT8 *)_MALLOC(306176, "x1font");
	if (work == NULL) {
		goto frx1_err1;
	}
	file_cpyname(fname, filename, NELEMENTS(fname));

	// 8dot ANKを読み込む必要はある?
	if (loading & FONT_ANK8) {
		file_cutname(fname);
		file_catname(fname, x1ank1name, NELEMENTS(fname));
		fh = file_open_rb(fname);
		if (fh != FILEH_INVALID) {
			if (file_read(fh, work, 2048) == 2048) {
				loading &= ~FONT_ANK8;
				fontdata_ank8store(work + 0x100, 0x20, 0x60);
				fontdata_ank8store(work + 0x500, 0xa0, 0x40);
			}
			file_close(fh);
		}
	}

	// 16dot ANKを読み込む必要はあるか?
	if (loading & FONTLOAD_ANK) {
		file_cutname(fname);
		file_catname(fname, x1ank2name, NELEMENTS(fname));
		fh = file_open_rb(fname);
		if (fh != FILEH_INVALID) {
			if (file_read(fh, work, 4096) == 4096) {

				// 16dot ASCIIを読む必要があるか
				if (loading & FONT_ANK16a) {
					loading &= ~FONT_ANK16a;
					CopyMemory(fontrom + 0x80200, work + 0x200, 0x60*16);
					fontdata_patch16a();
				}

				// 16dot ANK(0x80〜)を読む必要があるか
				if (loading & FONT_ANK16b) {
					loading &= ~FONT_ANK16b;
					CopyMemory(fontrom + 0x80a00, work + 0xa00, 0x40*16);
					fontdata_patch16b();
				}
			}
			file_close(fh);
		}
	}

	// 漢字を読み込む必要はあるか?
	if (loading & (FONT_KNJ1 | FONT_KNJ2)) {
		file_cutname(fname);
		file_catname(fname, x1knjname, NELEMENTS(fname));
		fh = file_open_rb(fname);
		if (fh != FILEH_INVALID) {
			if (file_read(fh, work, 306176) == 306176) {

				// 第一水準漢字を読み込む?
				if (loading & FONT_KNJ1) {
					loading &= ~FONT_KNJ1;
					x1knjcpy(fontrom, work, 0x01, 0x30);
					fontdata_patchjis();
				}

				// 第二水準を読む必要はある?
				if (loading & FONT_KNJ2) {
					loading &= ~FONT_KNJ2;
					x1knjcpy(fontrom, work, 0x31, 0x50);
				}
			}
			file_close(fh);
		}
	}

	// メモリを解放する
	_MFREE(work);

frx1_err1:
	return(loading);
}
Exemplo n.º 4
0
UINT8 fontv98_read(const OEMCHAR *filename, UINT8 loading) {

	FILEH	fh;
	UINT8	*v98fnt;

	if (!(loading & FONTLOAD_ALL)) {
		goto frv_err1;
	}

	// ファイルをオープン
	fh = file_open_rb(filename);
	if (fh == FILEH_INVALID) {
		goto frv_err1;
	}

	v98fnt = (UINT8 *)_MALLOC(V98FILESIZE, "v98font");
	if (v98fnt == NULL) {
		goto frv_err2;
	}

	// FONT.ROM の読み込み
	if (file_read(fh, v98fnt, V98FILESIZE) != V98FILESIZE) {
		goto frv_err3;
	}

	// 8x8 フォントを読む必要がある?
	if (loading & FONT_ANK8) {
		loading &= ~FONT_ANK8;
		fontdata_ank8store(v98fnt, 0, 256);
	}
	// 8x16 フォント(〜0x7f)を読む必要がある?
	if (loading & FONT_ANK16a) {
		loading &= ~FONT_ANK16a;
		CopyMemory(fontrom + 0x80000, v98fnt + 0x0800, 16*128);
	}
	// 8x16 フォント(0x80〜)を読む必要がある?
	if (loading & FONT_ANK16b) {
		loading &= ~FONT_ANK16b;
		CopyMemory(fontrom + 0x80800, v98fnt + 0x1000, 16*128);
	}

	// 第一水準漢字を読む必要がある?
	if (loading & FONT_KNJ1) {
		loading &= ~FONT_KNJ1;
		v98knjcpy(fontrom, v98fnt, 0x01, 0x30);
	}
	// 第二水準漢字を読む必要がある?
	if (loading & FONT_KNJ2) {
		loading &= ~FONT_KNJ2;
		v98knjcpy(fontrom, v98fnt, 0x30, 0x56);
	}
	// 拡張漢字を読む必要がある?
	if (loading & FONT_KNJ3) {
		loading &= ~FONT_KNJ3;
		v98knjcpy(fontrom, v98fnt, 0x58, 0x5d);
	}

frv_err3:
	_MFREE(v98fnt);

frv_err2:
	file_close(fh);							// 後始末

frv_err1:
	return(loading);
}
Exemplo n.º 5
0
UINT8 fontx68k_read(const OEMCHAR *filename, UINT8 loading) {

	FILEH	fh;
	UINT8	*work;

	// ファイルをオープン
	fh = file_open_rb(filename);
	if (fh == FILEH_INVALID) {
		goto fr68_err1;
	}

	// メモリアロケート
	work = (UINT8 *)_MALLOC(0x3b800, "x68kfont");
	if (work == NULL) {
		goto fr68_err2;
	}

	// CGROM.DAT の読み込み
	if (file_read(fh, work, 0x3b800) != 0x3b800) {
		goto fr68_err3;
	}

	// 8dot ANKを読む必要があるか
	if (loading & FONT_ANK8) {
		loading &= ~FONT_ANK8;
		fontdata_ank8store(work + 0x3a100, 0x20, 0x60);
		fontdata_ank8store(work + 0x3a500, 0xa0, 0x40);
	}

	// 16dot ASCIIを読む必要があるか
	if (loading & FONT_ANK16a) {
		loading &= ~FONT_ANK16a;
		CopyMemory(fontrom + 0x80200, work + 0x3aa00, 0x60*16);
		fontdata_patch16a();
	}

	// 16dot ANK(0x80~)を読む必要があるか
	if (loading & FONT_ANK16b) {
		loading &= ~FONT_ANK16b;
		CopyMemory(fontrom + 0x80a00, work + 0x3b200, 0x40*16);
		fontdata_patch16b();
	}

	// 第一水準漢字を読み込む?
	if (loading & FONT_KNJ1) {
		loading &= ~FONT_KNJ1;
		x68kknjcpy(fontrom, work, 0x01, 0x30);
		fontdata_patchjis();
	}

	// 第二水準を読む必要はある?
	if (loading & FONT_KNJ2) {
		loading &= ~FONT_KNJ2;
		x68kknjcpy(fontrom, work, 0x30, 0x60);
	}

fr68_err3:
	_MFREE(work);

fr68_err2:
	file_close(fh);

fr68_err1:
	return(loading);
}
Exemplo n.º 6
0
/**
 * Loads font files
 * @param[in] filename The name of the font file
 * @param[in] force If this parameter is TRUE, load file always
 *                  If this parameter is FALSE, load when font is not ready
 * @return font type
 */
UINT8 font_load(const OEMCHAR *filename, BOOL force) {

	UINT	i;
const UINT8	*p;
	UINT8	*q;
	UINT	j;
	OEMCHAR	fname[MAX_PATH];
	UINT8	type;
	UINT8	loading;

	if (filename) {
		file_cpyname(fname, filename, NELEMENTS(fname));
	}
	else {
		fname[0] = '\0';
	}
	type = fonttypecheck(fname);
	if ((!type) && (!force)) {
		return(0);
	}

	// 外字: font[??560-??57f], font[??d60-??d7f] は削らないように…
	for (i=0; i<0x80; i++) {
		q = fontrom + (i << 12);
		ZeroMemory(q + 0x000, 0x0560 - 0x000);
		ZeroMemory(q + 0x580, 0x0d60 - 0x580);
		ZeroMemory(q + 0xd80, 0x1000 - 0xd80);
	}

	fontdata_ank8store(fontdata_8, 0, 256);
	p = fontdata_8;
	q = fontrom + 0x80000;
	for (i=0; i<256; i++) {
		for (j=0; j<8; j++) {
			q[0] = p[0];
			q[1] = p[0];
			p += 1;
			q += 2;
		}
	}

	loading = 0xff;
	switch(type) {
		case FONTTYPE_PC98:
			loading = fontpc98_read(fname, loading);
			break;

		case FONTTYPE_V98:
			loading = fontv98_read(fname, loading);
			break;

		case FONTTYPE_PC88:
			loading = fontpc88_read(fname, loading);
			break;

		case FONTTYPE_FM7:
			loading = fontfm7_read(fname, loading);
			break;

		case FONTTYPE_X1:
			loading = fontx1_read(fname, loading);
			break;

		case FONTTYPE_X68:
			loading = fontx68k_read(fname, loading);
			break;
	}
	loading = fontpc98_read(file_getcd(pc98fontname), loading);
	loading = fontv98_read(file_getcd(v98fontname), loading);
	loading = fontpc88_read(file_getcd(pc88ankname), loading);
	if (loading & FONTLOAD_16) {
		file_cpyname(fname, file_getcd(fonttmpname), NELEMENTS(fname));
		if (file_attr(fname) == -1) {
			makepc98bmp(fname);
		}
		loading = fontpc98_read(fname, loading);
	}
	return(type);
}