--- xmil/statsave.c 2004/08/14 12:16:17 1.4 +++ 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, @@ -324,7 +320,7 @@ void statflag_seterr(STFLAGH sfh, const } -// ---- common +/* common */ static int flagsave_common(STFLAGH sfh, const SFENTRY *tbl) { @@ -337,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); @@ -501,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))) {