📄 muedit.asm
字号:
CALL savedisplay
win 10,15,12,73,00h
win 9,14,11,72,0A4H
poscur 10,15
show mess2
CALL CLspath
MOV SI,0
getfilenameo:
MOV AH,1
INT 21h
CMP AL,0dh
JZ NAMEgetedo
MOV path[SI],AL
INC SI
CMP SI,28
JZ tooLongo
JMP getfilenameo
tooLongo: poscur 24,0
show errormess3
MOV SI,0
poscur 10,14
show mess4
CALL CLspath
JMP GEtfilenameo
NAMEgetedo:
INC SI
INC SI
MOV path[SI],24h
MOV AL,2
fileIO path,3Dh
JC saerror1o1 ;文件无法打开时的异常处理
MOV handler,AX
MOV BX,handler
MOV CX,2000
fileIO buffer,3FH
JC saerror2o1 ;文件无法读取时的异常处理.
CALL BackDisplay
win 1,28,1,56,70h
poscur 1,30
show path
win 2,1,23,78,017h
poscur 2,1
MOV CX,2000
SUB BX,BX
JMP redisplay
saerror2o1: JMP saerror2o
saerror1o1: JMP saerror1o
;文件正常操作时的字符显示
;注意列号的控制作用
redisplay:
posgets
CMP column,78
JNZ continue
MOV column,1
INC row
poscur row,column
continue:
MOV DL,buffer[BX]
INC BX
MOV AH,2
INT 21h
LOOP redisplay
MOV BX,handler
MOV AH,3EH
poscur row,column
INC musicInt
CALL EDItfile
JMP exitopen
saerror1o:
poscur 24,1
show errormess4
GEtchar
win 2,1,23,78,27H
JMP exitsaveas
saerror2o:
poscur 24,1
show errormess5
GEtchar
win 2,1,23,78,27H
JMP exitsaveas
GEtchar
exitopen:
GEtchar
recover
RET
fileopen ENDP
;**************文件保存模块***********
;功能:响应用户的save命令
;如果没有另存文件,则以默认文件名保存.
filesave PROC
saveE
CALL menuHide
CALL BackDisplay
CMP musicInt,0
JZ exitsave
CMP SaveAsFlag,0
JNZ NEwname
MOV CX,00
fileIO musicname,3ch
JC serror1
MOV handler,AX
MOV BX,handler
MOV CX,2000
fileIO buffer,40H
JC serror2
MOV BX,handler
MOV AH,3EH
INT 21H
MOV modifyFlag,1
JMP exitsave
NEwname:
serror1:
poscur 24,1
show errormess1
JMP exitsave
serror2:
poscur 24,1
show errormess2
JMP exitsave
exitsave:
recover
RET
filesave ENDP
;****文件另存为菜单的响应处理函数
;入出口功参数:modifyFlay,AsOrIfFlag,两者的意义见数据段定义处.
filesaveas PROC
saveE
MOV modifyFlag,1
CALL menuHide
CMP AsOrIfFlag,0
JNZ AsOrIfFlagas
CALL BackDisplay
AsOrIfFlagas:
CMP musicInt,0
JZ exitsaveas1
win 10,15,12,67,07h
win 9,14,11,66,24h
poscur 10,15
show mess1
CALL CLspath
MOV SI,0
JMP getfilename
exitsaveas1: JMP exitsaveas
getfilename:
MOV AH,1
INT 21h
CMP AL,0dh
JZ NAMEgeted
MOV path[SI],AL
INC SI
CMP SI,28
JZ tooLong
JMP getfilename
tooLong: poscur 24,0
show errormess3
MOV SI,0
poscur 10,14
show mess4
CALL CLspath
JMP GEtfilename
NAMEgeted:
INC SI
INC SI
MOV path[SI],24h
MOV CX,00
fileIO path,3ch
JC saerror1
MOV handler,AX
MOV BX,handler
MOV CX,2000
fileIO buffer,40H
JC saerror2
MOV BX,handler
MOV AH,3EH
CALL BackDisplay
win 1,28,1,56,70h
poscur 1,30
show path
; win 9,13,12,67,017h
CALL saveDisplay
poscur row,column
JMP exitsaveas
saerror1:
poscur 24,1
show errormess1
MOV SI,0
poscur 10,14
show mess4
CALL CLspath
JMP getfilename
saerror2:
poscur 24,1
show errormess2
MOV SI,0
poscur 10,14
show mess4
CALL CLspath
JMP getfilename
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
CLspaste PROC
saveE
MOV CX,25
LOOPCLspaste:
MOV SI,0
MOV path[SI],0
INC SI
LOOP LOOPCLspaste
recover
RET
CLspaste ENDP
;***********清空文件名缓冲区********
CLspath PROC
saveE
MOV CX,30
LOOPlpath:
MOV SI,0
MOV path[SI],0
INC SI
LOOP LOOPlpath
recover
RET
CLspath ENDP
;*********从文件读取音乐算法****************
;此函数还未被调用
readFile PROC
saveE
MOV AL,2
fileIO filename,3Dh
JNC succsess
poscur 13,27
show error0
JMP errorexit
succsess:
MOV handler,AX
MOV BX,AX
read:
MOV CX,1
fileIO chartemp,3FH
putchar CHartemp
CMP CHartemp,30H
JB NOTNum
CMP CHartemp,39h
JA NOTNum
JMP number
NOTNum: CMP CHartemp,2ch
JZ cut
CMP CHartemp,2bh;遇到-号,结束
JZ finish11
poscur 13,27
show error1
poscur 14,27
; putchar CHartemp
JMP errorexit
number: MOV AL,CHartemp
MOV SI,bufferflag
MOV buffertemp[SI],AL
INC Bufferflag
JMP read
cut: MOV Bufferflag,0
MOV SI,Bufferflag
LOOP1:
; show buffertemp
MOV AL,buffertemp[SI]
putchar buffertemp[SI]
SUB AL,30h
MUL times
ADD AX,musictemp
MOV musictemp,AX
MOV AL,10
MUL times
MOV times,AX
DEC SI
CMP SI,0
JNZ LOOP1
MOV SI,bufferIndex
MOV WORD PTR musicbuffer[SI],AX
INC bufferIndex
JMP read
finish11: JMP finish1
read2: INC bufferIndex
MOV SI,bufferIndex
MOV WORD PTR musicbuffer[SI],0
MOV bufferIndex,0
INC musicfinish
MOV CX,1
fileIO chartemp,3FH
; putchar CHartemp
CMP CHartemp,30H
JB NOTNum2
CMP CHartemp,39h
JA NOTNum2
JMP number2
NOTNum2: CMP CHartemp,2ch
JZ cut2
CMP CHartemp,2bh;遇到-号,结束
JZ finish2
poscur 13,27
show error2
poscur 14,27
putchar CHartemp
JMP errorexit
number2: MOV AL,CHartemp
MOV SI,bufferflag
MOV buffertemp[SI],AL
INC Bufferflag
JMP cut2
read21: JMP read2
cut2: MOV Bufferflag,0
MOV SI,Bufferflag
LOOP12: MOV AL,buffertemp[SI]
SUB AL,30h
MUL times
ADD AX,musictemp
MOV musictemp,AX
MOV AL,10
MUL times
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -