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

📄 screen~1.c

📁 操作系统源代码
💻 C
字号:
/*	screendump 1.1 - dump the contents of the console *							Author: Kees J. Bot *								16 Dec 1994 */#define nil 0#include <sys/types.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <fcntl.h>#include <string.h>#define BIOS_CRTBASE	0x00463L	/* BIOS parameters: CRT base. */#define CRTBASE_MONO	0x03B4		/* Value of CRT base for mono mode. */#define MONO_BASE	0xB0000L	/* Screen memory in monochrome mode. */#define COLOR_BASE	0xB8000L	/* ... colour mode. */#define COLUMNS		80#define LINES		25char MEMORY[] =		"/dev/mem";	/* Memory device to read screen. */int mfd;				/* Open memory device. */void tell(const char *message){	write(2, message, strlen(message));}void fatal(const char *label){	const char *err= strerror(errno);	tell("screendump: ");	tell(label);	tell(": ");	tell(err);	tell("\n");	exit(1);}long video_base(void)/* Is it monochrome or colour? */{	static unsigned short bios_crtbase;	if (lseek(mfd, (off_t) BIOS_CRTBASE, SEEK_SET) == -1) fatal(MEMORY);	switch (read(mfd, &bios_crtbase, sizeof(bios_crtbase))) {	case -1:		fatal(MEMORY);	default:		tell("screendump: can't obtain BIOS parameter: short read\n");		exit(1);	case sizeof(bios_crtbase):		/* Fine */;	}	return bios_crtbase == CRTBASE_MONO ? MONO_BASE : COLOR_BASE;}void main(void){	unsigned char screen[COLUMNS * LINES * 2];	unsigned char *ps;	long base;	int row;	/* Open the memory device. */	if ((mfd= open(MEMORY, O_RDONLY)) < 0) fatal(MEMORY);	base= video_base();	/* Read screen memory. */	if (lseek(mfd, base, SEEK_SET) == -1) fatal(MEMORY);	switch (read(mfd, screen, sizeof(screen))) {	case -1:		fatal(MEMORY);	default:		tell("screendump: can't obtain screen dump: short read\n");		exit(1);	case sizeof(screen):		/* Fine */;	}	/* Print the contents of the screen line by line.  Omit trailing	 * blanks.  Note that screen memory consists of pairs of characters	 * and attribute bytes.	 */	ps= screen;	for (row= 0; row < LINES; row++) {		char line[COLUMNS + 1];		char *pl= line;		int column;		int blanks= 0;		for (column= 0; column < COLUMNS; column++) {			if (*ps <= ' ') {				/* Skip trailing junk. */				blanks++;			} else {				/* Reinsert blanks and add a character. */				while (blanks > 0) { *pl++= ' '; blanks--; }				*pl++= *ps;			}			/* Skip character and attribute byte. */			ps+= 2;		}		*pl++= '\n';		if (write(1, line, pl - line) < 0) fatal("stdout");	}	exit(0);}

⌨️ 快捷键说明

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