summaryrefslogtreecommitdiff
path: root/apps/plugins/text_viewer/tv_settings.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/text_viewer/tv_settings.c')
-rw-r--r--apps/plugins/text_viewer/tv_settings.c112
1 files changed, 62 insertions, 50 deletions
diff --git a/apps/plugins/text_viewer/tv_settings.c b/apps/plugins/text_viewer/tv_settings.c
index bb4ead7b5d..3b9a684b94 100644
--- a/apps/plugins/text_viewer/tv_settings.c
+++ b/apps/plugins/text_viewer/tv_settings.c
@@ -30,30 +30,31 @@
30 * 30 *
31 * setting file format 31 * setting file format
32 * 32 *
33 * part byte count 33 * part byte count
34 * -------------------------------- 34 * -------------------------------
35 * 'TVGS' 4 35 * 'TVGS' 4
36 * version 1 36 * version 1
37 * word_mode 1 37 * word_mode 1
38 * line_mode 1 38 * line_mode 1
39 * view_mode 1 39 * windows 1 (when version <= 0x32, this value is view_mode)
40 * alignment 1 40 * alignment 1
41 * encoding 1 41 * encoding 1
42 * scrollbar_mode 1 42 * scrollbar_mode 1
43 * (unused) 1 (for compatibility) 43 * (unused) 1 (for compatibility)
44 * page_mode 1 44 * page_mode 1
45 * page_number_mode 1 45 * page_number_mode 1
46 * title_mode 1 46 * title_mode 1
47 * scroll_mode 1 47 * scroll_mode 1
48 * autoscroll_speed 1 48 * autoscroll_speed 1
49 * font name MAX_PATH 49 * (reserved) 16
50 * font name MAX_PATH
50 */ 51 */
51 52
52#define VIEWER_GLOBAL_SETTINGS_FILE VIEWERS_DIR "/viewer.dat" 53#define VIEWER_GLOBAL_SETTINGS_FILE VIEWERS_DIR "/viewer.dat"
53#define TV_GLOBAL_SETTINGS_FILE VIEWERS_DIR "/tv_global.dat" 54#define TV_GLOBAL_SETTINGS_FILE VIEWERS_DIR "/tv_global.dat"
54 55
55#define TV_GLOBAL_SETTINGS_HEADER "\x54\x56\x47\x53" /* "TVGS" */ 56#define TV_GLOBAL_SETTINGS_HEADER "\x54\x56\x47\x53" /* "TVGS" */
56#define TV_GLOBAL_SETTINGS_VERSION 0x32 57#define TV_GLOBAL_SETTINGS_VERSION 0x33
57#define TV_GLOBAL_SETTINGS_HEADER_SIZE 5 58#define TV_GLOBAL_SETTINGS_HEADER_SIZE 5
58#define TV_GLOBAL_SETTINGS_FIRST_VERSION 0x31 59#define TV_GLOBAL_SETTINGS_FIRST_VERSION 0x31
59 60
@@ -62,34 +63,35 @@
62 * 63 *
63 * setting file format 64 * setting file format
64 * 65 *
65 * part byte count 66 * part byte count
66 * -------------------------------- 67 * -----------------------------------
67 * 'TVS' 3 68 * 'TVS' 3
68 * version 1 69 * version 1
69 * file count 2 70 * file count 2
70 * [1st file] 71 * [1st file]
71 * file path MAX_PATH 72 * file path MAX_PATH
72 * next file pos 2 (prefences size + bookmark count * bookmark size + 1) 73 * next file pos 2 (prefences size + bookmark count * bookmark size + 1)
73 * [preferences] 74 * [preferences]
74 * word_mode 1 75 * word_mode 1
75 * line_mode 1 76 * line_mode 1
76 * view_mode 1 77 * windows 1 (when version <= 0x33, this value is view_mode)
77 * alignment 1 78 * alignment 1
78 * encoding 1 79 * encoding 1
79 * scrollbar_mode 1 80 * scrollbar_mode 1
80 * (unused) 1 (for compatibility) 81 * (unused) 1 (for compatibility)
81 * page_mode 1 82 * page_mode 1
82 * header_mode 1 83 * header_mode 1
83 * footer_mode 1 84 * footer_mode 1
84 * scroll_mode 1 85 * scroll_mode 1
85 * autoscroll_speed 1 86 * autoscroll_speed 1
86 * font name MAX_PATH 87 * (reserved) 16
87 * bookmark count 1 88 * font name MAX_PATH
89 * bookmark count 1
88 * [1st bookmark] 90 * [1st bookmark]
89 * file_position 4 91 * file_position 4
90 * page 2 92 * page 2
91 * line 1 93 * line 1
92 * flag 1 94 * flag 1
93 * [2nd bookmark] 95 * [2nd bookmark]
94 * ... 96 * ...
95 * [last bookmark] 97 * [last bookmark]
@@ -104,11 +106,11 @@
104#define TV_SETTINGS_TMP_FILE VIEWERS_DIR "/tv_file.tmp" 106#define TV_SETTINGS_TMP_FILE VIEWERS_DIR "/tv_file.tmp"
105 107
106#define TV_SETTINGS_HEADER "\x54\x56\x53" /* "TVS" */ 108#define TV_SETTINGS_HEADER "\x54\x56\x53" /* "TVS" */
107#define TV_SETTINGS_VERSION 0x33 109#define TV_SETTINGS_VERSION 0x34
108#define TV_SETTINGS_HEADER_SIZE 4 110#define TV_SETTINGS_HEADER_SIZE 4
109#define TV_SETTINGS_FIRST_VERSION 0x32 111#define TV_SETTINGS_FIRST_VERSION 0x32
110 112
111#define TV_PREFERENCES_SIZE (12 + MAX_PATH) 113#define TV_PREFERENCES_SIZE (28 + MAX_PATH)
112 114
113/* ---------------------------------------------------------------------------- 115/* ----------------------------------------------------------------------------
114 * read/write the preferences 116 * read/write the preferences
@@ -122,18 +124,25 @@ static bool tv_read_preferences(int pfd, int version, struct tv_preferences *pre
122 int read_size = TV_PREFERENCES_SIZE; 124 int read_size = TV_PREFERENCES_SIZE;
123 125
124 if (version == 0) 126 if (version == 0)
125 read_size--; 127 read_size -= 17;
128 else if (version == 1)
129 read_size -= 16;
126 130
127 if (rb->read(pfd, buf, read_size) < 0) 131 if (rb->read(pfd, buf, read_size) < 0)
128 return false; 132 return false;
129 133
130 prefs->word_mode = *p++; 134 prefs->word_mode = *p++;
131 prefs->line_mode = *p++; 135 prefs->line_mode = *p++;
132 prefs->view_mode = *p++; 136
137 prefs->windows = *p++;
138 if (version <= 1)
139 prefs->windows++;
140
133 if (version > 0) 141 if (version > 0)
134 prefs->alignment = *p++; 142 prefs->alignment = *p++;
135 else 143 else
136 prefs->alignment = LEFT; 144 prefs->alignment = LEFT;
145
137 prefs->encoding = *p++; 146 prefs->encoding = *p++;
138 prefs->scrollbar_mode = *p++; 147 prefs->scrollbar_mode = *p++;
139 /* skip need_scrollbar */ 148 /* skip need_scrollbar */
@@ -143,7 +152,9 @@ static bool tv_read_preferences(int pfd, int version, struct tv_preferences *pre
143 prefs->footer_mode = *p++; 152 prefs->footer_mode = *p++;
144 prefs->scroll_mode = *p++; 153 prefs->scroll_mode = *p++;
145 prefs->autoscroll_speed = *p++; 154 prefs->autoscroll_speed = *p++;
146 rb->memcpy(prefs->font_name, p, MAX_PATH); 155
156 rb->memcpy(prefs->font_name, buf + read_size - MAX_PATH, MAX_PATH);
157
147#ifdef HAVE_LCD_BITMAP 158#ifdef HAVE_LCD_BITMAP
148 prefs->font = rb->font_get(FONT_UI); 159 prefs->font = rb->font_get(FONT_UI);
149#endif 160#endif
@@ -158,7 +169,7 @@ static bool tv_write_preferences(int pfd, const struct tv_preferences *prefs)
158 169
159 *p++ = prefs->word_mode; 170 *p++ = prefs->word_mode;
160 *p++ = prefs->line_mode; 171 *p++ = prefs->line_mode;
161 *p++ = prefs->view_mode; 172 *p++ = prefs->windows;
162 *p++ = prefs->alignment; 173 *p++ = prefs->alignment;
163 *p++ = prefs->encoding; 174 *p++ = prefs->encoding;
164 *p++ = prefs->scrollbar_mode; 175 *p++ = prefs->scrollbar_mode;
@@ -169,7 +180,8 @@ static bool tv_write_preferences(int pfd, const struct tv_preferences *prefs)
169 *p++ = prefs->footer_mode; 180 *p++ = prefs->footer_mode;
170 *p++ = prefs->scroll_mode; 181 *p++ = prefs->scroll_mode;
171 *p++ = prefs->autoscroll_speed; 182 *p++ = prefs->autoscroll_speed;
172 rb->memcpy(p, prefs->font_name, MAX_PATH); 183
184 rb->memcpy(buf + 28, prefs->font_name, MAX_PATH);
173 185
174 return (rb->write(pfd, buf, TV_PREFERENCES_SIZE) >= 0); 186 return (rb->write(pfd, buf, TV_PREFERENCES_SIZE) >= 0);
175} 187}