Write and look for replays in a directory called "Replays"
authorparasti <parasti@78b8d119-cf0a-0410-b17c-f493084dd1d7>
Sun, 14 Jun 2009 02:32:41 +0000 (02:32 +0000)
committerparasti <parasti@78b8d119-cf0a-0410-b17c-f493084dd1d7>
Sun, 14 Jun 2009 02:32:41 +0000 (02:32 +0000)
Nuncabola already does this.  Existing replays will "disappear" from
the replay screen, they will have to be moved to the directory
manually.

git-svn-id: https://s.snth.net/svn/neverball/trunk@2879 78b8d119-cf0a-0410-b17c-f493084dd1d7

ball/demo.c
ball/demo.h
ball/demo_dir.c
ball/demo_dir.h
ball/main.c
ball/st_demo.c
ball/st_title.c

index f9d09de..4110acc 100644 (file)
@@ -192,14 +192,18 @@ void demo_free(struct demo *d)
 
 /*---------------------------------------------------------------------------*/
 
-int demo_exists(const char *name)
+static const char *demo_path(const char *name)
 {
-    char buf[MAXSTR];
+    static char path[MAXSTR];
+    sprintf(path, DEMO_PATH "/%s" REPLAY_EXT, name);
+    return path;
+}
 
-    strcpy(buf, name);
-    strcat(buf, REPLAY_EXT);
+/*---------------------------------------------------------------------------*/
 
-    return fs_exists(buf);
+int demo_exists(const char *name)
+{
+    return fs_exists(demo_path(name));
 }
 
 #define MAXSTRLEN(a) (sizeof ((a)) - 1)
@@ -303,8 +307,7 @@ int demo_play_init(const char *name, const struct level *level,
 
     memset(&demo, 0, sizeof (demo));
 
-    strncpy(demo.filename, name, MAXSTR);
-    strcat(demo.filename, REPLAY_EXT);
+    strncpy(demo.filename, demo_path(name), sizeof (demo.filename) - 1);
 
     demo.mode = mode;
     demo.date = time(NULL);
@@ -381,11 +384,8 @@ void demo_rename(const char *name)
         demo_exists(USER_REPLAY_FILE) &&
         strcmp(name, USER_REPLAY_FILE) != 0)
     {
-        strcpy(src, USER_REPLAY_FILE);
-        strcat(src, REPLAY_EXT);
-
-        strcpy(dst, name);
-        strcat(dst, REPLAY_EXT);
+        strncpy(src, demo_path(USER_REPLAY_FILE), sizeof (src) - 1);
+        strncpy(dst, demo_path(name),             sizeof (dst) - 1);
 
         fs_rename(src, dst);
     }
index 283eb16..d304524 100644 (file)
@@ -9,6 +9,8 @@
 
 /*---------------------------------------------------------------------------*/
 
+#define DEMO_PATH "Replays"
+
 struct demo
 {
     char   name[PATHMAX];     /* demo basename    */
index 6356a5f..b72ad42 100644 (file)
@@ -14,9 +14,9 @@ static int scan_item(struct dir_item *item)
     return (item->data = demo_load(item->path)) ? 1 : 0;
 }
 
-Array demo_dir_scan(const char *path)
+Array demo_dir_scan(void)
 {
-    return fs_dir_scan(path, scan_item);
+    return fs_dir_scan(DEMO_PATH, scan_item);
 }
 
 void demo_dir_free(Array items)
index 21e76b2..20bc594 100644 (file)
@@ -7,7 +7,7 @@
 
 #define DEMO_GET(a, i) ((struct demo *) DIR_ITEM_GET((a), (i))->data)
 
-Array demo_dir_scan(const char *);
+Array demo_dir_scan(void);
 void  demo_dir_free(Array);
 
 #endif
index cf8fabb..8ea4675 100644 (file)
@@ -343,6 +343,11 @@ static void parse_args(int argc, char **argv)
 
 /*---------------------------------------------------------------------------*/
 
+static void make_dirs(void)
+{
+    fs_mkdir(DEMO_PATH);
+}
+
 int main(int argc, char *argv[])
 {
     SDL_Joystick *joy = NULL;
@@ -359,6 +364,7 @@ int main(int argc, char *argv[])
     parse_args(argc, argv);
 
     config_paths(data_path);
+    make_dirs();
 
     /* Initialize SDL system and subsystems */
 
index 46ca3f8..b20b411 100644 (file)
@@ -248,7 +248,7 @@ static int demo_enter(void)
     if (items)
         demo_dir_free(items);
 
-    items = demo_dir_scan("");
+    items = demo_dir_scan();
     total = array_len(items);
 
     id = gui_vstack(0);
index b6180eb..bf0fa31 100644 (file)
@@ -237,7 +237,7 @@ static void title_timer(int id, float dt)
         if (real_time > 1.0f)
         {
             if (!items)
-                items = demo_dir_scan("");
+                items = demo_dir_scan();
 
             if ((demo = pick_demo(items)))
             {