static void getstatfilename(char *path, const char *ext, int size) { file_cpyname(path, datadir, size); file_cutext(path); file_catname(path, "np2sdl.", size); file_catname(path, ext, size); }
static BRESULT loadsoundrom(UINT address, const OEMCHAR *name) { OEMCHAR romname[24]; OEMCHAR path[MAX_PATH]; FILEH fh; UINT rsize; file_cpyname(romname, file_sound, NELEMENTS(romname)); if (name) { file_catname(romname, name, NELEMENTS(romname)); } file_catname(romname, file_extrom, NELEMENTS(romname)); getbiospath(path, romname, NELEMENTS(path)); fh = file_open_rb(path); if (fh == FILEH_INVALID) { goto lsr_err; } rsize = file_read(fh, mem + address, 0x4000); file_close(fh); if (rsize != 0x4000) { goto lsr_err; } file_cpyname(soundrom.name, romname, NELEMENTS(soundrom.name)); soundrom.address = address; if (address == 0xd0000) { CPU_RAM_D000 &= ~(0x0f << 0); } else if (address == 0xd4000) { CPU_RAM_D000 &= ~(0x0f << 4); } return(SUCCESS); lsr_err: return(FAILURE); }
static void getstatfilename(TCHAR *path, const TCHAR *ext, int size) { file_cpyname(path, modulefile, size); file_cutext(path); file_catname(path, str_dot, size); file_catname(path, ext, size); }
void dialog_waverec(HWND hWnd) { #if defined(SUPPORT_RECVIDEO) const bool bShiftDown = (::GetKeyState(VK_SHIFT) < 0); recvideo_close(); #endif // defined(SUPPORT_RECVIDEO) sound_recstop(); TCHAR szPath[MAX_PATH]; file_cpyname(szPath, bmpfilefolder, NELEMENTS(szPath)); file_cutname(szPath); file_catname(szPath, szWaveFile, NELEMENTS(szPath)); UINT8 bCheck = FALSE; if ((dlgs_createfilenum(hWnd, &fpWave, szPath, NELEMENTS(szPath))) && (sound_recstart(szPath) == SUCCESS)) { file_cpyname(bmpfilefolder, szPath, NELEMENTS(bmpfilefolder)); sysmng_update(SYS_UPDATEOSCFG); bCheck = TRUE; } #if defined(SUPPORT_RECVIDEO) if (bShiftDown) { file_cutext(szPath); file_catname(szPath, _T(".avi"), NELEMENTS(szPath)); recvideo_open(hWnd, szPath); } #endif // defined(SUPPORT_RECVIDEO) xmenu_setwaverec(bCheck); }
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); }
static void VERMOUTHCL pathadd(MIDIMOD mod, const OEMCHAR *path) { _PATHLIST pl; PATHLIST p; ZeroMemory(&pl, sizeof(pl)); if (path) { pl.path[0] = '\0'; // separator change! file_catname(pl.path, path, NELEMENTS(pl.path)); if (path[0]) { #if defined(SUPPORT_ARC) if (milstr_chr(pl.path, '#') == NULL) #endif file_setseparator(pl.path, NELEMENTS(pl.path)); } } pl.next = mod->pathlist; p = pl.next; while(p) { if (!file_cmpname(p->path, pl.path)) { return; } p = p->next; } p = (PATHLIST)listarray_append(mod->pathtbl, &pl); if (p) { mod->pathlist = p; } }
BRESULT VERMOUTHCL midimod_getfile(MIDIMOD mod, const OEMCHAR *filename, OEMCHAR *path, int size) { PATHLIST p; short attr; if ((filename == NULL) || (filename[0] == '\0') || (path == NULL) || (size == 0)) { goto fpgf_exit; } p = mod->pathlist; while(p) { file_cpyname(path, p->path, size); file_catname(path, filename, size); #if defined(SUPPORT_ARC) attr = arcex_attr(path); #else attr = file_attr(path); #endif if (attr != -1) { return(SUCCESS); } p = p->next; } fpgf_exit: return(FAILURE); }
FLISTH DOSIOCALL file_list1st(const OEMCHAR *dir, FLINFO *fli) { OEMCHAR path[MAX_PATH]; file_cpyname(path, dir, NELEMENTS(path)); file_setseparator(path, NELEMENTS(path)); file_catname(path, str_wildcard, NELEMENTS(path)); TRACEOUT(("file_list1st %s", path)); #if defined(OEMCHAR_SAME_TCHAR) const TCHAR *tcharpath = path; #else TCHAR tcharpath[MAX_PATH]; oemtotchar(tcharpath, NELEMENTS(tcharpath), path, (UINT)-1); #endif HANDLE hdl; WIN32_FIND_DATA w32fd; hdl = FindFirstFile(tcharpath, &w32fd); if (hdl != INVALID_HANDLE_VALUE) { do { if (setflist(&w32fd, fli) == SUCCESS) { return(hdl); } } while(FindNextFile(hdl, &w32fd)); FindClose(hdl); } return(FLISTH_INVALID); }
static void pathadd(MIDIMOD mod, const OEMCHAR *path) { _PATHLIST pl; PATHLIST p; ZeroMemory(&pl, sizeof(pl)); if (path) { pl.path[0] = '\0'; // separator change! file_catname(pl.path, path, NELEMENTS(pl.path)); if (path[0]) { file_setseparator(pl.path, NELEMENTS(pl.path)); } } pl.next = mod->pathlist; p = pl.next; while(p) { if (!file_cmpname(p->path, pl.path)) { return; } p = p->next; } p = (PATHLIST)listarray_append(mod->pathtbl, &pl); if (p) { mod->pathlist = p; } }
short file_attr_c(const OEMCHAR *filename) { *curfilep = '\0'; file_catname(curpath, filename, sizeof(curpath)); return file_attr_c(curpath); }
FILEH file_create_c(const OEMCHAR *filename) { *curfilep = '\0'; file_catname(curpath, filename, sizeof(curpath)); return file_create(curpath); }
char * file_getcd(const OEMCHAR *filename) { *curfilep = '\0'; file_catname(curpath, filename, sizeof(curpath)); return curpath; }
/** * 設定ファイルのパスを得る * @param[out] lpPath パス * @param[in] cchPath パス バッファの長さ */ void initgetfile(LPTSTR lpPath, UINT cchPath) { LPCTSTR lpIni = Np2Arg::GetInstance()->iniFilename(); if (lpIni) { file_cpyname(lpPath, lpIni, cchPath); LPCTSTR lpExt = file_getext(lpPath); if (lpExt[0] != '\0') { file_catname(lpPath, s_szExt, cchPath); } } else { file_cpyname(lpPath, modulefile, cchPath); file_cutext(lpPath); file_catname(lpPath, s_szExt, cchPath); } }
void initgetfile(OEMCHAR *path, UINT size) { const OEMCHAR *ext; file_cpyname(path, modulefile, size); if (np2arg.ini) { if ((np2arg.ini[0] == '/') || (np2arg.ini[0] == '-')) { file_cutname(path); file_catname(path, file_getname(np2arg.ini + 2), size); } else { file_cpyname(path, np2arg.ini, size); } ext = file_getext(path); if (ext[0] != '\0') { file_catname(path, ext_ini, size); } } else { file_cutext(path); file_catname(path, ext_ini, size); } }
static void VERMOUTHCL pathaddex(MIDIMOD mod, const OEMCHAR *path) { OEMCHAR _path[MAX_PATH]; if (milstr_memcmp(path, str_basedir)) { pathadd(mod, path); } else { file_cpyname(_path, file_getcd(str_null), NELEMENTS(_path)); file_cutseparator(_path); file_catname(_path, path + 10, NELEMENTS(_path)); pathadd(mod, _path); } }
static BRESULT opencue(SXSIDEV sxsi, const OEMCHAR *fname) { _CDTRK trk[99]; OEMCHAR path[MAX_PATH]; UINT idx; UINT8 curtrk; UINT curtype; TEXTFILEH tfh; OEMCHAR buf[512]; OEMCHAR *argv[8]; int argc; ZeroMemory(trk, sizeof(trk)); path[0] = '\0'; idx = 0; curtrk = 1; curtype = 0x14; tfh = textfile_open(fname, 0x800); if (tfh == NULL) { return(FAILURE); } while(textfile_read(tfh, buf, NELEMENTS(buf)) == SUCCESS) { argc = milstr_getarg(buf, argv, NELEMENTS(argv)); if ((argc >= 3) && (!milstr_cmp(argv[0], str_file))) { file_cpyname(path, fname, NELEMENTS(path)); file_cutname(path); file_catname(path, argv[1], NELEMENTS(path)); } else if ((argc >= 3) && (!milstr_cmp(argv[0], str_track))) { curtrk = (UINT8)milstr_solveINT(argv[1]); if (!milstr_cmp(argv[2], str_mode1)) { curtype = 0x14; } else if (!milstr_cmp(argv[2], str_audio)) { curtype = 0x10; } } else if ((argc >= 3) && (!milstr_cmp(argv[0], str_index))) { if (idx < NELEMENTS(trk)) { trk[idx].type = curtype; trk[idx].track = curtrk; trk[idx].pos = getpos(argv[2]); idx++; } } } textfile_close(tfh); return(openimg(sxsi, path, trk, idx)); }
void dialog_s98(HWND hWnd) { BOOL bCheck; OEMCHAR szPath[MAX_PATH]; S98_close(); bCheck = FALSE; file_cpyname(szPath, bmpfilefolder, NELEMENTS(szPath)); file_cutname(szPath); file_catname(szPath, szS98File, NELEMENTS(szPath)); if ((dlgs_createfilenum(hWnd, &fpS98, szPath, NELEMENTS(szPath))) && (S98_open(szPath) == SUCCESS)) { file_cpyname(bmpfilefolder, szPath, NELEMENTS(bmpfilefolder)); sysmng_update(SYS_UPDATEOSCFG); bCheck = TRUE; } xmenu_sets98logging(bCheck); }
void dialog_waverec(HWND hWnd) { UINT8 bCheck; OEMCHAR szPath[MAX_PATH]; bCheck = FALSE; sound_recstop(); file_cpyname(szPath, bmpfilefolder, NELEMENTS(szPath)); file_cutname(szPath); file_catname(szPath, szWaveFile, NELEMENTS(szPath)); if ((dlgs_createfilenum(hWnd, &fpWave, szPath, NELEMENTS(szPath))) && (sound_recstart(szPath) == SUCCESS)) { file_cpyname(bmpfilefolder, szPath, NELEMENTS(bmpfilefolder)); sysmng_update(SYS_UPDATEOSCFG); bCheck = TRUE; } xmenu_setwaverec(bCheck); }
FLISTH file_list1st(const char *dir, FLINFO *fli) { char path[MAX_PATH]; HANDLE hdl; WIN32_FIND_DATA w32fd; file_cpyname(path, dir, sizeof(path)); file_setseparator(path, sizeof(path)); file_catname(path, "*.*", sizeof(path)); hdl = FindFirstFile(path, &w32fd); if (hdl != INVALID_HANDLE_VALUE) { do { if (setflist(&w32fd, fli) == SUCCESS) { return(hdl); } } while(FindNextFile(hdl, &w32fd)); FindClose(hdl); } return(FLISTH_INVALID); }
static BOOL dlgupdate(void) { FLIST fl; fl = getflist(menudlg_getval(DID_FLIST)); if (fl == NULL) { return(FALSE); } file_setseparator(filesel.path, NELEMENTS(filesel.path)); file_catname(filesel.path, fl->name, NELEMENTS(filesel.path)); if (fl->isdir) { dlgsetlist(); menudlg_settext(DID_FILE, NULL); return(FALSE); } else { filesel.result = TRUE; return(TRUE); } }
void dialog_writebmp(HWND hWnd) { SCRNSAVE ss; int type; FSPARAM fp; TCHAR szPath[MAX_PATH]; LPCTSTR pszExt; ss = scrnsave_create(); if (ss == NULL) { return; } type = scrnsave_gettype(ss); fp.lpszTitle = MAKEINTRESOURCE(IDS_BMPTITLE); fp.lpszDefExt = MAKEINTRESOURCE(IDS_BMPEXT); fp.lpszFilter = lpszBmpFilter[type]; fp.nFilterIndex = 1; file_cpyname(szPath, bmpfilefolder, NELEMENTS(szPath)); file_cutname(szPath); file_catname(szPath, szBmpFile, NELEMENTS(szPath)); if (dlgs_createfilenum(hWnd, &fp, szPath, NELEMENTS(szPath))) { file_cpyname(bmpfilefolder, szPath, NELEMENTS(bmpfilefolder)); sysmng_update(SYS_UPDATEOSCFG); pszExt = file_getext(szPath); if ((type <= SCRNSAVE_8BIT) && (!file_cmpname(pszExt, TEXT("gif")))) { scrnsave_writegif(ss, szPath, SCRNSAVE_AUTO); } else if (!file_cmpname(pszExt, str_bmp)) { scrnsave_writebmp(ss, szPath, SCRNSAVE_AUTO); } } scrnsave_destroy(ss); }
BRESULT cfgfile_getfile(MIDIMOD mod, const OEMCHAR *filename, OEMCHAR *path, int size) { PATHLIST p; short attr; if ((filename == NULL) || (filename[0] == '\0') || (path == NULL) || (size == 0)) { goto fpgf_exit; } p = mod->pathlist; while(p) { file_cpyname(path, p->path, size); file_catname(path, filename, size); attr = file_attr(path); if (attr != -1) { return(SUCCESS); } p = p->next; } fpgf_exit: return(FAILURE); }
/** * ファイルの検索 * @param[in] lpPathName パス * @param[out] fli 検索結果 * @return ファイル検索ハンドル */ FLISTH DOSIOCALL file_list1st(const OEMCHAR* lpPathName, FLINFO* fli) { static const OEMCHAR s_szWildCard[] = OEMTEXT("*.*"); OEMCHAR szPath[MAX_PATH]; file_cpyname(szPath, lpPathName, NELEMENTS(szPath)); file_setseparator(szPath, NELEMENTS(szPath)); file_catname(szPath, s_szWildCard, NELEMENTS(szPath)); WIN32_FIND_DATA w32fd; HANDLE hFile = ::FindFirstFile(szPath, &w32fd); if (hFile != INVALID_HANDLE_VALUE) { do { if (setFLInfo(w32fd, fli)) { return hFile; } } while(::FindNextFile(hFile, &w32fd)); ::FindClose(hFile); } return FLISTH_INVALID; }
FILEH file_create_c(const char *path) { *curfilep = '\0'; file_catname(curpath, path, sizeof(curpath)); return(file_create(curpath)); }
static void VERMOUTHCL settone(MIDIMOD mod, int bank, int argc, OEMCHAR *argv[]) { int val; TONECFG tone; OEMCHAR *name; int i; OEMCHAR *key; OEMCHAR *data; UINT8 flag; if ((bank < 0) || (bank >= (MIDI_BANKS * 2)) || (argc < 2) || (cfggetval(argv[0], &val) != SUCCESS) || (val < 0) || (val >= 128)) { return; } tone = mod->tonecfg[bank]; if (tone == NULL) { tone = (TONECFG)_MALLOC(sizeof(_TONECFG) * 128, "tone cfg"); if (tone == NULL) { return; } mod->tonecfg[bank] = tone; ZeroMemory(tone, sizeof(_TONECFG) * 128); } tone += val; name = tone->name; if (name == NULL) { name = (OEMCHAR *)listarray_append(mod->namelist, NULL); tone->name = name; } if (name) { name[0] = '\0'; file_catname(name, argv[1], MAX_NAME); // separator change! } flag = TONECFG_EXIST; tone->amp = TONECFG_AUTOAMP; tone->pan = TONECFG_VARIABLE; if (!(bank & 1)) { // for tone tone->note = TONECFG_VARIABLE; } else { // for drums flag |= TONECFG_NOLOOP | TONECFG_NOENV; tone->note = (UINT8)val; } for (i=2; i<argc; i++) { key = argv[i]; data = seachr(key, '='); if (data == NULL) { continue; } *data++ = '\0'; if (!milstr_cmp(key, str_amp)) { if (cfggetval(data, &val) == SUCCESS) { if (val < 0) { val = 0; } else if (val > CFG_MAXAMP) { val = CFG_MAXAMP; } tone->amp = val; } } else if (!milstr_cmp(key, str_keep)) { if (!milstr_cmp(data, str_env)) { flag &= ~TONECFG_NOENV; flag |= TONECFG_KEEPENV; } else if (!milstr_cmp(data, str_loop)) { flag &= ~TONECFG_NOLOOP; } } else if (!milstr_cmp(key, str_note)) { if ((cfggetval(data, &val) == SUCCESS) && (val >= 0) && (val < 128)) { tone->note = (UINT8)val; } } else if (!milstr_cmp(key, str_pan)) { if (!milstr_cmp(data, str_left)) { val = 0; } else if (!milstr_cmp(data, str_center)) { val = 64; } else if (!milstr_cmp(data, str_right)) { val = 127; } else if (cfggetval(data, &val) == SUCCESS) { if (val < -100) { val = -100; } else if (val > 100) { val = 100; } val = val + 100; val *= 127; val += 100; val /= 200; } else { continue; } tone->pan = (UINT8)val; } else if (!milstr_cmp(key, str_strip)) { if (!milstr_cmp(data, str_env)) { flag &= ~TONECFG_KEEPENV; flag |= TONECFG_NOENV; } else if (!milstr_cmp(data, str_loop)) { flag |= TONECFG_NOLOOP; } else if (!milstr_cmp(data, str_tail)) { flag |= TONECFG_NOTAIL; } } } tone->flag = flag; }
char *file_getcd(const char *path) { *curfilep = '\0'; file_catname(curpath, path, sizeof(curpath)); return(curpath); }
static void getstatfilename(char *path, const char *ext, UINT size) { file_cpyname(path, file_getcd(np2app), size); file_catname(path, ext, size); }
// CUEシート読み込み BRESULT opencue(SXSIDEV sxsi, const OEMCHAR *fname) { _CDTRK trk[99]; OEMCHAR path[MAX_PATH]; UINT index; UINT8 curtrk; UINT curtype; TEXTFILEH tfh; OEMCHAR buf_mode[10]; OEMCHAR buf[512]; OEMCHAR *argv[8]; int argc; // -------- UINT16 curssize; UINT32 curpos0; UINT32 curpregap; ZeroMemory(trk, sizeof(trk)); path[0] = '\0'; index = 0; curtrk = 1; curtype = 0x14; // -------- curpos0 = 0; curpregap = 0; // -------- tfh = textfile_open(fname, 0x800); if (tfh == NULL) { goto opencue_err2; } while (textfile_read(tfh, buf, NELEMENTS(buf)) == SUCCESS) { argc = milstr_getarg(buf, argv, NELEMENTS(argv)); if ((argc >= 3) && (!milstr_cmp(argv[0], str_file))) { // FILE if (!milstr_cmp(argv[argc-1], str_binary) && path[0] == '\0') { // BINARY file_cpyname(path, fname, NELEMENTS(path)); file_cutname(path); file_catname(path, argv[1], NELEMENTS(path)); } } else if ((argc >= 3) && (!milstr_cmp(argv[0], str_track))) { // TRACK curtrk = (UINT8)milstr_solveINT(argv[1]); milstr_ncpy(buf_mode, argv[2], NELEMENTS(str_mode1)); if (!milstr_cmp(buf_mode, str_mode1)) { // MODE1/???? curtype = 0x14; curssize = (UINT16)milstr_solveINT(argv[2] + 6); } else if (!milstr_cmp(buf_mode, str_mode2)) { // MODE2/???? curtype = 0x14; curssize = (UINT16)milstr_solveINT(argv[2] + 6); } else if (!milstr_cmp(argv[2], str_audio)) { // AUDIO curtype = 0x10; curssize = 2352; } } else if ((argc >= 2) && (!milstr_cmp(argv[0], str_pregap))) { // PREGAP curpregap = getpos(argv[1]); } else if ((argc >= 3) && (!milstr_cmp(argv[0], str_index))) { // INDEX ?? if (index < NELEMENTS(trk)) { if ((UINT8)milstr_solveINT(argv[1]) == 0) { // INDEX 00 curpos0 = getpos(argv[2]); continue; } if ((UINT8)milstr_solveINT(argv[1]) != 1) { // INDEX 01以外 continue; } trk[index].adr_ctl = curtype; trk[index].point = curtrk; trk[index].pos = getpos(argv[2]); trk[index].pos0 = (curpos0 == 0) ? trk[index].pos : curpos0; trk[index].sector_size = curssize; trk[index].pregap_sectors = curpregap + (trk[index].pos - trk[index].pos0); trk[index].img_pregap_sec = (trk[index].pos0 == 0) ? trk[index].pos : trk[index].pos0; trk[index].img_start_sec = trk[index].pos; // trk[index].pregap_sector = trk[index].start_sector - trk[index].pregap_sectors; index++; curpregap = 0; curpos0 = 0; } } } if (index == 0) { goto opencue_err1; } set_secread(sxsi, trk, index); sxsi->totals = -1; textfile_close(tfh); return(setsxsidev(sxsi, path, trk, index)); opencue_err1: textfile_close(tfh); opencue_err2: return(FAILURE); }
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); }
short file_attr_c(const char *path) { *curfilep = '\0'; file_catname(curpath, path, sizeof(curpath)); return(file_attr(curpath)); }