summaryrefslogtreecommitdiff
path: root/session.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-09-06 18:50:41 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-09-06 18:50:41 +0200
commit494d90094d3bdfafb51aaf899ad43ed887e14605 (patch)
treeeb3e1ccecf90a53f9632efd4ce3883ba7fc9b7f9 /session.c
parent9ea67a087997dec52b631174324c69fa9b28a25f (diff)
added basic session management for column widths
Diffstat (limited to 'session.c')
-rw-r--r--session.c96
1 files changed, 94 insertions, 2 deletions
diff --git a/session.c b/session.c
index 73b1eda5..01f4a6f1 100644
--- a/session.c
+++ b/session.c
@@ -22,7 +22,9 @@
#include "session.h"
#include "common.h"
-#define SESS_CURRENT_VER 2
+#define SESS_CURRENT_VER 3
+// changelog:
+// version 3 adds column widths
// NOTE: dont forget to update session_reset when changing that
char session_dir[2048];
@@ -31,6 +33,12 @@ int8_t session_playlist_order;
int8_t session_playlist_looping;
int8_t session_scroll_follows_playback = 1;
int session_win_attrs[5] = { 40, 40, 500, 300, 0 };
+#define PL_MAX_COLUMNS 5
+static int session_main_colwidths[PL_MAX_COLUMNS] = { 50, 150, 50, 150, 50 };
+static int session_main_numcols = 5;
+static int session_search_colwidths[PL_MAX_COLUMNS] = { 0, 150, 50, 150, 50 };;
+static int session_search_numcols = 5;
+
static uint8_t sessfile_magic[] = { 0xdb, 0xef, 0x5e, 0x55 }; // dbefsess in hexspeak
void
@@ -45,6 +53,16 @@ session_reset (void) {
session_win_attrs[2] = 500;
session_win_attrs[3] = 300;
session_win_attrs[4] = 0;
+ {
+ session_main_numcols = 5;
+ int colwidths[] = { 50, 150, 50, 150, 50 };
+ memcpy (session_main_colwidths, colwidths, sizeof (colwidths));
+ }
+ {
+ session_search_numcols = 5;
+ int colwidths[] = { 0, 150, 50, 150, 50 };
+ memcpy (session_search_colwidths, colwidths, sizeof (colwidths));
+ }
}
static int
@@ -162,6 +180,32 @@ session_save (const char *fname) {
goto session_save_fail;
}
}
+ {
+ // main column widths
+ uint8_t cl = session_main_numcols;
+ if (fwrite (&cl, 1, 1, fp) != 1) {
+ goto session_save_fail;
+ }
+ for (int i = 0; i < cl; i++) {
+ int16_t w = session_main_colwidths[i];
+ if (fwrite (&w, 1, sizeof (w), fp) != sizeof (w)) {
+ goto session_save_fail;
+ }
+ }
+ }
+ {
+ // search column widths
+ uint8_t cl = session_search_numcols;
+ if (fwrite (&cl, 1, 1, fp) != 1) {
+ goto session_save_fail;
+ }
+ for (int i = 0; i < cl; i++) {
+ int16_t w = session_search_colwidths[i];
+ if (fwrite (&w, 1, sizeof (w), fp) != sizeof (w)) {
+ goto session_save_fail;
+ }
+ }
+ }
fclose (fp);
return 0;
session_save_fail:
@@ -188,7 +232,7 @@ session_load (const char *fname) {
if (fread (&version, 1, 1, fp) != 1) {
goto session_load_fail;
}
- if (version != SESS_CURRENT_VER) {
+ if (version < 2 || version > SESS_CURRENT_VER) {
goto session_load_fail;
}
uint16_t l;
@@ -225,6 +269,44 @@ session_load (const char *fname) {
goto session_load_fail;
}
}
+ if (version >= 3) {
+ {
+ // main column widths
+ uint8_t l;
+ if (fread (&l, 1, 1, fp) != 1) {
+ goto session_load_fail;
+ }
+ if (l > PL_MAX_COLUMNS) {
+ goto session_load_fail;
+ }
+ session_main_numcols = l;
+ for (int i = 0; i < l; i++) {
+ int16_t w;
+ if (fread (&w, 1, sizeof (w), fp) != sizeof (w)) {
+ goto session_load_fail;
+ }
+ session_main_colwidths[i] = w;
+ }
+ }
+ {
+ // search column widths
+ uint8_t l;
+ if (fread (&l, 1, 1, fp) != 1) {
+ goto session_load_fail;
+ }
+ if (l > PL_MAX_COLUMNS) {
+ goto session_load_fail;
+ }
+ session_search_numcols = l;
+ for (int i = 0; i < l; i++) {
+ int16_t w;
+ if (fread (&w, 1, sizeof (w), fp) != sizeof (w)) {
+ goto session_load_fail;
+ }
+ session_search_colwidths[i] = w;
+ }
+ }
+ }
// printf ("dir: %s\n", session_dir);
// printf ("volume: %f\n", session_volume);
// printf ("win: %d %d %d %d %d\n", session_win_attrs[0], session_win_attrs[1], session_win_attrs[2], session_win_attrs[3], session_win_attrs[4]);
@@ -286,3 +368,13 @@ int
session_get_scroll_follows_playback (void) {
return session_scroll_follows_playback;
}
+
+int *
+session_get_main_colwidths_ptr (void) {
+ return session_main_colwidths;
+}
+
+int *
+session_get_search_colwidths_ptr (void) {
+ return session_search_colwidths;
+}