#include "error.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/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;
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);
+ }
+}
#include "glob.h"
+#define SAVE_MAX 7
+#define SAVE_MAXLEN 24
+
+extern char savname[SAVE_MAX][SAVE_MAXLEN];
+extern char savok[SAVE_MAX];
extern int d_start, d_end;
void F_startup (void);
void F_getresname (char n[8], int r);
int F_getsprid (const char n[4], int s, int d, char *dir);
int F_getreslen (int r);
+
void F_nextmus (char *s);
void F_randmus (char *s);
void F_loadmap (char n[8]);
+void F_getsavnames (void);
+void F_savegame (int n, char *s);
+void F_loadgame (int n);
+
#endif /* FILES_H_INCLUDED */
#include "render.h"
#include "music.h"
-
#include <string.h>
-#ifdef UNIX
-# include <sys/stat.h>
-#endif
#include <assert.h>
-#include "files.h"
#include "common/streams.h"
#include "common/files.h"
-char savname[SAVE_MAX][SAVE_MAXLEN];
-char savok[SAVE_MAX];
-
static void DOT_savegame (Stream *h) {
int i, n;
for (i = n = 0; i < MAXDOT; ++i) {
}
}
-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 SAVE_save (Stream *w, const char name[24]) {
assert(w != NULL);
stream_write(name, 24, 1, w); // slot name
WP_savegame(w);
}
-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);
- }
-}
-
void SAVE_load (Stream *h) {
int16_t version;
stream_setpos(h, 24); // skip name
}
}
-void F_getsavnames (void) {
- int i;
- char *p;
- FILE_Stream rd;
- int16_t version;
- for (i = 0; i < 7; ++i) {
- p = getsavfpname(i, 1);
- memset(savname[i], 0, 24);
- savok[i] = 0;
- if (FILE_Open(&rd, p, "rb")) {
- version = -1;
- stream_read(savname[i], 24, 1, &rd.base);
- version = stream_read16(&rd.base);
- savname[i][23] = 0;
- savok[i] = version == 3;
- FILE_Close(&rd);
- }
- }
-}
-
-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);
- }
+int SAVE_getname (Stream *r, char name[24]) {
+ stream_read(name, 24, 1, r);
+ int16_t version = stream_read16(r);
+ return version == 3;
}
#include "common/streams.h"
-#define SAVE_MAX 7
-#define SAVE_MAXLEN 24
-
-extern char savname[SAVE_MAX][SAVE_MAXLEN];
-extern char savok[SAVE_MAX];
-
-void F_getsavnames (void);
-void F_savegame (int n, char *s);
-void F_loadgame (int n);
-
+int SAVE_getname (Stream *r, char name[24]);
void SAVE_save (Stream *w, const char name[24]);
void SAVE_load (Stream *r);