--- np2/statsave.c 2004/01/05 09:31:24 1.25 +++ np2/statsave.c 2007/11/03 00:00:19 1.51 @@ -1,4 +1,5 @@ #include "compiler.h" +#include "strres.h" #include "dosio.h" #include "commng.h" #include "scrnmng.h" @@ -7,7 +8,11 @@ #include "cpucore.h" #include "pccore.h" #include "iocore.h" +#include "gdc_sub.h" #include "cbuscore.h" +#include "ideio.h" +#include "sasiio.h" +#include "scsiio.h" #include "pc9861k.h" #include "mpu98ii.h" #include "board14.h" @@ -23,19 +28,16 @@ #include "fddfile.h" #include "fdd_mtr.h" #include "sxsi.h" -#include "calendar.h" -#include "statsave.h" #include "keydisp.h" - +#include "hostdrv.h" +#include "calendar.h" +#include "keystat.h" #if defined(MACOS) -#define CRLITERAL "\r" #define CRCONST str_cr #elif defined(WIN32) || defined(X11) || defined(SLZAURUS) -#define CRLITERAL "\n" #define CRCONST str_lf #else -#define CRLITERAL "\r\n" #define CRCONST str_crlf #endif @@ -53,33 +55,28 @@ typedef struct { } NP2FENT; enum { - NP2FLAG_BIN = 0, - NP2FLAG_TERM, + STATFLAG_BIN = 0, + STATFLAG_TERM, #if defined(CGWND_FONTPTR) - NP2FLAG_CGW, + STATFLAG_CGW, #endif - NP2FLAG_CLOCK, - NP2FLAG_COM, - NP2FLAG_DISK, - NP2FLAG_DMA, - NP2FLAG_EGC, - NP2FLAG_EPSON, - NP2FLAG_EVT, - NP2FLAG_EXT, - NP2FLAG_FM, - NP2FLAG_GIJ, - NP2FLAG_MEM + STATFLAG_COM, + STATFLAG_DMA, + STATFLAG_EGC, + STATFLAG_EPSON, + STATFLAG_EVT, + STATFLAG_EXT, + STATFLAG_FDD, + STATFLAG_FM, + STATFLAG_GIJ, +#if defined(SUPPORT_HOSTDRV) + STATFLAG_HDRV, +#endif + STATFLAG_MEM, + STATFLAG_SXSI }; typedef struct { -const char *index; - UINT16 ver; - UINT16 type; - void *arg1; - UINT arg2; -} STENTRY; - -typedef struct { UINT32 id; void *proc; } PROCTBL; @@ -100,355 +97,373 @@ extern COMMNG cm_mpu98; extern COMMNG cm_rs232c; typedef struct { - char *buf; + OEMCHAR *buf; int remain; } ERR_BUF; -static void err_append(ERR_BUF *e, char *buf) { - - int len; - if ((e) && (buf)) { - if (e->buf) { - len = strlen(buf); - if (e->remain >= len) { - CopyMemory(e->buf, buf, len); - e->buf += len; - e->remain -= len; - } - } - } -} +// ---- +enum { + SFFILEH_WRITE = 0x0001, + SFFILEH_BLOCK = 0x0002, + SFFILEH_ERROR = 0x0004 +}; -// ---- +typedef struct { + _STFLAGH sfh; + UINT stat; + FILEH fh; + UINT secpos; + NP2FHDR f; +} _SFFILEH, *SFFILEH; -// 関数ポインタを intに変更。 -static BOOL proc2num(void *func, const PROCTBL *tbl, int size) { +static SFFILEH statflag_open(const OEMCHAR *filename, OEMCHAR *err, int errlen) { - int i; + FILEH fh; + SFFILEH ret; - for (i=0; iproc) { - *(long *)func = (long)tbl->id; - return(SUCCESS); + 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; } - tbl++; + return(ret); } - return(FAILURE); -} - -static BOOL num2proc(void *func, const PROCTBL *tbl, int size) { + _MFREE(ret); - int i; +sfo_err2: + file_close(fh); - for (i=0; iid) { - *(long *)func = (long)tbl->proc; - return(SUCCESS); - } - tbl++; - } - return(FAILURE); +sfo_err1: + return(NULL); } +static int statflag_closesection(SFFILEH sffh) { -// ---- + UINT leng; + UINT8 zero[16]; -typedef struct { - FILEH fh; - long pos; - long bak; - long next; - NP2FHDR f; - NP2FENT p; -} _NP2FFILE, *NP2FFILE; - -static int flagopen(NP2FFILE f, const char *filename, ERR_BUF *e) { - - if (f) { - f->fh = file_open(filename); - if (f->fh == FILEH_INVALID) { - return(NP2FLAG_FAILURE); - } - if (file_read(f->fh, &f->f, sizeof(NP2FHDR)) - != sizeof(NP2FHDR)) { - file_close(f->fh); - return(NP2FLAG_FAILURE); - } - f->pos = sizeof(NP2FHDR); - if (strcmp(f->f.name, np2flagdef.name)) { - file_close(f->fh); - return(NP2FLAG_FAILURE); - } - if (strcmp(f->f.vername, np2flagdef.vername)) { -#if 1 - file_close(f->fh); - return(NP2FLAG_FAILURE); -#else - return(NP2FLAG_VERSION); // 他形式を読むのであれば… -#endif + if (sffh == NULL) { + goto sfcs_err1; + } + if (sffh->stat == (SFFILEH_BLOCK | SFFILEH_WRITE)) { + leng = (0 - sffh->sfh.hdr.size) & 15; + if (leng) { + ZeroMemory(zero, sizeof(zero)); + if (file_write(sffh->fh, zero, leng) != leng) { + goto sfcs_err2; + } } - if (f->f.ver != np2flagdef.ver) { -#if 1 - file_close(f->fh); - return(NP2FLAG_FAILURE); -#else - return(NP2FLAG_VERSION); // 他verを読むのであれば… -#endif + if ((file_seek(sffh->fh, (long)sffh->secpos, FSEEK_SET) + != (long)sffh->secpos) || + (file_write(sffh->fh, &sffh->sfh.hdr, sizeof(sffh->sfh.hdr)) + != sizeof(sffh->sfh.hdr))) { + goto sfcs_err2; + } + } + if (sffh->stat & SFFILEH_BLOCK) { + sffh->stat &= ~SFFILEH_BLOCK; + sffh->secpos += sizeof(sffh->sfh.hdr) + + ((sffh->sfh.hdr.size + 15) & (~15)); + if (file_seek(sffh->fh, (long)sffh->secpos, FSEEK_SET) + != (long)sffh->secpos) { + goto sfcs_err2; } - return(NP2FLAG_SUCCESS); } - (void)e; - return(NP2FLAG_FAILURE); + return(STATFLAG_SUCCESS); + +sfcs_err2: + sffh->stat = SFFILEH_ERROR; + +sfcs_err1: + return(STATFLAG_FAILURE); } -static int flagcreate(NP2FFILE f, const char *filename) { +static int statflag_readsection(SFFILEH sffh) { - if (f) { - f->fh = file_create(filename); - if (f->fh == FILEH_INVALID) { - return(NP2FLAG_FAILURE); - } - if (file_write(f->fh, &np2flagdef, sizeof(NP2FHDR)) - != sizeof(NP2FHDR)) { - file_close(f->fh); - return(NP2FLAG_FAILURE); - } - f->pos = sizeof(NP2FHDR); - return(NP2FLAG_SUCCESS); + int ret; + + ret = statflag_closesection(sffh); + if (ret != STATFLAG_SUCCESS) { + return(ret); + } + if ((sffh->stat == 0) && + (file_read(sffh->fh, &sffh->sfh.hdr, sizeof(sffh->sfh.hdr)) + == sizeof(sffh->sfh.hdr))) { + sffh->stat = SFFILEH_BLOCK; + sffh->sfh.pos = 0; + return(STATFLAG_SUCCESS); } - return(NP2FLAG_FAILURE); + sffh->stat = SFFILEH_ERROR; + return(STATFLAG_FAILURE); } -static int flagload_create(NP2FFILE f) { +int statflag_read(STFLAGH sfh, void *buf, UINT size) { - if (f) { - ZeroMemory(&f->p, sizeof(NP2FENT)); - if (f->pos & 15) { - f->pos += 15; - f->pos &= ~0xf; - if (file_seek(f->fh, f->pos, 0) != f->pos) { - return(NP2FLAG_FAILURE); - } - } - if (file_read(f->fh, &f->p, sizeof(NP2FENT)) != sizeof(NP2FENT)) { - return(NP2FLAG_FAILURE); + if ((sfh == NULL) || (buf == NULL) || + ((sfh->pos + size) > sfh->hdr.size)) { + goto sfr_err; + } + if (size) { + if (file_read(((SFFILEH)sfh)->fh, buf, size) != size) { + goto sfr_err; } - f->pos += sizeof(NP2FENT); - f->next = f->pos + f->p.size; - return(NP2FLAG_SUCCESS); + sfh->pos += size; } - return(NP2FLAG_FAILURE); + return(STATFLAG_SUCCESS); + +sfr_err: + return(STATFLAG_FAILURE); } -static int flagload_load(NP2FFILE f, void *buf, UINT size) { +static SFFILEH statflag_create(const OEMCHAR *filename) { - if (f && buf && size && (file_read(f->fh, buf, size) == size)) { - f->pos += size; - return(NP2FLAG_SUCCESS); + SFFILEH ret; + FILEH fh; + + ret = (SFFILEH)_MALLOC(sizeof(_SFFILEH), filename); + if (ret == NULL) { + goto sfc_err1; + } + fh = file_create(filename); + if (fh == FILEH_INVALID) { + goto sfc_err2; + } + if (file_write(fh, &np2flagdef, sizeof(NP2FHDR)) == sizeof(NP2FHDR)) { + ZeroMemory(ret, sizeof(_SFFILEH)); + ret->stat = SFFILEH_WRITE; + ret->fh = fh; + ret->secpos = sizeof(NP2FHDR); + return(ret); } - return(NP2FLAG_FAILURE); + file_close(fh); + file_delete(filename); + +sfc_err2: + _MFREE(ret); + +sfc_err1: + return(NULL); } -static int flagload_close(NP2FFILE f) { +static int statflag_createsection(SFFILEH sffh, const SFENTRY *tbl) { - if (file_seek(f->fh, f->next, 0) != f->next) { - return(NP2FLAG_FAILURE); + int ret; + + ret = statflag_closesection(sffh); + if (ret != STATFLAG_SUCCESS) { + return(ret); } - f->pos = f->next; - return(NP2FLAG_SUCCESS); + if (sffh->stat != SFFILEH_WRITE) { + sffh->stat = SFFILEH_ERROR; + return(STATFLAG_FAILURE); + } + CopyMemory(sffh->sfh.hdr.index, tbl->index, sizeof(sffh->sfh.hdr.index)); + sffh->sfh.hdr.ver = tbl->ver; + sffh->sfh.hdr.size = 0; + return(STATFLAG_SUCCESS); } -static int flagsave_create(NP2FFILE f, const STENTRY *t) { +int statflag_write(STFLAGH sfh, const void *buf, UINT size) { - if (f && t) { - int len; - ZeroMemory(&f->p, sizeof(NP2FENT)); - if (f->pos & 15) { - UINT rem; - rem = 16 - (f->pos & 15); - if (file_write(f->fh, &f->p, rem) != rem) { - return(NP2FLAG_FAILURE); - } - f->pos += rem; - } - f->bak = f->pos; + SFFILEH sffh; - len = strlen(t->index); - if (len >= 10) { - len = 10; + if (sfh == NULL) { + goto sfw_err1; + } + sffh = (SFFILEH)sfh; + if (!(sffh->stat & SFFILEH_WRITE)) { + goto sfw_err2; + } + if (!(sffh->stat & SFFILEH_BLOCK)) { + sffh->stat |= SFFILEH_BLOCK; + sfh->pos = 0; + if (file_write(sffh->fh, &sfh->hdr, sizeof(sfh->hdr)) + != sizeof(sfh->hdr)) { + goto sfw_err2; } - if (len) { - CopyMemory(f->p.index, t->index, len); + } + if (size) { + if ((buf == NULL) || (file_write(sffh->fh, buf, size) != size)) { + goto sfw_err2; } - f->p.ver = t->ver; - if (file_write(f->fh, &f->p, sizeof(NP2FENT)) != sizeof(NP2FENT)) { - return(NP2FLAG_FAILURE); + sfh->pos += size; + if (sfh->hdr.size < sfh->pos) { + sfh->hdr.size = sfh->pos; } - f->pos += sizeof(NP2FENT); - return(NP2FLAG_SUCCESS); } - return(NP2FLAG_FAILURE); -} + return(STATFLAG_SUCCESS); -static int flagsave_save(NP2FFILE f, void *buf, UINT size) { +sfw_err2: + sffh->stat = SFFILEH_ERROR; - if (f && buf && size && (file_write(f->fh, buf, size) == size)) { - f->pos += size; - f->p.size += size; - return(NP2FLAG_SUCCESS); - } - return(NP2FLAG_FAILURE); +sfw_err1: + return(STATFLAG_FAILURE); } -static int flagsave_close(NP2FFILE f) { +static void statflag_close(SFFILEH sffh) { - if (!f) { - goto fs_closeerr; - } - if (file_seek(f->fh, f->bak, 0) != f->bak) { - goto fs_closeerr; + if (sffh) { + statflag_closesection(sffh); + file_close(sffh->fh); + _MFREE(sffh); } - if (file_write(f->fh, &f->p, sizeof(NP2FENT)) != sizeof(NP2FENT)) { - goto fs_closeerr; - } - if (file_seek(f->fh, f->pos, 0) == f->pos) { - return(NP2FLAG_SUCCESS); - } - -fs_closeerr: - return(NP2FLAG_FAILURE); } -static void flagclose(NP2FFILE f) { +void statflag_seterr(STFLAGH sfh, const OEMCHAR *str) { - if (f) { - file_close(f->fh); + if ((sfh) && (sfh->errlen)) { + milstr_ncat(sfh->err, str, sfh->errlen); + milstr_ncat(sfh->err, CRCONST, sfh->errlen); } } -// ---- +// ---- function -static int flagsave_term(NP2FFILE f, const STENTRY *t) { +// 関数ポインタを intに変更。 +static BRESULT proc2num(void *func, const PROCTBL *tbl, int size) { - int ret; + int i; - ret = flagsave_create(f, t); - ret |= flagsave_close(f); - return(ret); + for (i=0; iproc) { + *(long *)func = (long)tbl->id; + return(SUCCESS); + } + tbl++; + } + return(FAILURE); } +static BRESULT num2proc(void *func, const PROCTBL *tbl, int size) { -// ---- common - -static int flagsave_common(NP2FFILE f, const STENTRY *t) { - - int ret; + int i; - ret = flagsave_create(f, t); - if (ret != NP2FLAG_FAILURE) { - ret |= flagsave_save(f, t->arg1, t->arg2); - ret |= flagsave_close(f); + for (i=0; iid) { + *(long *)func = (long)tbl->proc; + return(SUCCESS); + } + tbl++; } - return(ret); + return(FAILURE); } -static int flagload_common(NP2FFILE f, const STENTRY *t) { - return(flagload_load(f, t->arg1, t->arg2)); -} +// ---- file +typedef struct { + OEMCHAR path[MAX_PATH]; + UINT ftype; + int readonly; + DOSDATE date; + DOSTIME time; +} STATPATH; -// ----- clock +static const OEMCHAR str_updated[] = OEMTEXT("%s: updated"); +static const OEMCHAR str_notfound[] = OEMTEXT("%s: not found"); -static int flagload_clock(NP2FFILE f, const STENTRY *t) { +static int statflag_writepath(STFLAGH sfh, const OEMCHAR *path, + UINT ftype, int readonly) { - int ret; + STATPATH sp; + FILEH fh; - ret = flagload_common(f, t); - sound_changeclock(); - beep_changeclock(); - return(ret); + 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))); } +static int statflag_checkpath(STFLAGH sfh, const OEMCHAR *devname) { -// ---- memory - -static int flagsave_mem(NP2FFILE f, const STENTRY *t) { - - int ret; + int ret; + STATPATH sp; + FILEH fh; + OEMCHAR buf[256]; + DOSDATE date; + DOSTIME time; - ret = flagsave_create(f, t); - if (ret != NP2FLAG_FAILURE) { - ret |= flagsave_save(f, mem, 0x110000); - ret |= flagsave_save(f, mem + VRAM1_B, 0x18000); - ret |= flagsave_save(f, mem + VRAM1_E, 0x8000); - ret |= flagsave_close(f); + ret = statflag_read(sfh, &sp, sizeof(sp)); + if (sp.path[0]) { + fh = file_open_rb(sp.path); + if (fh != FILEH_INVALID) { + file_getdatetime(fh, &date, &time); + file_close(fh); + if ((memcmp(&sp.date, &date, sizeof(date))) || + (memcmp(&sp.time, &time, sizeof(time)))) { + ret |= STATFLAG_DISKCHG; + OEMSPRINTF(buf, str_updated, devname); + statflag_seterr(sfh, buf); + } + } + else { + ret |= STATFLAG_DISKCHG; + OEMSPRINTF(buf, str_notfound, devname); + statflag_seterr(sfh, buf); + } } return(ret); } -static int flagload_mem(NP2FFILE f, const STENTRY *t) { - int ret; +// ---- common - ret = flagload_load(f, mem, 0x110000); - ret |= flagload_load(f, mem + VRAM1_B, 0x18000); - ret |= flagload_load(f, mem + VRAM1_E, 0x8000); - (void)t; - return(ret); +static int flagsave_common(STFLAGH sfh, const SFENTRY *tbl) { + + return(statflag_write(sfh, tbl->arg1, tbl->arg2)); +} + +static int flagload_common(STFLAGH sfh, const SFENTRY *tbl) { + + return(statflag_read(sfh, tbl->arg1, tbl->arg2)); } -// ---- ext memory +// ---- memory -static int flagsave_ext(NP2FFILE f, const STENTRY *t) { +static int flagsave_mem(STFLAGH sfh, const SFENTRY *tbl) { int ret; - ret = flagsave_create(f, t); - if (ret != NP2FLAG_FAILURE) { - ret |= flagsave_save(f, &extmem, sizeof(extmem)); - if (CPU_EXTMEM) { - ret |= flagsave_save(f, CPU_EXTMEM, CPU_EXTMEMSIZE); - } - ret |= flagsave_close(f); - } + ret = statflag_write(sfh, mem, 0x110000); + ret |= statflag_write(sfh, mem + VRAM1_B, 0x18000); + ret |= statflag_write(sfh, mem + VRAM1_E, 0x8000); + (void)tbl; return(ret); } -static int flagload_ext(NP2FFILE f, const STENTRY *t) { +static int flagload_mem(STFLAGH sfh, const SFENTRY *tbl) { int ret; - int i; - UINT pagemax = 0; - ret = flagload_load(f, &extmem, sizeof(extmem)); - if (extmem.maxmem) { - if (extmem.maxmem > (13+1)) { - extmem.maxmem = (13+1); - } - if (!extmemmng_realloc(extmem.maxmem - 1)) { - pagemax = (extmem.maxmem - 1) << 8; - if (CPU_EXTMEM) { - ret |= flagload_load(f, CPU_EXTMEM, CPU_EXTMEMSIZE); - } - } - else { - extmem.maxmem = 0; - } - } - for (i=0; i<4; i++) { - if (extmem.page[i] < pagemax) { - extmem.pageptr[i] = CPU_EXTMEM + (extmem.page[i] << 12); - } - else { - extmem.pageptr[i] = mem + 0xc0000 + (i << 14); - } - } - (void)t; + ret = statflag_read(sfh, mem, 0x110000); + ret |= statflag_read(sfh, mem + VRAM1_B, 0x18000); + ret |= statflag_read(sfh, mem + VRAM1_E, 0x8000); + (void)tbl; return(ret); } @@ -456,30 +471,25 @@ static int flagload_ext(NP2FFILE f, cons // ---- cg window #if defined(CGWND_FONTPTR) -static int flagsave_cgwnd(NP2FFILE f, const STENTRY *t) { +static int flagsave_cgwnd(STFLAGH sfh, const SFENTRY *tbl) { - int ret; _CGWINDOW cgwnd; cgwnd = cgwindow; cgwnd.fontlow -= (long)fontrom; cgwnd.fonthigh -= (long)fontrom; - ret = flagsave_create(f, t); - if (ret != NP2FLAG_FAILURE) { - ret |= flagsave_save(f, &cgwindow, sizeof(cgwindow)); - ret |= flagsave_close(f); - } - return(ret); + (void)tbl; + return(statflag_write(sfh, &cgwindow, sizeof(cgwindow))); } -static int flagload_cgwnd(NP2FFILE f, const STENTRY *t) { +static int flagload_cgwnd(STFLAGH sfh, const SFENTRY *tbl) { int ret; - ret = flagload_load(f, &cgwindow, sizeof(cgwindow)); + ret = statflag_read(sfh, &cgwindow, sizeof(cgwindow)); cgwindow.fontlow += (long)fontrom; cgwindow.fonthigh += (long)fontrom; - (void)t; + (void)tbl; return(ret); } #endif @@ -487,9 +497,8 @@ static int flagload_cgwnd(NP2FFILE f, co // ---- dma -static int flagsave_dma(NP2FFILE f, const STENTRY *t) { +static int flagsave_dma(STFLAGH sfh, const SFENTRY *tbl) { - int ret; int i; _DMAC dmabak; @@ -498,101 +507,88 @@ static int flagsave_dma(NP2FFILE f, cons if ((PROC2NUM(dmabak.dmach[i].proc.outproc, dmaproc)) || (PROC2NUM(dmabak.dmach[i].proc.inproc, dmaproc)) || (PROC2NUM(dmabak.dmach[i].proc.extproc, dmaproc))) { - return(NP2FLAG_FAILURE); + return(STATFLAG_FAILURE); } } - ret = flagsave_create(f, t); - if (ret != NP2FLAG_FAILURE) { - ret |= flagsave_save(f, &dmabak, sizeof(dmabak)); - ret |= flagsave_close(f); - } - return(ret); + (void)tbl; + return(statflag_write(sfh, &dmabak, sizeof(dmabak))); } -static int flagload_dma(NP2FFILE f, const STENTRY *t) { +static int flagload_dma(STFLAGH sfh, const SFENTRY *tbl) { int ret; int i; - ret = flagload_load(f, &dmac, sizeof(dmac)); + ret = statflag_read(sfh, &dmac, sizeof(dmac)); for (i=0; i<4; i++) { if (NUM2PROC(dmac.dmach[i].proc.outproc, dmaproc)) { dmac.dmach[i].proc.outproc = dma_dummyout; - ret |= NP2FLAG_WARNING; + ret |= STATFLAG_WARNING; } if (NUM2PROC(dmac.dmach[i].proc.inproc, dmaproc)) { dmac.dmach[i].proc.inproc = dma_dummyin; - ret |= NP2FLAG_WARNING; + ret |= STATFLAG_WARNING; } if (NUM2PROC(dmac.dmach[i].proc.extproc, dmaproc)) { dmac.dmach[i].proc.extproc = dma_dummyproc; - ret |= NP2FLAG_WARNING; + ret |= STATFLAG_WARNING; } } - (void)t; + (void)tbl; return(ret); } // ---- egc -static int flagsave_egc(NP2FFILE f, const STENTRY *t) { +static int flagsave_egc(STFLAGH sfh, const SFENTRY *tbl) { - int ret; _EGC egcbak; egcbak = egc; egcbak.inptr -= (long)egc.buf; egcbak.outptr -= (long)egc.buf; - - ret = flagsave_create(f, t); - if (ret != NP2FLAG_FAILURE) { - ret |= flagsave_save(f, &egcbak, sizeof(egcbak)); - ret |= flagsave_close(f); - } - return(ret); + (void)tbl; + return(statflag_write(sfh, &egcbak, sizeof(egcbak))); } -static int flagload_egc(NP2FFILE f, const STENTRY *t) { +static int flagload_egc(STFLAGH sfh, const SFENTRY *tbl) { int ret; - ret = flagload_load(f, &egc, sizeof(egc)); + ret = statflag_read(sfh, &egc, sizeof(egc)); egc.inptr += (long)egc.buf; egc.outptr += (long)egc.buf; - (void)t; + (void)tbl; return(ret); } // ---- epson -static int flagsave_epson(NP2FFILE f, const STENTRY *t) { +static int flagsave_epson(STFLAGH sfh, const SFENTRY *tbl) { int ret; - if (!(pc.model & PCMODEL_EPSON)) { - return(NP2FLAG_SUCCESS); - } - ret = flagsave_create(f, t); - if (ret != NP2FLAG_FAILURE) { - ret |= flagsave_save(f, &epsonio, sizeof(epsonio)); - ret |= flagsave_save(f, mem + 0x1c0000, 0x8000); - ret |= flagsave_save(f, mem + 0x1e8000, 0x18000); - ret |= flagsave_close(f); + if (!(pccore.model & PCMODEL_EPSON)) { + return(STATFLAG_SUCCESS); } + ret = statflag_write(sfh, &epsonio, sizeof(epsonio)); + ret |= statflag_write(sfh, mem + 0x1c0000, 0x8000); + ret |= statflag_write(sfh, mem + 0x1e8000, 0x18000); + (void)tbl; return(ret); } -static int flagload_epson(NP2FFILE f, const STENTRY *t) { +static int flagload_epson(STFLAGH sfh, const SFENTRY *tbl) { int ret; - ret = flagload_load(f, &epsonio, sizeof(epsonio)); - ret |= flagload_load(f, mem + 0x1c0000, 0x8000); - ret |= flagload_load(f, mem + 0x1e8000, 0x18000); - (void)t; + ret = statflag_read(sfh, &epsonio, sizeof(epsonio)); + ret |= statflag_read(sfh, mem + 0x1c0000, 0x8000); + ret |= statflag_read(sfh, mem + 0x1e8000, 0x18000); + (void)tbl; return(ret); } @@ -611,13 +607,13 @@ typedef struct { NEVENTCB proc; } NEVTITEM; -static int nevent_save(NP2FFILE f, int num) { +static int nevent_write(STFLAGH sfh, int num) { NEVTITEM nit; UINT i; ZeroMemory(&nit, sizeof(nit)); - for (i=0; i=0xa0; i--) { - opngen_setreg((BYTE)chbase, (BYTE)i, opn.reg[reg + i]); + if (saveflg & FLAG_PSG1) { + ret |= statflag_write(sfh, &psg1.reg, sizeof(PSGREG)); } - for (i=0; i<3; i++) { - opngen_keyon(chbase + i, opngen.keyreg[chbase + i]); + if (saveflg & FLAG_PSG2) { + ret |= statflag_write(sfh, &psg2.reg, sizeof(PSGREG)); } -} - -static void play_psgreg(PSGGEN psg) { - - BYTE i; - - for (i=0; i<0x0e; i++) { - psggen_setreg(psg, i, ((BYTE *)&psg->reg)[i]); + if (saveflg & FLAG_PSG3) { + ret |= statflag_write(sfh, &psg3.reg, sizeof(PSGREG)); + } + if (saveflg & FLAG_ADPCM) { + ret |= statflag_write(sfh, &adpcm, sizeof(adpcm)); + } + if (saveflg & FLAG_PCM86) { + ret |= statflag_write(sfh, &pcm86, sizeof(pcm86)); } + if (saveflg & FLAG_CS4231) { + ret |= statflag_write(sfh, &cs4231, sizeof(cs4231)); + } + (void)tbl; + return(ret); } -static int flagload_fm(NP2FFILE f, const STENTRY *t) { +static int flagload_fm(STFLAGH sfh, const SFENTRY *t) { int ret; UINT saveflg; OPNKEY opnkey; - UINT fmreg1a; - UINT fmreg1b; - UINT fmreg2a; - UINT fmreg2b; - - opngen_reset(); - psggen_reset(&psg1); - psggen_reset(&psg2); - psggen_reset(&psg3); - rhythm_reset(&rhythm); - adpcm_reset(&adpcm); - pcm86_reset(); - cs4231_reset(); - - ret = flagload_load(f, &usesound, sizeof(usesound)); - fmboard_reset((BYTE)usesound); - - fmreg1a = 0x000; - fmreg1b = 0x100; - fmreg2a = 0x200; - fmreg2b = 0x300; + + ret = statflag_read(sfh, &usesound, sizeof(usesound)); + fmboard_reset(&np2cfg, usesound); + switch(usesound) { case 0x01: saveflg = FLAG_MG; @@ -938,9 +911,6 @@ static int flagload_fm(NP2FFILE f, const case 0x06: saveflg = FLAG_FM1A | FLAG_FM1B | FLAG_FM2A | FLAG_PSG1 | FLAG_PSG2 | FLAG_RHYTHM | FLAG_PCM86; - fmreg1a = 0x200; // 逆転してるのん… - fmreg1b = 0x000; - fmreg2a = 0x100; break; case 0x08: @@ -972,15 +942,15 @@ static int flagload_fm(NP2FFILE f, const break; } - if ((saveflg & FLAG_MG) && (f->p.ver != 0)) { - ret |= flagload_load(f, &musicgen, sizeof(musicgen)); + if (saveflg & FLAG_MG) { + ret |= statflag_read(sfh, &musicgen, sizeof(musicgen)); board14_allkeymake(); } if (saveflg & FLAG_FM1A) { - ret |= flagload_load(f, &fmtimer, sizeof(fmtimer)); - ret |= flagload_load(f, &opn, sizeof(opn)); - ret |= flagload_load(f, &opnkey, sizeof(opnkey)); + ret |= statflag_read(sfh, &fmtimer, sizeof(fmtimer)); + ret |= statflag_read(sfh, &opn, sizeof(opn)); + ret |= statflag_read(sfh, &opnkey, sizeof(opnkey)); CopyMemory(opngen.keyreg, &opnkey.keyreg, sizeof(opngen.keyreg)); opnch[2].extop = opnkey.extop[0]; opnch[5].extop = opnkey.extop[1]; @@ -988,215 +958,203 @@ static int flagload_fm(NP2FFILE f, const opnch[11].extop = opnkey.extop[3]; } if (saveflg & FLAG_PSG1) { - ret |= flagload_load(f, &psg1.reg, sizeof(PSGREG)); + ret |= statflag_read(sfh, &psg1.reg, sizeof(PSGREG)); } if (saveflg & FLAG_PSG2) { - ret |= flagload_load(f, &psg2.reg, sizeof(PSGREG)); + ret |= statflag_read(sfh, &psg2.reg, sizeof(PSGREG)); } if (saveflg & FLAG_PSG3) { - ret |= flagload_load(f, &psg3.reg, sizeof(PSGREG)); + ret |= statflag_read(sfh, &psg3.reg, sizeof(PSGREG)); } if (saveflg & FLAG_ADPCM) { - ret |= flagload_load(f, &adpcm, sizeof(adpcm)); + ret |= statflag_read(sfh, &adpcm, sizeof(adpcm)); } if (saveflg & FLAG_PCM86) { - ret |= flagload_load(f, &pcm86, sizeof(pcm86)); + ret |= statflag_read(sfh, &pcm86, sizeof(pcm86)); } if (saveflg & FLAG_CS4231) { - ret |= flagload_load(f, &cs4231, sizeof(cs4231)); - cs4231.proc = cs4231dec[cs4231.reg.datafmt >> 4]; + ret |= statflag_read(sfh, &cs4231, sizeof(cs4231)); } - // 復元。 - rhythm_update(&rhythm); + // 復元。 これ移動すること! adpcm_update(&adpcm); pcm86gen_update(); if (saveflg & FLAG_PCM86) { - fmboard_extenable((BYTE)(pcm86.extfunc & 1)); + fmboard_extenable((REG8)(pcm86.extfunc & 1)); } if (saveflg & FLAG_CS4231) { - fmboard_extenable((BYTE)(cs4231.extfunc & 1)); - } - - if (saveflg & FLAG_FM1A) { - play_fmreg(0, fmreg1a); - } - if (saveflg & FLAG_FM1B) { - play_fmreg(1, fmreg1b); - } - if (saveflg & FLAG_FM2A) { - play_fmreg(2, fmreg2a); - } - if (saveflg & FLAG_FM2B) { - play_fmreg(3, fmreg2b); - } - if (saveflg & FLAG_PSG1) { - play_psgreg(&psg1); - } - if (saveflg & FLAG_PSG2) { - play_psgreg(&psg2); - } - if (saveflg & FLAG_PSG3) { - play_psgreg(&psg3); + fmboard_extenable((REG8)(cs4231.extfunc & 1)); } (void)t; return(ret); } +#endif -// ---- disk - -typedef struct { - char path[MAX_PATH]; - int readonly; - DOSDATE date; - DOSTIME time; -} STATDISK; +// ---- fdd -static const char str_fddx[] = "FDD%u"; -static const char str_sasix[] = "SASI%u"; -static const char str_scsix[] = "SCSI%u"; -static const char str_updated[] = "%s: updated" CRLITERAL; -static const char str_notfound[] = "%s: not found" CRLITERAL; +static const OEMCHAR str_fddx[] = OEMTEXT("FDD%u"); -static int disksave(NP2FFILE f, const char *path, int readonly) { +static int flagsave_fdd(STFLAGH sfh, const SFENTRY *tbl) { - STATDISK st; - FILEH fh; + int ret; + UINT8 i; +const OEMCHAR *path; + UINT ftype; + int ro; - ZeroMemory(&st, sizeof(st)); - if ((path) && (path[0])) { - file_cpyname(st.path, path, sizeof(st.path)); - st.readonly = readonly; - fh = file_open_rb(path); - if (fh != FILEH_INVALID) { - file_getdatetime(fh, &st.date, &st.time); - file_close(fh); - } + ret = STATFLAG_SUCCESS; + for (i=0; i<4; i++) { + path = fdd_getfileex(i, &ftype, &ro); + ret |= statflag_writepath(sfh, path, ftype, ro); } - return(flagsave_save(f, &st, sizeof(st))); + (void)tbl; + return(ret); } -static int flagsave_disk(NP2FFILE f, const STENTRY *t) { +static int flagcheck_fdd(STFLAGH sfh, const SFENTRY *tbl) { int ret; - BYTE i; + int i; + OEMCHAR buf[8]; - sxsi_flash(); - ret = flagsave_create(f, t); - if (ret != NP2FLAG_FAILURE) { - for (i=0; i<4; i++) { - ret |= disksave(f, fdd_diskname(i), fdd_diskprotect(i)); - } - for (i=0x00; i<0x02; i++) { - ret |= disksave(f, sxsi_getname(i), 0); - } - for (i=0x20; i<0x22; i++) { - ret |= disksave(f, sxsi_getname(i), 0); + ret = STATFLAG_SUCCESS; + for (i=0; i<4; i++) { + OEMSPRINTF(buf, str_fddx, i+1); + ret |= statflag_checkpath(sfh, buf); + } + (void)tbl; + return(ret); +} + +static int flagload_fdd(STFLAGH sfh, const SFENTRY *tbl) { + + int ret; + UINT8 i; + STATPATH sp; + + ret = STATFLAG_SUCCESS; + for (i=0; i<4; i++) { + ret |= statflag_read(sfh, &sp, sizeof(sp)); + if (sp.path[0]) { + fdd_set(i, sp.path, sp.ftype, sp.readonly); } - ret |= flagsave_close(f); } + (void)tbl; return(ret); } -static int diskcheck(NP2FFILE f, const char *name, ERR_BUF *e) { + +// ---- sxsi + +typedef struct { + UINT8 ide[4]; + UINT8 scsi[8]; +} SXSIDEVS; + +static const OEMCHAR str_sasix[] = OEMTEXT("SASI%u"); +static const OEMCHAR str_scsix[] = OEMTEXT("SCSI%u"); + +static int flagsave_sxsi(STFLAGH sfh, const SFENTRY *tbl) { int ret; - FILEH fh; - STATDISK st; - char buf[256]; - DOSDATE date; - DOSTIME time; + UINT i; + SXSIDEVS sds; +const OEMCHAR *path; - ret = flagload_load(f, &st, sizeof(st)); - if (st.path[0]) { - fh = file_open_rb(st.path); - if (fh != FILEH_INVALID) { - file_getdatetime(fh, &date, &time); - file_close(fh); - if ((memcmp(&st.date, &date, sizeof(date))) || - (memcmp(&st.time, &time, sizeof(time)))) { - ret |= NP2FLAG_DISKCHG; - SPRINTF(buf, str_updated, name); - err_append(e, buf); - } + sxsi_allflash(); + ret = STATFLAG_SUCCESS; + for (i=0; iarg1; + device = (UINT)(long)tbl->arg1; switch(device) { case 0: cm = cm_mpu98; @@ -1210,22 +1168,18 @@ static int flagsave_com(NP2FFILE f, cons cm = NULL; break; } - ret = NP2FLAG_SUCCESS; + ret = STATFLAG_SUCCESS; if (cm) { flag = (COMFLAG)cm->msg(cm, COMMSG_GETFLAG, 0); if (flag) { - ret = flagsave_create(f, t); - if (ret != NP2FLAG_FAILURE) { - ret |= flagsave_save(f, flag, flag->size); - ret |= flagsave_close(f); - } + ret |= statflag_write(sfh, flag, flag->size); _MFREE(flag); } } return(ret); } -static int flagload_com(NP2FFILE f, const STENTRY *t) { +static int flagload_com(STFLAGH sfh, const SFENTRY *tbl) { UINT device; COMMNG cm; @@ -1233,8 +1187,8 @@ static int flagload_com(NP2FFILE f, cons _COMFLAG fhdr; COMFLAG flag; - ret = flagload_load(f, &fhdr, sizeof(fhdr)); - if (ret != NP2FLAG_SUCCESS) { + ret = statflag_read(sfh, &fhdr, sizeof(fhdr)); + if (ret != STATFLAG_SUCCESS) { goto flcom_err1; } if (fhdr.size < sizeof(fhdr)) { @@ -1245,12 +1199,12 @@ static int flagload_com(NP2FFILE f, cons goto flcom_err1; } CopyMemory(flag, &fhdr, sizeof(fhdr)); - ret |= flagload_load(f, flag + 1, fhdr.size - sizeof(fhdr)); - if (ret != NP2FLAG_SUCCESS) { + ret |= statflag_read(sfh, flag + 1, fhdr.size - sizeof(fhdr)); + if (ret != STATFLAG_SUCCESS) { goto flcom_err2; } - device = (UINT)t->arg1; + device = (UINT)(long)tbl->arg1; switch(device) { case 0: commng_destroy(cm_mpu98); @@ -1282,302 +1236,322 @@ flcom_err1: // ---- -static int flagcheck_versize(NP2FFILE f, const STENTRY *t, ERR_BUF *e) { +static int flagcheck_versize(STFLAGH sfh, const SFENTRY *tbl) { - if ((f) && (t)) { - if ((f->p.ver == t->ver) && (f->p.size == t->arg2)) { - return(NP2FLAG_SUCCESS); - } - return(NP2FLAG_VERSION); + if ((sfh->hdr.ver == tbl->ver) && (sfh->hdr.size == tbl->arg2)) { + return(STATFLAG_SUCCESS); } - (void)e; - return(NP2FLAG_FAILURE); + return(STATFLAG_FAILURE); } -static int flagcheck_veronly(NP2FFILE f, const STENTRY *t, ERR_BUF *e) { +static int flagcheck_veronly(STFLAGH sfh, const SFENTRY *tbl) { - if ((f) && (t)) { - if (f->p.ver == t->ver) { - return(NP2FLAG_SUCCESS); - } - return(NP2FLAG_VERSION); + if (sfh->hdr.ver == tbl->ver) { + return(STATFLAG_SUCCESS); } - (void)e; - return(NP2FLAG_FAILURE); + return(STATFLAG_FAILURE); } // ---- -int statsave_save(const char *filename) { +int statsave_save(const OEMCHAR *filename) { - _NP2FFILE f; + SFFILEH sffh; int ret; -const STENTRY *tbl; -const STENTRY *tblterm; +const SFENTRY *tbl; +const SFENTRY *tblterm; - ret = flagcreate(&f, filename); - if (ret == NP2FLAG_FAILURE) { - return(ret); + sffh = statflag_create(filename); + if (sffh == NULL) { + return(STATFLAG_FAILURE); } + + ret = STATFLAG_SUCCESS; tbl = np2tbl; - tblterm = tbl + (sizeof(np2tbl)/sizeof(STENTRY)); + tblterm = tbl + NELEMENTS(np2tbl); while(tbl < tblterm) { + ret |= statflag_createsection(sffh, tbl); switch(tbl->type) { - case NP2FLAG_BIN: - case NP2FLAG_CLOCK: - ret |= flagsave_common(&f, tbl); - break; - - case NP2FLAG_TERM: - ret |= flagsave_term(&f, tbl); + case STATFLAG_BIN: + case STATFLAG_TERM: + ret |= flagsave_common(&sffh->sfh, tbl); break; #if defined(CGWND_FONTPTR) - case NP2FLAG_CGW: - ret |= flagsave_cgwnd(&f, tbl); + case STATFLAG_CGW: + ret |= flagsave_cgwnd(&sffh->sfh, tbl); break; #endif - case NP2FLAG_COM: - ret |= flagsave_com(&f, tbl); + case STATFLAG_COM: + ret |= flagsave_com(&sffh->sfh, tbl); break; - case NP2FLAG_DISK: - ret |= flagsave_disk(&f, tbl); + case STATFLAG_DMA: + ret |= flagsave_dma(&sffh->sfh, tbl); break; - case NP2FLAG_DMA: - ret |= flagsave_dma(&f, tbl); + case STATFLAG_EGC: + ret |= flagsave_egc(&sffh->sfh, tbl); break; - case NP2FLAG_EGC: - ret |= flagsave_egc(&f, tbl); + case STATFLAG_EPSON: + ret |= flagsave_epson(&sffh->sfh, tbl); break; - case NP2FLAG_EPSON: - ret |= flagsave_epson(&f, tbl); + case STATFLAG_EVT: + ret |= flagsave_evt(&sffh->sfh, tbl); break; - case NP2FLAG_EVT: - ret |= flagsave_evt(&f, tbl); + case STATFLAG_EXT: + ret |= flagsave_ext(&sffh->sfh, tbl); break; - case NP2FLAG_EXT: - ret |= flagsave_ext(&f, tbl); + case STATFLAG_FDD: + ret |= flagsave_fdd(&sffh->sfh, tbl); + break; + +#if !defined(DISABLE_SOUND) + case STATFLAG_FM: + ret |= flagsave_fm(&sffh->sfh, tbl); + break; +#endif + + case STATFLAG_GIJ: + ret |= flagsave_gij(&sffh->sfh, tbl); break; - case NP2FLAG_FM: - ret |= flagsave_fm(&f, tbl); +#if defined(SUPPORT_HOSTDRV) + case STATFLAG_HDRV: + ret |= hostdrv_sfsave(&sffh->sfh, tbl); break; +#endif - case NP2FLAG_GIJ: - ret |= flagsave_gij(&f, tbl); + case STATFLAG_MEM: + ret |= flagsave_mem(&sffh->sfh, tbl); break; - case NP2FLAG_MEM: - ret |= flagsave_mem(&f, tbl); + case STATFLAG_SXSI: + ret |= flagsave_sxsi(&sffh->sfh, tbl); break; } tbl++; } - flagclose(&f); + statflag_close(sffh); return(ret); } -int statsave_check(const char *filename, char *buf, int size) { +int statsave_check(const OEMCHAR *filename, OEMCHAR *buf, int size) { - ERR_BUF e; - _NP2FFILE f; + SFFILEH sffh; int ret; BOOL done; -const STENTRY *tbl; -const STENTRY *tblterm; +const SFENTRY *tbl; +const SFENTRY *tblterm; - e.buf = buf; - e.remain = size; - if (e.remain) { - e.remain--; - if (buf) { - *buf = '\0'; - } - } - else { - e.buf = NULL; + sffh = statflag_open(filename, buf, size); + if (sffh == NULL) { + return(STATFLAG_FAILURE); } - ret = flagopen(&f, filename, &e); - if (ret != NP2FLAG_FAILURE) { - done = FALSE; - while((!done) && (ret != NP2FLAG_FAILURE)) { - char index[11]; - ret |= flagload_create(&f); - CopyMemory(index, f.p.index, sizeof(f.p.index)); - index[10] = 0; - tbl = np2tbl; - tblterm = tbl + (sizeof(np2tbl)/sizeof(STENTRY)); - while(tbl < tblterm) { - if (!strcmp(index, tbl->index)) { - break; - } - tbl++; + done = FALSE; + ret = STATFLAG_SUCCESS; + while((!done) && (ret != STATFLAG_FAILURE)) { + ret |= statflag_readsection(sffh); + tbl = np2tbl; + tblterm = tbl + NELEMENTS(np2tbl); + while(tbl < tblterm) { + if (!memcmp(sffh->sfh.hdr.index, tbl->index, 10)) { + break; } - if (tbl < tblterm) { - switch(tbl->type) { - case NP2FLAG_BIN: + tbl++; + } + if (tbl < tblterm) { + switch(tbl->type) { + case STATFLAG_BIN: #if defined(CGWND_FONTPTR) - case NP2FLAG_CGW: + case STATFLAG_CGW: #endif - case NP2FLAG_CLOCK: - case NP2FLAG_MEM: - ret |= flagcheck_versize(&f, tbl, &e); - break; - - case NP2FLAG_TERM: - done = TRUE; - break; - - case NP2FLAG_COM: - case NP2FLAG_DMA: - case NP2FLAG_EGC: - case NP2FLAG_EPSON: - case NP2FLAG_EVT: - case NP2FLAG_EXT: - case NP2FLAG_GIJ: - case NP2FLAG_FM: - ret |= flagcheck_veronly(&f, tbl, &e); - break; - - case NP2FLAG_DISK: - ret |= flagcheck_disk(&f, tbl, &e); - break; - - default: - ret |= NP2FLAG_WARNING; - break; - } - } - else { - ret |= NP2FLAG_WARNING; + case STATFLAG_MEM: + ret |= flagcheck_versize(&sffh->sfh, tbl); + break; + + case STATFLAG_TERM: + done = TRUE; + break; + + case STATFLAG_COM: + case STATFLAG_DMA: + case STATFLAG_EGC: + case STATFLAG_EPSON: + case STATFLAG_EVT: + case STATFLAG_EXT: + case STATFLAG_GIJ: +#if !defined(DISABLE_SOUND) + case STATFLAG_FM: +#endif +#if defined(SUPPORT_HOSTDRV) + case STATFLAG_HDRV: +#endif + ret |= flagcheck_veronly(&sffh->sfh, tbl); + break; + + case STATFLAG_FDD: + ret |= flagcheck_fdd(&sffh->sfh, tbl); + break; + + case STATFLAG_SXSI: + ret |= flagcheck_sxsi(&sffh->sfh, tbl); + break; + + default: + ret |= STATFLAG_WARNING; + break; } - ret |= flagload_close(&f); } - flagclose(&f); - } - if (e.buf) { - *e.buf = '\0'; + else { + ret |= STATFLAG_WARNING; + } } + statflag_close(sffh); return(ret); } -int statsave_load(const char *filename) { +int statsave_load(const OEMCHAR *filename) { - _NP2FFILE f; + SFFILEH sffh; int ret; BOOL done; -const STENTRY *tbl; -const STENTRY *tblterm; +const SFENTRY *tbl; +const SFENTRY *tblterm; - ret = flagopen(&f, filename, NULL); - if (ret == NP2FLAG_FAILURE) { - return(ret); + sffh = statflag_open(filename, NULL, 0); + if (sffh == NULL) { + return(STATFLAG_FAILURE); + } + + // PCCORE read! + ret = statflag_readsection(sffh); + if ((ret != STATFLAG_SUCCESS) || + (memcmp(sffh->sfh.hdr.index, np2tbl[0].index, 10))) { + statflag_close(sffh); + return(STATFLAG_FAILURE); } soundmng_stop(); rs232c_midipanic(); mpu98ii_midipanic(); pc9861k_midipanic(); + sxsi_alltrash(); + + ret |= flagload_common(&sffh->sfh, np2tbl); + + CPU_RESET(); + CPU_SETEXTSIZE((UINT32)pccore.extmem); + nevent_allreset(); + + sound_changeclock(); + beep_changeclock(); sound_reset(); - fmboard_reset(0); + fddmtrsnd_bind(); + + iocore_reset(&np2cfg); // サウンドでpicを呼ぶので… + cbuscore_reset(&np2cfg); + fmboard_reset(&np2cfg, pccore.sound); done = FALSE; - while((!done) && (ret != NP2FLAG_FAILURE)) { - char index[11]; - ret |= flagload_create(&f); - CopyMemory(index, f.p.index, sizeof(f.p.index)); - index[10] = 0; - tbl = np2tbl; - tblterm = tbl + (sizeof(np2tbl)/sizeof(STENTRY)); + while((!done) && (ret != STATFLAG_FAILURE)) { + ret |= statflag_readsection(sffh); + tbl = np2tbl + 1; + tblterm = np2tbl + NELEMENTS(np2tbl); while(tbl < tblterm) { - if (!strcmp(index, tbl->index)) { + if (!memcmp(sffh->sfh.hdr.index, tbl->index, 10)) { break; } tbl++; } if (tbl < tblterm) { switch(tbl->type) { - case NP2FLAG_BIN: - ret |= flagload_common(&f, tbl); + case STATFLAG_BIN: + ret |= flagload_common(&sffh->sfh, tbl); break; - case NP2FLAG_TERM: + case STATFLAG_TERM: done = TRUE; break; #if defined(CGWND_FONTPTR) - case NP2FLAG_CGW: - ret |= flagload_cgwnd(&f, tbl); + case STATFLAG_CGW: + ret |= flagload_cgwnd(&sffh->sfh, tbl); break; #endif - case NP2FLAG_CLOCK: - ret |= flagload_clock(&f, tbl); + case STATFLAG_COM: + ret |= flagload_com(&sffh->sfh, tbl); break; - case NP2FLAG_COM: - ret |= flagload_com(&f, tbl); + case STATFLAG_DMA: + ret |= flagload_dma(&sffh->sfh, tbl); break; - case NP2FLAG_DISK: - ret |= flagload_disk(&f, tbl); + case STATFLAG_EGC: + ret |= flagload_egc(&sffh->sfh, tbl); break; - case NP2FLAG_DMA: - ret |= flagload_dma(&f, tbl); + case STATFLAG_EPSON: + ret |= flagload_epson(&sffh->sfh, tbl); break; - case NP2FLAG_EGC: - ret |= flagload_egc(&f, tbl); + case STATFLAG_EVT: + ret |= flagload_evt(&sffh->sfh, tbl); break; - case NP2FLAG_EPSON: - ret |= flagload_epson(&f, tbl); + case STATFLAG_EXT: + ret |= flagload_ext(&sffh->sfh, tbl); break; - case NP2FLAG_EVT: - ret |= flagload_evt(&f, tbl); + case STATFLAG_FDD: + ret |= flagload_fdd(&sffh->sfh, tbl); break; - case NP2FLAG_EXT: - ret |= flagload_ext(&f, tbl); +#if !defined(DISABLE_SOUND) + case STATFLAG_FM: + ret |= flagload_fm(&sffh->sfh, tbl); break; +#endif - case NP2FLAG_FM: - ret |= flagload_fm(&f, tbl); + case STATFLAG_GIJ: + ret |= flagload_gij(&sffh->sfh, tbl); break; - case NP2FLAG_GIJ: - ret |= flagload_gij(&f, tbl); +#if defined(SUPPORT_HOSTDRV) + case STATFLAG_HDRV: + ret |= hostdrv_sfload(&sffh->sfh, tbl); + break; +#endif + + case STATFLAG_MEM: + ret |= flagload_mem(&sffh->sfh, tbl); break; - case NP2FLAG_MEM: - ret |= flagload_mem(&f, tbl); + case STATFLAG_SXSI: + ret |= flagload_sxsi(&sffh->sfh, tbl); break; default: - ret |= NP2FLAG_WARNING; + ret |= STATFLAG_WARNING; break; } } else { - ret |= NP2FLAG_WARNING; + ret |= STATFLAG_WARNING; } - ret |= flagload_close(&f); } - flagclose(&f); + statflag_close(sffh); // I/O作り直し - i286_memorymap((pc.model & PCMODEL_EPSON)?1:0); + MEMM_ARCH((pccore.model & PCMODEL_EPSON)?1:0); iocore_build(); iocore_bind(); cbuscore_bind(); @@ -1594,7 +1568,8 @@ const STENTRY *tblterm; FONTPTR_LOW = fontrom + cgwindow.low; FONTPTR_HIGH = fontrom + cgwindow.high; #endif - i286_vram_dispatch(vramop.operate); + MEMM_VRAM(vramop.operate); + fddmtr_reset(); soundmng_play(); return(ret);