diff options
author | des <des@FreeBSD.org> | 2001-11-06 02:38:09 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 2001-11-06 02:38:09 +0000 |
commit | 96acf650889b440b17e9f410d4839b6e0044fcc6 (patch) | |
tree | f3d3562c23b42e2f9c9ecc18f321064aafe1ebfb /sys/dev/syscons/logo | |
parent | 9e8fe7fac8739d75eb00b55fe3d45e5e3266850d (diff) | |
download | FreeBSD-src-96acf650889b440b17e9f410d4839b6e0044fcc6.zip FreeBSD-src-96acf650889b440b17e9f410d4839b6e0044fcc6.tar.gz |
Drive-by stylification + reintroduce set_border().
Diffstat (limited to 'sys/dev/syscons/logo')
-rw-r--r-- | sys/dev/syscons/logo/logo_saver.c | 175 |
1 files changed, 90 insertions, 85 deletions
diff --git a/sys/dev/syscons/logo/logo_saver.c b/sys/dev/syscons/logo/logo_saver.c index 0961cb6..7ac887b 100644 --- a/sys/dev/syscons/logo/logo_saver.c +++ b/sys/dev/syscons/logo/logo_saver.c @@ -40,122 +40,127 @@ #include <dev/fb/splashreg.h> #include <dev/syscons/syscons.h> -static u_char *vid; -static int banksize, scrmode, bpsl, scrw, scrh; -static int blanked; +#define SAVER_NAME "logo_saver" -extern unsigned int logo_w; -extern unsigned int logo_h; -extern unsigned char logo_pal[]; -extern unsigned char logo_img[]; -extern unsigned int logo_img_size; +extern unsigned int logo_w; +extern unsigned int logo_h; +extern unsigned char logo_pal[]; +extern unsigned char logo_img[]; +extern unsigned int logo_img_size; + +static u_char *vid; +static int banksize, scrmode, bpsl, scrw, scrh; +static int blanked; static void logo_blit(video_adapter_t *adp, int x, int y) { - int d, l, o, p; - - for (o = 0, p = y * bpsl + x; p > banksize; p -= banksize) - o += banksize; - set_origin(adp, o); - - for (d = 0; d < logo_img_size; d += logo_w) { - if (p + logo_w < banksize) { - bcopy(logo_img + d, vid + p, logo_w); - p += bpsl; - } else if (p < banksize) { - l = banksize - p; - bcopy(logo_img + d, vid + p, l); - set_origin(adp, (o += banksize)); - bcopy(logo_img + d + l, vid, logo_w - l); - p += bpsl - banksize; - } else { - p -= banksize; - set_origin(adp, (o += banksize)); - bcopy(logo_img + d, vid + p, logo_w); - p += bpsl; + int d, l, o, p; + + for (o = 0, p = y * bpsl + x; p > banksize; p -= banksize) + o += banksize; + set_origin(adp, o); + + for (d = 0; d < logo_img_size; d += logo_w) { + if (p + logo_w < banksize) { + bcopy(logo_img + d, vid + p, logo_w); + p += bpsl; + } else if (p < banksize) { + l = banksize - p; + bcopy(logo_img + d, vid + p, l); + set_origin(adp, (o += banksize)); + bcopy(logo_img + d + l, vid, logo_w - l); + p += bpsl - banksize; + } else { + p -= banksize; + set_origin(adp, (o += banksize)); + bcopy(logo_img + d, vid + p, logo_w); + p += bpsl; + } } - } } static void logo_update(video_adapter_t *adp) { - static int xpos = 0, ypos = 0; - static int xinc = 1, yinc = 1; - - /* Turn when you hit the edge */ - if ((xpos + logo_w + xinc > scrw) || (xpos + xinc < 0)) - xinc = -xinc; - if ((ypos + logo_h + yinc > scrh) || (ypos + yinc < 0)) - yinc = -yinc; - xpos += xinc; - ypos += yinc; + static int xpos = 0, ypos = 0; + static int xinc = 1, yinc = 1; - /* XXX Relies on margin around logo to erase trail */ - logo_blit(adp, xpos, ypos); + /* Turn when you hit the edge */ + if ((xpos + logo_w + xinc > scrw) || (xpos + xinc < 0)) + xinc = -xinc; + if ((ypos + logo_h + yinc > scrh) || (ypos + yinc < 0)) + yinc = -yinc; + xpos += xinc; + ypos += yinc; + + /* XXX Relies on margin around logo to erase trail */ + logo_blit(adp, xpos, ypos); } static int logo_saver(video_adapter_t *adp, int blank) { - int i, pl; - - if (blank) { - /* switch to graphics mode */ - if (blanked <= 0) { - pl = splhigh(); - set_video_mode(adp, scrmode); - load_palette(adp, logo_pal); -#if 0 /* XXX conflict */ - set_border(adp, 0); -#endif - blanked++; - vid = (u_char *)adp->va_window; - banksize = adp->va_window_size; - bpsl = adp->va_line_width; - splx(pl); - for (i = 0; i < bpsl*scrh; i += banksize) { - set_origin(adp, i); - bzero(vid, banksize); - } + int i, pl; + + if (blank) { + /* switch to graphics mode */ + if (blanked <= 0) { + pl = splhigh(); + set_video_mode(adp, scrmode); + load_palette(adp, logo_pal); + set_border(adp, 0); + blanked++; + vid = (u_char *)adp->va_window; + banksize = adp->va_window_size; + bpsl = adp->va_line_width; + splx(pl); + for (i = 0; i < bpsl * scrh; i += banksize) { + set_origin(adp, i); + bzero(vid, banksize); + } + } + logo_update(adp); + } else { + blanked = 0; } - logo_update(adp); - } else { - blanked = 0; - } - return 0; + return (0); } static int logo_init(video_adapter_t *adp) { - video_info_t info; - - if (!get_mode_info(adp, M_VESA_CG800x600, &info)) { - scrmode = M_VESA_CG800x600; - } else if (!get_mode_info(adp, M_VGA_CG320, &info)) { - scrmode = M_VGA_CG320; - } else { - log(LOG_NOTICE, "logo_saver: no suitable graphics mode\n"); - return ENODEV; - } - - scrw = info.vi_width; - scrh = info.vi_height; - blanked = 0; - - return 0; + video_info_t info; + + if (!get_mode_info(adp, M_VESA_CG800x600, &info)) { + scrmode = M_VESA_CG800x600; + } else if (!get_mode_info(adp, M_VGA_CG320, &info)) { + scrmode = M_VGA_CG320; + } else { + log(LOG_NOTICE, + "%s: the console does not support M_VGA_CG320\n", + SAVER_NAME); + return (ENODEV); + } + + scrw = info.vi_width; + scrh = info.vi_height; + + return (0); } static int logo_term(video_adapter_t *adp) { - return 0; + return (0); } static scrn_saver_t logo_module = { - "logo_saver", logo_init, logo_term, logo_saver, NULL, + SAVER_NAME, + logo_init, + logo_term, + logo_saver, + NULL }; SAVER_MODULE(logo_saver, logo_module); |