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

📄 screen_buffer.c

📁 version control, version control
💻 C
字号:
/* --*- C -*-- * * By Jani Averbach, Jaa@iki.fi, 2001 * * Released under version 2 of the Gnu Public License. * * $Author: jaa $ * $Revision: 1.10 $ * $Date: 2001/03/29 09:00:30 $ * $Source: /home/raid/cvs/memtest86/screen_buffer.c,v $  (for CVS) * */#include "test.h"#include "screen_buffer.h"#define SCREEN_X 80#define SCREEN_Y 25#define Y_SIZE SCREEN_Y/* * X-size should by one of by screen size, * so that there is room for ending '\0' */#define X_SIZE SCREEN_X+1static char screen_buf[Y_SIZE][X_SIZE];#ifdef SCRN_DEBUGchar *padding = "12345678901234567890123456789012345678901234567890123456789012345678901234567890";#define CHECK_BOUNDS(y,x) do {if (y < 0 || Y_SIZE <= y || x < 0 || X_SIZE <= x) print_error("out of index");}while(0)#else /* ! SCRN_DEBUG */#define CHECK_BOUNDS(y,x)#endif /* SCRN_DEBUG */charget_scrn_buf(const int y,             const int x){	CHECK_BOUNDS(y,x);	return screen_buf[y][x];}voidset_scrn_buf(const int y,             const int x,             const char val){	CHECK_BOUNDS(y,x);	screen_buf[y][x] = val;}void clear_screen_buf(){	int y, x;	for (y=0; y < SCREEN_Y; ++y){		for (x=0; x < SCREEN_X; ++x){			CHECK_BOUNDS(y,x);			screen_buf[y][x] = ' ';		}		CHECK_BOUNDS(y,SCREEN_X);		screen_buf[y][SCREEN_X] = '\0';	}}void tty_print_region(const int pi_top,                      const int pi_left,                      const int pi_bottom,                      const int pi_right){	int y;	char tmp;	for (y=pi_top; y < pi_bottom; ++y){		CHECK_BOUNDS(y, pi_right);		tmp = screen_buf[y][pi_right];		screen_buf[y][pi_right] = '\0';		CHECK_BOUNDS(y, pi_left);		ttyprint(y, pi_left, &(screen_buf[y][pi_left]));		screen_buf[y][pi_right] = tmp;	}}void tty_print_line(	int y, int x, const char *text){	for(; *text && (x < SCREEN_X); x++, text++) {		if (*text != screen_buf[y][x]) {			break;		}	}	/* If there is nothing to do return */	if (*text == '\0') {		return;	}	ttyprint(y, x, text);	for(; *text && (x < SCREEN_X); x++, text++) {		screen_buf[y][x] = *text;	}}void tty_print_screen(void){#ifdef SCRN_DEBUG	int i;	for (i=0; i < SCREEN_Y; ++i)		ttyprint(i,0, padding);#endif /* SCRN_DEBUG */	tty_print_region(0, 0, SCREEN_Y, SCREEN_X);}void print_error(char *pstr){#ifdef SCRN_DEBUG	ttyprint(0,0, padding);#endif /* SCRN_DEBUG */	ttyprint(0,35, pstr);	while(1);}

⌨️ 快捷键说明

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