summaryrefslogtreecommitdiffstats
path: root/sys/dev/syscons/daemon
diff options
context:
space:
mode:
authoryokota <yokota@FreeBSD.org>1997-07-15 14:49:39 +0000
committeryokota <yokota@FreeBSD.org>1997-07-15 14:49:39 +0000
commitb00b16c7e8417280e1baf4fd2100eb0289c081ee (patch)
treeacca8151fd578dce89fac8fd061b008e563e98c9 /sys/dev/syscons/daemon
parent56b7c76d791c0e3042285bea5b2d6dd85c0da4ab (diff)
downloadFreeBSD-src-b00b16c7e8417280e1baf4fd2100eb0289c081ee.zip
FreeBSD-src-b00b16c7e8417280e1baf4fd2100eb0289c081ee.tar.gz
Incorporated lots of fixes and suggestions from Bruce and changes to
facilitate the new saver loading/unloading notification interface in syscons. daemon_saver: - M_NOWAIT was wrong, since NULL returns are not handled. Just use M_WAITOK. - use `ostype' instead of hard-coded "FreeBSD". Now there is no more hard-coded string! (But, who will run this screen saver on other OS?!) - put macros and data declarations in a consistent order. - -DDEAMON_ONLY and -DSHOW_HOSTNAME options added in the previous commit are removed. Options of this kind can go stale and no one notices because no one uses them. DEAMON_ONLY is just removed. SHOW_HOSTNAME is made default. snake_saver: - use `ostype' and `osrelease' as in the daemon saver. The string changes slightly - there was a hyphen after "FreeBSD"; now there is a space. (It is consistent with uname -a, like the daemon server already is.) all screen savers: - Use the new add_scrn_saver()/remove_scrn_saver() in syscons.c to declare loading/unloading of a screen saver. Removed reference to `current_saver' and the variable `old_saver' as they are not necessary anymore. - The blank, fade and green screen savers manipulate VGA registers. Module loading should fail for non-VGA cards. - `scrn_blanked' is consistently treated as a number/counter rather than boolean. - Some savers touch `scp->start' and `scp->end' to force entire screen update when stopping themselves. This is unnecessary now because syscons.c takes care of that. - cleared up many unused or unnecessary #include statements. - Removed -DLKM from Makefiles. YOU NEED TO RECOMPILE BOTH SCREEN SAVERS AND KERNEL AS OF THIS CHANGE.
Diffstat (limited to 'sys/dev/syscons/daemon')
-rw-r--r--sys/dev/syscons/daemon/daemon_saver.c73
1 files changed, 23 insertions, 50 deletions
diff --git a/sys/dev/syscons/daemon/daemon_saver.c b/sys/dev/syscons/daemon/daemon_saver.c
index 232f416..3325ad3 100644
--- a/sys/dev/syscons/daemon/daemon_saver.c
+++ b/sys/dev/syscons/daemon/daemon_saver.c
@@ -25,28 +25,22 @@
* (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.4 1997/05/26 01:02:41 yokota Exp $
+ * $Id: daemon_saver.c,v 1.5 1997/06/24 12:43:18 yokota Exp $
*/
#include <sys/param.h>
#include <sys/systm.h>
-#include <sys/conf.h>
#include <sys/exec.h>
#include <sys/sysent.h>
#include <sys/lkm.h>
-#include <sys/errno.h>
+#include <sys/malloc.h>
#include <sys/kernel.h>
#include <sys/sysctl.h>
-#include <sys/malloc.h>
#include <machine/md_var.h>
+#include <i386/include/pc/display.h>
-#include "saver.h"
-
-MOD_MISC(daemon_saver);
-
-void (*current_saver)(int blank);
-void (*old_saver)(int blank);
+#include <saver.h>
#define CONSOLE_VECT(x, y) \
*((u_short*)(Crtat + (y)*cur_console->xsize + (x)))
@@ -54,10 +48,10 @@ void (*old_saver)(int blank);
#define DAEMON_MAX_WIDTH 32
#define DAEMON_MAX_HEIGHT 19
-/*
- * Define this to disable the bouncing text.
- */
-#undef DAEMON_ONLY
+MOD_MISC(daemon_saver);
+
+static char *message;
+static int messagelen;
/* Who is the author of this ASCII pic? */
@@ -152,10 +146,6 @@ draw_daemon(int xpos, int ypos, int dxdir)
}
}
-#ifndef DAEMON_ONLY
-static char *message;
-static int messagelen;
-
static void
draw_string(int xpos, int ypos, char *s, int len)
{
@@ -165,15 +155,12 @@ draw_string(int xpos, int ypos, char *s, int len)
CONSOLE_VECT(xpos + x, ypos) =
scr_map[s[x]]|(FG_LIGHTGREEN|BG_BLACK)<<8;
}
-#endif
static void
daemon_saver(int blank)
{
-#ifndef DAEMON_ONLY
static int txpos = 10, typos = 10;
static int txdir = -1, tydir = -1;
-#endif
static int dxpos = 0, dypos = 0;
static int dxdir = 1, dydir = 1;
static int moved_daemon = 0;
@@ -204,7 +191,6 @@ daemon_saver(int blank)
dxpos += dxdir; dypos += dydir;
}
-#ifndef DAEMON_ONLY
if (txdir > 0) {
if (txpos == scp->xsize - messagelen)
txdir = -1;
@@ -218,18 +204,13 @@ daemon_saver(int blank)
if (typos == 0) tydir = 1;
}
txpos += txdir; typos += tydir;
-#endif
draw_daemon(dxpos, dypos, dxdir);
-#ifndef DAEMON_ONLY
draw_string(txpos, typos, (char *)message, messagelen);
-#endif
} else {
- if (scrn_blanked) {
+ if (scrn_blanked > 0) {
set_border(scp->border);
scrn_blanked = 0;
- scp->start = 0;
- scp->end = scp->xsize * scp->ysize;
}
}
}
@@ -237,36 +218,28 @@ daemon_saver(int blank)
static int
daemon_saver_load(struct lkm_table *lkmtp, int cmd)
{
-#ifdef SHOW_HOSTNAME
- static const char *freebsd = " - FreeBSD ";
-#else
- static const char *freebsd = "FreeBSD ";
-#endif /* SHOW_HOSTNAME */
+ int err;
- (*current_saver)(0);
- old_saver = current_saver;
- current_saver = daemon_saver;
+ 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);
-#ifdef SHOW_HOSTNAME
- messagelen = strlen(hostname) + strlen(freebsd) + strlen(osrelease);
- message = malloc(messagelen + 1, M_DEVBUF, M_NOWAIT);
- sprintf(message, "%s%s%s", hostname, freebsd, osrelease);
-#else
- messagelen = strlen(freebsd) + strlen(osrelease);
- message = malloc(messagelen + 1, M_DEVBUF, M_NOWAIT);
- sprintf(message, "%s%s", freebsd, osrelease);
-#endif /* SHOW_HOSTNAME */
- return 0;
+ 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)
{
- (*current_saver)(0);
- current_saver = old_saver;
+ int err;
- free(message, M_DEVBUF);
- return 0;
+ err = remove_scrn_saver(daemon_saver);
+ if (err == 0)
+ free(message, M_DEVBUF);
+ return err;
}
int
OpenPOWER on IntegriCloud