文本编辑器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文本编辑器
1.设计要求
实现一个简单的文本编辑器,可以编辑文本,保存文本,打开文本。文本编辑器大小为24行80列。利用DOS系统功能调用和BIOS功能调用设计一个有菜单的编辑窗口。在该窗口中可以实现文本的输入;可以利用“DEL”键、“BackSpace”键、“Home”键、“End”键和方向键实现对输入文本的全屏编辑。使用彩色组和背景颜色来设计界面颜色,
利用DOS系统功能调用的磁盘文件存取技术实现文件的“新建”、“打开”、“保存”、“另存为”与“退出”功能。
2.设计分析
本案例充分应用了DOS和BIOS的中断功能。DOS提供了一组完成磁盘文件的建立、打开、关闭和读写等操作的功能调用。利用DOS和BIOS的功能调用,汇编语言可以实现对磁盘文件的存取。对磁盘文件的管理有文件代号方式下的管理和文件控制块方式下的管理两种方式。
利用BIOS功能调用中的10H中断类型,可以设置显示模式,设置窗口背景、字符颜色等。
利用DOS系统功能中的09号功能,可以实现先是菜单信息字符串。调用BIOS中的键盘I/O中断调用(16H)中的0号功能,可以实现从键盘读取字符,通过对“↑”、“↓”、“←”、“→”方向移动键以及“Del”、“Ins”、“BackSpace”、“End”、“Home”键的扫描码的判断,结合DOS系统功能调用中的文件管理功能,如建立文件(16H)、打开文件(0FH)、读文件(3FH)、写文件(40H)等,可以实现对文件的操作。
由于案例功能复杂,因此在程序设计中综合运用了宏、子程序等多项手段,以便使程序简介、易读,提高持续的运行效率。
1
2.1宏的分析
由以上分析可知,本程序中要定义5个宏,分别是:
RED_CHR读取键盘输入。这个宏采用了BIOS中断的16的0号功能,读取输入的扫描码。要注意的是,在实现键盘输入时没有使用DOS中断的1号功能来读取ASCII值。因为本案例的全屏编辑中采用了很多功能键和编辑键,如“↑”、“↓”、“←”、“→”方向移动键及“Del”、“Ins”、“BackSpace”、“End”、“Home”等编辑功能键,而这些键在ASCII 码表中没有相应的表示,因此,必须使用键盘扫描码表来表示。本设计中用到的键盘扫描码见表2-1。
表2-1扫描对应表
STRING 这个宏比较简单,用来显示指定地址的字符串。
WIN 建立一个窗口。
这个宏是一个用来化简程序的典型例子。这个宏的定义如下:
win macro opr1,opr2,opr3,opr4,opr5,opr6 ;建立窗口
mov ah,06h
mov al,opr1
mov bh,opr2
mov ch,opr3
mov cl,opr4
mov dh,opr5
mov dl,opr6
int 10h
endm
可以看到,本宏有6个参数,采用了BIOS中断10H的6号功能,用来使屏幕初始化,创建一个窗口。如果不采用宏,那么每次要输入8条指令,而宏定义后只要用一条带6个参数的宏指令就可以了。其中宏参数OPR1表示上卷行数,OPR2表示卷入行属性,OPR3表示窗口左上角行数值,OPR4表示窗口左上角列数值,OPR5表示窗口右下角行数值,OPR6表示窗口右下角列数值。
2
POS_CUESE用来在指定位置显示光标。
在全屏编辑中,光标用来指明当前输入的位置。这个宏是一个常用的指令,各种编辑功能键的操作都会对光标位置有所影响,因而都会用到这个宏。
POS_GET获取当前光标所在位置,通常和上一个宏配合使用。
2.2子程序分析
本例程序中采用了众多子程序。在子程序中,有的还有多层的嵌套,因此读懂这些子程序是了解这个设计的关键。
图2-1给出了本程序中各子程序的相互调用关系,结合下面的子程序功能分析和程序流程图,可以更容易地理解程序的结构。
图2-1 子程序相互调用关系图
主程序结构比较简单,主要由编辑处理子程序EDIT和创建窗口子程序WIND构成。
以下列出了本设计中的一些重要的子程序。
EDIT:编辑处理子程序。
WIND:创建处理子程序。
COM:输入处理子程序。
FUNC_KEY:功能键处理子程序。
3
HELP:帮助子程序。
MENU_SHOW:显示菜单子程序。
NEW:新建文件子程序。
SA VEAS:另存文件子程序。
OPEN :打开文件子程序。
SA VE:保存文件子程序。
SA VEDISPLAY:保存显示界面子程序。
BACKDISPLAY:恢复显示界面子程序。
QUIT:退出子程序。
WIN3:显示日期子程序。
WIN4:显示行列子程序。
(1)EDIT子程序
子程序EDIT是一个非常重要的的子程序,它的作用是完成编辑器所有复杂的编辑操作。其中包括上、下、左、右、回车等编辑键的处理,以及没有对应ASCII码的功能键的处理。
(2)COM子程序
COM子程序是在EDIT子程序中被调用的一个下级子程序,它是本案例中一个十分重要的子程序,负责对键盘输入进行处理。
键盘输入的内容可以分为两类,一类是刻在屏幕上显示ASCII字母、数字和符号,另一类是全屏幕编辑键。处理较复杂的是全屏幕编辑键,包括↑”、“↓”、“←”、“→”方向移动键及“Del”、“Ins”、“BackSpace”、“End”、“Home”等编辑功能键,以及“F1”等功能键。可显示字符的处理方式都是相同的,但是全屏幕编辑键由于功能不同,每一个键都有自己的处理程序段。因此,首先要准备定义每个功能键的处理方法。
“↑”的功能是将光标向上移一行。其处理的方法教简单,只要保持列号不变,将行号减一即可。但是要注意判断光标是否达到最上一行,如果光标已经达到最上一行,如果光标已经达到最上一行则行号不再减一,而是保持不变。
“↓”的功能是将光标向下移一行。处理方法同上,只要保持列号不变,将行号加一
4