📄 pcvideo.c
字号:
#include <dos.h>
#include <bios.h>
/* PCVIDEO.C -
This file has two routines.
1. _screen_say()
2. screen_clear()
They write characters to and clear the screen. All other io is portable
except the keyboard functions. in looping(); */
#define ATTRIB 15
unsigned char far *video = 0;
unsigned char far *video_address()
{
union REGS regs;
if (video)
return(video);
/* Write chars using bios. Read them back via pointer to find the video
address */
/* Assume mono to start */
video = (unsigned char far *) 0xB0000000L;
/* Put the cursor at 0, 0 */
regs.h.ah = 2;regs.h.dh = 0;regs.h.dl = 0;regs.h.bh = 0;int86(0x10,®s,®s);
/* Write '~' */
regs.h.ah = 0x0a; regs.h.al = '~';
regs.h.bh = 0;regs.h.bl = 0;
regs.x.cx = 1;int86(0x10,®s,®s);
if (*video == (unsigned char) '~')
{ /* Write 'X' */
regs.h.ah = 0x0a; regs.h.al = 'X';
regs.h.bh = 0;regs.h.bl = 0;
regs.x.cx = 1;int86(0x10,®s,®s);
if (*video == (unsigned char) 'X')
return(video);
}
video = (unsigned char far *) 0xB8000000L; /* Must be color */
return(video);
}
void _screen_say(int length, int x, int y, unsigned char *p)
{
unsigned char far *v;
int i;
v = video_address() + (y*160)+x*2;
for (i = 0; i < length; i++)
{
if (*p)
*v++ = *p++;
else
*v++ = ' ';
*v++ = (unsigned char) ATTRIB;
}
}
void screen_clear()
{
unsigned char far *v;
int i;
v = video_address();
for (i = 0; i < 80*25; i++)
{
*v++ = ' ';
*v++ = (unsigned char) ATTRIB;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -