diff --git a/libports/run/mupdf.run b/libports/run/mupdf.run new file mode 100644 index 000000000..569bb7aa0 --- /dev/null +++ b/libports/run/mupdf.run @@ -0,0 +1,102 @@ +build { + core init + drivers/timer + app/mupdf + drivers/framebuffer drivers/pci drivers/input +} + +create_boot_directory + +set config { + + + + + + + + + + + + + + + + + +} + +append_if [have_spec sdl] config { + + + + + + + } + +append_if [have_spec pci] config { + + + + } + +append_if [have_spec vesa] config { + + + + } + +append_if [have_spec ps2] config { + + + + } + +append config { + + + + + + + + +} + +install_config $config + +# +# Download test PDF file +# +if {![file exist bin/test.pdf]} { + set pdf_url "http://genode-labs.com/publications/genode-fpga-graphics-2009.pdf" + catch { exec wget $pdf_url -O bin/test.pdf] } +} + +if {![file exist bin/test.pdf]} { + puts stderr "Could not download test PDF from '$pdf_url'" + exit 1 +} + +set boot_modules { + core init ld.lib.so timer + mupdf + libc.lib.so libm.lib.so libc_log.lib.so libc_rom.lib.so + openjpeg.lib.so freetype.lib.so libpng.lib.so zlib.lib.so jbig2dec.lib.so + mupdf.lib.so jpeg.lib.so + test.pdf +} + +lappend_if [have_spec linux] boot_modules fb_sdl +lappend_if [have_spec pci] boot_modules pci_drv +lappend_if [have_spec vesa] boot_modules vesa_drv +lappend_if [have_spec ps2] boot_modules ps2_drv + +build_boot_image $boot_modules + +append qemu_args " -m 768" + +run_genode_until forever + diff --git a/libports/src/app/mupdf/main.cc b/libports/src/app/mupdf/main.cc new file mode 100644 index 000000000..7d4d056d8 --- /dev/null +++ b/libports/src/app/mupdf/main.cc @@ -0,0 +1,141 @@ +/* + * \brief MuPDF for Genode + * \author Norman Feske + * \date 2012-01-09 + */ + +/* + * Copyright (C) 2012 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU General Public License version 2. + */ + +/* Genode includes */ +#include +#include + +/* MuPDF includes */ +extern "C" { +#include +#include +#include +#include +} + +/* libc includes */ +#include + + +/************************** + ** Called from pdfapp.c ** + **************************/ + +void winrepaint(pdfapp_t *) +{ + PDBG("not implemented"); +} + + +void winrepaintsearch(pdfapp_t *) +{ + PDBG("not implemented"); +} + + +void wincursor(pdfapp_t *, int curs) +{ + PDBG("curs=%d - not implemented", curs); +} + + +void winerror(pdfapp_t *, fz_error error) +{ + PDBG("error=%d", error); + Genode::sleep_forever(); +} + + +void winwarn(pdfapp_t *, char *msg) +{ + PWRN("MuPDF: %s", msg); +} + + +void winhelp(pdfapp_t *) +{ + PDBG("not implemented"); +} + + +char *winpassword(pdfapp_t *, char *) +{ + PDBG("not implemented"); + return NULL; +} + + +void winclose(pdfapp_t *app) +{ + PDBG("not implemented"); +} + + +void winreloadfile(pdfapp_t *) +{ + PDBG("not implemented"); +} + + +void wintitle(pdfapp_t *app, char *s) +{ + PDBG("s=\"%s\" - not implemented", s); +} + + +void winresize(pdfapp_t *app, int w, int h) +{ + PDBG("not implemented"); +} + + +/****************** + ** Main program ** + ******************/ + +int main(int, char **) +{ + + static Framebuffer::Connection framebuffer; + Framebuffer::Session::Mode mode; + int width, height; + framebuffer.info(&width, &height, &mode); + + PDBG("Framebuffer is %dx%d\n", width, height); + + if (mode != Framebuffer::Session::RGB565) { + PERR("Color modes other than RGB565 are not supported. Exiting."); + return 1; + } + + + static pdfapp_t pdfapp; + pdfapp_init(&pdfapp); + + pdfapp.scrw = width; + pdfapp.scrh = height; + pdfapp.resolution = 75; /* XXX read from config */ + pdfapp.pageno = 1; /* XXX read from config */ + + char const *file_name = "test.pdf"; /* XXX read from config */ + + int fd = open(file_name, O_BINARY | O_RDONLY, 0666); + if (fd < 0) { + PERR("Could not open input file \"%s\", Exiting.", file_name); + return 2; + } + pdfapp_open(&pdfapp, (char *)file_name, fd, 0); + + Genode::sleep_forever(); + return 0; +} diff --git a/libports/src/app/mupdf/target.mk b/libports/src/app/mupdf/target.mk new file mode 100644 index 000000000..5cd4587c1 --- /dev/null +++ b/libports/src/app/mupdf/target.mk @@ -0,0 +1,8 @@ +MUPDF_DIR = $(REP_DIR)/contrib/mupdf-0.9 +TARGET = mupdf +SRC_C = pdfapp.c +SRC_CC = main.cc +LIBS = libc mupdf libc_log libc_rom +INC_DIR += $(MUPDF_DIR)/apps + +vpath pdfapp.c $(MUPDF_DIR)/apps