⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scr_tc.c

📁 神龙卡开发原代码
💻 C
字号:
/* * Copyright (c) 1999 Greg Haerr <greg@censoft.com> * * Copyright (c) 2000 Victor Larionov, Victor Rogachev <rogach@sut.ru> * Modified by mlkao * * Screen Driver using BGI for DOS TURBOC * * This driver requires the following BGI entry points: * 	initgraph, closegraph,  * 	putpixel, getpixel * 	setcolor, line, setfillstyle, bar * * All graphics drawing primitives are based on top of these functions. * * This file also contains the generalized low-level font/text * drawing routines, which will be split out into another file. * Both fixed and proportional fonts are supported. */#include <stdio.h>#include <graphics.h>#include "device.h"#include "genfont.h"/* specific bgi driver entry points*/static PSD  BGI_open(PSD psd);static void BGI_close(PSD psd);static void BGI_getscreeninfo(PSD psd,PMWSCREENINFO psi);static void BGI_setpalette(PSD psd,int first,int count,MWPALENTRY *pal);static void BGI_drawpixel(PSD psd,MWCOORD x, MWCOORD y, MWPIXELVAL c);static MWPIXELVAL BGI_readpixel(PSD psd,MWCOORD x, MWCOORD y);static void BGI_drawhline(PSD psd,MWCOORD x1, MWCOORD x2, MWCOORD y, MWPIXELVAL c);static void BGI_drawvline(PSD psd,MWCOORD x, MWCOORD y1, MWCOORD y2, MWPIXELVAL c);static void BGI_fillrect(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2,MWCOORD y2,MWPIXELVAL c);static void BGI_blit(PSD dstpsd,MWCOORD destx,MWCOORD desty,MWCOORD w,MWCOORD h,		PSD srcpsd,MWCOORD srcx,MWCOORD srcy,long op);static PSD  BGI_allocatememgc(PSD psd);SCREENDEVICE	scrdev = {	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL,	BGI_open,	BGI_close,	BGI_getscreeninfo,	BGI_setpalette,	BGI_drawpixel,	BGI_readpixel,	BGI_drawhline,	BGI_drawvline,	BGI_fillrect,	gen_fonts,	BGI_blit,	NULL,			/* PreSelect*/	NULL,			/* DrawArea subdriver*/	NULL,			/* SetIOPermissions*/	BGI_allocatememgc,	NULL,			/* MapMemGC*/	NULL			/* FreeMemGC*/};/* add by mlkao */extern int gr_mode;	/* temp kluge*/static struct linesettingstype lineinfo;static struct palettetype bgi_pal;static PSDBGI_open(PSD psd){	int		gd=VGA;	int		gm=VGAHI;	registerbgidriver(EGAVGA_driver);	initgraph(&gd,&gm,"");	getlinesettings(&lineinfo);	psd->xres = psd->xvirtres = getmaxx()+1;	psd->yres = psd->yvirtres = getmaxy()+1;	psd->linelen = lineinfo.thickness;	psd->planes = 1;	psd->bpp = 4;		/* FIXME?? */	psd->ncolors = getmaxcolor() + 1;	psd->flags = PSF_SCREEN;	psd->addr = 0;		/* FIXME */	/* note: must change psd->pixtype here for truecolor systems*/	psd->pixtype = MWPF_PALETTE;	return psd;}static voidBGI_close(PSD psd){	closegraph();}static voidBGI_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*/	}}static voidBGI_setpalette(PSD psd,int first,int count,MWPALENTRY *pal){	/* std 16 color palette assumed*/}static voidBGI_drawpixel(PSD psd,MWCOORD x, MWCOORD y, MWPIXELVAL c){	switch(gr_mode) {		case MWMODE_COPY: break;		case MWMODE_XOR: c ^= getpixel(x, y); break;		case MWMODE_OR:  c |= getpixel(x, y); break;		case MWMODE_AND: c &= getpixel(x, y); break;	}	putpixel(x, y, c);}static MWPIXELVALBGI_readpixel(PSD psd,MWCOORD x, MWCOORD y){	return getpixel(x, y);}static voidBGI_drawhline(PSD psd,MWCOORD x1, MWCOORD x2, MWCOORD y, MWPIXELVAL c){	MWCOORD x;	if (x1 > x2) {		x  = x1;		x1 = x2;		x2 = x;	}	setcolor(c);	switch(gr_mode) {		case MWMODE_COPY:			setwritemode(COPY_PUT);			break;		case MWMODE_XOR:			setwritemode(XOR_PUT);			break;		case MWMODE_OR: 			for(x = x1; x <= x2; x++)				putpixel(x, y, c | getpixel(x, y));			return;		case MWMODE_AND:			for(x = x1; x <= x2; x++)				putpixel(x, y, c & getpixel(x, y));			return;	}	line(x1, y, x2, y);}static voidBGI_drawvline(PSD psd,MWCOORD x, MWCOORD y1, MWCOORD y2, MWPIXELVAL c){	MWCOORD y;	if (y1 > y2) {		y  = y1;		y1 = y2;		y2 = y;	}	setcolor(c);	switch(gr_mode) {		case MWMODE_COPY:			setwritemode(COPY_PUT);			break;		case MWMODE_XOR:			setwritemode(XOR_PUT); 			break;		case MWMODE_OR: 			for(y = y1; y <= y2; y++)				putpixel(x, y, c | getpixel(x, y));				return;		case MWMODE_AND:			for(y = y1; y <= y2; y++)				putpixel(x, y, c & getpixel(x, y));				return;	}	line(x, y1, x, y2);}static voidBGI_fillrect(PSD psd,MWCOORD x1, MWCOORD y1, MWCOORD x2, MWCOORD y2,	MWPIXELVAL c){	MWCOORD x, y;	if (x1 > x2) {		x  = x1;		x1 = x2;		x2 = x;	}	if (y1 > y2) {		y  = y1;		y1 = y2;		y2 = y;	}	switch(gr_mode) {		case MWMODE_COPY:			setfillstyle(1,c);			bar(x1, y1, x2, y2);			break;		case MWMODE_XOR:			for(x = x1; x <= x2; x++)				for(y = y1; y <= y2; y++)					putpixel(x, y, c ^ getpixel(x, y));			break;		case MWMODE_OR:			for(x = x1; x <= x2; x++)				for(y = y1; y <= y2; y++)					putpixel(x, y, c | getpixel(x, y));			break;		case MWMODE_AND:			for(x = x1; x <= x2; x++)				for(y = y1; y <= y2; y++)					putpixel(x, y, c & getpixel(x, y));			break;		default:			break;	}}static voidBGI_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 BGI_allocatememgc(PSD psd){	/* if driver doesn't have blit, fail*/	return NULL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -