diff options
Diffstat (limited to 'sys/modules/syscons/daemon/daemon_saver.c')
| -rw-r--r-- | sys/modules/syscons/daemon/daemon_saver.c | 67 |
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); +} |
