summaryrefslogtreecommitdiff
path: root/session.c
diff options
context:
space:
mode:
Diffstat (limited to 'session.c')
-rw-r--r--session.c63
1 files changed, 42 insertions, 21 deletions
diff --git a/session.c b/session.c
index 6863e2e5..c76bfe7a 100644
--- a/session.c
+++ b/session.c
@@ -22,13 +22,31 @@
#include "session.h"
#include "common.h"
+#define SESS_CURRENT_VER 2
+
+// NOTE: dont forget to update session_reset when changing that
char session_dir[2048];
float session_volume;
-int session_playlist_order;
-int session_playlist_looping;
+int8_t session_playlist_order;
+int8_t session_playlist_looping;
+int8_t session_cursor_follows_playback = 1;
int session_win_attrs[5] = { 40, 40, 500, 300, 0 };
static uint8_t sessfile_magic[] = { 0xdb, 0xef, 0x5e, 0x55 }; // dbefsess in hexspeak
+void
+session_reset (void) {
+ session_volume = 0;
+ session_dir[0] = 0;
+ session_playlist_looping = 0;
+ session_playlist_order = 0;
+ session_cursor_follows_playback = 1;
+ session_win_attrs[0] = 40;
+ session_win_attrs[1] = 40;
+ session_win_attrs[2] = 500;
+ session_win_attrs[3] = 300;
+ session_win_attrs[4] = 0;
+}
+
static int
write_i16_be (uint16_t val, FILE *fp) {
uint8_t b;
@@ -105,19 +123,6 @@ read_i32_be (uint32_t *pval, FILE *fp) {
return 4;
}
-void
-session_reset (void) {
- session_volume = 0;
- session_dir[0] = 0;
- session_playlist_looping = 0;
- session_playlist_order = 0;
- session_win_attrs[0] = 40;
- session_win_attrs[1] = 40;
- session_win_attrs[2] = 500;
- session_win_attrs[3] = 300;
- session_win_attrs[4] = 0;
-}
-
int
session_save (const char *fname) {
FILE *fp = fopen (fname, "w+b");
@@ -129,7 +134,7 @@ session_save (const char *fname) {
if (fwrite (sessfile_magic, 1, 4, fp) != 4) {
goto session_save_fail;
}
- uint8_t version = 1;
+ uint8_t version = SESS_CURRENT_VER;
if (fwrite (&version, 1, 1, fp) != 1) {
goto session_save_fail;
}
@@ -143,10 +148,13 @@ session_save (const char *fname) {
if (write_i32_be (*((uint32_t*)&session_volume), fp) != 4) {
goto session_save_fail;
}
- if (write_i32_be (session_playlist_order, fp) != 4) {
+ if (fwrite (&session_playlist_order, 1, 1, fp) != 1) {
+ goto session_save_fail;
+ }
+ if (fwrite (&session_playlist_looping, 1, 1, fp) != 1) {
goto session_save_fail;
}
- if (write_i32_be (session_playlist_looping, fp) != 4) {
+ if (fwrite (&session_cursor_follows_playback, 1, 1, fp) != 1) {
goto session_save_fail;
}
for (int k = 0; k < 5; k++) {
@@ -180,7 +188,7 @@ session_load (const char *fname) {
if (fread (&version, 1, 1, fp) != 1) {
goto session_load_fail;
}
- if (version != 1) {
+ if (version != SESS_CURRENT_VER) {
goto session_load_fail;
}
uint16_t l;
@@ -197,18 +205,21 @@ session_load (const char *fname) {
if (read_i32_be ((uint32_t*)&session_volume, fp) != 4) {
goto session_load_fail;
}
- if (read_i32_be (&session_playlist_order, fp) != 4) {
+ if (fread (&session_playlist_order, 1, 1, fp) != 1) {
goto session_load_fail;
}
if (session_playlist_order < 0 || session_playlist_order > 2) {
goto session_load_fail;
}
- if (read_i32_be (&session_playlist_looping, fp) != 4) {
+ if (fread (&session_playlist_looping, 1, 1, fp) != 1) {
goto session_load_fail;
}
if (session_playlist_looping < 0 || session_playlist_looping > 2) {
goto session_load_fail;
}
+ if (fread (&session_cursor_follows_playback, 1, 1, fp) != 1) {
+ goto session_load_fail;
+ }
for (int k = 0; k < 5; k++) {
if (read_i32_be (&session_win_attrs[k], fp) != 4) {
goto session_load_fail;
@@ -265,3 +276,13 @@ int
session_get_playlist_looping (void) {
return session_playlist_looping;
}
+
+void
+session_set_cursor_follows_playback (int on) {
+ session_cursor_follows_playback = on;
+}
+
+int
+session_get_cursor_follows_playback (void) {
+ return session_cursor_follows_playback;
+}