From 11640d8362de1873b4a6a1c68c39a6652b32b438 Mon Sep 17 00:00:00 2001 From: Daniel Thompson Date: Sat, 10 Oct 2020 12:12:59 +0100 Subject: [PATCH] apps: haiku: Add a simple Haiku viewer This app serves as an example of using the filesystem to make an application more flexible. Both the verses and the icon will be loaded from the filesystem rather than being burned into the wasp-os binaries. Signed-off-by: Daniel Thompson --- README.rst | 3 +++ res/HaikuApp.png | Bin 0 -> 6468 bytes wasp/apps/haiku.py | 62 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 res/HaikuApp.png create mode 100644 wasp/apps/haiku.py diff --git a/README.rst b/README.rst index 584b851..6236671 100644 --- a/README.rst +++ b/README.rst @@ -150,5 +150,8 @@ wasp-os also contains a library of additional applications for you to choose. These are disabled by default but can be easily enabled by adding them using one of the techniques is the Application Writer's guide. +.. image:: res/HaikuApp.png + :alt: Haiku application running in the wasp-os simulator + .. image:: res/LifeApp.png :alt: Game of Life runnin in the wasp-os simulator diff --git a/res/HaikuApp.png b/res/HaikuApp.png new file mode 100644 index 0000000000000000000000000000000000000000..1f09a7ed72090cd1301d48f82a26b31fb5b5673e GIT binary patch literal 6468 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 QusZ_M*3g4isM$vR7ji4u#sB~S literal 0 HcmV?d00001 diff --git a/wasp/apps/haiku.py b/wasp/apps/haiku.py new file mode 100644 index 0000000..ca5c3f4 --- /dev/null +++ b/wasp/apps/haiku.py @@ -0,0 +1,62 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +# Copyright (C) 2020 Daniel Thompson + +"""Haiku viewer +~~~~~~~~~~~~~~~ + +These three lines poems are fun to write and fit nicely on a tiny screen. + +If there is a file called haiku.txt in the flash filesystem then this app +allows it to be displayed three lines at a time using the pager. + +This application also (optionally) loads an icon from the filesystem allowing +to be customized to match whether theme your verses are based around. +""" + +import wasp +import icons + +import io +import sys + +from apps.pager import PagerApp + +class HaikuApp(PagerApp): + NAME = 'Haiku' + + def __init__(self): + # Throw an exception if there is no poetry for us to read... + open('haiku.txt').close() + + try: + with open('haiku.rle', 'rb') as f: + self.ICON = f.read() + except: + # Leave the default app icon if none is present + pass + + super().__init__('') + self._counter = -4 + + def foreground(self): + lines = [] + self._counter += 4 + + with open('haiku.txt') as f: + for i in range(self._counter): + _ = f.readline() + + lines = [ '', ] + for i in range(3): + lines.append(f.readline()) + + if len(lines[2]) == 0: + self._counter = 0 + f.seek(0) + lines = [ '', ] + for i in range(3): + lines.append(f.readline()) + + self._msg = '\n'.join(lines) + + super().foreground()