summaryrefslogtreecommitdiff
path: root/apps/plugins/text_viewer/tv_text_reader.c
diff options
context:
space:
mode:
authorYoshihisa Uchida <uchida@rockbox.org>2010-06-05 10:30:08 +0000
committerYoshihisa Uchida <uchida@rockbox.org>2010-06-05 10:30:08 +0000
commitfdba8404503af0448586615330a7b27f2ced531c (patch)
treebb15677a7a720675ac2666f11e62042f3b2639ad /apps/plugins/text_viewer/tv_text_reader.c
parent991e92fd3dc15f1e365761264c26305559ddb0a4 (diff)
downloadrockbox-fdba8404503af0448586615330a7b27f2ced531c.zip
rockbox-fdba8404503af0448586615330a7b27f2ced531c.tar.gz
rockbox-fdba8404503af0448586615330a7b27f2ced531c.tar.bz2
rockbox-fdba8404503af0448586615330a7b27f2ced531c.tar.xz
reworks text viewer plugin. (FS#11209)
new text viewer plugin: text_viewer.rock. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26571 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/text_viewer/tv_text_reader.c')
-rw-r--r--apps/plugins/text_viewer/tv_text_reader.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/apps/plugins/text_viewer/tv_text_reader.c b/apps/plugins/text_viewer/tv_text_reader.c
new file mode 100644
index 0000000..28cfa56
--- /dev/null
+++ b/apps/plugins/text_viewer/tv_text_reader.c
@@ -0,0 +1,91 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 Gilles Roux
+ * 2003 Garrett Derner
+ * 2010 Yoshihisa Uchida
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include "plugin.h"
+#include "tv_pager.h"
+#include "tv_reader.h"
+#include "tv_text_processor.h"
+#include "tv_text_reader.h"
+
+static int get_block;
+static bool get_double_blocks;
+
+bool tv_init_text_reader(unsigned char *buf, size_t bufsize, size_t *used_size)
+{
+ size_t size;
+
+ if (!tv_init_text_processor(buf, bufsize, used_size))
+ return false;
+
+ size = *used_size;
+ if (!tv_init_pager(buf + size, bufsize - size, used_size))
+ return false;
+
+ *used_size += size;
+ return true;
+}
+
+void tv_finalize_text_reader(void)
+{
+ tv_finalize_pager();
+}
+
+void tv_set_read_conditions(int blocks, int width)
+{
+ tv_set_creation_conditions(blocks, width);
+}
+
+off_t tv_get_total_text_size(void)
+{
+ return tv_get_file_size();
+}
+
+bool tv_get_next_line(const unsigned char **buf)
+{
+ ssize_t bufsize;
+ const unsigned char *buffer = tv_get_buffer(&bufsize);
+
+ if (bufsize > 0)
+ {
+ tv_move_next_line(
+ tv_create_formed_text(buffer, bufsize, get_block, get_double_blocks, buf));
+ return true;
+ }
+ return false;
+}
+
+void tv_read_start(int block, bool is_multi)
+{
+ get_block = block;
+ get_double_blocks = is_multi;
+ tv_reset_line_positions();
+}
+
+int tv_read_end(void)
+{
+ return tv_get_line_positions(0);
+}
+
+void tv_seek_top(void)
+{
+ tv_move_screen(0, 0, SEEK_SET);
+}