简易文本编辑器 MC 兰州理工课设.docx

上传人:b****6 文档编号:5816064 上传时间:2023-01-01 格式:DOCX 页数:35 大小:112.59KB
下载 相关 举报
简易文本编辑器 MC 兰州理工课设.docx_第1页
第1页 / 共35页
简易文本编辑器 MC 兰州理工课设.docx_第2页
第2页 / 共35页
简易文本编辑器 MC 兰州理工课设.docx_第3页
第3页 / 共35页
简易文本编辑器 MC 兰州理工课设.docx_第4页
第4页 / 共35页
简易文本编辑器 MC 兰州理工课设.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

简易文本编辑器 MC 兰州理工课设.docx

《简易文本编辑器 MC 兰州理工课设.docx》由会员分享,可在线阅读,更多相关《简易文本编辑器 MC 兰州理工课设.docx(35页珍藏版)》请在冰豆网上搜索。

简易文本编辑器 MC 兰州理工课设.docx

简易文本编辑器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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1