summaryrefslogtreecommitdiff
path: root/sys/modules/syscons/daemon/daemon_saver.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/modules/syscons/daemon/daemon_saver.c')
-rw-r--r--sys/modules/syscons/daemon/daemon_saver.c67
1 files changed, 42 insertions, 25 deletions
diff --git a/sys/modules/syscons/daemon/daemon_saver.c b/sys/modules/syscons/daemon/daemon_saver.c
index 09f6caf361893..59e99f0fe328d 100644
--- a/sys/modules/syscons/daemon/daemon_saver.c
+++ b/sys/modules/syscons/daemon/daemon_saver.c
@@ -25,12 +25,14 @@
* (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.13 1999/01/11 03:18:45 yokota Exp $
+ * $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/module.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>
@@ -46,10 +48,11 @@
#define DAEMON_MAX_WIDTH 32
#define DAEMON_MAX_HEIGHT 19
+MOD_MISC(daemon_saver);
+
static char *message;
static int messagelen;
static u_short *window;
-static int blanked;
/* Who is the author of this ASCII pic? */
@@ -185,8 +188,8 @@ draw_string(int xpos, int ypos, int xoff, char *s, int len)
scr_map[s[x]]|(FG_LIGHTGREEN|BG_BLACK)<<8;
}
-static int
-daemon_saver(video_adapter_t *adp, int blank)
+static void
+daemon_saver(int blank)
{
static int txpos = 10, typos = 10;
static int txdir = -1, tydir = -1;
@@ -199,19 +202,20 @@ daemon_saver(video_adapter_t *adp, int blank)
int min, max;
if (blank) {
- if (adp->va_mode_flags & V_INFO_GRAPHICS)
- return EAGAIN;
- if (blanked == 0) {
- window = (u_short *)adp->va_window;
+ 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 (blanked++ < 2)
- return 0;
- blanked = 1;
+ 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);
@@ -322,31 +326,44 @@ daemon_saver(video_adapter_t *adp, int blank)
draw_daemon(dxpos, dypos, dxdir, xoff, yoff, xlen, ylen);
draw_string(txpos, typos, toff, (char *)message, tlen);
} else {
- blanked = 0;
+ if (scrn_blanked > 0) {
+ set_border(scp, scp->border);
+ scrn_blanked = 0;
+ scp->status &= ~SAVER_RUNNING;
+ }
}
- return 0;
}
static int
-daemon_init(video_adapter_t *adp)
+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);
- blanked = 0;
- return 0;
+
+ err = add_scrn_saver(daemon_saver);
+ if (err != 0)
+ free(message, M_DEVBUF);
+ return err;
}
static int
-daemon_term(video_adapter_t *adp)
+daemon_saver_unload(struct lkm_table *lkmtp, int cmd)
{
- free(message, M_DEVBUF);
- return 0;
-}
+ int err;
-static scrn_saver_t daemon_module = {
- "daemon_saver", daemon_init, daemon_term, daemon_saver, NULL,
-};
+ err = remove_scrn_saver(daemon_saver);
+ if (err == 0)
+ free(message, M_DEVBUF);
+ return err;
+}
-SAVER_MODULE(daemon_saver, daemon_module);
+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);
+}