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

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

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

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

SolFbInfo	sol_fb_info;	

int	solScreenIndex;
static	unsigned long solGeneration;

static	Bool solScreenInit();
static	Bool solGetFbInfo();
static	void solSetConsoleMode();

static SolFbProc sol_fb_proc = {
	solBmCreate,  solBmInit,  solBmGiveUp
};

int
InitOutput(pScreenInfo, argc, argv)
ScreenInfo 	  *pScreenInfo;
int     	  argc;
char    	  **argv;
{
	static PixmapFormatRec  MonoFormats = {
		1, 1, BITMAP_SCANLINE_PAD,  /* 1-bit deep */
	};
	static Bool solFbInfo 	= FALSE;
	static Bool solDevsCreate = FALSE;

#ifdef	DEBUG
	fprintf(stderr, "InitOutput\t[solInit.c]\tStart\n");
#endif

	if (!solFbInfo) {
		if (solGetFbInfo(&sol_fb_info) != TRUE) 
			FatalError("Can't get framebuffer information.\n");
		solFbInfo = TRUE;
	}

	pScreenInfo->imageByteOrder     = IMAGE_BYTE_ORDER;
	pScreenInfo->bitmapScanlineUnit = BITMAP_SCANLINE_UNIT;
	pScreenInfo->bitmapScanlinePad  = BITMAP_SCANLINE_PAD;
	pScreenInfo->bitmapBitOrder     = BITMAP_BIT_ORDER;

	pScreenInfo->numPixmapFormats = 1;
	pScreenInfo->formats[0]       = MonoFormats;

	if (!solDevsCreate) {
		if (!(* sol_fb_info.func->CreateProc)(&sol_fb_info)) {
			FatalError("Can't create framebuffer.\n");
		}
		solSetConsoleMode();
		solDevsCreate = TRUE;
	}

	if(AddScreen(solScreenInit, argc, argv) < 0) {
		FatalError("Can't add screen\n");
	}

#ifdef	DEBUG
	fprintf(stderr, "InitOutput\t[solInit.c]\tEnd\n");
#endif
}

static Bool
solScreenInit(screenIndex, pScreen, argc, argv)
int		screenIndex;
ScreenPtr	pScreen;
int		argc;
char 		**argv;
{
#ifdef	DEBUG
	fprintf(stderr, "solScreenInit\t[solInit.c]\tStart\n");
#endif

	if (solGeneration != serverGeneration) {
		if((solScreenIndex = AllocateScreenPrivateIndex()) <0) {
			ErrorF("AllocateScreenPrivateIndex error.\n");
			return FALSE;
		}
		solGeneration = serverGeneration;
	}

	pScreen->devPrivates[solScreenIndex].ptr = (pointer) &sol_fb_info;

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

	return((* sol_fb_info.func->InitProc)(screenIndex, pScreen, argc, argv));
}

int
InitInput(argc, argv)
    int    argc;
    char   **argv;
{
	DevicePtr p, k;

#ifdef	DEBUG
	fprintf(stderr, "InitInput\t[solInit.c]\tStart\n");
#endif

	p = AddInputDevice(solMouseProc, TRUE);
	k = AddInputDevice(solKbdProc, TRUE);
	
	RegisterPointerDevice(p);
	RegisterKeyboardDevice(k);
	
	miRegisterPointerDevice(screenInfo.screens[0], p);
	
	if (mieqInit (k, p) != TRUE) {
		FatalError("Enqueue init error.\n");
	}

	solSetIoHandler(solEnqueueEvents);

	if(RegisterBlockAndWakeupHandlers(NoopDDA, solWakeupProc, (pointer)0) != TRUE) {
		FatalError("Can't register WakeupHandler\n");
	}

#ifdef	DEBUG
	fprintf(stderr, "InitInput\t[solInit.c]\tEnd\n");
#endif
}

static Bool
solGetFbInfo(sol_fb_info)
SolFbInfoPtr sol_fb_info;
{
#ifdef	DEBUG
	fprintf(stderr, "solGetFbInfo\t[solInit.c]\tStart\n");
#endif

	sol_fb_info->fb_type	= FB_BM;
	sol_fb_info->func	= &sol_fb_proc;
	sol_fb_info->scr_width	= SCREEN_WIDTH;  
	sol_fb_info->scr_height	= SCREEN_HEIGHT;  
	sol_fb_info->fb_width	= FB_WIDTH;  
	sol_fb_info->fb_height	= FB_HEIGHT;  
	sol_fb_info->fb_depth	= 1;

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

	return(TRUE);
}

static void
solSetConsoleMode()
{
#ifdef	DEBUG
	fprintf(stderr, "solSetConsoleMode\t[solInit.c]\tStart\n");
	fprintf(stderr, "solSetConsoleMode\t[solInit.c]\tEnd\n");
#endif
}

static void
solResetConsoleMode()
{
#ifdef	DEBUG
	fprintf(stderr, "solResetConsoleMode\t[solInit.c]\tStart\n");
	fprintf(stderr, "solResetConsoleMode\t[solInit.c]\tEnd\n");
#endif
}

void
AbortDDX()
{
#ifdef	DEBUG
	fprintf(stderr, "AbortDDX\t[solInit.c]\tStart\n");
#endif

	solResetConsoleMode();

#ifdef	DEBUG
	fprintf(stderr, "AbortDDX\t[solInit.c]\tEnd\n");
#endif
}

void
ddxGiveUp()
{
#ifdef	DEBUG
	fprintf(stderr, "ddxGiveUp\t[solInit.c]\tStart\n");
#endif

	solKbdGiveUp();
	solMouseGiveUp();
	if (sol_fb_info.func->GiveUpProc != NULL)
		(*sol_fb_info.func->GiveUpProc)(&sol_fb_info);
	solResetConsoleMode();

#ifdef	DEBUG
	fprintf(stderr, "ddxGiveUp\t[solInit.c]\tEnd\n");
#endif
}