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 SFFILEH statflag_open(const OEMCHAR *filename, OEMCHAR *err, int errlen) { FILEH fh; SFFILEH ret; fh = file_open_rb(filename); if (fh == FILEH_INVALID) { goto sfo_err1; } ret = (SFFILEH)_MALLOC(sizeof(_SFFILEH), filename); if (ret == NULL) { goto sfo_err2; } if ((file_read(fh, &ret->f, sizeof(NP2FHDR)) == sizeof(NP2FHDR)) && (!memcmp(&ret->f, &np2flagdef, sizeof(np2flagdef)))) { ZeroMemory(ret, sizeof(_SFFILEH)); ret->fh = fh; ret->secpos = sizeof(NP2FHDR); if ((err) && (errlen > 0)) { err[0] = '\0'; ret->sfh.err = err; ret->sfh.errlen = errlen; } return(ret); } _MFREE(ret); sfo_err2: file_close(fh); sfo_err1: return(NULL); }
static int statflag_checkpath(STFLAGH sfh, const OEMCHAR *dvname) { int ret; STATPATH sp; FILEH fh; OEMCHAR buf[256]; DOSDATE dosdate; DOSTIME dostime; ret = statflag_read(sfh, &sp, sizeof(sp)); if (sp.path[0]) { fh = file_open_rb(sp.path); if (fh != FILEH_INVALID) { file_getdatetime(fh, &dosdate, &dostime); file_close(fh); if ((memcmp(&sp.date, &dosdate, sizeof(dosdate))) || (memcmp(&sp.time, &dostime, sizeof(dostime)))) { ret |= STATFLAG_DISKCHG; OEMSPRINTF(buf, str_updated, dvname); statflag_seterr(sfh, buf); } } else { ret |= STATFLAG_DISKCHG; OEMSPRINTF(buf, str_notfound, dvname); statflag_seterr(sfh, buf); } } return(ret); }
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); }
FILEH file_open_rb_c(const OEMCHAR *filename) { *curfilep = '\0'; file_catname(curpath, filename, sizeof(curpath)); return file_open_rb(curpath); }
// ---- BRESULT cd_reopen(SXSIDEV sxsi) { CDINFO cdinfo; FILEH fh; cdinfo = (CDINFO)sxsi->hdl; fh = file_open_rb(cdinfo->path); if (fh != FILEH_INVALID) { cdinfo->fh = fh; return(SUCCESS); } else { return(FAILURE); } }
static int statflag_writepath(STFLAGH sfh, const OEMCHAR *path, UINT ftype, int readonly) { STATPATH sp; FILEH fh; ZeroMemory(&sp, sizeof(sp)); if ((path) && (path[0])) { file_cpyname(sp.path, path, NELEMENTS(sp.path)); sp.ftype = ftype; sp.readonly = readonly; fh = file_open_rb(path); if (fh != FILEH_INVALID) { file_getdatetime(fh, &sp.date, &sp.time); file_close(fh); } } return(statflag_write(sfh, &sp, sizeof(sp))); }
FILEH DOSIOCALL file_open_rb_c(const OEMCHAR *path) { file_cpyname(curfilep, path, NELEMENTS(curpath) - (curfilep - curpath)); return(file_open_rb(curpath)); }
FILEH file_open_rb_c(const char *path) { file_cpyname(curfilep, path, sizeof(curpath) - (curfilep - curpath)); return(file_open_rb(curpath)); }
UINT8 fontpc98_read(const OEMCHAR *filename, UINT8 loading) { FILEH fh; BMPFILE bf; BMPINFO bi; UINT8 *bmpdata; BMPDATA bd; long fptr; if (!(loading & FONTLOAD_16)) { goto fr98_err1; } // ファイルをオープン fh = file_open_rb(filename); if (fh == FILEH_INVALID) { goto fr98_err1; } // BITMAPFILEHEADER の読み込み if ((file_read(fh, &bf, sizeof(bf)) != sizeof(bf)) || (bf.bfType[0] != 'B') || (bf.bfType[1] != 'M')) { goto fr98_err2; } // BITMAPINFOHEADER の読み込み if ((file_read(fh, &bi, sizeof(bi)) != sizeof(bi)) || (bmpdata_getinfo(&bi, &bd) != SUCCESS) || (bd.width != BMPWIDTH) || (bd.height != BMPHEIGHT) || (bd.bpp != 1) || (LOADINTELDWORD(bi.biSizeImage) != BMPDATASIZE)) { goto fr98_err2; } // BITMAPデータ頭だし fptr = LOADINTELDWORD(bf.bfOffBits); if (file_seek(fh, fptr, FSEEK_SET) != fptr) { goto fr98_err2; } // メモリアロケート bmpdata = (UINT8 *)_MALLOC(BMPDATASIZE, "pc98font"); if (bmpdata == NULL) { goto fr98_err2; } // BITMAPデータの読みだし if (file_read(fh, bmpdata, BMPDATASIZE) != BMPDATASIZE) { goto fr98_err3; } // 8x16 フォント(〜0x7f)を読む必要がある? if (loading & FONT_ANK16a) { loading &= ~FONT_ANK16a; pc98ankcpy(fontrom + 0x80000, bmpdata, 0x000, 0x080); } // 8x16 フォント(0x80〜)を読む必要がある? if (loading & FONT_ANK16b) { loading &= ~FONT_ANK16b; pc98ankcpy(fontrom + 0x80800, bmpdata, 0x080, 0x100); } // 第一水準漢字を読む必要がある? if (loading & FONT_KNJ1) { loading &= ~FONT_KNJ1; pc98knjcpy(fontrom, bmpdata, 0x01, 0x30); } // 第二水準漢字を読む必要がある? if (loading & FONT_KNJ2) { loading &= ~FONT_KNJ2; pc98knjcpy(fontrom, bmpdata, 0x30, 0x56); } // 拡張漢字を読む必要がある? if (loading & FONT_KNJ3) { loading &= ~FONT_KNJ3; pc98knjcpy(fontrom, bmpdata, 0x58, 0x60); } fr98_err3: _MFREE(bmpdata); fr98_err2: file_close(fh); fr98_err1: return(loading); }
void bios_initialize(void) { BOOL biosrom; OEMCHAR path[MAX_PATH]; FILEH fh; UINT i; UINT32 tmp; UINT pos; biosrom = FALSE; getbiospath(path, str_biosrom, NELEMENTS(path)); fh = file_open_rb(path); if (fh != FILEH_INVALID) { biosrom = (file_read(fh, mem + 0x0e8000, 0x18000) == 0x18000); file_close(fh); } if (biosrom) { TRACEOUT(("load bios.rom")); pccore.rom |= PCROM_BIOS; // PnP BIOSを潰す for (i=0; i<0x10000; i+=0x10) { tmp = LOADINTELDWORD(mem + 0xf0000 + i); if (tmp == 0x506e5024) { TRACEOUT(("found PnP BIOS at %.5x", 0xf0000 + i)); mem[0xf0000 + i] = 0x6e; mem[0xf0002 + i] = 0x24; break; } } } else { CopyMemory(mem + 0x0e8000, nosyscode, sizeof(nosyscode)); if ((!biosrom) && (!(pccore.model & PCMODEL_EPSON))) { CopyMemory(mem + 0xe8dd8, neccheck, 0x25); pos = LOADINTELWORD(itfrom + 2); CopyMemory(mem + 0xf538e, itfrom + pos, 0x27); } setbiosseed(mem + 0x0e8000, 0x10000, 0xb1f0); } #if defined(SUPPORT_PC9821) getbiospath(path, OEMTEXT("bios9821.rom"), sizeof(path)); fh = file_open_rb(path); if (fh != FILEH_INVALID) { if (file_read(fh, mem + 0x0d8000, 0x2000) == 0x2000) { // IDE BIOSを潰す TRACEOUT(("load bios9821.rom")); STOREINTELWORD(mem + 0x0d8009, 0); } file_close(fh); } #if defined(BIOS_SIMULATE) mem[0xf8e80] = 0x98; mem[0xf8e81] = 0x21; mem[0xf8e82] = 0x1f; mem[0xf8e83] = 0x20; // Model Number? mem[0xf8e84] = 0x2c; mem[0xf8e85] = 0xb0; // mem[0xf8eaf] = 0x21; // <- これって何だっけ? #endif #endif #if defined(BIOS_SIMULATE) CopyMemory(mem + BIOS_BASE, biosfd80, sizeof(biosfd80)); if (!biosrom) { lio_initialize(); } for (i=0; i<8; i+=2) { STOREINTELWORD(mem + 0xfd800 + 0x1aaf + i, 0x1ab7); STOREINTELWORD(mem + 0xfd800 + 0x1ad7 + i, 0x1adf); STOREINTELWORD(mem + 0xfd800 + 0x2361 + i, 0x1980); } CopyMemory(mem + 0xfd800 + 0x1ab7, fdfmt2hd, sizeof(fdfmt2hd)); CopyMemory(mem + 0xfd800 + 0x1adf, fdfmt2dd, sizeof(fdfmt2dd)); CopyMemory(mem + 0xfd800 + 0x1980, fdfmt144, sizeof(fdfmt144)); SETBIOSMEM16(0xfffe8, 0xcb90); SETBIOSMEM16(0xfffec, 0xcb90); mem[0xffff0] = 0xea; STOREINTELDWORD(mem + 0xffff1, 0xfd800000); CopyMemory(mem + 0x0fd800 + 0x0e00, keytable[0], 0x300); CopyMemory(mem + ITF_ADRS, itfrom, sizeof(itfrom)); mem[ITF_ADRS + 0x7ff0] = 0xea; STOREINTELDWORD(mem + ITF_ADRS + 0x7ff1, 0xf8000000); if (pccore.model & PCMODEL_EPSON) { mem[ITF_ADRS + 0x7ff1] = 0x04; } else if ((pccore.model & PCMODELMASK) == PCMODEL_VM) { mem[ITF_ADRS + 0x7ff1] = 0x08; } setbiosseed(mem + 0x0f8000, 0x08000, 0x7ffe); #else fh = file_open_c("itf.rom"); if (fh != FILEH_INVALID) { file_read(fh, mem + ITF_ADRS, 0x8000); file_close(fh); TRACEOUT(("load itf.rom")); } #endif CopyMemory(mem + 0x1c0000, mem + ITF_ADRS, 0x08000); CopyMemory(mem + 0x1e8000, mem + 0x0e8000, 0x10000); }
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); }
FILEH DOSIOCALL file_open_rb_c(const OEMCHAR* lpFilename) { return file_open_rb(file_getcd(lpFilename)); }
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); }
// イメージファイルの実体を開き、各種情報構築 BRESULT setsxsidev(SXSIDEV sxsi, const OEMCHAR *path, const _CDTRK *trk, UINT trks) { FILEH fh; long totals; CDINFO cdinfo; UINT mediatype; UINT i; #ifdef TOCLOGOUT OEMCHAR logpath[MAX_PATH]; OEMCHAR logbuf[2048]; TEXTFILEH tfh; #endif // trk、trksは有効な値が設定済みなのが前提 if ((trk == NULL) || (trks == 0)) { goto sxsiope_err1; } fh = file_open_rb(path); if (fh == FILEH_INVALID) { goto sxsiope_err1; } cdinfo = (CDINFO)_MALLOC(sizeof(_CDINFO), path); if (cdinfo == NULL) { goto sxsiope_err2; } ZeroMemory(cdinfo, sizeof(_CDINFO)); cdinfo->fh = fh; trks = min(trks, NELEMENTS(cdinfo->trk) - 1); CopyMemory(cdinfo->trk, trk, trks * sizeof(_CDTRK)); #ifdef TOCLOGOUT file_cpyname(logpath, path, NELEMENTS(logpath)); file_cutext(logpath); file_catname(logpath, str_logB, NELEMENTS(logpath)); tfh = textfile_create(logpath, 0x800); if (tfh == NULL) { return(FAILURE); } TOCLOG(OEMTEXT("STR _CDTRK LOG\r\n"), 0); for (i = 0; i < trks; i++) { TOCLOG(OEMTEXT("trk[%02d]\r\n"), i); TOCLOG(OEMTEXT(" adr_ctl = 0x%02X\r\n"), cdinfo->trk[i].adr_ctl); TOCLOG(OEMTEXT(" point = %02d\r\n"), cdinfo->trk[i].point); TOCLOG(OEMTEXT(" [pos0][pos][ ] = [%18I32d]"), cdinfo->trk[i].pos0); TOCLOG(OEMTEXT("[%18I32d][ ]\r\n"), cdinfo->trk[i].pos); TOCLOG(OEMTEXT(" sec[ ][str][end] = [ ][%18I32d]"), cdinfo->trk[i].str_sec); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].end_sec); TOCLOG(OEMTEXT(" sectors = %I32d\r\n"), cdinfo->trk[i].sectors); TOCLOG(OEMTEXT(" sector_size = %d\r\n"), cdinfo->trk[i].sector_size); TOCLOG(OEMTEXT(" sector [pregap][start][end] = [%18I32d]"), cdinfo->trk[i].pregap_sector); TOCLOG(OEMTEXT("[%18I32d]"), cdinfo->trk[i].start_sector); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].end_sector); TOCLOG(OEMTEXT(" img_sec[pregap][start][end] = [%18I32d]"), cdinfo->trk[i].img_pregap_sec); TOCLOG(OEMTEXT("[%18I32d]"), cdinfo->trk[i].img_start_sec); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].img_end_sec); TOCLOG(OEMTEXT(" offset [pregap][start][end] = [0x%016I64X]"), cdinfo->trk[i].pregap_offset); TOCLOG(OEMTEXT("[0x%016I64X]"), cdinfo->trk[i].start_offset); TOCLOG(OEMTEXT("[0x%016I64X]\r\n"), cdinfo->trk[i].end_offset); TOCLOG(OEMTEXT(" pregap_sectors = %I32d\r\n"), cdinfo->trk[i].pregap_sectors); TOCLOG(OEMTEXT(" track_sectors = %I32d\r\n"), cdinfo->trk[i].track_sectors); } TOCLOG(OEMTEXT("END _CDTRK LOG\r\n"), 0); textfile_close(tfh); #endif #if 1 if (sxsi->totals == -1) { totals = set_trkinfo(fh, cdinfo->trk, trks, 0); if (totals < 0) { goto sxsiope_err3; } sxsi->totals = totals; } #else totals = issec(fh, cdinfo->trk, trks); // とりあえず sxsi->read = sec2048_read; totals = issec2048(cdinfo->fh); if (totals < 0) { sxsi->read = sec2352_read; totals = issec2352(cdinfo->fh); } if (totals < 0) { sxsi->read = sec2448_read; totals = issec2448(cdinfo->fh); } if (totals < 0) { sxsi->read = sec_read; totals = issec(cdinfo->fh, cdinfo->trk, trks); } if (totals < 0) { goto sxsiope_err3; } #endif mediatype = 0; for (i = 0; i < trks; i++) { if (cdinfo->trk[i].adr_ctl == TRACK_DATA) { mediatype |= SXSIMEDIA_DATA; } else if (cdinfo->trk[i].adr_ctl == TRACK_AUDIO) { mediatype |= SXSIMEDIA_AUDIO; } } // リードアウトトラックを生成 cdinfo->trk[trks].adr_ctl = 0x10; cdinfo->trk[trks].point = 0xaa; // cdinfo->trk[trks].pos = totals; cdinfo->trk[trks].pos = sxsi->totals; cdinfo->trks = trks; file_cpyname(cdinfo->path, path, NELEMENTS(cdinfo->path)); sxsi->reopen = cd_reopen; sxsi->close = cd_close; sxsi->destroy = cd_destroy; sxsi->hdl = (INTPTR)cdinfo; // sxsi->totals = totals; sxsi->cylinders = 0; sxsi->size = 2048; sxsi->sectors = 1; sxsi->surfaces = 1; sxsi->headersize = 0; sxsi->mediatype = mediatype; #ifdef TOCLOGOUT file_cpyname(logpath, path, NELEMENTS(logpath)); file_cutext(logpath); file_catname(logpath, str_logA, NELEMENTS(logpath)); tfh = textfile_create(logpath, 0x800); if (tfh == NULL) { return(FAILURE); } TOCLOG(OEMTEXT("STR _CDTRK LOG\r\n"), 0); for (i = 0; i < trks; i++) { TOCLOG(OEMTEXT("trk[%02d]\r\n"), i); TOCLOG(OEMTEXT(" adr_ctl = 0x%02X\r\n"), cdinfo->trk[i].adr_ctl); TOCLOG(OEMTEXT(" point = %02d\r\n"), cdinfo->trk[i].point); TOCLOG(OEMTEXT(" [pos0][pos][ ] = [%18I32d]"), cdinfo->trk[i].pos0); TOCLOG(OEMTEXT("[%18I32d][ ]\r\n"), cdinfo->trk[i].pos); TOCLOG(OEMTEXT(" sec[ ][str][end] = [ ][%18I32d]"), cdinfo->trk[i].str_sec); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].end_sec); TOCLOG(OEMTEXT(" sectors = %I32d\r\n"), cdinfo->trk[i].sectors); TOCLOG(OEMTEXT(" sector_size = %d\r\n"), cdinfo->trk[i].sector_size); TOCLOG(OEMTEXT(" sector [pregap][start][end] = [%18I32d]"), cdinfo->trk[i].pregap_sector); TOCLOG(OEMTEXT("[%18I32d]"), cdinfo->trk[i].start_sector); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].end_sector); TOCLOG(OEMTEXT(" img_sec[pregap][start][end] = [%18I32d]"), cdinfo->trk[i].img_pregap_sec); TOCLOG(OEMTEXT("[%18I32d]"), cdinfo->trk[i].img_start_sec); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].img_end_sec); TOCLOG(OEMTEXT(" offset [pregap][start][end] = [0x%016I64X]"), cdinfo->trk[i].pregap_offset); TOCLOG(OEMTEXT("[0x%016I64X]"), cdinfo->trk[i].start_offset); TOCLOG(OEMTEXT("[0x%016I64X]\r\n"), cdinfo->trk[i].end_offset); TOCLOG(OEMTEXT(" pregap_sectors = %I32d\r\n"), cdinfo->trk[i].pregap_sectors); TOCLOG(OEMTEXT(" track_sectors = %I32d\r\n"), cdinfo->trk[i].track_sectors); } TOCLOG(OEMTEXT("END _CDTRK LOG\r\n"), 0); textfile_close(tfh); #endif return(SUCCESS); sxsiope_err3: _MFREE(cdinfo); sxsiope_err2: file_close(fh); sxsiope_err1: return(FAILURE); }
static BRESULT openimg(SXSIDEV sxsi, const OEMCHAR *path, const _CDTRK *trk, UINT trks) { FILEH fh; UINT type; int totals; CDINFO cdinfo; UINT mediatype; UINT i; fh = file_open_rb(path); if (fh == FILEH_INVALID) { goto sxsiope_err1; } type = 2048; totals = issec2048(fh); if (totals < 0) { type = 2352; totals = issec2352(fh); } if (totals < 0) { goto sxsiope_err2; } cdinfo = (CDINFO)_MALLOC(sizeof(_CDINFO), path); if (cdinfo == NULL) { goto sxsiope_err2; } ZeroMemory(cdinfo, sizeof(_CDINFO)); cdinfo->fh = fh; cdinfo->type = type; if ((trk != NULL) && (trks != 0)) { trks = min(trks, NELEMENTS(cdinfo->trk) - 1); CopyMemory(cdinfo->trk, trk, trks * sizeof(_CDTRK)); } else { cdinfo->trk[0].type = 0x14; cdinfo->trk[0].track = 1; // cdinfo->trk[0].pos = 0; trks = 1; } mediatype = 0; for (i=0; i<trks; i++) { if (cdinfo->trk[i].type == 0x14) { mediatype |= SXSIMEDIA_DATA; } else if (cdinfo->trk[i].type == 0x10) { mediatype |= SXSIMEDIA_AUDIO; } } cdinfo->trk[trks].type = 0x10; cdinfo->trk[trks].track = 0xaa; cdinfo->trk[trks].pos = totals; cdinfo->trks = trks; file_cpyname(cdinfo->path, path, NELEMENTS(cdinfo->path)); sxsi->reopen = cd_reopen; if (type == 2048) { sxsi->read = sec2048_read; } else { sxsi->read = sec2352_read; } sxsi->close = cd_close; sxsi->destroy = cd_destroy; sxsi->hdl = (INTPTR)cdinfo; sxsi->totals = totals; sxsi->cylinders = 0; sxsi->size = 2048; sxsi->sectors = 1; sxsi->surfaces = 1; sxsi->headersize = 0; sxsi->mediatype = mediatype; return(SUCCESS); sxsiope_err2: file_close(fh); sxsiope_err1: return(FAILURE); }
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); }
FILEH file_open_rb_c(const char *path) { file_cpyname(curfilep, path, NELEMENTS(curpath) - (UINT)(curfilep - curpath)); return(file_open_rb(curpath)); }
FILEH file_open_rb_c(const char *path) { *curfilep = '\0'; file_catname(curpath, path, sizeof(curpath)); return(file_open_rb(curpath)); }
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); }
static FILEH saveopen(SAVEISF isf, BOOL create) { FILEH fh; char path[MAX_PATH]; BOOL r; milstr_ncpy(path, gamecore.suf.scriptpath, sizeof(path)); if (!(gamecore.sys.type & GAME_SAVEALIAS)) { switch(gamecore.sys.version) { case EXEVER_MYU: case EXEVER_AMEIRO: case EXEVER_NURSE: case EXEVER_VECHO: milstr_ncat(path, "GAME.SAV", sizeof(path)); break; case EXEVER_TSUKU: milstr_ncat(path, "TSUKU.SAV", sizeof(path)); break; default: milstr_ncat(path, gamecore.suf.key, sizeof(path)); milstr_ncat(path, ".SAV", sizeof(path)); break; } } else { milstr_ncat(path, "xkazoku.sav", sizeof(path)); } TRACEOUT(("savefile: %s", path)); if (!create) { fh = file_open_rb(path); } else { fh = file_open(path); } if (fh != FILEH_INVALID) { if (isf->savever == 2) { BYTE work[8]; if (file_read(fh, work, 8) == 8) { isf->headsize = LOADINTELDWORD(work+0); isf->files = LOADINTELDWORD(work+4); } file_seek(fh, 0, FSEEK_SET); } } else if (create) { fh = file_create(path); if (fh != FILEH_INVALID) { if (isf->savever == 0) { r = savezerofill(fh, savegetinitsize(isf)); } else if (isf->savever == 1) { r = savezerofill(fh, isf->headsize); } else { r = savever2header(fh, isf); } if (r != SUCCESS) { file_close(fh); fh = FILEH_INVALID; file_delete(path); } } } return(fh); }