fade_saver.c revision 12276
1130365Smlaier/*-
2130365Smlaier * Copyright (c) 1995 S�ren Schmidt
3130365Smlaier * All rights reserved.
4130365Smlaier *
5130365Smlaier * Redistribution and use in source and binary forms, with or without
6130365Smlaier * modification, are permitted provided that the following conditions
7130365Smlaier * are met:
8130365Smlaier * 1. Redistributions of source code must retain the above copyright
9130365Smlaier *    notice, this list of conditions and the following disclaimer
10130365Smlaier *    in this position and unchanged.
11130365Smlaier * 2. Redistributions in binary form must reproduce the above copyright
12130365Smlaier *    notice, this list of conditions and the following disclaimer in the
13130365Smlaier *    documentation and/or other materials provided with the distribution.
14130365Smlaier * 3. The name of the author may not be used to endorse or promote products
15130365Smlaier *    derived from this software withough specific prior written permission
16130365Smlaier *
17130365Smlaier * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18130365Smlaier * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19130365Smlaier * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20130365Smlaier * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21130365Smlaier * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22130365Smlaier * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23130365Smlaier * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24130365Smlaier * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25130365Smlaier * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26130365Smlaier * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27130365Smlaier *
28130365Smlaier *	$Id: fade_saver.c,v 1.4 1995/11/13 07:18:48 bde Exp $
29130365Smlaier */
30130365Smlaier
31130365Smlaier#include <sys/param.h>
32130365Smlaier#include <sys/systm.h>
33130365Smlaier#include <sys/conf.h>
34130365Smlaier#include <sys/exec.h>
35130365Smlaier#include <sys/sysent.h>
36130365Smlaier#include <sys/lkm.h>
37130365Smlaier#include <sys/errno.h>
38130365Smlaier#include <saver.h>
39130365Smlaier
40130365SmlaierMOD_MISC(fade_saver);
41130365Smlaier
42130365Smlaiervoid (*current_saver)(int blank);
43130365Smlaiervoid (*old_saver)(int blank);
44130365Smlaier
45130365Smlaierstatic void
46130365Smlaierfade_saver(int blank)
47130365Smlaier{
48130365Smlaier	static int count = 0;
49130365Smlaier	int i;
50130365Smlaier
51130365Smlaier	if (blank) {
52130365Smlaier		scrn_blanked = 1;
53130365Smlaier		if (count < 64) {
54130365Smlaier			outb(PIXMASK, 0xFF);		/* no pixelmask */
55130365Smlaier			outb(PALWADR, 0x00);
56130365Smlaier			outb(PALDATA, 0);
57130365Smlaier			outb(PALDATA, 0);
58130365Smlaier			outb(PALDATA, 0);
59130365Smlaier			for (i = 3; i < 768; i++) {
60130365Smlaier				if (palette[i] - count > 15)
61130365Smlaier					outb(PALDATA, palette[i]-count);
62130365Smlaier				else
63130365Smlaier					outb(PALDATA, 15);
64130365Smlaier			}
65130365Smlaier			inb(crtc_addr+6);		/* reset flip/flop */
66130365Smlaier			outb(ATC, 0x20);		/* enable palette */
67130365Smlaier			count++;
68130365Smlaier		}
69130365Smlaier	}
70130365Smlaier	else {
71130365Smlaier		load_palette();
72130365Smlaier		count = scrn_blanked = 0;
73130365Smlaier	}
74130365Smlaier}
75130365Smlaier
76130365Smlaierstatic int
77130365Smlaierfade_saver_load(struct lkm_table *lkmtp, int cmd)
78130365Smlaier{
79130365Smlaier	(*current_saver)(0);
80130365Smlaier	old_saver = current_saver;
81130365Smlaier	current_saver = fade_saver;
82130365Smlaier	uprintf("fade screen saver installed\n");
83130365Smlaier	return 0;
84130365Smlaier}
85130365Smlaier
86130365Smlaierstatic int
87130365Smlaierfade_saver_unload(struct lkm_table *lkmtp, int cmd)
88130365Smlaier{
89130365Smlaier	(*current_saver)(0);
90130365Smlaier	current_saver = old_saver;
91130365Smlaier	uprintf("fade screen saver removed\n");
92130365Smlaier	return 0;
93130365Smlaier}
94130365Smlaier
95130365Smlaierint
96130365Smlaierfade_saver_mod(struct lkm_table *lkmtp, int cmd, int ver)
97130365Smlaier{
98130365Smlaier	DISPATCH(lkmtp, cmd, ver, fade_saver_load, fade_saver_unload,
99130365Smlaier		 lkm_nullcmd);
100130365Smlaier}
101130365Smlaier