📄 interface.asm
字号:
JZ pCopy1
JMP Editexit
toPaste1: JMP toPaste
pCopy1: JMP pCopy
toCut:
win 3,32,3,41,copyActive
poscur 3,31
show Edit_1
win 5,32,5,41,pasteActive
poscur 5,31
show Edit_3
win 4,32,4,41,67h
poscur 4,31
show Edit_2
showM mess22
GEtchar
CMP AH,50h
JZ toPaste
CMP AH,48h
JZ toCopy1
CMP AH,1ch
JZ PCut1
JMP EditExit
toCopy1: JMP toCopy
PCut1: JMP PCut
toPaste:
win 4,32,4,41,copyActive
poscur 4,31
show Edit_2
win 3,32,3,41,copyActive
poscur 3,31
show Edit_1
win 5,32,5,41,67h
poscur 5,31
show Edit_3
showM mess23
GEtchar
CMP AH,50h
JZ toCopy2
CMP AH,48h
JZ toCut1
CMP AH,1ch
JZ pPaste1
JMP EditExit
toCut1: JMP toCut
pPaste1: JMP pPaste
toCopy2: JMP toCopy
;****处理不同的分支所调用的不同的函数.****/
pCopy:
CALL CopyEdit
JMP EditExit
PCut:
CALL CutEdit
JMP EditExit
pPaste:
CALL PasteEdit
JMP EditExit
EditExit:
CALL menuHide
CALL BackDisplay
poscur row,column
recover
RET
showMenuE ENDP
;*************************************
CopyEdit PROC
saveE
exitCopyEdit:
recover
RET
CopyEdit ENDP
cutEdit PROC
saveE
recover
RET
cutEdit ENDP
pasteEdit PROC
saveE
exitPasteEdit:
recover
RET
pasteEdit ENDP
;显示帮助
showmenuh PROC
saveE
posgets
CALL SaveDisplay
win 10,15,16,67,07h
win 9,14,15,66,0E4h
poscur 10,5
show mess16
poscur 11,5
show mess17
poscur 12,5
show mess18
poscur 13,5
show mess19
win 14,15,14,66,0EDh
poscur 14,5
show mess20
GEtchar
CALL BackDisplay
poscur row,column
recover
RET
showmenuh ENDP
;*****播放第一首歌*********
music1play PROC
saveE
exitSoundf1:
recover
RET
soundf1 ENDP
;*****播放第二首歌*********
music2play PROC
saveE
recover
RET
music2play ENDP
scaleplay PROC
saveE
recover
RET
scaleplay ENDP
gunplay PROC
saveE
recover
RET
gunplay ENDP
;*********按下新建菜单时的处理函数******
;入口参数有:musicInt:文件数量,一进入即增加1
;先隐藏菜单,并用默认名创建文件,文件名根据musicInt来自动判断并更改
;最后调用函数:editFile进入编辑状态.
filenew PROC
saveE
recover
RET
filenew ENDP
;*********最重要的函数之一**********
;可能被fileNew函数、fileOpen函数调用
;获取键盘输入,按照输入跳到不同的分支,
;每个分支都调用相应的函数来处理.
;注意不同的分支处理缓冲区的方式也不同
;处理函数是相应的键名+K,以区别以其标号
EDItfile PROC
saveE
recover
RET
EDItfile ENDP
;**********退出编辑状态时判断是否需要保存的模块***************
;当文件未保存时调用的函数
;入口参数为saveY,当用户输入Y/y时调用filesaveas函数进行保存
;当用户输入N/n时不保存,用户输入有误时提示再输入一次.
;出口参数 AsOrIfFlag,它会影响 filesaveas函数的执行分支的选择.
;AsOrIfFlag为1时为Ifsave函数调用filesaveas,否则为0时是用户按下
;save as菜单做出的函数调用.
IFsave PROC
saveE
exitifsave:
recover
RET
IFsave ENDP
;********按下退格键时响应的函数****
;1、注意这个函数,它与DEL键的处理函数一样
;都需要修改视频缓冲区来达到被删除字符
;后面的字符都要向前移,2、同时也要修改数据
;缓冲区,否则你看到的屏幕上的字符与实际
;根据缓冲区里的字符储存的文件字符不一致
;3、这些修改是调用movhead函数来实现的.
;存在问题.
bak_spk PROC
saveE
exitbak_spk:
recover
RET
bak_spk ENDP
;********按下退格键时响应的函数****
;注意事项请看bak_spk的注释
;存在问题.
delk PROC
saveE
exitdel:
recover
RET
delk ENDP
;********修改视频和数据缓冲区*****
;delk 和bak_spk函数将调用之.
;1、注意此函数的主体是一个循环,这个循环的入口参数是:
;2、CX用来控制循环次数,即修改次数,
;cx=21*78-(row-2)*78
;3、BX用来控制B800开始的视频缓冲区的偏移量
;BX=row*160+column*2
;4、注意最后一行应该特殊处理, 否则会出现很奇怪的现象
;
;存在问题.
MOVahead PROC
saveE
EXITMovahead:
recover
RET
MOVahead ENDP
MOVBack PROC
saveE
EXITMovBack:
recover
RET
MOVBack ENDP
;************文件打开函数*********
;文件操作:有打开,读取调用
;先提示用户正确输入文件名称,错误时要特殊处理
;
fileopen PROC
saveE
exitopen:
recover
RET
fileopen ENDP
;**************文件保存模块***********
;功能:响应用户的save命令
;如果没有另存文件,则以默认文件名保存.
filesave PROC
saveE
exitsave:
recover
RET
filesave ENDP
;****文件另存为菜单的响应处理函数
;入出口功参数:modifyFlay,AsOrIfFlag,两者的意义见数据段定义处.
filesaveas PROC
saveE
exitsaveas:
recover
RET
filesaveas ENDP
;*************************************
;将BAK[]中储存的视频缓冲区的内容显示到屏幕上.
BackDisplay PROC NEAR
saveE
MOV BX,0d
MOV CX,3840d
loop11:
MOV AX,data_seg
MOV DS,AX
MOV DL,bak[BX]
MOV AX,0b800h
MOV DS,AX
MOV DS:[BX],DL
INC BX
LOOP loop11
recover
RET
BackDisplay ENDP
;*************************************
;将视频缓冲区的内容储存到BAK[]中备份
savedisplay PROC NEAR
saveE
MOV AX,0002h
INT 33h
MOV BX,0d
MOV CX,3840d
loop1s:
MOV AX,0b800h
MOV DS,AX
MOV DL,DS:[BX]
MOV AX,data_seg
MOV DS,AX
MOV bak[BX],DL
INC BX
LOOP loop1s
MOV AX,0001h
INT 33h
recover
savedisplay ENDP
;******************菜单隐藏,******
;用滚屏来实现的
menuHide PROC
saveE
win 0,0,0,79,70h
poscur 0,0
show str_menu
recover
RET
menuHide ENDP
;***********清空文件名缓冲区********
CLspath PROC
saveE
recover
RET
CLspath ENDP
;*********从文件读取音乐算法****************
;此函数还未被调用
readFile PROC
saveE
errorexit:
recover
RET
readFile ENDP
;****************显示行列的信息*********
; R:row,C:column
;用除10取余来实现,同时修改数据段中的mess6,
;再显示到屏幕的相应位置即可.
;***************************************
showRC PROC
saveE
recover
RET
showRC ENDP
;代码段结束.
;************************************
code_seg ENDS
END start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -