summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreadler <eadler@FreeBSD.org>2011-12-12 21:12:07 +0000
committereadler <eadler@FreeBSD.org>2011-12-12 21:12:07 +0000
commit805302f0990bd298651e1bbad8237f88d86255f6 (patch)
treef7144ede60b98870e5dcd370b2e3842089891c64
parent21f7c1b29fdf6a1f3ff0070ce7cb0baaf2786fe5 (diff)
downloadFreeBSD-src-805302f0990bd298651e1bbad8237f88d86255f6.zip
FreeBSD-src-805302f0990bd298651e1bbad8237f88d86255f6.tar.gz
- Add support for ASCII art splash screens in TheDraw format
PR: kern/143370 Submitted by: Antony Mawer <antony@mawer.org> Reviewed by: gjb (doc) Reviewed by: des (style) Approved by: ed MFC after: 1 month
-rw-r--r--share/man/man4/splash.427
-rw-r--r--sys/dev/fb/splash_txt.c135
-rw-r--r--sys/modules/splash/Makefile2
-rw-r--r--sys/modules/splash/txt/Makefile7
4 files changed, 170 insertions, 1 deletions
diff --git a/share/man/man4/splash.4 b/share/man/man4/splash.4
index 29a9693..4b5f224 100644
--- a/share/man/man4/splash.4
+++ b/share/man/man4/splash.4
@@ -74,6 +74,14 @@ Bitmaps of other color depths will not be displayed.
ZSoft PCX decoder.
This decoder currently only supports version 5 8-bpp single-plane
images.
+.It Pa splash_txt.ko
+TheDraw binary ASCII drawing file decoder.
+Displays a text-mode 80x25 ASCII drawing, such as that produced by
+the Binary save format in TheDraw.
+This format consists of a sequence
+of two byte pairs representing the 80x25 display, where the first byte
+is the ASCII character to draw and the second byte indicates the
+colors/attributes to use when drawing the character.
.El
.Pp
The
@@ -223,6 +231,16 @@ If the VESA support is statically linked to the kernel, it is not
necessary to load the VESA module.
Just load the bitmap file and the splash decoder module as in the
first example above.
+.Pp
+To load a binary ASCII drawing and display this while booting, include the
+following into your
+.Pa /boot/loader.conf
+:
+.Bd -literal -offset indent
+splash_txt_load="YES"
+bitmap_load="YES"
+bitmap_name="/boot/splash.bin"
+.Ed
.\".Sh DIAGNOSTICS
.Sh SEE ALSO
.Xr vidcontrol 1 ,
@@ -256,6 +274,15 @@ module was written by
based on the
.Pa splash_bmp
code.
+The
+.Pa splash_txt
+module was written by
+.An Antony Mawer Aq antony@mawer.org
+based on the
+.Pa splash_bmp
+code, with some additional inspiration from the
+.Pa daemon_saver
+code.
.Sh CAVEATS
Both the splash screen and the screen saver work with
.Xr syscons 4
diff --git a/sys/dev/fb/splash_txt.c b/sys/dev/fb/splash_txt.c
new file mode 100644
index 0000000..7bd9ff9
--- /dev/null
+++ b/sys/dev/fb/splash_txt.c
@@ -0,0 +1,135 @@
+/*-
+ * Copyright (c) 1999 Michael Smith <msmith@freebsd.org>
+ * Copyright (c) 1999 Kazutaka YOKOTA <yokota@freebsd.org>
+ * Copyright (c) 2005 Antony Mawer <antony@mawer.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/module.h>
+#include <sys/kernel.h>
+#include <sys/consio.h>
+#include <sys/fbio.h>
+
+#include <machine/pc/display.h>
+
+#include <dev/fb/fbreg.h>
+#include <dev/fb/splashreg.h>
+#include <dev/syscons/syscons.h>
+
+static int splash_on = FALSE;
+
+static int txt_init(video_adapter_t *adp);
+static int txt_end(video_adapter_t *adp);
+static int txt_splash(video_adapter_t * adp, const int on);
+
+/* These are rows by columns of the text-mode display device. */
+#define BIN_IMAGE_WIDTH 80
+#define BIN_IMAGE_HEIGHT 25
+
+static splash_decoder_t txt_decoder = {
+ .name = "splash_txt",
+ .init = txt_init,
+ .term = txt_end,
+ .splash = txt_splash,
+ .data_type = SPLASH_IMAGE,
+};
+
+SPLASH_DECODER(splash_txt, txt_decoder);
+
+static void
+draw_text_splash(sc_softc_t *sc)
+{
+ u_int x, y;
+ u_char ch, attr;
+ u_char *pdata = txt_decoder.data;
+
+ /* Init failed. */
+ if (txt_decoder.data == NULL)
+ return;
+ for (y = 0; y < BIN_IMAGE_HEIGHT; y++) {
+ for (x = 0; x < BIN_IMAGE_WIDTH; x++) {
+ ch = *pdata++;
+ attr = *pdata++;
+ sc_vtb_putc(&sc->cur_scp->scr,
+ (y * sc->cur_scp->xsize) + x,
+ sc->scr_map[ch], (int)attr << 8);
+ }
+ }
+}
+
+static int
+txt_init(video_adapter_t *adp)
+{
+
+ /* Ensure that the image data exists. */
+ if (txt_decoder.data == NULL || txt_decoder.data_size <= 0) {
+ printf("splash_txt: No ASCII bitmap file found\n");
+ return (ENODEV);
+ }
+ return (0);
+}
+
+static int
+txt_end(video_adapter_t *adp)
+{
+
+ return (0);
+}
+
+static int
+txt_splash(video_adapter_t *adp, const int on)
+{
+ sc_softc_t *sc;
+ scr_stat *scp;
+
+ sc = sc_find_softc(adp, NULL);
+ if (sc == NULL)
+ return (EAGAIN);
+ scp = sc->cur_scp;
+ if (on) {
+ if (!splash_on) {
+ if (adp->va_info.vi_flags & V_INFO_GRAPHICS)
+ return EAGAIN;
+ /* Clear screen and set border colour. */
+ sc_vtb_clear(&scp->scr, sc->scr_map[0x20],
+ (FG_LIGHTGREY | BG_BLACK) << 8);
+ (*vidsw[adp->va_index]->set_hw_cursor)(adp, -1, -1);
+ sc_set_border(scp, 0);
+ splash_on = TRUE;
+ /* Display the splash screen. */
+ draw_text_splash(sc);
+ }
+ return (0);
+ } else {
+ /* The video mode will be restored by the caller. */
+ splash_on = FALSE;
+ return (0);
+ }
+}
+
+
diff --git a/sys/modules/splash/Makefile b/sys/modules/splash/Makefile
index 1c634bf..3b21d86 100644
--- a/sys/modules/splash/Makefile
+++ b/sys/modules/splash/Makefile
@@ -1,5 +1,5 @@
# $FreeBSD$
-SUBDIR= bmp pcx
+SUBDIR= bmp pcx txt
.include <bsd.subdir.mk>
diff --git a/sys/modules/splash/txt/Makefile b/sys/modules/splash/txt/Makefile
new file mode 100644
index 0000000..7b41a17
--- /dev/null
+++ b/sys/modules/splash/txt/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+.PATH: ${.CURDIR}/../../../dev/fb
+
+KMOD= splash_txt
+SRCS= splash_txt.c
+
+.include <bsd.kmod.mk>
OpenPOWER on IntegriCloud