summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordes <des@FreeBSD.org>2004-08-06 21:35:51 +0000
committerdes <des@FreeBSD.org>2004-08-06 21:35:51 +0000
commit8ffad1ab3b1aa24356ca8013ae4abb6ce5e6a442 (patch)
treec0d7ea822804783cefd44e3b73776b37b9459d8e /sys
parenta289476461e733a6b0aa0cf9c40fa3fa3fe682bf (diff)
downloadFreeBSD-src-8ffad1ab3b1aa24356ca8013ae4abb6ce5e6a442.zip
FreeBSD-src-8ffad1ab3b1aa24356ca8013ae4abb6ce5e6a442.tar.gz
While we're revisiting old sins, try to clean up the code a little and
make it more style(9)ish.
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/fb/splash_pcx.c344
1 files changed, 176 insertions, 168 deletions
diff --git a/sys/dev/fb/splash_pcx.c b/sys/dev/fb/splash_pcx.c
index 92dceb4..e67bb24 100644
--- a/sys/dev/fb/splash_pcx.c
+++ b/sys/dev/fb/splash_pcx.c
@@ -40,224 +40,232 @@
#include <dev/fb/fbreg.h>
#include <dev/fb/splashreg.h>
-#define FADE_TIMEOUT 300 /* sec */
-
static int splash_mode = -1;
static int splash_on = FALSE;
static int pcx_start(video_adapter_t *adp);
static int pcx_end(video_adapter_t *adp);
static int pcx_splash(video_adapter_t *adp, int on);
-static int pcx_init(char *data, int sdepth);
+static int pcx_init(void *data, int sdepth);
static int pcx_draw(video_adapter_t *adp);
static splash_decoder_t pcx_decoder = {
- "splash_pcx", pcx_start, pcx_end, pcx_splash, SPLASH_IMAGE,
+ .name = "splash_pcx",
+ .init = pcx_start,
+ .term = pcx_end,
+ .splash = pcx_splash,
+ .data_type = SPLASH_IMAGE,
};
SPLASH_DECODER(splash_pcx, pcx_decoder);
-static struct
-{
- int width, height, bpsl;
- int bpp, planes, zlen;
- const u_char *zdata;
- u_char *palette;
+static struct {
+ int width;
+ int height;
+ int bpsl;
+ int bpp;
+ int planes;
+ int zlen;
+ const uint8_t *zdata;
+ uint8_t *palette;
} pcx_info;
-static int
+static int
pcx_start(video_adapter_t *adp)
{
- static int modes[] = {
- M_VGA_CG320,
- M_VESA_CG640x480,
- M_VESA_CG800x600,
- M_VESA_CG1024x768,
- -1,
- };
- video_info_t info;
- int i;
+ static int modes[] = {
+ M_VGA_CG320,
+ M_VESA_CG640x480,
+ M_VESA_CG800x600,
+ M_VESA_CG1024x768,
+ -1,
+ };
+ video_info_t info;
+ int i;
- if (pcx_decoder.data == NULL
- || pcx_decoder.data_size <= 0
- || pcx_init((u_char *)pcx_decoder.data, pcx_decoder.data_size))
- return ENODEV;
+ if (pcx_decoder.data == NULL ||
+ pcx_decoder.data_size <= 0 ||
+ pcx_init(pcx_decoder.data, pcx_decoder.data_size))
+ return (ENODEV);
- if (bootverbose)
- printf("splash_pcx: image good:\n"
- " width = %d\n"
- " height = %d\n"
- " depth = %d\n"
- " planes = %d\n",
- pcx_info.width, pcx_info.height,
- pcx_info.bpp, pcx_info.planes);
-
- for (i = 0; modes[i] >= 0; ++i) {
- if (get_mode_info(adp, modes[i], &info) != 0)
- continue;
if (bootverbose)
- printf("splash_pcx: considering mode %d:\n"
- " vi_width = %d\n"
- " vi_height = %d\n"
- " vi_depth = %d\n"
- " vi_planes = %d\n",
- modes[i],
- info.vi_width, info.vi_height,
- info.vi_depth, info.vi_planes);
- if (info.vi_width >= pcx_info.width
- && info.vi_height >= pcx_info.height
- && info.vi_depth == pcx_info.bpp
- && info.vi_planes == pcx_info.planes)
- break;
- }
-
- splash_mode = modes[i];
- if (splash_mode == -1)
- return ENODEV;
- if (bootverbose)
- printf("pcx_splash: selecting mode %d\n", splash_mode);
- return 0;
+ printf("splash_pcx: image good:\n"
+ " width = %d\n"
+ " height = %d\n"
+ " depth = %d\n"
+ " planes = %d\n",
+ pcx_info.width, pcx_info.height,
+ pcx_info.bpp, pcx_info.planes);
+
+ for (i = 0; modes[i] >= 0; ++i) {
+ if (get_mode_info(adp, modes[i], &info) != 0)
+ continue;
+ if (bootverbose)
+ printf("splash_pcx: considering mode %d:\n"
+ " vi_width = %d\n"
+ " vi_height = %d\n"
+ " vi_depth = %d\n"
+ " vi_planes = %d\n",
+ modes[i],
+ info.vi_width, info.vi_height,
+ info.vi_depth, info.vi_planes);
+ if (info.vi_width >= pcx_info.width
+ && info.vi_height >= pcx_info.height
+ && info.vi_depth == pcx_info.bpp
+ && info.vi_planes == pcx_info.planes)
+ break;
+ }
+
+ splash_mode = modes[i];
+ if (splash_mode == -1)
+ return (ENODEV);
+ if (bootverbose)
+ printf("splash_pcx: selecting mode %d\n", splash_mode);
+ return (0);
}
static int
pcx_end(video_adapter_t *adp)
{
- /* nothing to do */
- return 0;
+ /* nothing to do */
+ return (0);
}
static int
pcx_splash(video_adapter_t *adp, int on)
{
- if (on) {
- if (!splash_on) {
- if (set_video_mode(adp, splash_mode) || pcx_draw(adp))
- return 1;
- splash_on = TRUE;
+ if (on) {
+ if (!splash_on) {
+ if (set_video_mode(adp, splash_mode) || pcx_draw(adp))
+ return 1;
+ splash_on = TRUE;
+ }
+ return (0);
+ } else {
+ splash_on = FALSE;
+ return (0);
}
- return 0;
- } else {
- splash_on = FALSE;
- return 0;
- }
}
-struct pcxheader {
- u_char manufactor;
- u_char version;
- u_char encoding;
- u_char bpp;
- u_short xmin, ymin, xmax, ymax;
- u_short hres, vres;
- u_char colormap[48];
- u_char rsvd;
- u_char nplanes;
- u_short bpsl;
- u_short palinfo;
- u_short hsize, vsize;
+struct pcx_header {
+ uint8_t manufactor;
+ uint8_t version;
+ uint8_t encoding;
+ uint8_t bpp;
+ uint16_t xmin;
+ uint16_t ymin;
+ uint16_t xmax;
+ uint16_t ymax;
+ uint16_t hres;
+ uint16_t vres;
+ uint8_t colormap[48];
+ uint8_t rsvd;
+ uint8_t nplanes;
+ uint16_t bpsl;
+ uint16_t palinfo;
+ uint16_t hsize;
+ uint16_t vsize;
};
#define MAXSCANLINE 1024
static int
-pcx_init(char *data, int size)
+pcx_init(void *data, int size)
{
- const struct pcxheader *hdr;
-
- hdr = (const struct pcxheader *)data;
+ const struct pcx_header *hdr = data;
- if (size < 128 + 1 + 1 + 768
- || hdr->manufactor != 10
- || hdr->version != 5
- || hdr->encoding != 1
- || hdr->nplanes != 1
- || hdr->bpp != 8
- || hdr->bpsl > MAXSCANLINE
- || data[size-769] != 12) {
- printf("splash_pcx: invalid PCX image\n");
- return 1;
- }
- pcx_info.width = hdr->xmax - hdr->xmin + 1;
- pcx_info.height = hdr->ymax - hdr->ymin + 1;
- pcx_info.bpsl = hdr->bpsl;
- pcx_info.bpp = hdr->bpp;
- pcx_info.planes = hdr->nplanes;
- pcx_info.zlen = size - (128 + 1 + 768);
- pcx_info.zdata = data + 128;
- pcx_info.palette = data + size - 768;
- return 0;
+ if (size < 128 + 1 + 1 + 768 ||
+ hdr->manufactor != 10 ||
+ hdr->version != 5 ||
+ hdr->encoding != 1 ||
+ hdr->nplanes != 1 ||
+ hdr->bpp != 8 ||
+ hdr->bpsl > MAXSCANLINE ||
+ ((uint8_t *)data)[size - 769] != 12) {
+ printf("splash_pcx: invalid PCX image\n");
+ return (1);
+ }
+ pcx_info.width = hdr->xmax - hdr->xmin + 1;
+ pcx_info.height = hdr->ymax - hdr->ymin + 1;
+ pcx_info.bpsl = hdr->bpsl;
+ pcx_info.bpp = hdr->bpp;
+ pcx_info.planes = hdr->nplanes;
+ pcx_info.zlen = size - (128 + 1 + 768);
+ pcx_info.zdata = (uint8_t *)data + 128;
+ pcx_info.palette = (uint8_t *)data + size - 768;
+ return (0);
}
static int
pcx_draw(video_adapter_t *adp)
{
- u_char *vidmem;
- int swidth, sheight, sbpsl, sdepth, splanes;
- int banksize, origin;
- int c, i, j, pos, scan, x, y;
- u_char line[MAXSCANLINE];
-
- if (pcx_info.zlen < 1)
- return 1;
+ uint8_t *vidmem;
+ int swidth, sheight, sbpsl, sdepth, splanes;
+ int banksize, origin;
+ int c, i, j, pos, scan, x, y;
+ uint8_t line[MAXSCANLINE];
- load_palette(adp, pcx_info.palette);
-
- vidmem = (u_char *)adp->va_window;
- swidth = adp->va_info.vi_width;
- sheight = adp->va_info.vi_height;
- sbpsl = adp->va_line_width;
- sdepth = adp->va_info.vi_depth;
- splanes = adp->va_info.vi_planes;
- banksize = adp->va_window_size;
-
- for (origin = 0; origin < sheight*sbpsl; origin += banksize) {
- set_origin(adp, origin);
- bzero(vidmem, banksize);
- }
-
- x = (swidth - pcx_info.width) / 2;
- y = (sheight - pcx_info.height) / 2;
- origin = 0;
- pos = y * sbpsl + x;
- while (pos > banksize) {
- pos -= banksize;
- origin += banksize;
- }
- set_origin(adp, origin);
-
- for (scan = i = 0; scan < pcx_info.height; ++scan, ++y, pos += sbpsl) {
- for (j = 0; j < pcx_info.bpsl && i < pcx_info.zlen; ++i) {
- if ((pcx_info.zdata[i] & 0xc0) == 0xc0) {
- c = pcx_info.zdata[i++] & 0x3f;
- if (i >= pcx_info.zlen)
- return 1;
- } else {
- c = 1;
- }
- if (j + c > pcx_info.bpsl)
- return 1;
- while (c--)
- line[j++] = pcx_info.zdata[i];
+ if (pcx_info.zlen < 1)
+ return (1);
+
+ load_palette(adp, pcx_info.palette);
+
+ vidmem = (uint8_t *)adp->va_window;
+ swidth = adp->va_info.vi_width;
+ sheight = adp->va_info.vi_height;
+ sbpsl = adp->va_line_width;
+ sdepth = adp->va_info.vi_depth;
+ splanes = adp->va_info.vi_planes;
+ banksize = adp->va_window_size;
+
+ for (origin = 0; origin < sheight*sbpsl; origin += banksize) {
+ set_origin(adp, origin);
+ bzero(vidmem, banksize);
}
- if (pos > banksize) {
- origin += banksize;
- pos -= banksize;
- set_origin(adp, origin);
+ x = (swidth - pcx_info.width) / 2;
+ y = (sheight - pcx_info.height) / 2;
+ origin = 0;
+ pos = y * sbpsl + x;
+ while (pos > banksize) {
+ pos -= banksize;
+ origin += banksize;
}
+ set_origin(adp, origin);
- if (pos + pcx_info.width > banksize) {
- /* scanline crosses bank boundary */
- j = banksize - pos;
- bcopy(line, vidmem + pos, j);
- origin += banksize;
- pos -= banksize;
- set_origin(adp, origin);
- bcopy(line + j, vidmem, pcx_info.width - j);
- } else {
- bcopy(line, vidmem + pos, pcx_info.width);
+ for (scan = i = 0; scan < pcx_info.height; ++scan, ++y, pos += sbpsl) {
+ for (j = 0; j < pcx_info.bpsl && i < pcx_info.zlen; ++i) {
+ if ((pcx_info.zdata[i] & 0xc0) == 0xc0) {
+ c = pcx_info.zdata[i++] & 0x3f;
+ if (i >= pcx_info.zlen)
+ return (1);
+ } else {
+ c = 1;
+ }
+ if (j + c > pcx_info.bpsl)
+ return (1);
+ while (c--)
+ line[j++] = pcx_info.zdata[i];
+ }
+
+ if (pos > banksize) {
+ origin += banksize;
+ pos -= banksize;
+ set_origin(adp, origin);
+ }
+
+ if (pos + pcx_info.width > banksize) {
+ /* scanline crosses bank boundary */
+ j = banksize - pos;
+ bcopy(line, vidmem + pos, j);
+ origin += banksize;
+ pos -= banksize;
+ set_origin(adp, origin);
+ bcopy(line + j, vidmem, pcx_info.width - j);
+ } else {
+ bcopy(line, vidmem + pos, pcx_info.width);
+ }
}
- }
- return 0;
+ return (0);
}
OpenPOWER on IntegriCloud