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; }
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); }
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; }
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); } }
/* ** Close graphics */ static void DJGR_close(PSD psd) { /* free framebuffer memory */ free(psd->addr); GrSetMode(GR_default_text); }
/* ** 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; }
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; }
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 */ } }
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; }
/* 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; }
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; }
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 {
/* ** Close graphics */ static void DJGR_close(PSD psd) { GrSetMode(GR_default_text); }
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; }
/* ** 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; }
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); }
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; }
/* Switch to normal textmode */ void ws_textmode(void) { GrMouseUnInit(); GrSetMode(GR_default_text); }