summaryrefslogtreecommitdiffstats
path: root/lkm/syscons/daemon/daemon_saver.c
diff options
context:
space:
mode:
Diffstat (limited to 'lkm/syscons/daemon/daemon_saver.c')
-rw-r--r--lkm/syscons/daemon/daemon_saver.c369
1 files changed, 0 insertions, 369 deletions
diff --git a/lkm/syscons/daemon/daemon_saver.c b/lkm/syscons/daemon/daemon_saver.c
deleted file mode 100644
index 59e99f0..0000000
--- a/lkm/syscons/daemon/daemon_saver.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/*-
- * Copyright (c) 1997 Sandro Sigala, Brescia, Italy.
- * Copyright (c) 1997 Chris Shenton
- * Copyright (c) 1995 S ren Schmidt
- * 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
- * in this position and unchanged.
- * 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 AUTHOR ``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 AUTHOR 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.
- *
- * $Id: daemon_saver.c,v 1.10 1998/09/15 18:16:38 sos Exp $
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/exec.h>
-#include <sys/sysent.h>
-#include <sys/lkm.h>
-#include <sys/malloc.h>
-#include <sys/kernel.h>
-#include <sys/sysctl.h>
-
-#include <machine/md_var.h>
-#include <machine/pc/display.h>
-
-#include <saver.h>
-
-#define CONSOLE_VECT(x, y) \
- (window + (y)*cur_console->xsize + (x))
-
-#define DAEMON_MAX_WIDTH 32
-#define DAEMON_MAX_HEIGHT 19
-
-MOD_MISC(daemon_saver);
-
-static char *message;
-static int messagelen;
-static u_short *window;
-
-/* Who is the author of this ASCII pic? */
-
-static char *daemon_pic[] = {
- " , ,",
- " /( )`",
- " \\ \\___ / |",
- " /- _ `-/ '",
- " (/\\/ \\ \\ /\\",
- " / / | ` \\",
- " O O ) / |",
- " `-^--'`< '",
- " (_.) _ ) /",
- " `.___/` /",
- " `-----' /",
- "<----. __ / __ \\",
- "<----|====O)))==) \\) /====",
- "<----' `--' `.__,' \\",
- " | |",
- " \\ / /\\",
- " ______( (_ / \\______/",
- " ,' ,-----' |",
- " `--{__________)",
- NULL
-};
-
-static char *daemon_attr[] = {
- " R R",
- " RR RR",
- " R RRRR R R",
- " RR W RRR R",
- " RWWW W R RR",
- " W W W R R",
- " B B W R R",
- " WWWWWWRR R",
- " RRRR R R R",
- " RRRRRRR R",
- " RRRRRRR R",
- "YYYYYY RR R RR R",
- "YYYYYYYYYYRRRRYYR RR RYYYY",
- "YYYYYY RRRR RRRRRR R",
- " R R",
- " R R RR",
- " CCCCCCR RR R RRRRRRRR",
- " CC CCCCCCC C",
- " CCCCCCCCCCCCCCC",
- NULL
-};
-
-/*
- * Reverse a graphics character, or return unaltered if no mirror;
- * should do alphanumerics too, but I'm too lazy. <cshenton@it.hq.nasa.gov>
- */
-
-static char
-xflip_symbol(char symbol)
-{
- static const char lchars[] = "`'(){}[]\\/<>";
- static const char rchars[] = "'`)(}{][/\\><";
- int pos;
-
- for (pos = 0; lchars[pos] != '\0'; pos++)
- if (lchars[pos] == symbol)
- return rchars[pos];
-
- return symbol;
-}
-
-static void
-clear_daemon(int xpos, int ypos, int dxdir, int xoff, int yoff,
- int xlen, int ylen)
-{
- int y;
-
- if (xlen <= 0)
- return;
- for (y = yoff; y < ylen; y++)
- fillw(((FG_LIGHTGREY|BG_BLACK) << 8) | scr_map[0x20],
- CONSOLE_VECT(xpos + xoff, ypos + y), xlen - xoff);
-}
-
-static void
-draw_daemon(int xpos, int ypos, int dxdir, int xoff, int yoff,
- int xlen, int ylen)
-{
- int x, y;
- int px;
- int attr;
-
- for (y = yoff; y < ylen; y++) {
- if (dxdir < 0)
- px = xoff;
- else
- px = DAEMON_MAX_WIDTH - xlen;
- if (px >= strlen(daemon_pic[y]))
- continue;
- for (x = xoff; (x < xlen) && (daemon_pic[y][px] != '\0'); x++, px++) {
- switch (daemon_attr[y][px]) {
- case 'R': attr = (FG_LIGHTRED|BG_BLACK)<<8; break;
- case 'Y': attr = (FG_YELLOW|BG_BLACK)<<8; break;
- case 'B': attr = (FG_LIGHTBLUE|BG_BLACK)<<8; break;
- case 'W': attr = (FG_LIGHTGREY|BG_BLACK)<<8; break;
- case 'C': attr = (FG_CYAN|BG_BLACK)<<8; break;
- default: attr = (FG_WHITE|BG_BLACK)<<8; break;
- }
- if (dxdir < 0) { /* Moving left */
- *CONSOLE_VECT(xpos + x, ypos + y) =
- scr_map[daemon_pic[y][px]]|attr;
- } else { /* Moving right */
- *CONSOLE_VECT(xpos + DAEMON_MAX_WIDTH - px - 1, ypos + y) =
- scr_map[xflip_symbol(daemon_pic[y][px])]|attr;
- }
- }
- }
-}
-
-static void
-clear_string(int xpos, int ypos, int xoff, char *s, int len)
-{
- if (len <= 0)
- return;
- fillw(((FG_LIGHTGREY|BG_BLACK) << 8) | scr_map[0x20],
- CONSOLE_VECT(xpos + xoff, ypos), len - xoff);
-}
-
-static void
-draw_string(int xpos, int ypos, int xoff, char *s, int len)
-{
- int x;
-
- for (x = xoff; x < len; x++)
- *CONSOLE_VECT(xpos + x, ypos) =
- scr_map[s[x]]|(FG_LIGHTGREEN|BG_BLACK)<<8;
-}
-
-static void
-daemon_saver(int blank)
-{
- static int txpos = 10, typos = 10;
- static int txdir = -1, tydir = -1;
- static int dxpos = 0, dypos = 0;
- static int dxdir = 1, dydir = 1;
- static int moved_daemon = 0;
- static int xoff, yoff, toff;
- static int xlen, ylen, tlen;
- scr_stat *scp = cur_console;
- int min, max;
-
- if (blank) {
- if (!ISTEXTSC(scp))
- return;
- if (scrn_blanked == 0) {
- scp->status |= SAVER_RUNNING;
- window = (u_short *)(*biosvidsw.adapter)(scp->adp)->va_window;
- /* clear the screen and set the border color */
- fillw(((FG_LIGHTGREY|BG_BLACK) << 8) | scr_map[0x20],
- window, scp->xsize * scp->ysize);
- set_border(scp, 0);
- xlen = ylen = tlen = 0;
- }
- if (scrn_blanked++ < 2)
- return;
- scrn_blanked = 1;
-
- clear_daemon(dxpos, dypos, dxdir, xoff, yoff, xlen, ylen);
- clear_string(txpos, typos, toff, (char *)message, tlen);
-
- if (++moved_daemon) {
- /*
- * The daemon picture may be off the screen, if
- * screen size is chagened while the screen
- * saver is inactive. Make sure the origin of
- * the picture is between min and max.
- */
- if (scp->xsize <= DAEMON_MAX_WIDTH) {
- /*
- * If the screen width is too narrow, we
- * allow part of the picture go off
- * the screen so that the daemon won't
- * flip too often.
- */
- min = scp->xsize - DAEMON_MAX_WIDTH - 10;
- max = 10;
- } else {
- min = 0;
- max = scp->xsize - DAEMON_MAX_WIDTH;
- }
- if (dxpos <= min) {
- dxpos = min;
- dxdir = 1;
- } else if (dxpos >= max) {
- dxpos = max;
- dxdir = -1;
- }
-
- if (scp->ysize <= DAEMON_MAX_HEIGHT) {
- min = scp->ysize - DAEMON_MAX_HEIGHT - 10;
- max = 10;
- } else {
- min = 0;
- max = scp->ysize - DAEMON_MAX_HEIGHT;
- }
- if (dypos <= min) {
- dypos = min;
- dydir = 1;
- } else if (dypos >= max) {
- dypos = max;
- dydir = -1;
- }
-
- moved_daemon = -1;
- dxpos += dxdir; dypos += dydir;
-
- /* clip the picture */
- xoff = 0;
- xlen = DAEMON_MAX_WIDTH;
- if (dxpos + xlen <= 0)
- xlen = 0;
- else if (dxpos < 0)
- xoff = -dxpos;
- if (dxpos >= scp->xsize)
- xlen = 0;
- else if (dxpos + xlen > scp->xsize)
- xlen = scp->xsize - dxpos;
- yoff = 0;
- ylen = DAEMON_MAX_HEIGHT;
- if (dypos + ylen <= 0)
- ylen = 0;
- else if (dypos < 0)
- yoff = -dypos;
- if (dypos >= scp->ysize)
- ylen = 0;
- else if (dypos + ylen > scp->ysize)
- ylen = scp->ysize - dypos;
- }
-
- if (scp->xsize <= messagelen) {
- min = scp->xsize - messagelen - 10;
- max = 10;
- } else {
- min = 0;
- max = scp->xsize - messagelen;
- }
- if (txpos <= min) {
- txpos = min;
- txdir = 1;
- } else if (txpos >= max) {
- txpos = max;
- txdir = -1;
- }
- if (typos <= 0) {
- typos = 0;
- tydir = 1;
- } else if (typos >= scp->ysize - 1) {
- typos = scp->ysize - 1;
- tydir = -1;
- }
- txpos += txdir; typos += tydir;
-
- toff = 0;
- tlen = messagelen;
- if (txpos + tlen <= 0)
- tlen = 0;
- else if (txpos < 0)
- toff = -txpos;
- if (txpos >= scp->xsize)
- tlen = 0;
- else if (txpos + tlen > scp->xsize)
- tlen = scp->xsize - txpos;
-
- draw_daemon(dxpos, dypos, dxdir, xoff, yoff, xlen, ylen);
- draw_string(txpos, typos, toff, (char *)message, tlen);
- } else {
- if (scrn_blanked > 0) {
- set_border(scp, scp->border);
- scrn_blanked = 0;
- scp->status &= ~SAVER_RUNNING;
- }
- }
-}
-
-static int
-daemon_saver_load(struct lkm_table *lkmtp, int cmd)
-{
- int err;
-
- messagelen = strlen(hostname) + 3 + strlen(ostype) + 1 +
- strlen(osrelease);
- message = malloc(messagelen + 1, M_DEVBUF, M_WAITOK);
- sprintf(message, "%s - %s %s", hostname, ostype, osrelease);
-
- err = add_scrn_saver(daemon_saver);
- if (err != 0)
- free(message, M_DEVBUF);
- return err;
-}
-
-static int
-daemon_saver_unload(struct lkm_table *lkmtp, int cmd)
-{
- int err;
-
- err = remove_scrn_saver(daemon_saver);
- if (err == 0)
- free(message, M_DEVBUF);
- return err;
-}
-
-int
-daemon_saver_mod(struct lkm_table *lkmtp, int cmd, int ver)
-{
- MOD_DISPATCH(daemon_saver, lkmtp, cmd, ver,
- daemon_saver_load, daemon_saver_unload, lkm_nullcmd);
-}
OpenPOWER on IntegriCloud