简易文本编辑器 MC 兰州理工课设.docx
- 文档编号:5816064
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:35
- 大小:112.59KB
简易文本编辑器 MC 兰州理工课设.docx
《简易文本编辑器 MC 兰州理工课设.docx》由会员分享,可在线阅读,更多相关《简易文本编辑器 MC 兰州理工课设.docx(35页珍藏版)》请在冰豆网上搜索。
简易文本编辑器MC兰州理工课设
*******************
实践教学
*******************
软件学院
2012年春季学期
Mc课程设计说明书
题目:
简易文本编辑器
专业班级:
12级软件三班
姓名:
张雪楠
学号:
12700332
指导教师:
摘要
此次课程设计设计了一个简易的文本编辑器,该编辑器通过利用DOS系统功能调用和BIOS功能调用设计一有菜单栏的编辑窗口,在该窗口中可以实现文本的输入。
该文本编辑器利用BIOS功能调用中的10H中断类型,调用06号功能,实现了设置窗口背景的功能;调用DOS功能中的09号功能,实现显示菜单信息字符串的功能;调用BIOS中的键盘I/O中断调用中的0号功能;从键盘读取字符,通过对上,下,左,右,光标间以及DEL,INS,BACKSPACE,END,HOME键的扫描码的判断,结合10H中中断的02号,03号功能确定光标的相应移动,从而实现对输入文本的全屏幕编辑;利用DOS系统功能调用中的文件管理功能,如建立文件,打开文件,读文件,写文件,实现对文件的操作。
运行可执行文件,输入文本,利用Del键、Home键、BackSpace键、Home键、上下左右光标键对输入文本的全屏幕编辑,按F1键激活菜单,下移光标,选择保存,输入文件名。
也可以选择File菜单的其他菜单项,它们的功能均可实现。
按F10键激活帮助,按ESC键退出帮助。
关键词:
DOS系统功能调用,BIOS功能调用,中断
目录
1需求分析4
2设计思路5
3详细设计7
3.1程序设计图7
3.2程序分析8
4运行调试与分析讨论9
5心得体会12
6参考文献13
1、需求分析
1.设计一个友好,易于操作的界面,界面可仿照windows记事本,但windows记事本的菜单项不好制作,所以将主要功能说明制作到边框,方便使用即可。
并且实现在某一固定区域内可以显示当前光标的坐标。
2.实现用键盘上的功能键制编辑文本,
例如:
按一下BackSpace键可以删除当前光标以前的字符;
按一下Delete键可以删除当前光标之后的字符;
按一下Home键可以使光标跳转到当前行的第一列;
按一下End键可以使光标跳转到当前行的最后一列;
按一下F1键可以激活File的五个功能键(new,open,save,saveas,exit);
按一下Enter键可以使光标跳转到下一行的第一列;
按一下F1键可以显示帮助信息
用上下左右键使光标在文本框内任意移动
3.根据程序思想设计程序流程图,按照程序流程图完成实现各个模块的功能
2、设计思路
利用BIOS功能调用中的10H中断类型,调用06号功能,设置窗口背景;调用DOS功能中的09号功能,实现显示菜单信息字符串;调用BIOS中的键盘I/O中断调用中的0号功能;从键盘读取字符,通过对上,下,左,右,光标间以及DEL,INS,BACKSPACE,END,HOME键的扫描码的判断,结合10H中中断的02号,03号功能确定光标的相应移动,从而实现对输入文本的全屏幕编辑;利用DOS系统功能调用中的文件管理功能,如建立文件,打开文件,读文件,写文件,实现对文件的操作。
3、详细设计
3.1程序设计图
图2.1文本编辑器流程图
3.2定义模块设计
该部分说明了程序所需要的模块,3.1定义模块设计
该部分说明了程序所需要的模块,如字符定义模块、输入字符串定义模块、建立窗口模块、光标定义模块等。
3.1.1字符宏定义模块
字符定义模块主要定义了字符的读取、
输入、从键盘读入等功能
red_chrmacro;读取字符宏定义
movah,0
int16h;中断调用从键盘读入字符
endm
movah,06h
moval,opr1
movbh,opr2
movch,opr3
movcl,opr4
movdh,opr5
movdl,opr6
int10h
endm
3.2.4光标位置宏定义模块
该模块通过调用2号功能,实现了对文本编辑器中光标的定义。
pos_cursemacroop1,op2,op3
;定义光标位置
movah,2
movbh,op1
movdh,op2
movdl,op3
int10h
endm
3.2.5显示光标宏定义
pos_getmacro
;显示光标位置
movah,03h
movbh,0
int10h
;状态栏显示
manu_2db'Open',13,10,'$'
manu_3db'Save',13,10,'$'
manu_4db'Saveas',13,10,'$'
manu_5db'Exit','$'
handledw?
message1db'Pleaseinputfilename:
','$';提示信息
message2db'Pleaseinputsavefilename:
','$';提示信息
message3db'Pleaseinputopenfilename:
','$';提示信息
message4db'***Thefileisnotsave!
Saveitnow?
(Y/N)***:
','$';提示信息
pathdb50dup(0),'$'
bufferdb2000dup(?
)
bakdb3850dup(0)
linedb?
rowdb?
chardb?
help_mas1db'welcomeuseeditor!
$';帮助内容
help_mas2db'pleasethefirstactivehelp!
$'
help_mas3db'goodlucky!
!
$'
help_mas4db'==========================================================$'
help_mas5db'PressF1toactivefile.$'
help_mas6db'YoucanuseDOWNcursorkeytochoosethefuction$'
help_mas7db'PressF10toshowthehelpmassage.PressEscToQuit$'
datedb'today?
?
/?
?
/','$'
;调用日期
hangliedb'?
?
?
//?
?
?
','$' ;行//列
dataends
3.2.6数据段定义模块设计
datasegment;定义数据段
menudb'FileEditHelp$';标题
mass_1b'F1ActivefileF10Activehelp','$
3.3代码段模块程序设计
3.3.1主程序设计模块
该设计模块主要通过调用子程序,创建了初始化界面,更有利于用户操作。
codesegment
mainprocfar;主程序定义开始
assumecs:
code,ds:
data
start:
pushds
subax,ax
pushax
movax,data
movds,ax
callwind ;用创建窗口子程序
calledit;调用设置菜单子程序
ret
mainendp
3.3.2创建窗口子程序设计模块
该部分程序代码主要实现了创建窗口的功能。
在show处调用函数显示菜单等。
。
在弹出菜单后再判断是不是方向键或者ENTER键,跳到相应的地方并做出相应的处理。
windprocnear;创建窗口子程序
win0,3eh,1,0,24,79;定义窗口背景
win1,1fh,0,0,0,79;定义菜单项背景
win0,1fh,24,0,24,79;定义状态栏背景
show:
;显示菜单位置及内容
pos_curse0,0,1;
movah,9
leadx,menu
int21h
show_2:
;显示状态栏位置及内容
pos_curse0,24,1;定义光标位置
movah,9
leadx,mass_1
int21h;状态栏提示信息显示
callwin3;调用设置时间子程序
callwin4;调用设置行列子程序
pos_curse0,1,0;置光标位置
movrow,dh
movline,dl;保存行列
windendp
3.3.3菜单项模块设计
菜单项主要实现了菜单的选项功能,通过各个选项,调用相应的子程序,实现不同的功能。
例如:
保存文件,输入文件,显示时间等功能。
editprocnear
char_get:
;读字符
callcom
comprocnear;定义功能鍵
pos_get
movrow,dh
movline,dl
first:
pos_curse0,row,line
j00:
movah,0
int16h;从键盘读字符ah=扫描码
;al=字符码
pushax
leadx,buffer
movbuffer[bx],al
incbx
cmpah,48h;上
jzup_1
cmpah,50h;下
jzdown_1
cmpah,4bh;左
jzleft
cmpah,4dh;右
jzright
cmpah,1ch;回车
jzenter_1
callfuc_key
movah,2
movdl,al
int21h
popax
callmenu_show
jmpj6
down_1:
jmpdown
enter_1:
jmpenter_2
up_1:
jmpup
left:
;光标左移
pos_get
movrow,dh
movdl,line
cmpline,0
jnzdirect
movline,79
decrow
cmprow,0
jestop2
jmpfirst
stop2:
movrow,1
jmpfirst
direct:
decline
callwin4;显示光标位置
jmpfirst
right:
;光标右移
pos_get
movrow,dh
movdl,line
cmpline,79
jnzdirect2
movline,0
incrow
cmprow,24
jereturns1
jmpfirst
direct2:
incline
callwin4
jmpfirst
enter_2:
jmpenter
up:
;上移光标
pos_get
movrow,dh
movdl,line
decrow
cmprow,0
jestop1
callwin4
jmpfirst
stop1:
movrow,1
jmpfirst
down:
;下移光标
pos_get
movrow,dh
movdl,line
incrow
cmprow,24
jestop3
callwin4
jmpfirst
stop3:
movrow,23
jmpfirst
returns1:
jmpreturns
enter:
;回车换行
pos_get
movrow,dh
movline,dl
incrow
cmprow,24
jereturns
movline,0
callwin4
jmpfirst
returns:
movrow,24
movline,0
jmpfirst
j6:
ret
comendp
fuc_keyprocnear;功能键子程序
next:
cmpah,47h;home
jzhome
cmpah,4fh;end
jz_end
cmpah,0eh;backspace
jzbak_sp
cmpah,53h
jzdel
cmpah,44h;F10
jzhelp_0
ret
help_0:
callhelp
home:
;HOME键的功能
pos_get
movrow,dh
movline,0
callwin4
jmpfirst
_end:
;END键的功能
pos_get
movrow,dh
movline,79
callwin4
jmpfirst
bak_sp:
;退格键的功能
pos_get
movrow,dh
movline,dl
cmpline,0
jestop
decline
jmpab
stop:
movline,0
ab:
pos_get0,row,line
movah,2
movdl,00
int21h
callwin4
jmpfirst
del:
;DEL删除
pos_get
movrow,dh
movline,dl
decline
pos_get0,row,line
movah,2
movdl,00
int21h
incline
callwin4
jmpfirst
cm:
cmpline,00
jzpos_cm
pos_cm:
pos_curse0,0,0
jmpfirst
helpprocnear;显示帮助信息
callsavedisplay;显示帮助信息每
;行的位置
pos_get
pushdx
win0,57h,4,5,21,70
pos_curse0,6,25
stringhelp_mas1
pos_curse0,8,11
stringhelp_mas2
pos_curse0,10,11
stringhelp_mas3
pos_curse0,12,11
stringhelp_mas4
pos_curse0,14,11
stringhelp_mas5
pos_curse0,16,11
stringhelp_mas6
pos_curse0,18,11
stringhelp_mas7
popdx
pos_curse0,dh,dl
movah,0
int16h
cmpah,36h;F10activehelp
jnzcls
callhelp
cls:
win0,1eh,9,10,13,70;清屏
callbackdisplay
helpendp
fuc_keyendp
menu_showprocnear;显示菜单
callsavedisplay
pushcx
cmpah,3bh;F1功能
jzmenu_sh
jmpchar_get
menu_sh:
;定义菜单的背景字体颜色
pos_get
pushdx
win0,06h,2,1,7,11
win0,65h,1,0,6,10
pos_curse0,1,0
stringmanu_1
stringmanu_2
stringmanu_3
stringmanu_4
stringmanu_5
popdx
decdl
pos_curse0,dh,dl
copmar:
red_chr
cmpah,50h
jzmanu_n
jmpmanu_hid
manu_hid:
;菜单隐藏
win0,1eh,1,1,7,11
callbackdisplay
jmpchar_get
manu_n:
;开始定义各个菜单项
win0,65h,5,1,5,8
pos_curse0,5,0
stringmanu_5
win0,15h,1,1,1,8
pos_curse0,1,0
stringmanu_1
red_chr
cmpah,48h
jemanu_n
cmpal,0dh
jznew_1
cmpah,50h
jemanu_o
jmpmanu_hid
manu_n0:
jmpmanu_n
manu_o:
win0,65h,1,1,1,8
pos_curse0,1,0
stringmanu_1
win0,15h,2,1,2,8
pos_curse0,2,0
stringmanu_2
red_chr
cmpah,48h
jemanu_o
cmpal,0dh
jzopen_1
cmpah,50h
jemanu_s
jmpmanu_hid
new_1:
jmpnew_2
manu_s:
win0,65h,2,1,2,8
pos_curse0,2,0
stringmanu_2
win0,15h,3,1,3,8
pos_curse0,3,0
stringmanu_3
red_chr
cmpal,0dh
jzsave_1
cmpah,48h
jemanu_s
cmpah,50h
jemanu_a
jmpmanu_hid
open_1:
jmpopen_2
manu_n1:
jmpmanu_n
manu_a:
win0,65h,3,1,3,8
pos_curse0,3,0
stringmanu_3
win0,15h,4,1,4,8
pos_curse0,4,0
stringmanu_4
red_chr
cmpah,1ch
jzsave_2
cmpah,48h
jemanu_a
cmpah,50h
jemanu_e
jmpmanu_hid
manu_n2:
jmpmanu_n1
new_2:
jmpnew
save_1:
callsave
save_2:
callsaveas
manu_e:
win0,65h,4,1,4,8
pos_curse0,4,0
stringmanu_4
win0,15h,5,1,5,8
pos_curse0,5,0
stringmanu_5
red_chr
cmpah,50h
jemanu_n2
cmpah,48h
jemanu_e
cmpah,1ch
jeexit
jmpmanu_hid
exit:
callbackdisplay
win0,07h,15,10,17,61
win0,24h,14,9,16,60
movdh,15
movdl,9
movbh,0
movah,2
int10h
leadx,message4
movah,9
int21h
movah,1
int21h
cmpal,79h
jnzq
callquitt
q:
cmpal,6eh
jzquit
quit:
win0,07h,0,0,24,79
pos_curse0,0,0
movah,4ch
int21h
ret
menu_showendp
newprocnear;新建文件
pos_get
pushdx
callbackdisplay
win0,07h,15,10,17,61
win0,24h,14,9,16,60,
movdh,15
movdl,9
movbh,0
movah,2
int10h
leadx,message1
cmpal,0dh
movah,9
int21h
movbx,0
all:
movah,1
int21h
cmpal,0dh
jealll
movpath[bx],al
incbx
jmpall
alll:
win0,3eh,15,9,17,61
popdx
pos_curse0,dh,dl
leadx,path
movah,3ch
movcx,00
int21h
movhandle,ax
movbx,ax
movah,3eh
int21h
win0,3eh,1,0,23,79
movdh,1
movdl,0
movbh,0
movah,2
int10h
jmpchar_get
newendp
open_2:
jmpopen
saveasprocnear
;另存为文件win0,3eh,1,0,6,10
callbackdisplay
win0,07h,15,10,17,61
win0,24h,14,9,16,60,
movdh,15
movdl,9
movbh,0
movah,2
int10h
leadx,message2
movah,9
int21h
movbx,0
bll:
movah,1
int21h
cmpal,0dh
jeblll
movpath[bx],al
incbx
jmpbll
blll:
pos_get
pushdx
win0,3eh,1,0,23,79
callbackdisplay
popdx
pos_curse0,dh,dl
leadx,path
movah,3ch
movcx,00
int21h
movhandle,ax
leadx,buffer
movbx,handle
movcx,2000
movah,40h
int21h
movbx,handle
movah,3eh
int21h
callbackdisplay
jmpchar_get
saveasendp
openprocnear;打开文件
c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易文本编辑器 MC 兰州理工课设 简易 文本 编辑器 兰州 理工