--- xmil/statsave.c 2004/08/12 17:57:36 1.1 +++ xmil/statsave.c 2008/06/02 20:07:30 1.8 @@ -15,11 +15,7 @@ #include "palettes.h" #include "makescrn.h" #include "sound.h" -// #include "sndctrl.h" -// #include "font.h" #include "fddfile.h" -// #include "fdd_mtr.h" - #if defined(MACOS) #define CRCONST str_cr @@ -64,9 +60,9 @@ typedef struct { #include "statsave.tbl" -// ---- +/* ---- */ -// 関数ポインタを intに変更。 +/* 関数ポインタを intに変更。 */ static UINT32 proc2id(INTPTR func, const PROCTBL *tbl, UINT count) { while(count) { @@ -92,7 +88,7 @@ static INTPTR id2proc(UINT32 id, const P } -// ---- +/* ---- */ enum { SFFILEH_WRITE = 0x0001, @@ -108,7 +104,8 @@ typedef struct { NP2FHDR f; } _SFFILEH, *SFFILEH; -static SFFILEH statflag_open(const char *filename, char *err, int errlen) { +static SFFILEH statflag_open(const OEMCHAR *filename, + OEMCHAR *err, UINT errlen) { FILEH fh; SFFILEH ret; @@ -145,7 +142,7 @@ sfo_err1: static int statflag_closesection(SFFILEH sffh) { UINT leng; - BYTE zero[16]; + UINT8 zero[16]; if (sffh == NULL) { goto sfcs_err1; @@ -220,7 +217,7 @@ sfr_err: return(STATFLAG_FAILURE); } -static SFFILEH statflag_create(const char *filename) { +static SFFILEH statflag_create(const OEMCHAR *filename) { SFFILEH ret; FILEH fh; @@ -314,7 +311,7 @@ static void statflag_close(SFFILEH sffh) } } -void statflag_seterr(STFLAGH sfh, const char *str) { +void statflag_seterr(STFLAGH sfh, const OEMCHAR *str) { if ((sfh) && (sfh->errlen)) { milstr_ncat(sfh->err, str, sfh->errlen); @@ -323,7 +320,7 @@ void statflag_seterr(STFLAGH sfh, const } -// ---- common +/* common */ static int flagsave_common(STFLAGH sfh, const SFENTRY *tbl) { @@ -336,138 +333,94 @@ static int flagload_common(STFLAGH sfh, } -// ---- event +/* event */ typedef struct { + UINT32 next; SINT32 clock; - SINT32 base; - UINT32 param; + SINT32 baseclock; UINT32 proc; } NEVTITEM; typedef struct { - UINT readys; - UINT events; - UINT32 ready[NEVENT_MAXEVENTS]; - UINT32 event[NEVENT_MAXEVENTS]; + NEVTITEM item[NEVENT_MAXEVENTS]; + UINT32 first; } NEVTSAVE; -static UINT32 evt2id(UINT evt) { - - UINT i; +static UINT32 evt2id(NEVENTITEM next) { - for (i=0; iclock; - nit.base = ne->baseclock; - nit.proc = proc2id((INTPTR)ne->proc, evtproc, NELEMENTS(evtproc)); - nit.param = ne->param; - return(statflag_write(sfh, &nit, sizeof(nit))); + if (n == (UINT32)-2) { + return(NEVENTITEM_NONE); + } + else if (n == (UINT32)-1) { + return(NEVENTITEM_TERM); + } + else if (n < NEVENT_MAXEVENTS) { + return(nevent.item + n); + } + else { + /* error! */ + return(NEVENTITEM_TERM); + } } static int flagsave_evt(STFLAGH sfh, const SFENTRY *tbl) { NEVTSAVE nevt; UINT i; - UINT32 id; - UINT eventid[NEVENT_MAXEVENTS]; - int ret; - ZeroMemory(&nevt, sizeof(nevt)); - for (i=0; i= NEVENT_MAXEVENTS) { - return(STATFLAG_FAILURE); - } - ne = nevent.item + evt; - ne->clock = nit.clock; - ne->baseclock = nit.base; - ne->proc = (NEVENTCB)id2proc(nit.proc, evtproc, NELEMENTS(evtproc)); - ne->param = nit.param; - return(ret); + return(statflag_write(sfh, &nevt, sizeof(nevt))); } static int flagload_evt(STFLAGH sfh, const SFENTRY *tbl) { - int ret; NEVTSAVE nevt; + int ret; UINT i; - UINT evt; - UINT readyevents; ret = statflag_read(sfh, &nevt, sizeof(nevt)); - readyevents = 0; - for (i=0; itype != DISKTYPE_NOTREADY) { + file_cpyname(st.fname, fdd->fname, NELEMENTS(st.fname)); + st.ftype = fdd->ftype; + st.readonly = fdd->protect; + fh = file_open_rb(st.fname); if (fh != FILEH_INVALID) { file_getdatetime(fh, &st.date, &st.time); file_close(fh); @@ -500,8 +454,8 @@ static int flagsave_disk(STFLAGH sfh, co REG8 i; ret = STATFLAG_SUCCESS; - for (i=0; i<4; i++) { - ret |= disksave(sfh, fddfile_diskname(i), fddfile_diskprotect(i)); + for (i=0; isfh.hdr.index, xmiltbl[0].index, 10))) { @@ -759,8 +713,7 @@ const SFENTRY *tblterm; statflag_close(sffh); memio_update(); - crtc_bankupdate(); - crtc_regupdate(); + crtc_update(); sndboard_update(); pal_reset();