/* setup directcolor palette - required for ATI cards*/ static void set_directcolor_palette(PSD psd) { diag_printf("%s - NOT IMPLEMENTED\n", __FUNCTION__); while (1) ; #if 0 int i; short r[256], g[256], b[256]; /* 16bpp uses 32 palette entries*/ if(psd->bpp == 16) { /* FIXME: this still doesn't work*/ for(i=0; i<32; ++i) { //r[i] = g[i] = b[i] = ((i<<11)|(i<<6)|i)<<8; //r[i] = g[i] = b[i] = ((i<<5)|i)<<10; //r[i] = g[i] = b[i] = i<<11; //r[i] = g[i] = b[i] = (i<<11) | (i<<3); r[i] = g[i] = b[i] = (i<<11); //r[i] = i << 8; //g[i] = i << 10; //b[i] = i << 8; } ioctl_setpalette(0, 32, r, g, b); } else { /* 32bpp uses 256 entries*/ for(i=0; i<256; ++i) r[i] = i<<8; ioctl_setpalette(0, 256, r, r, r); } #endif }
/* Timer handler used to do the VT switch at a time when not drawing */ static void vt_do_switch(void *arg) { static unsigned short r[16], g[16], b[16]; /* * If a drawing function is in progress then we cannot mode * switch right now because the drawing function would continue to * scribble on the screen after the switch. So disable further * drawing and schedule an alarm to try again in .1 second. */ if(mwdrawing) { draw_disable (); GdAddTimer(100, vt_do_switch, NULL); return; } if(visible) { draw_disable (); ioctl_getpalette(0, 16, r, g, b); if(ioctl (ttyfd, VT_RELDISP, 1) == -1) EPRINTF("Error can't switch away from VT: %m\n"); } else { ioctl_setpalette(0, 16, r, g, b); draw_enable (); if(ioctl (ttyfd, VT_RELDISP, VT_ACKACQ) == -1) EPRINTF("Error can't acknowledge VT switch: %m\n"); } }
/* convert Microwindows palette to framebuffer format and set it*/ static void fb_setpalette(PSD psd,int first, int count, MWPALENTRY *palette) { diag_printf("%s - NOT IMPLEMENTED\n", __FUNCTION__); while (1) ; #if 0 int i; unsigned short red[count]; unsigned short green[count]; unsigned short blue[count]; /* convert palette to framebuffer format*/ for(i=0; i < count; i++) { MWPALENTRY *p = &palette[i]; /* grayscale computation: * red[i] = green[i] = blue[i] = * (p->r * 77 + p->g * 151 + p->b * 28); */ red[i] = (p->r * fade / 100) << 8; green[i] = (p->g * fade / 100) << 8; blue[i] = (p->b * fade / 100) << 8; } ioctl_setpalette(first, count, red, green, blue); #endif }
/* close framebuffer*/ static void fb_close(PSD psd) { /* if not opened, return*/ if(status != 2) return; status = 1; /* reset hw palette*/ ioctl_setpalette(0, 16, saved_red, saved_green, saved_blue); /* unmap framebuffer*/ munmap(psd->addr, psd->size); #ifdef _HAVE_TEXT_MODE #ifdef _LITE_VERSION if (mgIsServer) { #endif /* enter text mode*/ if (tty >= 0) { ioctl (tty, KDSETMODE, KD_TEXT); close (tty); tty = -1; } #ifdef _LITE_VERSION } #endif #endif /* close framebuffer*/ close(fb); }
static void fb_setpalette(PSD psd,int first, int count, GAL_Color *palette) { int i; unsigned short red[count]; unsigned short green[count]; unsigned short blue[count]; /* convert palette to framebuffer format*/ for(i=0; i < count; i++) { GAL_Color *p = &palette[i]; /* grayscale computation: * red[i] = green[i] = blue[i] = * (p->r * 77 + p->g * 151 + p->b * 28); */ red[i] = (p->r * fade / 100) << 8; green[i] = (p->g * fade / 100) << 8; blue[i] = (p->b * fade / 100) << 8; } ioctl_setpalette(first, count, red, green, blue); }
/* close framebuffer*/ static void fb_close(PSD psd) { diag_printf("%s - NOT IMPLEMENTED\n", __FUNCTION__); #if 0 int tty; /* if not opened, return*/ if(status != 2) return; status = 1; /* reset hw palette*/ ioctl_setpalette(0, 256, saved_red, saved_green, saved_blue); /* unmap framebuffer*/ // munmap(psd->addr, psd->size); /* close framebuffer*/ close(fb); #endif }