X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Ffiles.c;h=b46856d21fcc8eb63d3697dba10bf37b8d8a58ec;hb=b7c6f2a0e12b4ee2d4111d1e671bf2b8b14c71b4;hp=1141c3b308e41a06dc9c9e7e4665d33c811b41db;hpb=10bdd396f0cd0ff1fc0a504cd41949ff39937b30;p=flatwaifu.git diff --git a/src/files.c b/src/files.c index 1141c3b..b46856d 100644 --- a/src/files.c +++ b/src/files.c @@ -22,27 +22,32 @@ #include #include "files.h" #include "error.h" -#include "cp866.h" #include "map.h" // MAP_load +#include "save.h" // SAVE_getname + +#ifdef UNIX +# include +#endif #include "common/streams.h" #include "common/files.h" #include "common/wadres.h" +#include "common/cp866.h" int d_start, d_end; + +char savname[SAVE_MAX][SAVE_MAXLEN]; +char savok[SAVE_MAX]; + static int m_start, m_end; static int s_start, s_end; -void F_startup (void) { - logo("F_startup: setup file system\n"); -} - void F_addwad (const char *fn) { static int i = 0; - static FILE_Reader wadh[MAX_WADS]; + static FILE_Stream wadh[MAX_WADS]; if (i < MAX_WADS) { - if (FILE_OpenReader(&wadh[i], fn)) { + if (FILE_Open(&wadh[i], fn, "rb")) { if (WADRES_addwad(&wadh[i].base)) { i += 1; } else { @@ -60,9 +65,6 @@ void F_initwads (void) { if (!WADRES_rehash()) { ERR_failinit("F_initwads: failed rehash"); } -} - -void F_allocres (void) { d_start = F_getresid("D_START"); d_end = F_getresid("D_END"); m_start = F_getresid("M_START"); @@ -71,10 +73,6 @@ void F_allocres (void) { s_end = F_getresid("S_END"); } -void F_loadres (int r, void *p) { - WADRES_getdata(r, p); -} - int F_findres (const char n[8]) { return WADRES_find(n); } @@ -117,6 +115,7 @@ int F_getreslen (int r) { return WADRES_getsize(r); } +/* void F_nextmus (char *s) { int i = F_findres(s); if (i <= m_start || i >= m_end) { @@ -145,13 +144,14 @@ void F_randmus (char *s) { F_nextmus(s); } } +*/ void F_loadmap (char n[8]) { int id = F_getresid(n); if (id != -1) { - Reader *r = WADRES_getbasereader(id); + Stream *r = WADRES_getbasereader(id); long offset = WADRES_getoffset(id); - r->setpos(r, offset); + stream_setpos(r, offset); if (!MAP_load(r)) { ERR_fatal("Failed to load map"); } @@ -159,3 +159,57 @@ void F_loadmap (char n[8]) { ERR_fatal("Failed to load map: resource %.8s not found", n); } } + +static char *getsavfpname (int n, int ro) { + static char fn[] = "savgame0.dat"; + static char p[100]; + fn[7] = n + '0'; +#ifdef UNIX + char *e = getenv("HOME"); + strncpy(p, e, 60); + strcat(p, "/.flatwaifu"); + if (!ro) { + mkdir(p, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } + strcat(p, "/"); + strcat(p, fn); +#else + strcpy(p, fn); +#endif + return p; +} + +void F_getsavnames (void) { + FILE_Stream rd; + for (int i = 0; i < SAVE_MAX; ++i) { + savok[i] = 0; + char *p = getsavfpname(i, 1); + if (FILE_Open(&rd, p, "rb")) { + savok[i] = SAVE_getname(&rd.base, savname[i]); + FILE_Close(&rd); + } + if (!savok[i]) { + memset(savname[i], 0, 24); + } else { + savname[i][23] = 0; + } + } +} + +void F_loadgame (int n) { + FILE_Stream rd; + char *p = getsavfpname(n, 1); + if (FILE_Open(&rd, p, "rb")) { + SAVE_load(&rd.base); + FILE_Close(&rd); + } +} + +void F_savegame (int n, char *s) { + FILE_Stream wr; + char *p = getsavfpname(n, 0); + if (FILE_Open(&wr, p, "wb")) { + SAVE_save(&wr.base, s); + FILE_Close(&wr); + } +}