| version 1.26, 2004/01/08 16:29:56 | version 1.31, 2004/01/23 15:58:15 | 
| Line 1 | Line 1 | 
 | #include        "compiler.h" | #include        "compiler.h" | 
 |  | #include        "strres.h" | 
 | #include        "dosio.h" | #include        "dosio.h" | 
 | #include        "commng.h" | #include        "commng.h" | 
 | #include        "scrnmng.h" | #include        "scrnmng.h" | 
| Line 8 | Line 9 | 
 | #include        "pccore.h" | #include        "pccore.h" | 
 | #include        "iocore.h" | #include        "iocore.h" | 
 | #include        "cbuscore.h" | #include        "cbuscore.h" | 
 |  | #include        "sasiio.h" | 
 |  | #include        "scsiio.h" | 
 | #include        "pc9861k.h" | #include        "pc9861k.h" | 
 | #include        "mpu98ii.h" | #include        "mpu98ii.h" | 
 | #include        "board14.h" | #include        "board14.h" | 
| Line 23 | Line 26 | 
 | #include        "fddfile.h" | #include        "fddfile.h" | 
 | #include        "fdd_mtr.h" | #include        "fdd_mtr.h" | 
 | #include        "sxsi.h" | #include        "sxsi.h" | 
 | #include        "calendar.h" |  | 
 | #include        "statsave.h" |  | 
 | #include        "keydisp.h" | #include        "keydisp.h" | 
|  | #include        "hostdrv.h" | 
|  | #include        "calendar.h" | 
 |  |  | 
 | #if defined(MACOS) | #if defined(MACOS) | 
 | #define CRLITERAL       "\r" |  | 
 | #define CRCONST         str_cr | #define CRCONST         str_cr | 
 | #elif defined(WIN32) || defined(X11) || defined(SLZAURUS) | #elif defined(WIN32) || defined(X11) || defined(SLZAURUS) | 
 | #define CRLITERAL       "\n" |  | 
 | #define CRCONST         str_lf | #define CRCONST         str_lf | 
 | #else | #else | 
 | #define CRLITERAL       "\r\n" |  | 
 | #define CRCONST         str_crlf | #define CRCONST         str_crlf | 
 | #endif | #endif | 
 |  |  | 
| Line 53  typedef struct { | Line 52  typedef struct { | 
 | } NP2FENT; | } NP2FENT; | 
 |  |  | 
 | enum { | enum { | 
| NP2FLAG_BIN                     = 0, | STATFLAG_BIN                    = 0, | 
| NP2FLAG_TERM, | STATFLAG_TERM, | 
 | #if defined(CGWND_FONTPTR) | #if defined(CGWND_FONTPTR) | 
| NP2FLAG_CGW, | STATFLAG_CGW, | 
|  | #endif | 
|  | STATFLAG_CLOCK, | 
|  | STATFLAG_COM, | 
|  | STATFLAG_DISK, | 
|  | STATFLAG_DMA, | 
|  | STATFLAG_EGC, | 
|  | STATFLAG_EPSON, | 
|  | STATFLAG_EVT, | 
|  | STATFLAG_EXT, | 
|  | STATFLAG_FM, | 
|  | STATFLAG_GIJ, | 
|  | #if defined(SUPPORT_HOSTDRV) | 
|  | STATFLAG_HDRV, | 
 | #endif | #endif | 
| NP2FLAG_CLOCK, | STATFLAG_MEM | 
| NP2FLAG_COM, |  | 
| NP2FLAG_DISK, |  | 
| NP2FLAG_DMA, |  | 
| NP2FLAG_EGC, |  | 
| NP2FLAG_EPSON, |  | 
| NP2FLAG_EVT, |  | 
| NP2FLAG_EXT, |  | 
| NP2FLAG_FM, |  | 
| NP2FLAG_GIJ, |  | 
| NP2FLAG_MEM |  | 
 | }; | }; | 
 |  |  | 
 | typedef struct { | typedef struct { | 
 | const char      *index; |  | 
 | UINT16  ver; |  | 
 | UINT16  type; |  | 
 | void    *arg1; |  | 
 | UINT    arg2; |  | 
 | } STENTRY; |  | 
 |  |  | 
 | typedef struct { |  | 
 | UINT32  id; | UINT32  id; | 
 | void    *proc; | void    *proc; | 
 | } PROCTBL; | } PROCTBL; | 
| Line 104  typedef struct { | Line 98  typedef struct { | 
 | int             remain; | int             remain; | 
 | } ERR_BUF; | } 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; |  | 
 | } |  | 
 | } |  | 
 | } |  | 
 | } |  | 
 |  |  | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
| Line 155  static BOOL num2proc(void *func, const P | Line 133  static BOOL num2proc(void *func, const P | 
 |  |  | 
 | // ---- | // ---- | 
 |  |  | 
 |  | enum { | 
 |  | SFFILEH_WRITE   = 0x0001, | 
 |  | SFFILEH_BLOCK   = 0x0002, | 
 |  | SFFILEH_ERROR   = 0x0004 | 
 |  | }; | 
 |  |  | 
 | typedef struct { | typedef struct { | 
 |  | _STFLAGH        sfh; | 
 |  | UINT            stat; | 
 |  | FILEH           fh; | 
 |  | UINT            secpos; | 
 |  |  | 
 |  | //      long            pos; | 
 |  | //      long            bak; | 
 |  | //      long            next; | 
 |  | NP2FHDR         f; | 
 |  | //      NP2FENT         p; | 
 |  | } _NP2FFILE, *NP2FFILE, _SFFILEH, *SFFILEH; | 
 |  |  | 
 |  | static SFFILEH statflag_open(const char *filename, char *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_closesection(SFFILEH sffh) { | 
 |  |  | 
 |  | UINT    leng; | 
 |  | BYTE    zero[16]; | 
 |  |  | 
 |  | 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 ((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(STATFLAG_SUCCESS); | 
 |  |  | 
 |  | sfcs_err2: | 
 |  | sffh->stat = SFFILEH_ERROR; | 
 |  |  | 
 |  | sfcs_err1: | 
 |  | return(STATFLAG_FAILURE); | 
 |  | } | 
 |  |  | 
 |  | static int statflag_readsection(SFFILEH sffh) { | 
 |  |  | 
 |  | 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); | 
 |  | } | 
 |  | sffh->stat = SFFILEH_ERROR; | 
 |  | return(STATFLAG_FAILURE); | 
 |  | } | 
 |  |  | 
 |  | int statflag_read(STFLAGH sfh, void *buf, UINT size) { | 
 |  |  | 
 |  | 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; | 
 |  | } | 
 |  | sfh->pos += size; | 
 |  | } | 
 |  | return(STATFLAG_SUCCESS); | 
 |  |  | 
 |  | sfr_err: | 
 |  | return(STATFLAG_FAILURE); | 
 |  | } | 
 |  |  | 
 |  | static SFFILEH statflag_create(const char *filename) { | 
 |  |  | 
 |  | SFFILEH ret; | 
 | FILEH   fh; | FILEH   fh; | 
 | long    pos; |  | 
 | long    bak; |  | 
 | long    next; |  | 
 | NP2FHDR f; |  | 
 | NP2FENT p; |  | 
 | } _NP2FFILE, *NP2FFILE; |  | 
 |  |  | 
 |  | 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); | 
 |  | } | 
 |  | file_close(fh); | 
 |  | file_delete(filename); | 
 |  |  | 
 |  | sfc_err2: | 
 |  | _MFREE(ret); | 
 |  |  | 
 |  | sfc_err1: | 
 |  | return(NULL); | 
 |  | } | 
 |  |  | 
 |  | static int statflag_createsection(SFFILEH sffh, const SFENTRY *tbl) { | 
 |  |  | 
 |  | int             ret; | 
 |  |  | 
 |  | ret = statflag_closesection(sffh); | 
 |  | if (ret != STATFLAG_SUCCESS) { | 
 |  | return(ret); | 
 |  | } | 
 |  | 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); | 
 |  | } | 
 |  |  | 
 |  | int statflag_write(STFLAGH sfh, const void *buf, UINT size) { | 
 |  |  | 
 |  | SFFILEH sffh; | 
 |  |  | 
 |  | 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 (size) { | 
 |  | if ((buf == NULL) || (file_write(sffh->fh, buf, size) != size)) { | 
 |  | goto sfw_err2; | 
 |  | } | 
 |  | sfh->pos += size; | 
 |  | if (sfh->hdr.size < sfh->pos) { | 
 |  | sfh->hdr.size = sfh->pos; | 
 |  | } | 
 |  | } | 
 |  | return(STATFLAG_SUCCESS); | 
 |  |  | 
 |  | sfw_err2: | 
 |  | sffh->stat = SFFILEH_ERROR; | 
 |  |  | 
 |  | sfw_err1: | 
 |  | return(STATFLAG_FAILURE); | 
 |  | } | 
 |  |  | 
 |  | static void statflag_close(SFFILEH sffh) { | 
 |  |  | 
 |  | if (sffh) { | 
 |  | statflag_closesection(sffh); | 
 |  | file_close(sffh->fh); | 
 |  | _MFREE(sffh); | 
 |  | } | 
 |  | } | 
 |  |  | 
 |  | void statflag_seterr(STFLAGH sfh, const char *str) { | 
 |  |  | 
 |  | if ((sfh) && (sfh->errlen)) { | 
 |  | milstr_ncat(sfh->err, str, sfh->errlen); | 
 |  | milstr_ncat(sfh->err, CRCONST, sfh->errlen); | 
 |  | } | 
 |  | } | 
 |  |  | 
 |  |  | 
 |  |  | 
 |  |  | 
 |  | #if 0 | 
 | static int flagopen(NP2FFILE f, const char *filename, ERR_BUF *e) { | static int flagopen(NP2FFILE f, const char *filename, ERR_BUF *e) { | 
 |  |  | 
 | if (f) { | if (f) { | 
 | f->fh = file_open(filename); | f->fh = file_open(filename); | 
 | if (f->fh == FILEH_INVALID) { | if (f->fh == FILEH_INVALID) { | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 | if (file_read(f->fh, &f->f, sizeof(NP2FHDR)) | if (file_read(f->fh, &f->f, sizeof(NP2FHDR)) | 
 | != sizeof(NP2FHDR)) { | != sizeof(NP2FHDR)) { | 
 | file_close(f->fh); | file_close(f->fh); | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 | f->pos = sizeof(NP2FHDR); | f->pos = sizeof(NP2FHDR); | 
 | if (strcmp(f->f.name, np2flagdef.name)) { | if (strcmp(f->f.name, np2flagdef.name)) { | 
 | file_close(f->fh); | file_close(f->fh); | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 | if (strcmp(f->f.vername, np2flagdef.vername)) { | if (strcmp(f->f.vername, np2flagdef.vername)) { | 
 | #if 1 | #if 1 | 
 | file_close(f->fh); | file_close(f->fh); | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | #else | #else | 
| return(NP2FLAG_VERSION);                        // 他形式を読むのであれば… | return(STATFLAG_VERSION);                       // 他形式を読むのであれば… | 
 | #endif | #endif | 
 | } | } | 
 | if (f->f.ver != np2flagdef.ver) { | if (f->f.ver != np2flagdef.ver) { | 
 | #if 1 | #if 1 | 
 | file_close(f->fh); | file_close(f->fh); | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | #else | #else | 
| return(NP2FLAG_VERSION);                        // 他verを読むのであれば… | return(STATFLAG_VERSION);                       // 他verを読むのであれば… | 
 | #endif | #endif | 
 | } | } | 
| return(NP2FLAG_SUCCESS); | return(STATFLAG_SUCCESS); | 
 | } | } | 
 | (void)e; | (void)e; | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 |  |  | 
 | static int flagcreate(NP2FFILE f, const char *filename) { | static int flagcreate(NP2FFILE f, const char *filename) { | 
| Line 208  static int flagcreate(NP2FFILE f, const | Line 414  static int flagcreate(NP2FFILE f, const | 
 | if (f) { | if (f) { | 
 | f->fh = file_create(filename); | f->fh = file_create(filename); | 
 | if (f->fh == FILEH_INVALID) { | if (f->fh == FILEH_INVALID) { | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 | if (file_write(f->fh, &np2flagdef, sizeof(NP2FHDR)) | if (file_write(f->fh, &np2flagdef, sizeof(NP2FHDR)) | 
 | != sizeof(NP2FHDR)) { | != sizeof(NP2FHDR)) { | 
 | file_close(f->fh); | file_close(f->fh); | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 | f->pos = sizeof(NP2FHDR); | f->pos = sizeof(NP2FHDR); | 
| return(NP2FLAG_SUCCESS); | return(STATFLAG_SUCCESS); | 
 | } | } | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 |  |  | 
 | static int flagload_create(NP2FFILE f) { | static int flagload_create(NP2FFILE f) { | 
| Line 229  static int flagload_create(NP2FFILE f) { | Line 435  static int flagload_create(NP2FFILE f) { | 
 | f->pos += 15; | f->pos += 15; | 
 | f->pos &= ~0xf; | f->pos &= ~0xf; | 
 | if (file_seek(f->fh, f->pos, 0) != f->pos) { | if (file_seek(f->fh, f->pos, 0) != f->pos) { | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 | } | } | 
 | if (file_read(f->fh, &f->p, sizeof(NP2FENT)) != sizeof(NP2FENT)) { | if (file_read(f->fh, &f->p, sizeof(NP2FENT)) != sizeof(NP2FENT)) { | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 | f->pos += sizeof(NP2FENT); | f->pos += sizeof(NP2FENT); | 
 | f->next = f->pos + f->p.size; | f->next = f->pos + f->p.size; | 
| return(NP2FLAG_SUCCESS); | return(STATFLAG_SUCCESS); | 
 | } | } | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 |  |  | 
 | static int flagload_load(NP2FFILE f, void *buf, UINT size) { | static int flagload_load(NP2FFILE f, void *buf, UINT size) { | 
 |  |  | 
 | if (f && buf && size && (file_read(f->fh, buf, size) == size)) { | if (f && buf && size && (file_read(f->fh, buf, size) == size)) { | 
 | f->pos += size; | f->pos += size; | 
| return(NP2FLAG_SUCCESS); | return(STATFLAG_SUCCESS); | 
 | } | } | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 |  |  | 
 | static int flagload_close(NP2FFILE f) { | static int flagload_close(NP2FFILE f) { | 
 |  |  | 
 | if (file_seek(f->fh, f->next, 0) != f->next) { | if (file_seek(f->fh, f->next, 0) != f->next) { | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 | f->pos = f->next; | f->pos = f->next; | 
| return(NP2FLAG_SUCCESS); | return(STATFLAG_SUCCESS); | 
 | } | } | 
 |  |  | 
| static int flagsave_create(NP2FFILE f, const STENTRY *t) { | static int flagsave_create(NP2FFILE f, const SFENTRY *t) { | 
 |  |  | 
 | if (f && t) { | if (f && t) { | 
 | int             len; | int             len; | 
| Line 269  static int flagsave_create(NP2FFILE f, c | Line 475  static int flagsave_create(NP2FFILE f, c | 
 | UINT rem; | UINT rem; | 
 | rem = 16 - (f->pos & 15); | rem = 16 - (f->pos & 15); | 
 | if (file_write(f->fh, &f->p, rem) != rem) { | if (file_write(f->fh, &f->p, rem) != rem) { | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 | f->pos += rem; | f->pos += rem; | 
 | } | } | 
| Line 284  static int flagsave_create(NP2FFILE f, c | Line 490  static int flagsave_create(NP2FFILE f, c | 
 | } | } | 
 | f->p.ver = t->ver; | f->p.ver = t->ver; | 
 | if (file_write(f->fh, &f->p, sizeof(NP2FENT)) != sizeof(NP2FENT)) { | if (file_write(f->fh, &f->p, sizeof(NP2FENT)) != sizeof(NP2FENT)) { | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 | f->pos += sizeof(NP2FENT); | f->pos += sizeof(NP2FENT); | 
| return(NP2FLAG_SUCCESS); | return(STATFLAG_SUCCESS); | 
 | } | } | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 |  |  | 
 | static int flagsave_save(NP2FFILE f, void *buf, UINT size) { | static int flagsave_save(NP2FFILE f, void *buf, UINT size) { | 
| Line 297  static int flagsave_save(NP2FFILE f, voi | Line 503  static int flagsave_save(NP2FFILE f, voi | 
 | if (f && buf && size && (file_write(f->fh, buf, size) == size)) { | if (f && buf && size && (file_write(f->fh, buf, size) == size)) { | 
 | f->pos += size; | f->pos += size; | 
 | f->p.size += size; | f->p.size += size; | 
| return(NP2FLAG_SUCCESS); | return(STATFLAG_SUCCESS); | 
 | } | } | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 |  |  | 
 | static int flagsave_close(NP2FFILE f) { | static int flagsave_close(NP2FFILE f) { | 
| Line 314  static int flagsave_close(NP2FFILE f) { | Line 520  static int flagsave_close(NP2FFILE f) { | 
 | goto fs_closeerr; | goto fs_closeerr; | 
 | } | } | 
 | if (file_seek(f->fh, f->pos, 0) == f->pos) { | if (file_seek(f->fh, f->pos, 0) == f->pos) { | 
| return(NP2FLAG_SUCCESS); | return(STATFLAG_SUCCESS); | 
 | } | } | 
 |  |  | 
 | fs_closeerr: | fs_closeerr: | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 |  |  | 
 | static void flagclose(NP2FFILE f) { | static void flagclose(NP2FFILE f) { | 
| Line 327  static void flagclose(NP2FFILE f) { | Line 533  static void flagclose(NP2FFILE f) { | 
 | file_close(f->fh); | file_close(f->fh); | 
 | } | } | 
 | } | } | 
|  | #endif | 
|  |  | 
| // ---- |  | 
|  |  | 
| static int flagsave_term(NP2FFILE f, const STENTRY *t) { |  | 
|  |  | 
| int             ret; |  | 
|  |  | 
| ret = flagsave_create(f, t); |  | 
| ret |= flagsave_close(f); |  | 
| return(ret); |  | 
| } |  | 
 |  |  | 
 |  |  | 
 | // ---- common | // ---- common | 
 |  |  | 
| static int flagsave_common(NP2FFILE f, const STENTRY *t) { | static int flagsave_common(STFLAGH sfh, const SFENTRY *tbl) { | 
|  |  | 
| int             ret; |  | 
 |  |  | 
| ret = flagsave_create(f, t); | return(statflag_write(sfh, tbl->arg1, tbl->arg2)); | 
| if (ret != NP2FLAG_FAILURE) { |  | 
| ret |= flagsave_save(f, t->arg1, t->arg2); |  | 
| ret |= flagsave_close(f); |  | 
| } |  | 
| return(ret); |  | 
 | } | } | 
 |  |  | 
| static int flagload_common(NP2FFILE f, const STENTRY *t) { | static int flagload_common(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
| return(flagload_load(f, t->arg1, t->arg2)); | return(statflag_read(sfh, tbl->arg1, tbl->arg2)); | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ----- clock | // ----- clock | 
 |  |  | 
| static int flagload_clock(NP2FFILE f, const STENTRY *t) { | static int flagload_clock(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 |  |  | 
| ret = flagload_common(f, t); | ret = statflag_read(sfh, tbl->arg1, tbl->arg2); | 
 | sound_changeclock(); | sound_changeclock(); | 
 | beep_changeclock(); | beep_changeclock(); | 
 | return(ret); | return(ret); | 
| Line 376  static int flagload_clock(NP2FFILE f, co | Line 564  static int flagload_clock(NP2FFILE f, co | 
 |  |  | 
 | // ---- memory | // ---- memory | 
 |  |  | 
| static int flagsave_mem(NP2FFILE f, const STENTRY *t) { | static int flagsave_mem(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 |  |  | 
| ret = flagsave_create(f, t); | ret = statflag_write(sfh, mem, 0x110000); | 
| if (ret != NP2FLAG_FAILURE) { | ret |= statflag_write(sfh, mem + VRAM1_B, 0x18000); | 
| ret |= flagsave_save(f, mem, 0x110000); | ret |= statflag_write(sfh, mem + VRAM1_E, 0x8000); | 
| ret |= flagsave_save(f, mem + VRAM1_B, 0x18000); | (void)tbl; | 
| ret |= flagsave_save(f, mem + VRAM1_E, 0x8000); |  | 
| ret |= flagsave_close(f); |  | 
| } |  | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| static int flagload_mem(NP2FFILE f, const STENTRY *t) { | static int flagload_mem(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 |  |  | 
| ret = flagload_load(f, mem, 0x110000); | ret = statflag_read(sfh, mem, 0x110000); | 
| ret |= flagload_load(f, mem + VRAM1_B, 0x18000); | ret |= statflag_read(sfh, mem + VRAM1_B, 0x18000); | 
| ret |= flagload_load(f, mem + VRAM1_E, 0x8000); | ret |= statflag_read(sfh, mem + VRAM1_E, 0x8000); | 
| (void)t; | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ---- ext memory | // ---- ext memory | 
 |  |  | 
| static int flagsave_ext(NP2FFILE f, const STENTRY *t) { | static int flagsave_ext(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 |  |  | 
| ret = flagsave_create(f, t); | ret = statflag_write(sfh, &extmem, sizeof(extmem)); | 
| if (ret != NP2FLAG_FAILURE) { | if (CPU_EXTMEM) { | 
| ret |= flagsave_save(f, &extmem, sizeof(extmem)); | ret = statflag_write(sfh, CPU_EXTMEM, CPU_EXTMEMSIZE); | 
| if (CPU_EXTMEM) { |  | 
| ret |= flagsave_save(f, CPU_EXTMEM, CPU_EXTMEMSIZE); |  | 
| } |  | 
| ret |= flagsave_close(f); |  | 
 | } | } | 
 |  | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| static int flagload_ext(NP2FFILE f, const STENTRY *t) { | static int flagload_ext(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 | int             i; | int             i; | 
 | UINT    pagemax = 0; | UINT    pagemax = 0; | 
 |  |  | 
| ret = flagload_load(f, &extmem, sizeof(extmem)); | ret = statflag_read(sfh, &extmem, sizeof(extmem)); | 
 | if (extmem.maxmem) { | if (extmem.maxmem) { | 
 | if (extmem.maxmem > (13+1)) { | if (extmem.maxmem > (13+1)) { | 
 | extmem.maxmem = (13+1); | extmem.maxmem = (13+1); | 
| Line 433  static int flagload_ext(NP2FFILE f, cons | Line 615  static int flagload_ext(NP2FFILE f, cons | 
 | if (!extmemmng_realloc(extmem.maxmem - 1)) { | if (!extmemmng_realloc(extmem.maxmem - 1)) { | 
 | pagemax = (extmem.maxmem - 1) << 8; | pagemax = (extmem.maxmem - 1) << 8; | 
 | if (CPU_EXTMEM) { | if (CPU_EXTMEM) { | 
| ret |= flagload_load(f, CPU_EXTMEM, CPU_EXTMEMSIZE); | ret |= statflag_read(sfh, CPU_EXTMEM, CPU_EXTMEMSIZE); | 
 | } | } | 
 | } | } | 
 | else { | else { | 
| Line 448  static int flagload_ext(NP2FFILE f, cons | Line 630  static int flagload_ext(NP2FFILE f, cons | 
 | extmem.pageptr[i] = mem + 0xc0000 + (i << 14); | extmem.pageptr[i] = mem + 0xc0000 + (i << 14); | 
 | } | } | 
 | } | } | 
| (void)t; | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| Line 456  static int flagload_ext(NP2FFILE f, cons | Line 638  static int flagload_ext(NP2FFILE f, cons | 
 | // ---- cg window | // ---- cg window | 
 |  |  | 
 | #if defined(CGWND_FONTPTR) | #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; | _CGWINDOW       cgwnd; | 
 |  |  | 
 | cgwnd = cgwindow; | cgwnd = cgwindow; | 
 | cgwnd.fontlow -= (long)fontrom; | cgwnd.fontlow -= (long)fontrom; | 
 | cgwnd.fonthigh -= (long)fontrom; | cgwnd.fonthigh -= (long)fontrom; | 
| ret = flagsave_create(f, t); | (void)tbl; | 
| if (ret != NP2FLAG_FAILURE) { | return(statflag_write(sfh, &cgwindow, sizeof(cgwindow))); | 
| ret |= flagsave_save(f, &cgwindow, sizeof(cgwindow)); |  | 
| ret |= flagsave_close(f); |  | 
| } |  | 
| return(ret); |  | 
 | } | } | 
 |  |  | 
| static int flagload_cgwnd(NP2FFILE f, const STENTRY *t) { | static int flagload_cgwnd(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 |  |  | 
| ret = flagload_load(f, &cgwindow, sizeof(cgwindow)); | ret = statflag_read(sfh, &cgwindow, sizeof(cgwindow)); | 
 | cgwindow.fontlow += (long)fontrom; | cgwindow.fontlow += (long)fontrom; | 
 | cgwindow.fonthigh += (long)fontrom; | cgwindow.fonthigh += (long)fontrom; | 
| (void)t; | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 | #endif | #endif | 
| Line 487  static int flagload_cgwnd(NP2FFILE f, co | Line 664  static int flagload_cgwnd(NP2FFILE f, co | 
 |  |  | 
 | // ---- dma | // ---- dma | 
 |  |  | 
| static int flagsave_dma(NP2FFILE f, const STENTRY *t) { | static int flagsave_dma(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int                     ret; |  | 
 | int                     i; | int                     i; | 
 | _DMAC           dmabak; | _DMAC           dmabak; | 
 |  |  | 
| Line 498  static int flagsave_dma(NP2FFILE f, cons | Line 674  static int flagsave_dma(NP2FFILE f, cons | 
 | if ((PROC2NUM(dmabak.dmach[i].proc.outproc, dmaproc)) || | if ((PROC2NUM(dmabak.dmach[i].proc.outproc, dmaproc)) || | 
 | (PROC2NUM(dmabak.dmach[i].proc.inproc, dmaproc)) || | (PROC2NUM(dmabak.dmach[i].proc.inproc, dmaproc)) || | 
 | (PROC2NUM(dmabak.dmach[i].proc.extproc, dmaproc))) { | (PROC2NUM(dmabak.dmach[i].proc.extproc, dmaproc))) { | 
| return(NP2FLAG_FAILURE); | return(STATFLAG_FAILURE); | 
 | } | } | 
 | } | } | 
| ret = flagsave_create(f, t); | (void)tbl; | 
| if (ret != NP2FLAG_FAILURE) { | return(statflag_write(sfh, &dmabak, sizeof(dmabak))); | 
| ret |= flagsave_save(f, &dmabak, sizeof(dmabak)); |  | 
| ret |= flagsave_close(f); |  | 
| } |  | 
| return(ret); |  | 
 | } | } | 
 |  |  | 
| static int flagload_dma(NP2FFILE f, const STENTRY *t) { | static int flagload_dma(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 | int             i; | int             i; | 
 |  |  | 
| ret = flagload_load(f, &dmac, sizeof(dmac)); | ret = statflag_read(sfh, &dmac, sizeof(dmac)); | 
 |  |  | 
 | for (i=0; i<4; i++) { | for (i=0; i<4; i++) { | 
 | if (NUM2PROC(dmac.dmach[i].proc.outproc, dmaproc)) { | if (NUM2PROC(dmac.dmach[i].proc.outproc, dmaproc)) { | 
 | dmac.dmach[i].proc.outproc = dma_dummyout; | dmac.dmach[i].proc.outproc = dma_dummyout; | 
| ret |= NP2FLAG_WARNING; | ret |= STATFLAG_WARNING; | 
 | } | } | 
 | if (NUM2PROC(dmac.dmach[i].proc.inproc, dmaproc)) { | if (NUM2PROC(dmac.dmach[i].proc.inproc, dmaproc)) { | 
 | dmac.dmach[i].proc.inproc = dma_dummyin; | dmac.dmach[i].proc.inproc = dma_dummyin; | 
| ret |= NP2FLAG_WARNING; | ret |= STATFLAG_WARNING; | 
 | } | } | 
 | if (NUM2PROC(dmac.dmach[i].proc.extproc, dmaproc)) { | if (NUM2PROC(dmac.dmach[i].proc.extproc, dmaproc)) { | 
 | dmac.dmach[i].proc.extproc = dma_dummyproc; | dmac.dmach[i].proc.extproc = dma_dummyproc; | 
| ret |= NP2FLAG_WARNING; | ret |= STATFLAG_WARNING; | 
 | } | } | 
 | } | } | 
| (void)t; | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ---- egc | // ---- egc | 
 |  |  | 
| static int flagsave_egc(NP2FFILE f, const STENTRY *t) { | static int flagsave_egc(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; |  | 
 | _EGC    egcbak; | _EGC    egcbak; | 
 |  |  | 
 | egcbak = egc; | egcbak = egc; | 
 | egcbak.inptr -= (long)egc.buf; | egcbak.inptr -= (long)egc.buf; | 
 | egcbak.outptr -= (long)egc.buf; | egcbak.outptr -= (long)egc.buf; | 
|  | (void)tbl; | 
| ret = flagsave_create(f, t); | return(statflag_write(sfh, &egcbak, sizeof(egcbak))); | 
| if (ret != NP2FLAG_FAILURE) { |  | 
| ret |= flagsave_save(f, &egcbak, sizeof(egcbak)); |  | 
| ret |= flagsave_close(f); |  | 
| } |  | 
| return(ret); |  | 
 | } | } | 
 |  |  | 
| static int flagload_egc(NP2FFILE f, const STENTRY *t) { | static int flagload_egc(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 |  |  | 
| ret = flagload_load(f, &egc, sizeof(egc)); | ret = statflag_read(sfh, &egc, sizeof(egc)); | 
 | egc.inptr += (long)egc.buf; | egc.inptr += (long)egc.buf; | 
 | egc.outptr += (long)egc.buf; | egc.outptr += (long)egc.buf; | 
| (void)t; | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ---- epson | // ---- epson | 
 |  |  | 
| static int flagsave_epson(NP2FFILE f, const STENTRY *t) { | static int flagsave_epson(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 |  |  | 
| if (!(pc.model & PCMODEL_EPSON)) { | if (!(pccore.model & PCMODEL_EPSON)) { | 
| return(NP2FLAG_SUCCESS); | return(STATFLAG_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); |  | 
 | } | } | 
 |  | 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); | return(ret); | 
 | } | } | 
 |  |  | 
| static int flagload_epson(NP2FFILE f, const STENTRY *t) { | static int flagload_epson(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 |  |  | 
| ret = flagload_load(f, &epsonio, sizeof(epsonio)); | ret = statflag_read(sfh, &epsonio, sizeof(epsonio)); | 
| ret |= flagload_load(f, mem + 0x1c0000, 0x8000); | ret |= statflag_read(sfh, mem + 0x1c0000, 0x8000); | 
| ret |= flagload_load(f, mem + 0x1e8000, 0x18000); | ret |= statflag_read(sfh, mem + 0x1e8000, 0x18000); | 
| (void)t; | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| Line 611  typedef struct { | Line 774  typedef struct { | 
 | NEVENTCB        proc; | NEVENTCB        proc; | 
 | } NEVTITEM; | } NEVTITEM; | 
 |  |  | 
| static int nevent_save(NP2FFILE f, int num) { | static int nevent_write(STFLAGH sfh, int num) { | 
 |  |  | 
 | NEVTITEM        nit; | NEVTITEM        nit; | 
 | UINT            i; | UINT            i; | 
| Line 629  static int nevent_save(NP2FFILE f, int n | Line 792  static int nevent_save(NP2FFILE f, int n | 
 | if (PROC2NUM(nit.proc, evtproc)) { | if (PROC2NUM(nit.proc, evtproc)) { | 
 | nit.proc = NULL; | nit.proc = NULL; | 
 | } | } | 
| return(flagsave_save(f, &nit, sizeof(nit))); | return(statflag_write(sfh, &nit, sizeof(nit))); | 
 | } | } | 
 |  |  | 
| static int flagsave_evt(NP2FFILE f, const STENTRY *t) { | static int flagsave_evt(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | NEVTSAVE        nevt; | NEVTSAVE        nevt; | 
 | int                     ret; | int                     ret; | 
| Line 641  static int flagsave_evt(NP2FFILE f, cons | Line 804  static int flagsave_evt(NP2FFILE f, cons | 
 | nevt.readyevents = nevent.readyevents; | nevt.readyevents = nevent.readyevents; | 
 | nevt.waitevents = nevent.waitevents; | nevt.waitevents = nevent.waitevents; | 
 |  |  | 
| ret = flagsave_create(f, t); | ret = statflag_write(sfh, &nevt, sizeof(nevt)); | 
| if (ret != NP2FLAG_FAILURE) { | for (i=0; i<nevt.readyevents; i++) { | 
| ret |= flagsave_save(f, &nevt, sizeof(nevt)); | ret |= nevent_write(sfh, nevent.level[i]); | 
| for (i=0; i<nevt.readyevents; i++) { |  | 
| ret |= nevent_save(f, nevent.level[i]); |  | 
| } |  | 
| for (i=0; i<nevt.waitevents; i++) { |  | 
| ret |= nevent_save(f, nevent.waitevent[i]); |  | 
| } |  | 
| ret |= flagsave_close(f); |  | 
 | } | } | 
 |  | for (i=0; i<nevt.waitevents; i++) { | 
 |  | ret |= nevent_write(sfh, nevent.waitevent[i]); | 
 |  | } | 
 |  | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| static int nevent_load(NP2FFILE f, UINT *tbl, UINT *pos) { | static int nevent_read(STFLAGH sfh, UINT *tbl, UINT *pos) { | 
 |  |  | 
 | int                     ret; | int                     ret; | 
 | NEVTITEM        nit; | NEVTITEM        nit; | 
 | UINT            i; | UINT            i; | 
 | UINT            num; | UINT            num; | 
 |  |  | 
| ret = flagload_load(f, &nit, sizeof(nit)); | ret = statflag_read(sfh, &nit, sizeof(nit)); | 
 |  |  | 
 | for (i=0; i<sizeof(evtnum)/sizeof(ENUMTBL); i++) { | for (i=0; i<sizeof(evtnum)/sizeof(ENUMTBL); i++) { | 
 | if (nit.id == evtnum[i].id) { | if (nit.id == evtnum[i].id) { | 
| Line 675  static int nevent_load(NP2FFILE f, UINT | Line 835  static int nevent_load(NP2FFILE f, UINT | 
 | nevent.item[num].flag = nit.flag; | nevent.item[num].flag = nit.flag; | 
 | nevent.item[num].proc = nit.proc; | nevent.item[num].proc = nit.proc; | 
 | if (NUM2PROC(nevent.item[num].proc, evtproc)) { | if (NUM2PROC(nevent.item[num].proc, evtproc)) { | 
| ret |= NP2FLAG_WARNING; | ret |= STATFLAG_WARNING; | 
 | } | } | 
 | else { | else { | 
 | tbl[*pos] = num; | tbl[*pos] = num; | 
| Line 683  static int nevent_load(NP2FFILE f, UINT | Line 843  static int nevent_load(NP2FFILE f, UINT | 
 | } | } | 
 | } | } | 
 | else { | else { | 
| ret |= NP2FLAG_WARNING; | ret |= STATFLAG_WARNING; | 
 | } | } | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| static int flagload_evt(NP2FFILE f, const STENTRY *t) { | static int flagload_evt(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int                     ret; | int                     ret; | 
 | NEVTSAVE        nevt; | NEVTSAVE        nevt; | 
 | UINT            i; | UINT            i; | 
 |  |  | 
| ret = flagload_load(f, &nevt, sizeof(nevt)); | ret = statflag_read(sfh, &nevt, sizeof(nevt)); | 
 |  |  | 
 | nevent.readyevents = 0; | nevent.readyevents = 0; | 
 | nevent.waitevents = 0; | nevent.waitevents = 0; | 
 |  |  | 
 | for (i=0; i<nevt.readyevents; i++) { | for (i=0; i<nevt.readyevents; i++) { | 
| ret |= nevent_load(f, nevent.level, &nevent.readyevents); | ret |= nevent_read(sfh, nevent.level, &nevent.readyevents); | 
 | } | } | 
 | for (i=0; i<nevt.waitevents; i++) { | for (i=0; i<nevt.waitevents; i++) { | 
| ret |= nevent_load(f, nevent.waitevent, &nevent.waitevents); | ret |= nevent_read(sfh, nevent.waitevent, &nevent.waitevents); | 
 | } | } | 
| (void)t; | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ---- gaiji | // ---- gaiji | 
 |  |  | 
| static int flagsave_gij(NP2FFILE f, const STENTRY *t) { | static int flagsave_gij(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 | int             i; | int             i; | 
 | int             j; | int             j; | 
| BYTE    *fnt; | const BYTE      *fnt; | 
 |  |  | 
| ret = flagsave_create(f, t); | ret = STATFLAG_SUCCESS; | 
| if (ret != NP2FLAG_FAILURE) { | for (i=0; i<2; i++) { | 
| for (i=0; i<2; i++) { | fnt = fontrom + ((0x56 + (i << 7)) << 4); | 
| fnt = fontrom + ((0x56 + (i << 7)) << 4); | for (j=0; j<0x80; j++) { | 
| for (j=0; j<0x80; j++) { | ret |= statflag_write(sfh, fnt, 32); | 
| ret |= flagsave_save(f, fnt, 32); | fnt += 0x1000; | 
| fnt += 0x1000; |  | 
| } |  | 
 | } | } | 
 | ret |= flagsave_close(f); |  | 
 | } | } | 
 |  | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| static int flagload_gij(NP2FFILE f, const STENTRY *t) { | static int flagload_gij(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 | int             i; | int             i; | 
| Line 744  static int flagload_gij(NP2FFILE f, cons | Line 902  static int flagload_gij(NP2FFILE f, cons | 
 | for (i=0; i<2; i++) { | for (i=0; i<2; i++) { | 
 | fnt = fontrom + ((0x56 + (i << 7)) << 4); | fnt = fontrom + ((0x56 + (i << 7)) << 4); | 
 | for (j=0; j<0x80; j++) { | for (j=0; j<0x80; j++) { | 
| ret |= flagload_load(f, fnt, 32); | ret |= statflag_read(sfh, fnt, 32); | 
 | fnt += 0x1000; | fnt += 0x1000; | 
 | } | } | 
 | } | } | 
| (void)t; | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| Line 775  typedef struct { | Line 933  typedef struct { | 
 | BYTE    extop[4]; | BYTE    extop[4]; | 
 | } OPNKEY; | } OPNKEY; | 
 |  |  | 
| static int flagsave_fm(NP2FFILE f, const STENTRY *t) { | static int flagsave_fm(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 | UINT    saveflg; | UINT    saveflg; | 
| Line 829  static int flagsave_fm(NP2FFILE f, const | Line 987  static int flagsave_fm(NP2FFILE f, const | 
 | break; | break; | 
 | } | } | 
 |  |  | 
| ret = flagsave_create(f, t); | ret = statflag_write(sfh, &usesound, sizeof(usesound)); | 
| if (ret != NP2FLAG_FAILURE) { | if (saveflg & FLAG_MG) { | 
| ret |= flagsave_save(f, &usesound, sizeof(usesound)); | ret |= statflag_write(sfh, &musicgen, sizeof(musicgen)); | 
|  | } | 
| if (saveflg & FLAG_MG) { | if (saveflg & FLAG_FM1A) { | 
| ret |= flagsave_save(f, &musicgen, sizeof(musicgen)); | ret |= statflag_write(sfh, &fmtimer, sizeof(fmtimer)); | 
| } | ret |= statflag_write(sfh, &opn, sizeof(opn)); | 
| if (saveflg & FLAG_FM1A) { | CopyMemory(opnkey.keyreg, opngen.keyreg, sizeof(opngen.keyreg)); | 
| ret |= flagsave_save(f, &fmtimer, sizeof(fmtimer)); | opnkey.extop[0] = opnch[2].extop; | 
| ret |= flagsave_save(f, &opn, sizeof(opn)); | opnkey.extop[1] = opnch[5].extop; | 
| CopyMemory(opnkey.keyreg, opngen.keyreg, sizeof(opngen.keyreg)); | opnkey.extop[2] = opnch[8].extop; | 
| opnkey.extop[0] = opnch[2].extop; | opnkey.extop[3] = opnch[11].extop; | 
| opnkey.extop[1] = opnch[5].extop; | ret |= statflag_write(sfh, &opnkey, sizeof(opnkey)); | 
| opnkey.extop[2] = opnch[8].extop; |  | 
| opnkey.extop[3] = opnch[11].extop; |  | 
| ret |= flagsave_save(f, &opnkey, sizeof(opnkey)); |  | 
| } |  | 
| if (saveflg & FLAG_PSG1) { |  | 
| ret |= flagsave_save(f, &psg1.reg, sizeof(PSGREG)); |  | 
| } |  | 
| if (saveflg & FLAG_PSG2) { |  | 
| ret |= flagsave_save(f, &psg2.reg, sizeof(PSGREG)); |  | 
| } |  | 
| if (saveflg & FLAG_PSG3) { |  | 
| ret |= flagsave_save(f, &psg3.reg, sizeof(PSGREG)); |  | 
| } |  | 
| if (saveflg & FLAG_ADPCM) { |  | 
| ret |= flagsave_save(f, &adpcm, sizeof(adpcm)); |  | 
| } |  | 
| if (saveflg & FLAG_PCM86) { |  | 
| ret |= flagsave_save(f, &pcm86, sizeof(pcm86)); |  | 
| } |  | 
| if (saveflg & FLAG_CS4231) { |  | 
| ret |= flagsave_save(f, &cs4231, sizeof(cs4231)); |  | 
| } |  | 
| ret |= flagsave_close(f); |  | 
 | } | } | 
 |  | if (saveflg & FLAG_PSG1) { | 
 |  | ret |= statflag_write(sfh, &psg1.reg, sizeof(PSGREG)); | 
 |  | } | 
 |  | if (saveflg & FLAG_PSG2) { | 
 |  | ret |= statflag_write(sfh, &psg2.reg, sizeof(PSGREG)); | 
 |  | } | 
 |  | 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); | return(ret); | 
 | } | } | 
 |  |  | 
| Line 895  static void play_psgreg(PSGGEN psg) { | Line 1049  static void play_psgreg(PSGGEN psg) { | 
 | } | } | 
 | } | } | 
 |  |  | 
| static int flagload_fm(NP2FFILE f, const STENTRY *t) { | static int flagload_fm(STFLAGH sfh, const SFENTRY *t) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 | UINT    saveflg; | UINT    saveflg; | 
| Line 914  static int flagload_fm(NP2FFILE f, const | Line 1068  static int flagload_fm(NP2FFILE f, const | 
 | pcm86_reset(); | pcm86_reset(); | 
 | cs4231_reset(); | cs4231_reset(); | 
 |  |  | 
| ret = flagload_load(f, &usesound, sizeof(usesound)); | ret = statflag_read(sfh, &usesound, sizeof(usesound)); | 
| fmboard_reset((BYTE)usesound); | fmboard_reset(usesound); | 
 |  |  | 
 | fmreg1a = 0x000; | fmreg1a = 0x000; | 
 | fmreg1b = 0x100; | fmreg1b = 0x100; | 
| Line 972  static int flagload_fm(NP2FFILE f, const | Line 1126  static int flagload_fm(NP2FFILE f, const | 
 | break; | break; | 
 | } | } | 
 |  |  | 
| if ((saveflg & FLAG_MG) && (f->p.ver != 0)) { | if (saveflg & FLAG_MG) { | 
| ret |= flagload_load(f, &musicgen, sizeof(musicgen)); | ret |= statflag_read(sfh, &musicgen, sizeof(musicgen)); | 
 | board14_allkeymake(); | board14_allkeymake(); | 
 | } | } | 
 |  |  | 
 | if (saveflg & FLAG_FM1A) { | if (saveflg & FLAG_FM1A) { | 
| ret |= flagload_load(f, &fmtimer, sizeof(fmtimer)); | ret |= statflag_read(sfh, &fmtimer, sizeof(fmtimer)); | 
| ret |= flagload_load(f, &opn, sizeof(opn)); | ret |= statflag_read(sfh, &opn, sizeof(opn)); | 
| ret |= flagload_load(f, &opnkey, sizeof(opnkey)); | ret |= statflag_read(sfh, &opnkey, sizeof(opnkey)); | 
 | CopyMemory(opngen.keyreg, &opnkey.keyreg, sizeof(opngen.keyreg)); | CopyMemory(opngen.keyreg, &opnkey.keyreg, sizeof(opngen.keyreg)); | 
 | opnch[2].extop = opnkey.extop[0]; | opnch[2].extop = opnkey.extop[0]; | 
 | opnch[5].extop = opnkey.extop[1]; | opnch[5].extop = opnkey.extop[1]; | 
| Line 988  static int flagload_fm(NP2FFILE f, const | Line 1142  static int flagload_fm(NP2FFILE f, const | 
 | opnch[11].extop = opnkey.extop[3]; | opnch[11].extop = opnkey.extop[3]; | 
 | } | } | 
 | if (saveflg & FLAG_PSG1) { | if (saveflg & FLAG_PSG1) { | 
| ret |= flagload_load(f, &psg1.reg, sizeof(PSGREG)); | ret |= statflag_read(sfh, &psg1.reg, sizeof(PSGREG)); | 
 | } | } | 
 | if (saveflg & FLAG_PSG2) { | if (saveflg & FLAG_PSG2) { | 
| ret |= flagload_load(f, &psg2.reg, sizeof(PSGREG)); | ret |= statflag_read(sfh, &psg2.reg, sizeof(PSGREG)); | 
 | } | } | 
 | if (saveflg & FLAG_PSG3) { | if (saveflg & FLAG_PSG3) { | 
| ret |= flagload_load(f, &psg3.reg, sizeof(PSGREG)); | ret |= statflag_read(sfh, &psg3.reg, sizeof(PSGREG)); | 
 | } | } | 
 | if (saveflg & FLAG_ADPCM) { | if (saveflg & FLAG_ADPCM) { | 
| ret |= flagload_load(f, &adpcm, sizeof(adpcm)); | ret |= statflag_read(sfh, &adpcm, sizeof(adpcm)); | 
 | } | } | 
 | if (saveflg & FLAG_PCM86) { | if (saveflg & FLAG_PCM86) { | 
| ret |= flagload_load(f, &pcm86, sizeof(pcm86)); | ret |= statflag_read(sfh, &pcm86, sizeof(pcm86)); | 
 | } | } | 
 | if (saveflg & FLAG_CS4231) { | if (saveflg & FLAG_CS4231) { | 
| ret |= flagload_load(f, &cs4231, sizeof(cs4231)); | ret |= statflag_read(sfh, &cs4231, sizeof(cs4231)); | 
 | cs4231.proc = cs4231dec[cs4231.reg.datafmt >> 4]; | cs4231.proc = cs4231dec[cs4231.reg.datafmt >> 4]; | 
 | } | } | 
 |  |  | 
| Line 1056  typedef struct { | Line 1210  typedef struct { | 
 | static const char str_fddx[] = "FDD%u"; | static const char str_fddx[] = "FDD%u"; | 
 | static const char str_sasix[] = "SASI%u"; | static const char str_sasix[] = "SASI%u"; | 
 | static const char str_scsix[] = "SCSI%u"; | static const char str_scsix[] = "SCSI%u"; | 
| static const char str_updated[] = "%s: updated" CRLITERAL; | static const char str_updated[] = "%s: updated"; | 
| static const char str_notfound[] = "%s: not found" CRLITERAL; | static const char str_notfound[] = "%s: not found"; | 
 |  |  | 
| static int disksave(NP2FFILE f, const char *path, int readonly) { | static int disksave(STFLAGH sfh, const char *path, int readonly) { | 
 |  |  | 
 | STATDISK        st; | STATDISK        st; | 
 | FILEH           fh; | FILEH           fh; | 
| Line 1074  static int disksave(NP2FFILE f, const ch | Line 1228  static int disksave(NP2FFILE f, const ch | 
 | file_close(fh); | file_close(fh); | 
 | } | } | 
 | } | } | 
| return(flagsave_save(f, &st, sizeof(st))); | return(statflag_write(sfh, &st, sizeof(st))); | 
 | } | } | 
 |  |  | 
| static int flagsave_disk(NP2FFILE f, const STENTRY *t) { | static int flagsave_disk(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 | BYTE    i; | BYTE    i; | 
 |  |  | 
 | sxsi_flash(); | sxsi_flash(); | 
| ret = flagsave_create(f, t); | ret = STATFLAG_SUCCESS; | 
| if (ret != NP2FLAG_FAILURE) { | for (i=0; i<4; i++) { | 
| for (i=0; i<4; i++) { | ret |= disksave(sfh, fdd_diskname(i), fdd_diskprotect(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 |= flagsave_close(f); |  | 
 | } | } | 
 |  | for (i=0x00; i<0x02; i++) { | 
 |  | ret |= disksave(sfh, sxsi_getname(i), 0); | 
 |  | } | 
 |  | for (i=0x20; i<0x24; i++) { | 
 |  | ret |= disksave(sfh, sxsi_getname(i), 0); | 
 |  | } | 
 |  | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| static int diskcheck(NP2FFILE f, const char *name, ERR_BUF *e) { | static int diskcheck(STFLAGH sfh, const char *name) { | 
 |  |  | 
 | int                     ret; | int                     ret; | 
 | FILEH           fh; | FILEH           fh; | 
| Line 1108  static int diskcheck(NP2FFILE f, const c | Line 1260  static int diskcheck(NP2FFILE f, const c | 
 | DOSDATE         date; | DOSDATE         date; | 
 | DOSTIME         time; | DOSTIME         time; | 
 |  |  | 
| ret = flagload_load(f, &st, sizeof(st)); | ret = statflag_read(sfh, &st, sizeof(st)); | 
 | if (st.path[0]) { | if (st.path[0]) { | 
 | fh = file_open_rb(st.path); | fh = file_open_rb(st.path); | 
 | if (fh != FILEH_INVALID) { | if (fh != FILEH_INVALID) { | 
| Line 1116  static int diskcheck(NP2FFILE f, const c | Line 1268  static int diskcheck(NP2FFILE f, const c | 
 | file_close(fh); | file_close(fh); | 
 | if ((memcmp(&st.date, &date, sizeof(date))) || | if ((memcmp(&st.date, &date, sizeof(date))) || | 
 | (memcmp(&st.time, &time, sizeof(time)))) { | (memcmp(&st.time, &time, sizeof(time)))) { | 
| ret |= NP2FLAG_DISKCHG; | ret |= STATFLAG_DISKCHG; | 
 | SPRINTF(buf, str_updated, name); | SPRINTF(buf, str_updated, name); | 
| err_append(e, buf); | statflag_seterr(sfh, buf); | 
 | } | } | 
 | } | } | 
 | else { | else { | 
| ret |= NP2FLAG_DISKCHG; | ret |= STATFLAG_DISKCHG; | 
 | SPRINTF(buf, str_notfound, name); | SPRINTF(buf, str_notfound, name); | 
| err_append(e, buf); | statflag_seterr(sfh, buf); | 
 | } | } | 
 | } | } | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| static int flagcheck_disk(NP2FFILE f, const STENTRY *t, ERR_BUF *e) { | static int flagcheck_disk(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int             ret; | int             ret; | 
 | int             i; | int             i; | 
| Line 1139  static int flagcheck_disk(NP2FFILE f, co | Line 1291  static int flagcheck_disk(NP2FFILE f, co | 
 | ret = 0; | ret = 0; | 
 | for (i=0; i<4; i++) { | for (i=0; i<4; i++) { | 
 | SPRINTF(buf, str_fddx, i+1); | SPRINTF(buf, str_fddx, i+1); | 
| ret |= diskcheck(f, buf, e); | ret |= diskcheck(sfh, buf); | 
 | } | } | 
 | sxsi_flash(); | sxsi_flash(); | 
 | for (i=0; i<2; i++) { | for (i=0; i<2; i++) { | 
 | SPRINTF(buf, str_sasix, i+1); | SPRINTF(buf, str_sasix, i+1); | 
| ret |= diskcheck(f, buf, e); | ret |= diskcheck(sfh, buf); | 
 | } | } | 
| for (i=0; i<2; i++) { | for (i=0; i<4; i++) { | 
| SPRINTF(buf, str_scsix, i+1); | SPRINTF(buf, str_scsix, i); | 
| ret |= diskcheck(f, buf, e); | ret |= diskcheck(sfh, buf); | 
 | } | } | 
| (void)t; | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| static int flagload_disk(NP2FFILE f, const STENTRY *t) { | static int flagload_disk(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | int                     ret; | int                     ret; | 
| BYTE            i; | UINT8           i; | 
 | STATDISK        st; | STATDISK        st; | 
 |  |  | 
 | ret = 0; | ret = 0; | 
 | for (i=0; i<4; i++) { | for (i=0; i<4; i++) { | 
| ret |= flagload_load(f, &st, sizeof(st)); | ret |= statflag_read(sfh, &st, sizeof(st)); | 
 | if (st.path[0]) { | if (st.path[0]) { | 
 | fdd_set(i, st.path, FTYPE_NONE, st.readonly); | fdd_set(i, st.path, FTYPE_NONE, st.readonly); | 
 | } | } | 
 | } | } | 
 | sxsi_trash(); | sxsi_trash(); | 
 | for (i=0x00; i<0x02; i++) { | for (i=0x00; i<0x02; i++) { | 
| ret |= flagload_load(f, &st, sizeof(st)); | ret |= statflag_read(sfh, &st, sizeof(st)); | 
 | if (st.path[0]) { | if (st.path[0]) { | 
 | sxsi_hddopen(i, st.path); | sxsi_hddopen(i, st.path); | 
 | } | } | 
 | } | } | 
| for (i=0x20; i<0x22; i++) { | for (i=0x20; i<0x24; i++) { | 
| ret |= flagload_load(f, &st, sizeof(st)); | ret |= statflag_read(sfh, &st, sizeof(st)); | 
| #if 0 | if (st.path[0]) { | 
| if (file[0]) { | sxsi_hddopen(i, st.path); | 
| bios0x1b_scsiopen(i, file); |  | 
 | } | } | 
 | #endif |  | 
 | } | } | 
| (void)t; | (void)tbl; | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
 |  |  | 
 | // ---- com | // ---- com | 
 |  |  | 
| static int flagsave_com(NP2FFILE f, const STENTRY *t) { | static int flagsave_com(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | UINT    device; | UINT    device; | 
 | COMMNG  cm; | COMMNG  cm; | 
 | int             ret; | int             ret; | 
 | COMFLAG flag; | COMFLAG flag; | 
 |  |  | 
| device = (UINT)t->arg1; | device = (UINT)(long)tbl->arg1; | 
 | switch(device) { | switch(device) { | 
 | case 0: | case 0: | 
 | cm = cm_mpu98; | cm = cm_mpu98; | 
| Line 1210  static int flagsave_com(NP2FFILE f, cons | Line 1360  static int flagsave_com(NP2FFILE f, cons | 
 | cm = NULL; | cm = NULL; | 
 | break; | break; | 
 | } | } | 
| ret = NP2FLAG_SUCCESS; | ret = STATFLAG_SUCCESS; | 
 | if (cm) { | if (cm) { | 
 | flag = (COMFLAG)cm->msg(cm, COMMSG_GETFLAG, 0); | flag = (COMFLAG)cm->msg(cm, COMMSG_GETFLAG, 0); | 
 | if (flag) { | if (flag) { | 
| ret = flagsave_create(f, t); | ret |= statflag_write(sfh, flag, flag->size); | 
| if (ret != NP2FLAG_FAILURE) { |  | 
| ret |= flagsave_save(f, flag, flag->size); |  | 
| ret |= flagsave_close(f); |  | 
| } |  | 
 | _MFREE(flag); | _MFREE(flag); | 
 | } | } | 
 | } | } | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
| static int flagload_com(NP2FFILE f, const STENTRY *t) { | static int flagload_com(STFLAGH sfh, const SFENTRY *tbl) { | 
 |  |  | 
 | UINT            device; | UINT            device; | 
 | COMMNG          cm; | COMMNG          cm; | 
| Line 1233  static int flagload_com(NP2FFILE f, cons | Line 1379  static int flagload_com(NP2FFILE f, cons | 
 | _COMFLAG        fhdr; | _COMFLAG        fhdr; | 
 | COMFLAG         flag; | COMFLAG         flag; | 
 |  |  | 
| ret = flagload_load(f, &fhdr, sizeof(fhdr)); | ret = statflag_read(sfh, &fhdr, sizeof(fhdr)); | 
| if (ret != NP2FLAG_SUCCESS) { | if (ret != STATFLAG_SUCCESS) { | 
 | goto flcom_err1; | goto flcom_err1; | 
 | } | } | 
 | if (fhdr.size < sizeof(fhdr)) { | if (fhdr.size < sizeof(fhdr)) { | 
| Line 1245  static int flagload_com(NP2FFILE f, cons | Line 1391  static int flagload_com(NP2FFILE f, cons | 
 | goto flcom_err1; | goto flcom_err1; | 
 | } | } | 
 | CopyMemory(flag, &fhdr, sizeof(fhdr)); | CopyMemory(flag, &fhdr, sizeof(fhdr)); | 
| ret |= flagload_load(f, flag + 1, fhdr.size - sizeof(fhdr)); | ret |= statflag_read(sfh, flag + 1, fhdr.size - sizeof(fhdr)); | 
| if (ret != NP2FLAG_SUCCESS) { | if (ret != STATFLAG_SUCCESS) { | 
 | goto flcom_err2; | goto flcom_err2; | 
 | } | } | 
 |  |  | 
| device = (UINT)t->arg1; | device = (UINT)(long)tbl->arg1; | 
 | switch(device) { | switch(device) { | 
 | case 0: | case 0: | 
 | commng_destroy(cm_mpu98); | commng_destroy(cm_mpu98); | 
| Line 1282  flcom_err1: | Line 1428  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 ((sfh->hdr.ver == tbl->ver) && (sfh->hdr.size == tbl->arg2)) { | 
| if ((f->p.ver == t->ver) && (f->p.size == t->arg2)) { | return(STATFLAG_SUCCESS); | 
| return(NP2FLAG_SUCCESS); |  | 
| } |  | 
| return(NP2FLAG_VERSION); |  | 
 | } | } | 
| (void)e; | return(STATFLAG_FAILURE); | 
| return(NP2FLAG_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 (sfh->hdr.ver == tbl->ver) { | 
| if (f->p.ver == t->ver) { | return(STATFLAG_SUCCESS); | 
| return(NP2FLAG_SUCCESS); |  | 
| } |  | 
| return(NP2FLAG_VERSION); |  | 
 | } | } | 
| (void)e; | return(STATFLAG_FAILURE); | 
| return(NP2FLAG_FAILURE); |  | 
 | } | } | 
 |  |  | 
 |  |  | 
| Line 1311  static int flagcheck_veronly(NP2FFILE f, | Line 1449  static int flagcheck_veronly(NP2FFILE f, | 
 |  |  | 
 | int statsave_save(const char *filename) { | int statsave_save(const char *filename) { | 
 |  |  | 
| _NP2FFILE       f; | SFFILEH         sffh; | 
 | int                     ret; | int                     ret; | 
| const STENTRY   *tbl; | const SFENTRY   *tbl; | 
| const STENTRY   *tblterm; | const SFENTRY   *tblterm; | 
 |  |  | 
| ret = flagcreate(&f, filename); | sffh = statflag_create(filename); | 
| if (ret == NP2FLAG_FAILURE) { | if (sffh == NULL) { | 
| return(ret); | return(STATFLAG_FAILURE); | 
 | } | } | 
 |  |  | 
 |  | ret = STATFLAG_SUCCESS; | 
 | tbl = np2tbl; | tbl = np2tbl; | 
| tblterm = tbl + (sizeof(np2tbl)/sizeof(STENTRY)); | tblterm = tbl + (sizeof(np2tbl)/sizeof(SFENTRY)); | 
 | while(tbl < tblterm) { | while(tbl < tblterm) { | 
 |  | ret |= statflag_createsection(sffh, tbl); | 
 | switch(tbl->type) { | switch(tbl->type) { | 
| case NP2FLAG_BIN: | case STATFLAG_BIN: | 
| case NP2FLAG_CLOCK: | case STATFLAG_CLOCK: | 
| ret |= flagsave_common(&f, tbl); | case STATFLAG_TERM: | 
| break; | ret |= flagsave_common(&sffh->sfh, tbl); | 
|  |  | 
| case NP2FLAG_TERM: |  | 
| ret |= flagsave_term(&f, tbl); |  | 
 | break; | break; | 
 |  |  | 
 | #if defined(CGWND_FONTPTR) | #if defined(CGWND_FONTPTR) | 
| case NP2FLAG_CGW: | case STATFLAG_CGW: | 
| ret |= flagsave_cgwnd(&f, tbl); | ret |= flagsave_cgwnd(&sffh->sfh, tbl); | 
 | break; | break; | 
 | #endif | #endif | 
 |  |  | 
| case NP2FLAG_COM: | case STATFLAG_COM: | 
| ret |= flagsave_com(&f, tbl); | ret |= flagsave_com(&sffh->sfh, tbl); | 
|  | break; | 
|  |  | 
|  | case STATFLAG_DISK: | 
|  | ret |= flagsave_disk(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_DISK: | case STATFLAG_DMA: | 
| ret |= flagsave_disk(&f, tbl); | ret |= flagsave_dma(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_DMA: | case STATFLAG_EGC: | 
| ret |= flagsave_dma(&f, tbl); | ret |= flagsave_egc(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_EGC: | case STATFLAG_EPSON: | 
| ret |= flagsave_egc(&f, tbl); | ret |= flagsave_epson(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_EPSON: | case STATFLAG_EVT: | 
| ret |= flagsave_epson(&f, tbl); | ret |= flagsave_evt(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_EVT: | case STATFLAG_EXT: | 
| ret |= flagsave_evt(&f, tbl); | ret |= flagsave_ext(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_EXT: | case STATFLAG_FM: | 
| ret |= flagsave_ext(&f, tbl); | ret |= flagsave_fm(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_FM: | case STATFLAG_GIJ: | 
| ret |= flagsave_fm(&f, tbl); | ret |= flagsave_gij(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_GIJ: | #if defined(SUPPORT_HOSTDRV) | 
| ret |= flagsave_gij(&f, tbl); | case STATFLAG_HDRV: | 
|  | ret |= hostdrv_sfsave(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  | #endif | 
 |  |  | 
| case NP2FLAG_MEM: | case STATFLAG_MEM: | 
| ret |= flagsave_mem(&f, tbl); | ret |= flagsave_mem(&sffh->sfh, tbl); | 
 | break; | break; | 
 | } | } | 
 | tbl++; | tbl++; | 
 | } | } | 
| flagclose(&f); | statflag_close(sffh); | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
 | int statsave_check(const char *filename, char *buf, int size) { | int statsave_check(const char *filename, char *buf, int size) { | 
 |  |  | 
| ERR_BUF         e; | SFFILEH         sffh; | 
| _NP2FFILE       f; |  | 
 | int                     ret; | int                     ret; | 
 | BOOL            done; | BOOL            done; | 
| const STENTRY   *tbl; | const SFENTRY   *tbl; | 
| const STENTRY   *tblterm; | const SFENTRY   *tblterm; | 
 |  |  | 
| e.buf = buf; | sffh = statflag_open(filename, buf, size); | 
| e.remain = size; | if (sffh == NULL) { | 
| if (e.remain) { | return(STATFLAG_FAILURE); | 
| e.remain--; |  | 
| if (buf) { |  | 
| *buf = '\0'; |  | 
| } |  | 
| } |  | 
| else { |  | 
| e.buf = NULL; |  | 
 | } | } | 
 |  |  | 
| ret = flagopen(&f, filename, &e); | done = FALSE; | 
| if (ret != NP2FLAG_FAILURE) { | ret = STATFLAG_SUCCESS; | 
| done = FALSE; | while((!done) && (ret != STATFLAG_FAILURE)) { | 
| while((!done) && (ret != NP2FLAG_FAILURE)) { | ret |= statflag_readsection(sffh); | 
| char index[11]; | tbl = np2tbl; | 
| ret |= flagload_create(&f); | tblterm = tbl + (sizeof(np2tbl)/sizeof(SFENTRY)); | 
| CopyMemory(index, f.p.index, sizeof(f.p.index)); | while(tbl < tblterm) { | 
| index[10] = 0; | if (!memcmp(sffh->sfh.hdr.index, tbl->index, 10)) { | 
| tbl = np2tbl; | break; | 
| tblterm = tbl + (sizeof(np2tbl)/sizeof(STENTRY)); |  | 
| while(tbl < tblterm) { |  | 
| if (!strcmp(index, tbl->index)) { |  | 
| break; |  | 
| } |  | 
| tbl++; |  | 
 | } | } | 
| if (tbl < tblterm) { | tbl++; | 
| switch(tbl->type) { | } | 
| case NP2FLAG_BIN: | if (tbl < tblterm) { | 
|  | switch(tbl->type) { | 
|  | case STATFLAG_BIN: | 
 | #if defined(CGWND_FONTPTR) | #if defined(CGWND_FONTPTR) | 
| case NP2FLAG_CGW: | case STATFLAG_CGW: | 
 | #endif | #endif | 
| case NP2FLAG_CLOCK: | case STATFLAG_CLOCK: | 
| case NP2FLAG_MEM: | case STATFLAG_MEM: | 
| ret |= flagcheck_versize(&f, tbl, &e); | ret |= flagcheck_versize(&sffh->sfh, tbl); | 
| break; | break; | 
|  |  | 
| case NP2FLAG_TERM: | case STATFLAG_TERM: | 
| done = TRUE; | done = TRUE; | 
| break; | break; | 
|  |  | 
| case NP2FLAG_COM: | case STATFLAG_COM: | 
| case NP2FLAG_DMA: | case STATFLAG_DMA: | 
| case NP2FLAG_EGC: | case STATFLAG_EGC: | 
| case NP2FLAG_EPSON: | case STATFLAG_EPSON: | 
| case NP2FLAG_EVT: | case STATFLAG_EVT: | 
| case NP2FLAG_EXT: | case STATFLAG_EXT: | 
| case NP2FLAG_GIJ: | case STATFLAG_GIJ: | 
| case NP2FLAG_FM: | case STATFLAG_FM: | 
| ret |= flagcheck_veronly(&f, tbl, &e); | #if defined(SUPPORT_HOSTDRV) | 
| break; | case STATFLAG_HDRV: | 
|  | #endif | 
| case NP2FLAG_DISK: | ret |= flagcheck_veronly(&sffh->sfh, tbl); | 
| ret |= flagcheck_disk(&f, tbl, &e); | break; | 
| break; |  | 
|  | case STATFLAG_DISK: | 
| default: | ret |= flagcheck_disk(&sffh->sfh, tbl); | 
| ret |= NP2FLAG_WARNING; | break; | 
| break; |  | 
| } | default: | 
| } | ret |= STATFLAG_WARNING; | 
| else { | break; | 
| ret |= NP2FLAG_WARNING; |  | 
 | } | } | 
 | ret |= flagload_close(&f); |  | 
 | } | } | 
| flagclose(&f); | else { | 
| } | ret |= STATFLAG_WARNING; | 
| if (e.buf) { | } | 
| *e.buf = '\0'; |  | 
 | } | } | 
 |  | statflag_close(sffh); | 
 | return(ret); | return(ret); | 
 | } | } | 
 |  |  | 
 | int statsave_load(const char *filename) { | int statsave_load(const char *filename) { | 
 |  |  | 
| _NP2FFILE       f; | SFFILEH         sffh; | 
 | int                     ret; | int                     ret; | 
 | BOOL            done; | BOOL            done; | 
| const STENTRY   *tbl; | const SFENTRY   *tbl; | 
| const STENTRY   *tblterm; | const SFENTRY   *tblterm; | 
 |  |  | 
| ret = flagopen(&f, filename, NULL); | sffh = statflag_open(filename, NULL, 0); | 
| if (ret == NP2FLAG_FAILURE) { | if (sffh == NULL) { | 
| return(ret); | return(STATFLAG_FAILURE); | 
 | } | } | 
 |  |  | 
 | soundmng_stop(); | soundmng_stop(); | 
| Line 1494  const STENTRY *tblterm; | Line 1624  const STENTRY *tblterm; | 
 | fmboard_reset(0); | fmboard_reset(0); | 
 |  |  | 
 | done = FALSE; | done = FALSE; | 
| while((!done) && (ret != NP2FLAG_FAILURE)) { | ret = STATFLAG_SUCCESS; | 
| char index[11]; | while((!done) && (ret != STATFLAG_FAILURE)) { | 
| ret |= flagload_create(&f); | ret |= statflag_readsection(sffh); | 
| CopyMemory(index, f.p.index, sizeof(f.p.index)); |  | 
| index[10] = 0; |  | 
 | tbl = np2tbl; | tbl = np2tbl; | 
| tblterm = tbl + (sizeof(np2tbl)/sizeof(STENTRY)); | tblterm = tbl + (sizeof(np2tbl)/sizeof(SFENTRY)); | 
 | while(tbl < tblterm) { | while(tbl < tblterm) { | 
| if (!strcmp(index, tbl->index)) { | if (!memcmp(sffh->sfh.hdr.index, tbl->index, 10)) { | 
 | break; | break; | 
 | } | } | 
 | tbl++; | tbl++; | 
 | } | } | 
 | if (tbl < tblterm) { | if (tbl < tblterm) { | 
 | switch(tbl->type) { | switch(tbl->type) { | 
| case NP2FLAG_BIN: | case STATFLAG_BIN: | 
| ret |= flagload_common(&f, tbl); | ret |= flagload_common(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_TERM: | case STATFLAG_TERM: | 
 | done = TRUE; | done = TRUE; | 
 | break; | break; | 
 |  |  | 
 | #if defined(CGWND_FONTPTR) | #if defined(CGWND_FONTPTR) | 
| case NP2FLAG_CGW: | case STATFLAG_CGW: | 
| ret |= flagload_cgwnd(&f, tbl); | ret |= flagload_cgwnd(&sffh->sfh, tbl); | 
 | break; | break; | 
 | #endif | #endif | 
 |  |  | 
| case NP2FLAG_CLOCK: | case STATFLAG_CLOCK: | 
| ret |= flagload_clock(&f, tbl); | ret |= flagload_clock(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_COM: | case STATFLAG_COM: | 
| ret |= flagload_com(&f, tbl); | ret |= flagload_com(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_DISK: | case STATFLAG_DISK: | 
| ret |= flagload_disk(&f, tbl); | ret |= flagload_disk(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_DMA: | case STATFLAG_DMA: | 
| ret |= flagload_dma(&f, tbl); | ret |= flagload_dma(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_EGC: | case STATFLAG_EGC: | 
| ret |= flagload_egc(&f, tbl); | ret |= flagload_egc(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_EPSON: | case STATFLAG_EPSON: | 
| ret |= flagload_epson(&f, tbl); | ret |= flagload_epson(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_EVT: | case STATFLAG_EVT: | 
| ret |= flagload_evt(&f, tbl); | ret |= flagload_evt(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_EXT: | case STATFLAG_EXT: | 
| ret |= flagload_ext(&f, tbl); | ret |= flagload_ext(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_FM: | case STATFLAG_FM: | 
| ret |= flagload_fm(&f, tbl); | ret |= flagload_fm(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_GIJ: | case STATFLAG_GIJ: | 
| ret |= flagload_gij(&f, tbl); | ret |= flagload_gij(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
| case NP2FLAG_MEM: | #if defined(SUPPORT_HOSTDRV) | 
| ret |= flagload_mem(&f, tbl); | case STATFLAG_HDRV: | 
|  | ret |= hostdrv_sfload(&sffh->sfh, tbl); | 
|  | break; | 
|  | #endif | 
|  |  | 
|  | case STATFLAG_MEM: | 
|  | ret |= flagload_mem(&sffh->sfh, tbl); | 
 | break; | break; | 
 |  |  | 
 | default: | default: | 
| ret |= NP2FLAG_WARNING; | ret |= STATFLAG_WARNING; | 
 | break; | break; | 
 | } | } | 
 | } | } | 
 | else { | else { | 
| ret |= NP2FLAG_WARNING; | ret |= STATFLAG_WARNING; | 
 | } | } | 
 | ret |= flagload_close(&f); |  | 
 | } | } | 
| flagclose(&f); | statflag_close(sffh); | 
 |  |  | 
 | // I/O作り直し | // I/O作り直し | 
| i286_memorymap((pc.model & PCMODEL_EPSON)?1:0); | i286_memorymap((pccore.model & PCMODEL_EPSON)?1:0); | 
 | iocore_build(); | iocore_build(); | 
 | iocore_bind(); | iocore_bind(); | 
 | cbuscore_bind(); | cbuscore_bind(); |