4.4BSD/usr/src/contrib/X11R5-luna68k/mit/server/ddx/sol/solBm.c

Compare this file to the similar file:
Show the results in this format:

/*
 *  solBm.c -- 
 *
 *	remade by A.Fujita, DEC-16-1992
 */

#include "sol.h"
#include "solFb.h"


solBmCreate(sol_fb_info)
SolFbInfoPtr sol_fb_info;
{
        struct fb_rfc rfc;
#ifdef	DEBUG
	fprintf(stderr, "solBmCreate\t[solBm.c]\tStart\n");
#endif

	if ((sol_fb_info->fbfd = open("/dev/fb", O_RDWR)) < 0) {
		Error("Can't open /dev/fb");
		return FALSE;
	}

	sol_fb_info->fbmapsize = (FB_WIDTH/8)*FB_HEIGHT;
	sol_fb_info->fbmap = (char *) mmap((caddr_t) 0 ,(size_t) sol_fb_info->fbmapsize,
					    (PROT_READ | PROT_WRITE), MAP_SHARED,
					    sol_fb_info->fbfd, (off_t) 0);

	if (sol_fb_info->fbmap == (char *) -1) {
		Error("Can't mmap /dev/fb");
		return FALSE;
	}

	sol_fb_info->plane = sol_fb_info->fbmap + 8;

	rfc.rfc_hcnt =  -249;
	rfc.rfc_vcnt = -2075;
        (void) ioctl(sol_fb_info->fbfd, FBIOSETRFCT, &rfc);

#ifdef	DEBUG
	fprintf(stderr, "solBmCreate\t[solBm.c]\tEnd\n");
#endif

	return TRUE;
}

static Bool
solBmSaveScreen(pScreen, on)
ScreenPtr     pScreen;
Bool          on;
{
	return FALSE;
}

Bool
solBmInit(index, pScreen, argc, argv)
    int           index;
    ScreenPtr     pScreen;
    int           argc;
    char          **argv;
{
	SolFbInfoPtr pFbInfo;
	extern miPointerScreenFuncRec  solPointerScreenFuncs;

#ifdef	DEBUG
	fprintf(stderr, "solBmInit\t[solBm.c]\tStart\n");
#endif
	
	pFbInfo = (SolFbInfoPtr) pScreen->devPrivates[solScreenIndex].ptr;

	if (!monitorResolution) {
		monitorResolution = MONO_TV_RESOLUTION; 
	}

	if(!mfbScreenInit(pScreen, (pointer) pFbInfo->plane,
			  pFbInfo->scr_width, pFbInfo->scr_height,
			  monitorResolution, monitorResolution,
			  pFbInfo->fb_width)){
		ErrorF("mfbScreenInit error.\n");
		return FALSE;
	}

   	pScreen->whitePixel = 0;
   	pScreen->blackPixel = 1;

	miDCInitialize (pScreen, &solPointerScreenFuncs);

	mfbCreateDefColormap(pScreen);

	pScreen->SaveScreen = solBmSaveScreen;

	solBmSaveScreen(pScreen, SCREEN_SAVER_FORCER);

#ifdef	DEBUG
	fprintf(stderr, "solBmInit\t[solBm.c]\tEnd\n");
#endif
	return TRUE;
}

void
solBmGiveUp(sol_fb_info)
SolFbInfoPtr sol_fb_info;
{
#ifdef	DEBUG
	fprintf(stderr, "solBmGiveUp\t[solBm.c]\tStart\n");

	(void) close(sol_fb_info->fbfd);

	fprintf(stderr, "solBmGiveUp\t[solBm.c]\tEnd\n");
#endif
}