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); }
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); }
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); }
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); }