📄 textedit11.asm
字号:
readchar macro ;读取字符宏定义
mov ah,0
int 16h
endm
string macro p1 ;输入字符光标
mov ah,9
lea dx,p1
int 21h
endm
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
setcurse macro op1,op2,op3 ;定义光标位置
mov ah,2
mov bh,op1
mov dh,op2
mov dl,op3
int 10h
endm
getcurse macro ;显示光标位置
mov ah,03h
mov bh,0
int 10h
endm
data segment ;定义数据段
menu1 db ' F1:New','$'
menu2 db ' F2:Open','$'
menu3 db ' F3:Save','$'
handle dw ?
message1 db ' Please input file name:','$'
message2 db ' Please input save file name:','$'
message3 db ' Please input open file name:','$'
message4 db ' The file is not save! Save it now? (Y/N): ','$'
path db 50 dup(0),'$'
buffer db 2000 dup(?)
bak db 3850 dup(0)
line db ?
row db ?
char db ?
data ends
code segment
main proc far ;主程序
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
call wind
call edit
ret
main endp
wind proc near ;创建窗口子程序
win 1,4eh,0,0,0,79 ;菜单栏
win 0,1fh,1,0,24,79 ;主窗体
show: ;显示菜单
setcurse 0,0,1
mov ah,9
lea dx,menu1
int 21h
setcurse 1,0,1
mov ah,9
lea dx,menu2
int 21h
setcurse 2,0,1
mov ah,9
lea dx,menu3
int 21h
wind endp
edit proc near
char_get: ;读字符
call com
com proc near ;定义功能鍵
getcurse
mov row,dh
mov line,dl
first:
setcurse 0,row,line
j00:
mov ah,0
int 16h ;从键盘读字符 ah=扫描码 al=字符码
push ax
lea dx,buffer
mov buffer[bx],al
inc bx
cmp ah,48h ;上
jz up_1
cmp ah,50h ;下
jz down_1
cmp ah,4bh ;左
jz left
cmp ah,4dh ;右
jz right
cmp ah,1ch ;回车
jz enter_1
call fuc_key
mov ah,2
mov dl,al
int 21h
pop ax
call menu_show
jmp j6
down_1:
jmp down
enter_1:
jmp enter_2
up_1:
jmp up
left: ;光标左移
getcurse
mov row,dh
mov dl,line
cmp line,0
jnz direct
mov line,79
dec row
cmp row,0
je stop2
jmp first
stop2:
mov row,1
jmp first
direct:
dec line
jmp first
right: ;光标右移
getcurse
mov row,dh
mov dl,line
cmp line,79
jnz direct2
mov line,0
inc row
cmp row,24
je returns1
jmp first
direct2:
inc line
jmp first
enter_2:
jmp enter
up: ;上移光标
getcurse
mov row,dh
mov dl,line
dec row
cmp row,0
je stop1
jmp first
stop1:
mov row,1
jmp first
down: ;下移光标
getcurse
mov row,dh
mov dl,line
inc row
cmp row,24
je stop3
jmp first
stop3:
mov row,23
jmp first
returns1:
jmp returns
enter: ;回车换行
getcurse
mov row,dh
mov line,dl
inc row
cmp row,24
je returns
mov line,0
jmp first
returns:
mov row,24
mov line,0
jmp first
j6: ret
com endp
fuc_key proc near;功能键子程序
next:
cmp ah,3bh ;F1键
jz new_n
cmp ah,3ch ;F2
jz open_o
cmp ah,3dh ;F3
jz save_s
cmp ah,0eh ;退格键
jz bak_sp
cmp ah,53h
jz del
ret
new_n:
call new
open_o:
call open
save_s:
call save
bak_sp: ;退格键的功能
getcurse
mov row,dh
mov line,dl
cmp line,0
je stop
dec line
jmp ab
stop:
mov line,0
ab:
getcurse 0,row,line
mov ah,2
mov dl,00
int 21h
jmp first
del: ;DEL删除
getcurse
mov row,dh
mov line,dl
dec line
getcurse 0,row,line
mov ah,2
mov dl,00
int 21h
inc line
jmp first
cm:
cmp line,00
jz pos_cm
pos_cm:
setcurse 0,0,0
jmp first
fuc_key endp
menu_show proc near ;定义菜单的背景字体颜色
getcurse
push dx
win 0,06h,2,1,7,11
win 0,65h,1,0,6,10
setcurse 0,1,0
string menu1
string menu2
string menu3
pop dx
dec dl
setcurse 0,dh,dl
menu_show endp
new proc near ;新建文件
getcurse
push dx
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message1
cmp al,0dh
mov ah,9
int 21h
mov bx,0
all:
mov ah,1
int 21h
cmp al,0dh
je alll
mov path[bx],al
inc bx
jmp all
alll:
win 0,3eh,15,9,17,61
pop dx
setcurse 0,dh,dl
lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
mov bx,ax
mov ah,3eh
int 21h
win 0,3eh,1,0,23,79
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
jmp char_get
new endp
open_2:
jmp open
open proc near ;打开文件
call backdisplay
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message3
mov ah,9
int 21h
mov bx,0
cll:
mov ah,1
int 21h
cmp al,13
je clll
mov path[bx],al
inc bx
jmp cll
clll:
win 0,3eh,1,0,23,79
lea dx,path
mov ah,3dh
mov al,0
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,3fh
int 21h
win 0,3eh,1,23,1,79
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
mov cx,1000
sub bx,bx
replay:
mov dl,buffer[bx]
inc bx
mov ah,2
int 21h
loop replay
mov bx,handle
mov ah,3eh
int 21h
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
mov cx,10
mov bx,0
cleapath_3:
mov bl,0
mov path[bx],bl
loop cleapath_3
jmp char_get
open endp
save proc near ;保存文件
getcurse
push dx
win 0,3eh,1,0,6,10
call backdisplay
mov ah,path
cmp ah,21h
jl j_3
jmp j_4
j_3:
win 0,07h,15,10,17,61
win 0,24h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message2
mov ah,9
int 21h
mov bx,0
dll:
mov ah,1
int 21h
cmp al,0dh
je dlll
mov path[bx],al
inc bx
jmp dll
dlll:
win 0,3eh,1,0,23,79
pop dx
setcurse 0,dh,dl
j_4:
lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,40h
int 21h
mov bx,handle
mov ah,3eh
int 21h
call backdisplay
jmp char_get
save endp
backdisplay proc near
push ax
push bx
push cx
push dx
push ds
mov bx,0d
mov cx,3840d
loop11:
mov ax,data
mov ds,ax
mov dl,bak[bx]
mov ax,0b800h
mov ds,ax
mov ds:[bx],dl
inc bx
loop loop11
pop ds
pop dx
pop cx
pop bx
pop ax
ret
backdisplay endp
edit endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -