コード例 #1
0
ファイル: med.c プロジェクト: paud/d2x-xl
int DosShell()
{
	int ok, w, h;
	grsBitmap * save_bitmap;

	// Save the current graphics state.

	w = grdCurScreen->scCanvas.cvBitmap.bmProps.w;
	h = grdCurScreen->scCanvas.cvBitmap.bmProps.h;

	save_bitmap = GrCreateBitmap( w, h );
	GrBmUBitBlt(w, h, 0, 0, 0, 0, &(grdCurScreen->scCanvas.cvBitmap), save_bitmap );

	GrSetMode( SM_ORIGINAL );

	//printf( "\n\nType EXIT to return to Inferno" );
	//fflush(stdout);

	KeyClose();
#ifndef __LINUX__
	ok = spawnl(P_WAIT,getenv("COMSPEC"), NULL );
#else
        system("");
#endif
	KeyInit();

	GrSetMode(grdCurScreen->scMode);
	GrBmUBitBlt(w, h, 0, 0, 0, 0, save_bitmap, &(grdCurScreen->scCanvas.cvBitmap);
	GrFreeBitmap( save_bitmap );
	//gr_pal_setblock( 0, 256, grdCurScreen->pal );
	//GrUsePaletteTable();

	return 1;

}
コード例 #2
0
ファイル: biggtest.c プロジェクト: nidheeshdas/Algosim
int main(int argc,char **argv)
{
  GrEvent ev;

  GrSetMode(GR_biggest_graphics);
  GrEventInit();
  GrMouseDisplayCursor();
  TestFunc();
  PrintInfo();
  GrEventWait(&ev);
  GrEventUnInit();
  GrSetMode(GR_default_text);
  return(0);
}
コード例 #3
0
ファイル: gr.cpp プロジェクト: paud/d2x-xl
int SetMenuScreenMode (u_int32_t sm)
{
	u_int32_t nMenuMode;

gameStates.menus.bHires = gameStates.menus.bHiresAvailable;		//do highres if we can
nMenuMode = gameStates.gfx.bOverride 
		? gameStates.gfx.nStartScrSize
		: gameStates.menus.bHires 
			? (gameStates.render.vr.nScreenSize >= SM (640, 480)) 
				? gameStates.render.vr.nScreenSize
				: SM (800, 600)
			: SM (320, 200);
gameStates.video.nLastScreenMode = -1;
if (nCurrentVGAMode != nMenuMode) {
	if (GrSetMode (nMenuMode))
		Error ("Cannot set screen mode for menu");
	if (!paletteManager.EffectDisabled ())
		paletteManager.LoadEffect ();
	gameStates.menus.bInitBG = 1;
	ogl.RebuildContext (gameStates.app.bGameRunning);
	}

screen.Canvas ()->SetupPane (
	gameStates.render.vr.buffers.screenPages, 0, 0, 
	screen.Width (), screen.Height ());
screen.Canvas ()->SetupPane (
	gameStates.render.vr.buffers.screenPages + 1, 0, 0, 
	screen.Width (), screen.Height ());
gameStates.render.fonts.bHires = gameStates.render.fonts.bHiresAvailable && gameStates.menus.bHires;
return 1;
}
コード例 #4
0
ファイル: descent.cpp プロジェクト: paud/d2x-xl
void ShowLoadingScreen (void)
{
if (!gameStates.app.bNostalgia)
	backgroundManager.Rebuild ();
else {
		char filename [14];

#if TRACE	
	console.printf(CON_DBG, "\nShowing loading screen...\n"); fflush (fErr);
#endif
	strcpy (filename, gameStates.menus.bHires ? "descentb.pcx" : "descent.pcx");
	if (!CFile::Exist (filename, gameFolders.szDataDir, 0))
		strcpy (filename, gameStates.menus.bHires ? "descntob.pcx" : "descento.pcx"); // OEM
	if (!CFile::Exist (filename, gameFolders.szDataDir, 0))
		strcpy (filename, "descentd.pcx"); // SHAREWARE
	if (!CFile::Exist (filename, gameFolders.szDataDir, 0))
		strcpy (filename, "descentb.pcx"); // MAC SHAREWARE
	GrSetMode (
		gameStates.menus.bHires ? 
			(gameStates.gfx.nStartScrMode < 0) ? 
				SM (800, 600) 
				: SM (scrSizes [gameStates.gfx.nStartScrMode].x, scrSizes [gameStates.gfx.nStartScrMode].y) 
			: SM (320, 200));
	SetScreenMode (SCREEN_MENU);
	gameStates.render.fonts.bHires = gameStates.render.fonts.bHiresAvailable && gameStates.menus.bHires;
	backgroundManager.Setup (filename, 0, 0, CCanvas::Current ()->Width (), CCanvas::Current ()->Height ());
	paletteManager.ClearEffect ();
	paletteManager.EnableEffect ();
	GrUpdate (0);
	}
}
コード例 #5
0
ファイル: scr_djgrx.c プロジェクト: ghaerr/microwindows
/*
**	Close graphics
*/
static void
DJGR_close(PSD psd)
{
	/* free framebuffer memory */
	free(psd->addr);
	GrSetMode(GR_default_text);
}
コード例 #6
0
ファイル: scr_djgr.c プロジェクト: EPiCS/reconos_v2
/*
**	Open graphics
*/
static PSD
DJGR_open(PSD psd)
{
	int		x;
	int		y;
	int		c;
        GrVideoMode	*md_info;

	x = 640;
	y = 480;
	c = 256;

        GrSetMode(GR_width_height_color_graphics,x,y,c);

        md_info = (GrVideoMode *) GrCurrentVideoMode();

	psd->xres = psd->xvirtres = GrScreenX();
	psd->yres = psd->yvirtres = GrScreenY();
	psd->linelen = md_info->lineoffset;
	psd->planes = 1;
	psd->bpp = md_info->bpp;
	psd->ncolors = GrNumColors();
	psd->flags = PSF_SCREEN;
	psd->addr = 0;		/* FIXME */

	/* note: must change psd->pixtype here for truecolor systems*/
	psd->pixtype = MWPF_PALETTE;

	return psd;
}
コード例 #7
0
ファイル: win32.c プロジェクト: paud/d2x-xl
int GrInit(int mode)
{
	//int org_gamma;
	int retcode;
	//HRESULT hr;

	// Only do this function once!
	if (gameStates.gfx.bInstalled==1)
		return -1;

	MALLOC( grdCurScreen,grs_screen,1 );
	memset( grdCurScreen, 0, sizeof(grs_screen);

	// Set the mode.
	if ((retcode=GrSetMode(mode)))
	{
		return retcode;
	}

	// Set all the screen, canvas, and bitmap variables that
	// aren't set by the GrSetMode call:
	grdCurScreen->sc_canvas.cv_color = 0;
	grdCurScreen->sc_canvas.cv_drawmode = 0;
	grdCurScreen->sc_canvas.cv_font = NULL;
	grdCurScreen->sc_canvas.cv_font_fg_color = 0;
	grdCurScreen->sc_canvas.cv_font_bg_color = 0;
	GrSetCurrentCanvas( &grdCurScreen->sc_canvas );

	// Set flags indicating that this is installed.
	gameStates.gfx.bInstalled = 1;

	return 0;
}
コード例 #8
0
ファイル: gnugraph.c プロジェクト: kashif/evolver
void init_gnugraph()
{ int k;
  int c;    /* color, 0-15 */
  int g;    /* gray level, 0-15 */

  GrSetMode(GR_default_graphics);
  numcolors = GrNumColors();
  if ( (numcolors < 256) && color_flag )
      shading_flag = 0;  /* not enough for shading */
  
  /* first index background color */
  for ( c = 0 ; c < 16 ; c++ ) color_perm[c] = c;
  color_perm[background_color] = 0;
  color_perm[0] = background_color;
  
  if ( shading_flag && color_flag )
  { for ( c = 0 ; c < 16 ; c++ )
      for ( g = 0 ; g <= MAXGRAY ; g++ )
        GrSetColor(CINDEX(c,g),
         (int)(0xff*(g+12.)/(MAXGRAY+12.)*rgb_colors[c][0]), 
         (int)(0xff*(g+12.)/(MAXGRAY+12.)*rgb_colors[c][1]),
         (int)(0xff*(g+12.)/(MAXGRAY+12.)*rgb_colors[c][2]));
    }
    else if ( shading_flag ) /* shading */
    { for ( g = 0 ; g <= MAXGRAY ; g++ )
        GrSetColor(CINDEX(WHITE,g),
         (int)(0xff*(g+12.)/(MAXGRAY+12.)), 
         (int)(0xff*(g+12.)/(MAXGRAY+12.)),
         (int)(0xff*(g+12.)/(MAXGRAY+12.)));
    }
    else if ( color_flag )
    { for ( c = 0 ; c < 16 ; c++ )
        GrSetColor(CINDEX(c,MAXGRAY),
         (int)(0xff*rgb_colors[c][0]), 
         (int)(0xff*rgb_colors[c][1]),
         (int)(0xff*rgb_colors[c][2]));
    }

  if ( numcolors == 32768 )
     GrClearScreen(CINDEX(WHITE,MAXGRAY));
  else
  {  GrFreeColor(0);
      GrSetColor(0,(int)(0xff*rgb_colors[background_color][0]),
        (int)(0xff*rgb_colors[background_color][1]),
        (int)(0xff*rgb_colors[background_color][2]));
  }

  maxx = GrMaxX(); maxy = GrMaxY();
  if ( maxx/3 < maxy/3 )
    { xscale = maxx/3;
      yscale = xscale; /* assume square pixel screen */
    }
  else
    { yscale = maxy/3;
      xscale = yscale; /* assume square pixel screen */
    }
}
コード例 #9
0
ファイル: gr.cpp プロジェクト: paud/d2x-xl
int GrInit (void)
{
	int mode = SM (800, 600);
	int retcode, t;

// Only do this function once!
if (gameStates.gfx.bInstalled)
	return -1;

#ifdef OGL_RUNTIME_LOAD
OglInitLoadLibrary ();
#endif
/***/PrintLog ("   initializing SDL\n");
#if !USE_IRRLICHT
if (SDL_Init (SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE) < 0) {
	PrintLog ("SDL library video initialisation failed: %s.\n", SDL_GetError());
	Error ("SDL library video initialisation failed: %s.", SDL_GetError());
}
#endif
#if DBG
	ogl.m_states.bFullScreen = 0;
#else
if ((t = FindArg ("-fullscreen"))) {
	/***/PrintLog ("   switching to fullscreen\n");
	ogl.m_states.bFullScreen = NumArg (t, 1);
	//GrToggleFullScreen();
	}
#endif
/***/PrintLog ("   initializing internal texture list\n");
textureManager.Init ();
/***/PrintLog ("   allocating screen buffer\n");
screen.Canvas ()->SetBuffer (NULL);

// Set the mode.
for (t = 0; scrSizes [t].x && scrSizes [t].y; t++)
	if (FindArg (ScrSizeArg (scrSizes [t].x, scrSizes [t].y))) {
		gameStates.gfx.bOverride = 1;
		gameStates.gfx.nStartScrSize =
		mode = SM (scrSizes [t].x, scrSizes [t].y);
		gameStates.gfx.nStartScrMode = FindDisplayMode (mode);
		break;
		}
if ((retcode = GrSetMode (mode)))
	return retcode;

gameStates.gfx.bInstalled = 1;
InitGammaRamp ();
//atexit(GrClose);
/***/PrintLog ("   initializing OpenGL extensions\n");
ogl.SetRenderQuality ();
ogl.SetupExtensions ();
ogl.DestroyDrawBuffer ();
ogl.CreateDrawBuffer ();
ogl.SetDrawBuffer (GL_BACK, 1);
return 0;
}
コード例 #10
0
ファイル: w_system.c プロジェクト: j13s/devil
/* Initialize Grfx-Mode&Mouse.Try to use xres,yres,colors and font <fontname>.
   If you are successful, return a 1.
   If you can't initialize this mode, return a 0. */
int ws_initgrfx(int xres, int yres, int colors, const char *fontname) {
    static char pixels[2];
/* unsigned char value; 
    Why?  -jgk*/
    GrBitmap pat_bm = {
        0, 2, pixels, 1, 0, 0
    };


    if ( ( ws_private.textopt.txo_font =
              GrLoadFont( (char *)(fontname == NULL ?
                                   DEFAULT_FONT :
                                   fontname) ) ) == NULL ) {
        fprintf(errf, "Can't find font %s\n", fontname);
        return 0;
    }

    if ( !GrSetMode(GR_width_height_color_graphics, xres, yres, colors) ) {
        fprintf(errf, "Can't set grfx-mode. Try to load VESA-driver\n");
        return 0;
    }

    if (GrSizeX() != xres || GrSizeY() != yres) {
        fprintf(errf, "Can't set grfx-mode. Try to load VESA-driver\n");
        return 0;
    }

    GrClearScreen(0);

    if ( !GrMouseDetect() ) {
        fprintf(errf, "Can't find mouse\n");
        return 0;
    }

    GrMouseInit();
    GrMouseSetColors(255, 0);
    GrMouseDisplayCursor();
    pixels[0] = 0x79;   /* Prevent compiler warning for now */
    pixels[1] = 0x55;
    ws_private.pat_box.gp_bitmap = pat_bm;
/* value=_farpeekb(0x40,0x17);
   _farpokeb(0x40,0x17,value^0x20); */
    return 1;
}
コード例 #11
0
ファイル: gr.cpp プロジェクト: paud/d2x-xl
int SetGameScreenMode (u_int32_t sm)
{
if (nCurrentVGAMode != gameStates.render.vr.nScreenSize) {
	if (GrSetMode (gameStates.render.vr.nScreenSize)) {
		Error ("Cannot set desired screen mode for game!");
		//we probably should do something else here, like select a standard mode
		}
#ifdef MACINTOSH
	if ((gameConfig.nControlType == 1) && (gameStates.app.nFunctionMode == FMODE_GAME))
		JoyDefsCalibrate ();
#endif
	}
gameData.render.window.wMax = screen.Width ();
gameData.render.window.hMax = screen.Height ();
if (!gameData.render.window.h || (gameData.render.window.h > gameData.render.window.hMax) || 
	 !gameData.render.window.w || (gameData.render.window.w > gameData.render.window.wMax)) {
	gameData.render.window.w = gameData.render.window.wMax;
	gameData.render.window.h = gameData.render.window.hMax;
	}
//	Define screen pages for game mode
// If we designate through screenFlags to use paging, then do so.
screen.Canvas ()->SetupPane (&gameStates.render.vr.buffers.screenPages[0], 
										0, 0, screen.Width (), screen.Height ());

if (gameStates.render.vr.nScreenFlags&VRF_USE_PAGING) {
	screen.Canvas ()->SetupPane (&gameStates.render.vr.buffers.screenPages[1], 0, 
											screen.Height (), screen.Width (), screen.Height ());
	}
else {
	screen.Canvas ()->SetupPane (&gameStates.render.vr.buffers.screenPages[1], 
											0, 0, screen.Width (), screen.Height ());
	}
gameStates.render.fonts.bHires = gameStates.render.fonts.bHiresAvailable && (gameStates.menus.bHires = (gameStates.video.nDisplayMode > 1));
if (gameStates.render.vr.nRenderMode != VR_NONE) {
	// for 640x480 or higher, use hires font.
	if (gameStates.render.fonts.bHiresAvailable && (screen.Height () > 400))
		gameStates.render.fonts.bHires = 1;
	else
		gameStates.render.fonts.bHires = 0;
	}
console.Resize (0, 0, screen.Width (), screen.Height () / 2);
return 1;
}
コード例 #12
0
ファイル: modetest.c プロジェクト: nidheeshdas/Algosim
int main(void)
{
	static int firstgr = 1;
	GrEvent ev;

	GrSetDriver(NULL);
	if(GrCurrentVideoDriver() == NULL) {
	    printf("No graphics driver found\n");
	    exit(1);
	}
	for( ; ; ) {
	    int  i,w,h,px,py;
	    char m1[41];
	    nmodes = (int)(collectmodes(GrCurrentVideoDriver(),grmodes) - grmodes);
	    if(nmodes == 0) {
		printf("No graphics modes found\n");
		exit(1);
	    }
	    qsort(grmodes,nmodes,sizeof(grmodes[0]),vmcmp);
	    printf(
		"Graphics driver: \"%s\"\n"
		"  graphics defaults: %dx%d %ld colors\n"
		"  text defaults: %dx%d %ld colors\n\n",
		GrCurrentVideoDriver()->name,
		GrDriverInfo->defgw,
		GrDriverInfo->defgh,
		(long)GrDriverInfo->defgc,
		GrDriverInfo->deftw,
		GrDriverInfo->defth,
		(long)GrDriverInfo->deftc
	    );
	    PrintModes();
	    printf("\nEnter choice #, or anything else to quit> ");
	    fflush(stdout);
	    if(!fgets(m1,40,stdin) || 
	    (sscanf(m1,"%d",&i) != 1) || (i < 1) || (i > nmodes)) {
		exit(0);
	    }
	    if(firstgr) {
		printf(
                    "When in graphics mode, press any key to return to menu.\n"
		    "Now press <CR> to continue..."
		);
		fflush(stdout);
		fgets(m1,40,stdin);
		firstgr = 0;
	    }
	    i--;
	    GrSetMode(
		GR_width_height_bpp_graphics,
		grmodes[i].w,
		grmodes[i].h,
		grmodes[i].bpp
	    );
	    if(grmodes[i].bpp<15) {
		w = GrScreenX() >> 1;
		h = GrScreenY() >> 1;
		px = w + 5;
		py = h + 5;
		w -= 10;
		h -= 10;
		drawing(
		    5,5,w,h,
		    GrBlack(),
		    GrWhite()
		);
		drawing(
		    px,5,w,h,
		    GrAllocColor(255,0,0),
		    GrAllocColor(0,255,0)
		);
		drawing(
		    5,py,w,h,
		    GrAllocColor(0,0,255),
		    GrAllocColor(255,255,0)
		);
		drawing(
		    px,py,w,h,
		    GrAllocColor(255,0,255),
		    GrAllocColor(0,255,255)
		);
	    } else {
コード例 #13
0
ファイル: scr_djgr.c プロジェクト: EPiCS/reconos_v2
/*
**	Close graphics
*/
static void
DJGR_close(PSD psd)
{
	GrSetMode(GR_default_text);
}
コード例 #14
0
ファイル: pnmtest.c プロジェクト: nidheeshdas/Algosim
int main(void)
{
    GrContext *grc;
    int wide, high, maxval;
    char s[81];
    GrEvent ev;

    /*GrSetMode( GR_default_graphics ); */
    GrSetMode(GR_width_height_color_graphics, 640, 480, 32768);
    GrEventInit();
    GrMouseDisplayCursor();
    GrQueryPnm(FIMAGEPPM, &wide, &high, &maxval);
    sprintf(s, "%s %d x %d pixels", FIMAGEPPM, wide, high);
    GrTextXY(10, 20, s, GrBlack(), GrWhite());
    GrBox(10, 40, 10+wide+1, 40+high+1, GrWhite());
    grc = GrCreateSubContext(11, 41, 11+wide-1, 41+high-1, NULL, NULL);
    GrLoadContextFromPnm(grc, FIMAGEPPM);
    GrSaveContextToPgm(grc, FIMAGEPGM, "TestPnm");
    GrDestroyContext(grc);
    GrTextXY(10, 50+high, "Press RETURN to continue", GrBlack(), GrWhite());
    GrEventWaitKeyOrClick(&ev);

    GrClearScreen(GrBlack());
    GrQueryPnm(FIMAGEPGM, &wide, &high, &maxval);
    sprintf(s, "%s %d x %d pixels", FIMAGEPGM, wide, high);
    GrTextXY(10, 20, s, GrBlack(), GrWhite());
    GrBox(10, 40, 10+wide+1, 40+high+1, GrWhite());
    grc = GrCreateSubContext(11, 41, 11+wide-1, 41+high-1, NULL, NULL);
    GrLoadContextFromPnm(grc,FIMAGEPGM);
    GrDestroyContext(grc);
    GrTextXY(10, 50+high, "Press RETURN to continue", GrBlack(), GrWhite());
    GrEventWaitKeyOrClick(&ev);

    GrClearScreen(GrBlack());
    GrQueryPnm(FIMAGEPBM, &wide, &high, &maxval);
    sprintf(s, "%s %d x %d pixels", FIMAGEPBM, wide, high);
    GrTextXY(10, 20, s, GrBlack(), GrWhite());
    GrBox(10, 40, 10+wide+1, 40+high+1, GrWhite());
    grc = GrCreateSubContext(11, 41, 11+wide-1, 41+high-1, NULL, NULL);
    GrLoadContextFromPnm(grc,FIMAGEPBM);
    GrSaveContextToPbm(grc, FIMAGEPBM2, "TestPnm");
    GrDestroyContext(grc);
    GrTextXY(10, 50+high, "Press RETURN to continue", GrBlack(), GrWhite());
    GrEventWaitKeyOrClick(&ev);

    GrClearScreen(GrBlack());
    GrQueryPnm(FIMAGEPPM, &wide, &high, &maxval);
    GrBox(10, 40, 10+wide+1, 40+high+1, GrWhite());
    grc = GrCreateSubContext(11, 41, 11+wide-1, 41+high-1, NULL, NULL);
    GrLoadContextFromPnm(grc,FIMAGEPPM);
    GrDestroyContext(grc);
    GrQueryPnm(FIMAGEPGM, &wide, &high, &maxval);
    GrBox(110, 140, 110+wide+1, 140+high+1, GrWhite());
    grc = GrCreateSubContext(111, 141, 111+wide-1, 141+high-1, NULL, NULL);
    GrLoadContextFromPnm(grc, FIMAGEPGM);
    GrDestroyContext(grc);
    GrQueryPnm(FIMAGEPBM, &wide, &high, &maxval);
    GrBox(210, 240, 210+wide+1, 240+high+1, GrWhite());
    grc = GrCreateSubContext(211, 241, 211+wide-1, 241+high-1, NULL, NULL);
    GrLoadContextFromPnm(grc,FIMAGEPBM2);
    GrDestroyContext(grc);
    GrTextXY(10, 20, "Press RETURN to save screen", GrBlack(), GrWhite());
    GrEventWaitKeyOrClick(&ev);

    GrSaveContextToPpm(NULL, FSCREEN, "TestPnm");
    GrClearScreen(GrWhite());
    GrTextXY(10, 20, "Press RETURN to reload screen", GrWhite(), GrBlack());
    GrEventWaitKeyOrClick(&ev);

    GrLoadContextFromPnm(NULL, FSCREEN);
    GrTextXY(10, 20, "Press RETURN to end        ", GrBlack(), GrWhite());
    GrEventWaitKeyOrClick(&ev);

    GrEventUnInit();
    GrSetMode(GR_default_text);
    return 0;
}
コード例 #15
0
ファイル: scr_djgrx.c プロジェクト: ghaerr/microwindows
/*
**	Open graphics
*/
static PSD
DJGR_open(PSD psd)
{
	PSUBDRIVER subdriver;

	GrVideoMode	*md_info;
	
	int vwidth,vheight,vbpp;
	
	vwidth = SCREEN_WIDTH;
	vheight = SCREEN_HEIGHT;
	if(SCREEN_PIXTYPE == MWPF_TRUECOLOR8888) {
		vbpp=32;
	} else if(SCREEN_PIXTYPE == MWPF_TRUECOLOR888) {
		vbpp=24;
	} else if(SCREEN_PIXTYPE == MWPF_TRUECOLOR565)  {
		vbpp=16;
	} else {
		vbpp=8; //palette
	}

    GrSetMode(GR_width_height_bpp_graphics,vwidth,vheight,vbpp);

    md_info = (GrVideoMode *) GrCurrentVideoMode();

	psd->xres = psd->xvirtres = GrScreenX();
	psd->yres = psd->yvirtres = GrScreenY();
	psd->planes = 1;
	psd->bpp = md_info->bpp;
	psd->ncolors = psd->bpp >= 24 ? (1 << 24) : (1 << psd->bpp);
	psd->flags = PSF_SCREEN | PSF_ADDRMALLOC;
	/* Calculate the correct size and linelen here */
	GdCalcMemGCAlloc(psd, psd->xres, psd->yres, psd->planes, psd->bpp,
		&psd->size, &psd->pitch);

    if(psd->bpp == 32) {
		psd->pixtype = MWPF_TRUECOLOR8888;	
	} else if(psd->bpp == 16) {
		psd->pixtype = MWPF_TRUECOLOR565; 
	} else if(psd->bpp == 24)  {
		psd->pixtype = MWPF_TRUECOLOR888;
	} else {
		psd->pixtype = MWPF_PALETTE;
	}
		  
  psd->portrait = MWPORTRAIT_NONE;
  psd->data_format = set_data_format(psd);

  /*
   * set and initialize subdriver into screen driver
   * psd->size is calculated by subdriver init
   */
  subdriver = select_fb_subdriver(psd);
  
  psd->orgsubdriver = subdriver;

  set_subdriver(psd, subdriver);

  if ((psd->addr = malloc(psd->size)) == NULL)
		return NULL;

  return psd;

}
コード例 #16
0
ファイル: fontdemo.c プロジェクト: nidheeshdas/Algosim
int main(int argc, char **argv)
{
	int i, n;
	char *s;
	char *bad = NULL;
	int c;

	int width = 0, height = 0, bpp = 8, gray = 192, attributes = 0;

	char *name, *testname;
	GrFontHeader *hdr;
	FILE *f;
	char buffer[210];
	GrEvent ev;
	int key;

	/* unfortunately not all systems support getopt() */
	for(i = 1; i < argc; i++) {
	    s = argv[i];
	    if(*s != '-' || ((c = *++s) == '\0') || *++s != '\0') break;
	    if(c == '-') {
		i++;
		break;
	    }
	    if(++i == argc) {
		fprintf(stderr, "-%c: argument required\n", c);
		return(1);
	    }
	    if(sscanf(argv[i], "%d", &n) != 1 || n < 0) {
		fprintf(stderr, "%s: invalid argument\n", argv[i]);
		exit(1);
	    }
	    switch(c) {
		case 'x' : width = n; break;
		case 'y' : height = n; break;
		case 'b' : if((bpp = n) < 2 || bpp > 32) bad = "bpp"; break;
		case 'g' : if((gray = n) > 255) bad = "gray"; break;
		case 'X' : if((deltax = n) > 31) bad = "deltax"; break;
		case 'Y' : if((deltax = n) > 31) bad = "deltay"; break;
		case 'a' : if((attributes = n) > 3) bad = "attributes"; break;
		default  : {
		    fprintf(stderr, "-%c: invalid option\n", c);
		    return(1);
		}
	    }
	    if(bad) {
		fprintf(stderr, "%d: %s out of range\n", n, bad);
		return(1);
	    }
	}

	if(i == argc) {
	    printf(
		"usage:\tfontdemo [-x WIDTH] [-y HEIGHT] [-b BPP] [-g COMPONENT]\n"
		      "\t[-X DELTAX] [-Y DELTAY] [-a ATTRIBUTES] FONT [FILE...]\n"
	    );
	    return(0);
	}

	name = argv[i++];
	opt.txo_font = GrLoadFont(name);
        if(opt.txo_font == NULL && (testname = malloc(strlen(name) + 10)) != NULL) {
            /* try again, this is a test and the path can not been set yet */
#if defined(__MSDOS__) || defined(__WIN32__)
            sprintf( testname,"..\\fonts\\%s",name );
#else
            sprintf( testname,"../fonts/%s",name );
#endif
            opt.txo_font = GrLoadFont(testname);
	    free(testname);
        }
	if(opt.txo_font == NULL) {
	    fprintf(stderr, "%s: load error\n", name);
	    return(1);
	}
	hdr = &opt.txo_font->h;

	if(height == 0) {
	    if(width == 0) {
		switch(hdr->height) {
		    case 8 :
		    case 14 : height = 400; break;
		    case 16 : height = 480; break;
		    case 20 : height = 600; break;
		    case 24 : height = 768; break;
		    default : height = hdr->height < 20 ? 480 : 768;
		}
	    }
	    else height = width * 3 / 4;
	}
	if(width == 0) width = height == 400 ? 640 : height * 4 / 3;

	GrSetMode(GR_width_height_bpp_graphics, width, height, bpp);
	if(!gray || (opt.txo_fgcolor.v = GrAllocColor(gray, gray, gray)) == GrNOCOLOR) opt.txo_fgcolor.v = GrWhite();
	if(attributes & 0x02) opt.txo_fgcolor.v |= GR_UNDERLINE_TEXT;
	opt.txo_bgcolor.v = GrBlack();
	if(attributes & 0x01) revert();
	opt.txo_chrtype = GR_BYTE_TEXT;
	opt.txo_direct = GR_TEXT_RIGHT;
	opt.txo_xalign = GR_ALIGN_LEFT;
	opt.txo_yalign = GR_ALIGN_TOP;

	sprintf(buffer, "Font name:%s %dx%d", hdr->name, GrCharWidth('A', &opt), GrCharHeight('A', &opt));
        if (hdr->proportional)
	    strcat(buffer, " proportional");
	else
	    strcat(buffer, " fixed");
	gputs(buffer);
	sprintf(buffer, "Font family: %s", hdr->family);
	gputs(buffer);
	sprintf(buffer, "Min char, num chars: %d, %d", hdr->minchar,hdr->numchars);
	gputs(buffer);
	sprintf(buffer, "Screen res: %dx%d@%lu", GrSizeX(), GrSizeY(), (unsigned long) GrNumColors());
	gputs(buffer);
	gnewl();

	gputs("THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG");
	gputs("the quick brown fox jumps over the lazy dog");
	gnewl();

//	if(hdr->minchar <= 0xC0 && hdr->minchar + hdr->numchars >= 0x100) {
//	    gputs("������� ��� ���� ���� ��");
//	    gputs("������� ��� ���� ���� ��");
//	    gnewl();
//	}

	/* ascii table, or to be precise, a full table of the current font */
	opt.txo_chrtype = GR_WORD_TEXT;
	for(c = 0; c < hdr->numchars; c++) {
	    gputc(hdr->minchar + c);
	    if(c % 0x20 == 0x1F) gnewl();
	}
	gnewl();
	if(c % 0x20 != 0) gnewl();
	opt.txo_chrtype = GR_BYTE_TEXT;

	while(i < argc) {
	    name = argv[i++];
	    if((f = fopen(name, "r")) == NULL) {
		perror(name);
		return(1);
	    }
	    while((c = getc(f)) != EOF) if(c != '\n') gputc(c); else gnewl();
	    if(ferror(f) != 0 || fclose(f) != 0) {
		perror(name);
		return(1);
	    }
	}

	/* enter and esc are < 0x100 and displayed 1:1 */
	gputs("F1-new line  F5-toggle reverse  F7-toggle underline  F10-exit");
	gnewl();

	GrEventInit();
	while(1) {
	    GrEventWait(&ev);
	    if(ev.type == GREV_KEY) {
		key = ev.p1;
		if( key == GrKey_F10) break;
		if(key == GrKey_F1) gnewl();
		else if(key == GrKey_F5) revert();
		else if(key == GrKey_F7) opt.txo_fgcolor.v ^= GR_UNDERLINE_TEXT;
		else if(key < 0x100) gputc(key);
	    }
	}
	GrEventUnInit();

	GrUnloadFont(opt.txo_font);

	return(0);
}
コード例 #17
0
ファイル: bb1test.c プロジェクト: nidheeshdas/Algosim
int main(void)
{
    GrContext *pContext;
    int sizex = 40;
    int sizey = 40;
    int x = 0;
    int y = 40;
    GrColor fcolor, bcolor;
    int k;
    GrEvent ev;

    GrSetMode(GR_default_graphics);
    GrEventInit();
    GrMouseDisplayCursor();
    /* Create a 1bpp bitmap */
    pContext = GrCreateFrameContext(GR_frameRAM1, sizex, sizey, NULL, NULL);
    /* draw something (black and white) into the bitmap */
    GrSetContext(pContext);
    GrClearContext(GrBlack());
    GrLine(0, 0, sizex-1, sizey-1, GrWhite());
    GrLine(0, sizey-1, sizex-1, 0, GrWhite());

    GrSetContext(NULL);
    fcolor = GrAllocColor(255, 0, 0);
    bcolor = GrAllocColor(0, 0, 255);
    GrTextXY(0, 0, "Type u d l r U D L R to move, 1 2 to change color, q to quit",
           GrWhite(), GrNOCOLOR);
    GrSetClipBox(0, 40, GrScreenX(), GrScreenY());

    /* Put the bitmap into the screen */
    GrBitBlt1bpp(NULL, x, y, pContext, 0, 0, sizex-1, sizey-1, fcolor, bcolor);

    while (1) {
        k = '\0';
        GrEventWait(&ev);
        if (ev.type == GREV_KEY) k = ev.p1;
        if (k == 'q') break;
        switch (k) {
            case 'u': y--; break;
            case 'd': y++; break;
            case 'l': x--; break;
            case 'r': x++; break;
            case 'U': y -= 10; break;
            case 'D': y += 10; break;
            case 'L': x -= 10; break;
            case 'R': x += 10; break;
            case '1': fcolor = GrAllocColor(255, 0, 0);
                      bcolor = GrAllocColor(0, 0, 255);
                      break;
            case '2': fcolor = GrAllocColor(0, 255, 255);
                      bcolor = GrAllocColor(255, 255, 0);
                      break;
            default:  continue;
        }
        if (x < -40) x = -40;
        if (x > GrScreenX()) x = GrScreenX();
        if (y < 0) y = 0;
        if (y > GrScreenY()) y = GrScreenY();
        GrBitBlt1bpp( NULL, x, y, pContext, 0, 0, sizex-1, sizey-1, fcolor, bcolor);
    }

    /* Destroy */
    GrDestroyContext(pContext);

    GrEventUnInit();
    GrSetMode(GR_default_text);
    return 0;
}
コード例 #18
0
ファイル: w_system.c プロジェクト: j13s/devil
/* Switch to normal textmode */
void ws_textmode(void) {
    GrMouseUnInit();
    GrSetMode(GR_default_text);
}