diff --git a/src/files.c b/src/files.c
index 1141c3b308e41a06dc9c9e7e4665d33c811b41db..b46856d21fcc8eb63d3697dba10bf37b8d8a58ec 100644 (file)
--- a/src/files.c
+++ b/src/files.c
#include <assert.h>
#include "files.h"
#include "error.h"
-#include "cp866.h"
#include "map.h" // MAP_load
+#include "save.h" // SAVE_getname
+
+#ifdef UNIX
+# include <sys/stat.h>
+#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 {
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");
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);
}
return WADRES_getsize(r);
}
+/*
void F_nextmus (char *s) {
int i = F_findres(s);
if (i <= m_start || i >= m_end) {
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");
}
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);
+ }
+}