8-10.c

来自「《C程序员成长攻略》-黎陡-源代码-4282」· C语言 代码 · 共 57 行

C
57
字号
#include"stdio.h"
#include"dos.h"
#include"time.h"

void interrupt (*oldint_1C)();
int i=0,key=65,count=0;
void LocateCur(int x,int y)
{
	_AH=2;  /*功能号为2*/
	_DH=x;  /*定位行号为x*/
	_DL=y;  /*定位列号为y*/
	_BH=0;  /*BH置0*/
	geninterrupt(0x10); /*产生10H号中断*/
}

void show(int key)    /*调用0x10号中断,显示ASCII码值key对应的字符*/
{
	_AH=14;             
	_AL=key;
	geninterrupt(0x10);
}

void interrupt newint_1C()  /*定义新的0x1C号中断函数*/
{
	count++;
	if(count==18)   /*如果产生了18次时钟中断,则认为间隔了1秒钟*/
	{
		count=0;
		if(i==0)    /*在程序刚开始运行时清屏*/
			clrscr();
		LocateCur(10,i);  /*定位光标*/
		show(key);        /*显示key所对应的字符*/
		if(key>=91)       /*如果key值等于91,表示当前显示字符为'Z'*/
		{/*如果已经显示到了字母'Z',则清屏后光标重新回到行首来显示字母'A'*/
			clrscr(); 
			key=65;       
			i=0;    
		}
		else
		{
			key++;
			i++;
		}
	}
	if(inportb(0x60)==0x39)       /*如果按下了"Space"键*/
		setvect(0x1c,oldint_1C);   /*则将原0x1C号中断向量值重新放回中断向量表*/
	(*oldint_1C)();               /*调用原0x1C号中断程序*/
}

main()
{
	oldint_1C=getvect(0x1C);   /*首先取得原来的0x1c号中断向量值*/
	setvect(0x1C,newint_1C);
	/*将指向用户定义的新中断函数的指针放入中断向量表的0x1C号中断处*/
	keep(0,255);           /*退出程序运行,返回DOS下,并使程序驻留在内存*/
}

⌨️ 快捷键说明

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