diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugins/text_viewer/tv_action.c | 7 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_pager.c | 4 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_pager.h | 8 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_preferences.c | 26 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_preferences.h | 4 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_reader.c | 16 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_reader.h | 8 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_text_processor.c | 7 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_text_processor.h | 11 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_text_reader.c | 6 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_text_reader.h | 8 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_window.c | 54 | ||||
-rw-r--r-- | apps/plugins/text_viewer/tv_window.h | 8 |
13 files changed, 115 insertions, 52 deletions
diff --git a/apps/plugins/text_viewer/tv_action.c b/apps/plugins/text_viewer/tv_action.c index 546ee99842..88338feb1e 100644 --- a/apps/plugins/text_viewer/tv_action.c +++ b/apps/plugins/text_viewer/tv_action.c | |||
@@ -30,10 +30,15 @@ | |||
30 | 30 | ||
31 | bool tv_init(const unsigned char *file) | 31 | bool tv_init(const unsigned char *file) |
32 | { | 32 | { |
33 | size_t size; | ||
34 | |||
35 | /* get the plugin buffer */ | ||
36 | unsigned char *buf = rb->plugin_get_buffer(&size); | ||
37 | |||
33 | tv_init_bookmark(); | 38 | tv_init_bookmark(); |
34 | 39 | ||
35 | /* initialize modules */ | 40 | /* initialize modules */ |
36 | if (!tv_init_window()) | 41 | if (!tv_init_window(&buf, &size)) |
37 | return false; | 42 | return false; |
38 | 43 | ||
39 | /* load the preferences and bookmark */ | 44 | /* load the preferences and bookmark */ |
diff --git a/apps/plugins/text_viewer/tv_pager.c b/apps/plugins/text_viewer/tv_pager.c index 0c109530f8..e7016c7fef 100644 --- a/apps/plugins/text_viewer/tv_pager.c +++ b/apps/plugins/text_viewer/tv_pager.c | |||
@@ -85,7 +85,7 @@ static void tv_change_preferences(const struct tv_preferences *oldp) | |||
85 | tv_seek(0, SEEK_SET); | 85 | tv_seek(0, SEEK_SET); |
86 | } | 86 | } |
87 | 87 | ||
88 | bool tv_init_pager(void) | 88 | bool tv_init_pager(unsigned char **buf, size_t *size) |
89 | { | 89 | { |
90 | tv_set_screen_pos(&cur_pos); | 90 | tv_set_screen_pos(&cur_pos); |
91 | tv_add_preferences_change_listner(tv_change_preferences); | 91 | tv_add_preferences_change_listner(tv_change_preferences); |
@@ -95,7 +95,7 @@ bool tv_init_pager(void) | |||
95 | 95 | ||
96 | line_pos[0] = 0; | 96 | line_pos[0] = 0; |
97 | 97 | ||
98 | return tv_init_reader(); | 98 | return tv_init_reader(buf, size); |
99 | } | 99 | } |
100 | 100 | ||
101 | void tv_finalize_pager(void) | 101 | void tv_finalize_pager(void) |
diff --git a/apps/plugins/text_viewer/tv_pager.h b/apps/plugins/text_viewer/tv_pager.h index ec1de24b5a..27795a1637 100644 --- a/apps/plugins/text_viewer/tv_pager.h +++ b/apps/plugins/text_viewer/tv_pager.h | |||
@@ -30,11 +30,17 @@ | |||
30 | /* | 30 | /* |
31 | * initialize the pager module | 31 | * initialize the pager module |
32 | * | 32 | * |
33 | * [In/Out] buf | ||
34 | * the start pointer of the buffer | ||
35 | * | ||
36 | * [In/Out] size | ||
37 | * buffer size | ||
38 | * | ||
33 | * return | 39 | * return |
34 | * true initialize success | 40 | * true initialize success |
35 | * false initialize failure | 41 | * false initialize failure |
36 | */ | 42 | */ |
37 | bool tv_init_pager(void); | 43 | bool tv_init_pager(unsigned char **buf, size_t *bufsize); |
38 | 44 | ||
39 | /* finalize the pager module */ | 45 | /* finalize the pager module */ |
40 | void tv_finalize_pager(void); | 46 | void tv_finalize_pager(void); |
diff --git a/apps/plugins/text_viewer/tv_preferences.c b/apps/plugins/text_viewer/tv_preferences.c index b1045fba7d..ec59dd89a8 100644 --- a/apps/plugins/text_viewer/tv_preferences.c +++ b/apps/plugins/text_viewer/tv_preferences.c | |||
@@ -23,9 +23,10 @@ | |||
23 | #include "plugin.h" | 23 | #include "plugin.h" |
24 | #include "tv_preferences.h" | 24 | #include "tv_preferences.h" |
25 | 25 | ||
26 | /* global preferences */ | 26 | |
27 | static struct tv_preferences prefs; | 27 | static struct tv_preferences prefs; |
28 | struct tv_preferences *preferences = &prefs; | 28 | /* read-only preferences pointer, for access by other files */ |
29 | const struct tv_preferences * const preferences = &prefs; | ||
29 | 30 | ||
30 | static int listner_count = 0; | 31 | static int listner_count = 0; |
31 | 32 | ||
@@ -66,24 +67,6 @@ static void tv_notify_change_preferences(const struct tv_preferences *oldp) | |||
66 | } | 67 | } |
67 | } | 68 | } |
68 | 69 | ||
69 | static void tv_check_header_and_footer(void) | ||
70 | { | ||
71 | if (rb->global_settings->statusbar != STATUSBAR_TOP) | ||
72 | { | ||
73 | if (preferences->header_mode == HD_SBAR) | ||
74 | preferences->header_mode = HD_NONE; | ||
75 | else if (preferences->header_mode == HD_BOTH) | ||
76 | preferences->header_mode = HD_PATH; | ||
77 | } | ||
78 | if (rb->global_settings->statusbar != STATUSBAR_BOTTOM) | ||
79 | { | ||
80 | if (preferences->footer_mode == FT_SBAR) | ||
81 | preferences->footer_mode = FT_NONE; | ||
82 | else if (preferences->footer_mode == FT_BOTH) | ||
83 | preferences->footer_mode = FT_PAGE; | ||
84 | } | ||
85 | } | ||
86 | |||
87 | void tv_set_preferences(const struct tv_preferences *new_prefs) | 70 | void tv_set_preferences(const struct tv_preferences *new_prefs) |
88 | { | 71 | { |
89 | static struct tv_preferences old_prefs; | 72 | static struct tv_preferences old_prefs; |
@@ -94,8 +77,7 @@ void tv_set_preferences(const struct tv_preferences *new_prefs) | |||
94 | tv_copy_preferences((oldp = &old_prefs)); | 77 | tv_copy_preferences((oldp = &old_prefs)); |
95 | is_initialized = true; | 78 | is_initialized = true; |
96 | 79 | ||
97 | rb->memcpy(preferences, new_prefs, sizeof(struct tv_preferences)); | 80 | rb->memcpy(&prefs, new_prefs, sizeof(struct tv_preferences)); |
98 | tv_check_header_and_footer(); | ||
99 | tv_notify_change_preferences(oldp); | 81 | tv_notify_change_preferences(oldp); |
100 | } | 82 | } |
101 | 83 | ||
diff --git a/apps/plugins/text_viewer/tv_preferences.h b/apps/plugins/text_viewer/tv_preferences.h index 906f5c5f16..7705a1673a 100644 --- a/apps/plugins/text_viewer/tv_preferences.h +++ b/apps/plugins/text_viewer/tv_preferences.h | |||
@@ -122,9 +122,9 @@ struct tv_preferences { | |||
122 | }; | 122 | }; |
123 | 123 | ||
124 | /* | 124 | /* |
125 | * global pointer to the preferences | 125 | * global pointer to the preferences (read-only) |
126 | */ | 126 | */ |
127 | extern struct tv_preferences *preferences; | 127 | extern const struct tv_preferences * const preferences; |
128 | 128 | ||
129 | /* | 129 | /* |
130 | * change the preferences | 130 | * change the preferences |
diff --git a/apps/plugins/text_viewer/tv_reader.c b/apps/plugins/text_viewer/tv_reader.c index 4e91af9f98..8403c305af 100644 --- a/apps/plugins/text_viewer/tv_reader.c +++ b/apps/plugins/text_viewer/tv_reader.c | |||
@@ -170,18 +170,18 @@ static void tv_change_preferences(const struct tv_preferences *oldp) | |||
170 | tv_seek(cur_file_pos + cur_start_file_pos - start_file_pos, SEEK_SET); | 170 | tv_seek(cur_file_pos + cur_start_file_pos - start_file_pos, SEEK_SET); |
171 | } | 171 | } |
172 | 172 | ||
173 | bool tv_init_reader(void) | 173 | bool tv_init_reader(unsigned char **buf, size_t *size) |
174 | { | 174 | { |
175 | size_t size; | 175 | if (*size < 2 * TV_MIN_BLOCK_SIZE) |
176 | |||
177 | /* get the plugin buffer */ | ||
178 | reader_buffer = rb->plugin_get_buffer(&size); | ||
179 | |||
180 | if (size < 2 * TV_MIN_BLOCK_SIZE) | ||
181 | return false; | 176 | return false; |
182 | 177 | ||
183 | block_size = size / 2; | 178 | block_size = *size / 2; |
184 | buffer_size = 2 * block_size; | 179 | buffer_size = 2 * block_size; |
180 | reader_buffer = *buf; | ||
181 | |||
182 | *buf += buffer_size; | ||
183 | *size -= buffer_size; | ||
184 | |||
185 | tv_add_preferences_change_listner(tv_change_preferences); | 185 | tv_add_preferences_change_listner(tv_change_preferences); |
186 | 186 | ||
187 | return true; | 187 | return true; |
diff --git a/apps/plugins/text_viewer/tv_reader.h b/apps/plugins/text_viewer/tv_reader.h index 2ee0b828ab..0b079edddb 100644 --- a/apps/plugins/text_viewer/tv_reader.h +++ b/apps/plugins/text_viewer/tv_reader.h | |||
@@ -28,11 +28,17 @@ | |||
28 | /* | 28 | /* |
29 | * initialize the reader module | 29 | * initialize the reader module |
30 | * | 30 | * |
31 | * [In/Out] buf | ||
32 | * the start pointer of the buffer | ||
33 | * | ||
34 | * [In/Out] size | ||
35 | * enabled buffer size | ||
36 | * | ||
31 | * return | 37 | * return |
32 | * true initialize success | 38 | * true initialize success |
33 | * false initialize failure | 39 | * false initialize failure |
34 | */ | 40 | */ |
35 | bool tv_init_reader(void); | 41 | bool tv_init_reader(unsigned char **buf, size_t *bufsize); |
36 | 42 | ||
37 | /* finalize the reader module */ | 43 | /* finalize the reader module */ |
38 | void tv_finalize_reader(void); | 44 | void tv_finalize_reader(void); |
diff --git a/apps/plugins/text_viewer/tv_text_processor.c b/apps/plugins/text_viewer/tv_text_processor.c index f9a2fad1f2..3ad388e6c5 100644 --- a/apps/plugins/text_viewer/tv_text_processor.c +++ b/apps/plugins/text_viewer/tv_text_processor.c | |||
@@ -544,11 +544,16 @@ int tv_create_formed_text(const unsigned char *src, ssize_t bufsize, | |||
544 | return size; | 544 | return size; |
545 | } | 545 | } |
546 | 546 | ||
547 | void tv_init_text_processor(void) | 547 | bool tv_init_text_processor(unsigned char **buf, size_t *size) |
548 | { | 548 | { |
549 | /* unused : no need for dynamic buffer yet */ | ||
550 | (void)buf; | ||
551 | (void)size; | ||
552 | |||
549 | text_type = TV_TEXT_UNKNOWN; | 553 | text_type = TV_TEXT_UNKNOWN; |
550 | expand_extra_line = false; | 554 | expand_extra_line = false; |
551 | is_break_line = false; | 555 | is_break_line = false; |
556 | return true; | ||
552 | } | 557 | } |
553 | 558 | ||
554 | void tv_set_creation_conditions(int blocks, int width) | 559 | void tv_set_creation_conditions(int blocks, int width) |
diff --git a/apps/plugins/text_viewer/tv_text_processor.h b/apps/plugins/text_viewer/tv_text_processor.h index 8a9de9075b..33e6a021f9 100644 --- a/apps/plugins/text_viewer/tv_text_processor.h +++ b/apps/plugins/text_viewer/tv_text_processor.h | |||
@@ -26,8 +26,17 @@ | |||
26 | /* | 26 | /* |
27 | * initialize the text processor module | 27 | * initialize the text processor module |
28 | * | 28 | * |
29 | * [In/Out] buf | ||
30 | * the start pointer of the buffer | ||
31 | * | ||
32 | * [In/Out] size | ||
33 | * enabled buffer size | ||
34 | * | ||
35 | * return | ||
36 | * true initialize success | ||
37 | * false initialize failure | ||
29 | */ | 38 | */ |
30 | void tv_init_text_processor(void); | 39 | bool tv_init_text_processor(unsigned char **buf, size_t *bufsize); |
31 | 40 | ||
32 | /* | 41 | /* |
33 | * set the processing conditions | 42 | * set the processing conditions |
diff --git a/apps/plugins/text_viewer/tv_text_reader.c b/apps/plugins/text_viewer/tv_text_reader.c index 53c8f6738f..ec1c138df0 100644 --- a/apps/plugins/text_viewer/tv_text_reader.c +++ b/apps/plugins/text_viewer/tv_text_reader.c | |||
@@ -29,11 +29,9 @@ | |||
29 | static int get_block; | 29 | static int get_block; |
30 | static bool get_double_blocks; | 30 | static bool get_double_blocks; |
31 | 31 | ||
32 | bool tv_init_text_reader(void) | 32 | bool tv_init_text_reader(unsigned char **buf, size_t *size) |
33 | { | 33 | { |
34 | tv_init_text_processor(); | 34 | return tv_init_text_processor(buf, size) && tv_init_pager(buf, size); |
35 | |||
36 | return tv_init_pager(); | ||
37 | } | 35 | } |
38 | 36 | ||
39 | void tv_finalize_text_reader(void) | 37 | void tv_finalize_text_reader(void) |
diff --git a/apps/plugins/text_viewer/tv_text_reader.h b/apps/plugins/text_viewer/tv_text_reader.h index 50059c8b3c..5162892f4b 100644 --- a/apps/plugins/text_viewer/tv_text_reader.h +++ b/apps/plugins/text_viewer/tv_text_reader.h | |||
@@ -26,11 +26,17 @@ | |||
26 | /* | 26 | /* |
27 | * initialize the text reader module | 27 | * initialize the text reader module |
28 | * | 28 | * |
29 | * [In/Out] buf | ||
30 | * the start pointer of the buffer | ||
31 | * | ||
32 | * [In/Out] size | ||
33 | * enabled buffer size | ||
34 | * | ||
29 | * return | 35 | * return |
30 | * true initialize success | 36 | * true initialize success |
31 | * false initialize failure | 37 | * false initialize failure |
32 | */ | 38 | */ |
33 | bool tv_init_text_reader(void); | 39 | bool tv_init_text_reader(unsigned char **buf, size_t *bufsize); |
34 | 40 | ||
35 | /* finalize the text reader module */ | 41 | /* finalize the text reader module */ |
36 | void tv_finalize_text_reader(void); | 42 | void tv_finalize_text_reader(void); |
diff --git a/apps/plugins/text_viewer/tv_window.c b/apps/plugins/text_viewer/tv_window.c index c733d5a088..f1f2033ef1 100644 --- a/apps/plugins/text_viewer/tv_window.c +++ b/apps/plugins/text_viewer/tv_window.c | |||
@@ -67,6 +67,40 @@ static bool tv_set_font(const unsigned char *font) | |||
67 | return true; | 67 | return true; |
68 | } | 68 | } |
69 | 69 | ||
70 | static bool tv_check_header_and_footer(struct tv_preferences *new_prefs) | ||
71 | { | ||
72 | bool change_prefs = false; | ||
73 | |||
74 | if (rb->global_settings->statusbar != STATUSBAR_TOP) | ||
75 | { | ||
76 | if (new_prefs->header_mode == HD_SBAR) | ||
77 | { | ||
78 | new_prefs->header_mode = HD_NONE; | ||
79 | change_prefs = true; | ||
80 | } | ||
81 | else if (new_prefs->header_mode == HD_BOTH) | ||
82 | { | ||
83 | new_prefs->header_mode = HD_PATH; | ||
84 | change_prefs = true; | ||
85 | } | ||
86 | } | ||
87 | if (rb->global_settings->statusbar != STATUSBAR_BOTTOM) | ||
88 | { | ||
89 | if (new_prefs->footer_mode == FT_SBAR) | ||
90 | { | ||
91 | new_prefs->footer_mode = FT_NONE; | ||
92 | change_prefs = true; | ||
93 | } | ||
94 | else if (new_prefs->footer_mode == FT_BOTH) | ||
95 | { | ||
96 | new_prefs->footer_mode = FT_PAGE; | ||
97 | change_prefs = true; | ||
98 | } | ||
99 | } | ||
100 | |||
101 | return change_prefs; | ||
102 | } | ||
103 | |||
70 | static void tv_show_header(void) | 104 | static void tv_show_header(void) |
71 | { | 105 | { |
72 | unsigned header_mode = header_mode; | 106 | unsigned header_mode = header_mode; |
@@ -259,6 +293,9 @@ static void tv_change_preferences(const struct tv_preferences *oldp) | |||
259 | #ifdef HAVE_LCD_BITMAP | 293 | #ifdef HAVE_LCD_BITMAP |
260 | static bool font_changing = false; | 294 | static bool font_changing = false; |
261 | const unsigned char *font_str; | 295 | const unsigned char *font_str; |
296 | bool change_prefs = false; | ||
297 | struct tv_preferences new_prefs; | ||
298 | tv_copy_preferences(&new_prefs); | ||
262 | 299 | ||
263 | font_str = (oldp && !font_changing)? oldp->font_name : rb->global_settings->font_file; | 300 | font_str = (oldp && !font_changing)? oldp->font_name : rb->global_settings->font_file; |
264 | 301 | ||
@@ -268,14 +305,17 @@ static void tv_change_preferences(const struct tv_preferences *oldp) | |||
268 | font_changing = true; | 305 | font_changing = true; |
269 | if (!tv_set_font(preferences->font_name)) | 306 | if (!tv_set_font(preferences->font_name)) |
270 | { | 307 | { |
271 | struct tv_preferences new_prefs; | ||
272 | tv_copy_preferences(&new_prefs); | ||
273 | |||
274 | rb->strlcpy(new_prefs.font_name, font_str, MAX_PATH); | 308 | rb->strlcpy(new_prefs.font_name, font_str, MAX_PATH); |
275 | tv_set_preferences(&new_prefs); | 309 | change_prefs = true; |
276 | return; | ||
277 | } | 310 | } |
278 | } | 311 | } |
312 | |||
313 | if (tv_check_header_and_footer(&new_prefs) || change_prefs) | ||
314 | { | ||
315 | tv_set_preferences(&new_prefs); | ||
316 | return; | ||
317 | } | ||
318 | |||
279 | font_changing = false; | 319 | font_changing = false; |
280 | 320 | ||
281 | /* calculates display lines */ | 321 | /* calculates display lines */ |
@@ -319,10 +359,10 @@ static void tv_change_preferences(const struct tv_preferences *oldp) | |||
319 | tv_set_read_conditions(preferences->windows, window_width); | 359 | tv_set_read_conditions(preferences->windows, window_width); |
320 | } | 360 | } |
321 | 361 | ||
322 | bool tv_init_window(void) | 362 | bool tv_init_window(unsigned char **buf, size_t *size) |
323 | { | 363 | { |
324 | tv_add_preferences_change_listner(tv_change_preferences); | 364 | tv_add_preferences_change_listner(tv_change_preferences); |
325 | return tv_init_text_reader(); | 365 | return tv_init_text_reader(buf, size); |
326 | } | 366 | } |
327 | 367 | ||
328 | void tv_finalize_window(void) | 368 | void tv_finalize_window(void) |
diff --git a/apps/plugins/text_viewer/tv_window.h b/apps/plugins/text_viewer/tv_window.h index abf475ae2d..14eeb0820d 100644 --- a/apps/plugins/text_viewer/tv_window.h +++ b/apps/plugins/text_viewer/tv_window.h | |||
@@ -26,11 +26,17 @@ | |||
26 | /* | 26 | /* |
27 | * initialize the window module | 27 | * initialize the window module |
28 | * | 28 | * |
29 | * [In/Out] buf | ||
30 | * the start pointer of the buffer | ||
31 | * | ||
32 | * [In/Out] size | ||
33 | * enabled buffer size | ||
34 | * | ||
29 | * return | 35 | * return |
30 | * true initialize success | 36 | * true initialize success |
31 | * false initialize failure | 37 | * false initialize failure |
32 | */ | 38 | */ |
33 | bool tv_init_window(void); | 39 | bool tv_init_window(unsigned char **buf, size_t *bufsize); |
34 | 40 | ||
35 | /* finalize the window module */ | 41 | /* finalize the window module */ |
36 | void tv_finalize_window(void); | 42 | void tv_finalize_window(void); |