📄 scr_djgr.c
字号:
/* * Copyright (c) 1999 Greg Haerr <greg@censoft.com> * * Copyright (c) 1999 Victor Rogachev <rogach@sut.ru> * * Screen Driver using DJGPP & GRX Library * * For only GRX lib * * This driver requires the following GRX entry points: * GrSetMode, GrSetColor, GrPlot, GrPixel, * GrHLine, GrVLine, GrFilledBox * * All graphics drawing primitives are based on top of these functions. */#include <stdio.h>#include "device.h"#include "genfont.h"#include <grx20.h>/* specific grxlib driver entry points*/static PSD DJGR_open(PSD psd);static void DJGR_close(PSD psd);static void DJGR_getscreeninfo(PSD psd,PMWSCREENINFO psi);static void DJGR_setpalette(PSD psd,int first,int count,MWPALENTRY *pal);static void DJGR_drawpixel(PSD psd,MWCOORD x, MWCOORD y, MWPIXELVAL c);static MWPIXELVAL DJGR_readpixel(PSD psd,MWCOORD x, MWCOORD y);static void DJGR_drawhline(PSD psd,MWCOORD x1, MWCOORD x2, MWCOORD y, MWPIXELVAL c);static void DJGR_drawvline(PSD psd,MWCOORD x, MWCOORD y1, MWCOORD y2, MWPIXELVAL c);static void DJGR_fillrect(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2,MWCOORD y2,MWPIXELVAL c);static void DJGR_blit(PSD dstpsd,MWCOORD destx,MWCOORD desty,MWCOORD w, MWCOORD h,PSD srcpsd,MWCOORD srcx,MWCOORD srcy,long op);static PSD DJGR_allocatememgc(PSD psd);SCREENDEVICE scrdev = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, DJGR_open, DJGR_close, DJGR_getscreeninfo, DJGR_setpalette, DJGR_drawpixel, DJGR_readpixel, DJGR_drawhline, DJGR_drawvline, DJGR_fillrect, gen_fonts, DJGR_blit, NULL, /* PreSelect*/ NULL, /* DrawArea subdriver*/ NULL, /* SetIOPermissions*/ DJGR_allocatememgc, NULL, /* MapMemGC*/ NULL /* FreeMemGC*/};extern int gr_mode; /* temp kluge*//*** Open graphics*/static PSDDJGR_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;}/*** Close graphics*/static voidDJGR_close(PSD psd){ GrSetMode(GR_default_text);}/*** Get Screen Info*/static voidDJGR_getscreeninfo(PSD psd,PMWSCREENINFO psi){ psi->rows = psd->yvirtres; psi->cols = psd->xvirtres; psi->planes = psd->planes; psi->bpp = psd->bpp; psi->ncolors = psd->ncolors; psi->pixtype = psd->pixtype; psi->fonts = NUMBER_FONTS; if(scrdev.yvirtres > 480) { /* SVGA 800x600*/ psi->xdpcm = 33; /* assumes screen width of 24 cm*/ psi->ydpcm = 33; /* assumes screen height of 18 cm*/ } else if(scrdev.yvirtres > 350) { /* VGA 640x480*/ psi->xdpcm = 27; /* assumes screen width of 24 cm*/ psi->ydpcm = 27; /* assumes screen height of 18 cm*/ } else { /* EGA 640x350*/ psi->xdpcm = 27; /* assumes screen width of 24 cm*/ psi->ydpcm = 19; /* assumes screen height of 18 cm*/ }}/*** Set Palette*/static voidDJGR_setpalette(PSD psd,int first,int count,MWPALENTRY *pal){ while(first < 256 && count-- > 0) { GrSetColor(first++, pal->r, pal->g, pal->b); ++pal; }}/*** Draw Pixel*/static voidDJGR_drawpixel(PSD psd,MWCOORD x, MWCOORD y, MWPIXELVAL c){ GrPlot(x, y, c);}/*** Read Pixel*/static MWPIXELVALDJGR_readpixel(PSD psd,MWCOORD x, MWCOORD y){ return GrPixel(x, y);}/*** Draw Horizontal Line*/static voidDJGR_drawhline(PSD psd,MWCOORD x1, MWCOORD x2, MWCOORD y, MWPIXELVAL c){ GrHLine(x1, x2, y, c);}/*** Draw Vertical Line*/static voidDJGR_drawvline(PSD psd,MWCOORD x, MWCOORD y1, MWCOORD y2, MWPIXELVAL c){ GrVLine(x, y1, y2, c);}/*** Filled Box*/static voidDJGR_fillrect(PSD psd,MWCOORD x1, MWCOORD y1, MWCOORD x2, MWCOORD y2, MWPIXELVAL c){ GrFilledBox(x1, y1, x2, y2, c);}/*** Blit*/static voidDJGR_blit(PSD dstpsd,MWCOORD destx,MWCOORD desty,MWCOORD w,MWCOORD h, PSD srcpsd,MWCOORD srcx,MWCOORD srcy,long op){ /* FIXME*/}/* allocate a memory screen device*/static PSD DJGR_allocatememgc(PSD psd){ /* if driver doesn't have blit, fail*/ return NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -