📄 wordedit.asm
字号:
jmp manu_o
open_0: jmp open_1 ;仅供中间跳转
manu_s:
win 0,70h,2,0,2,10
pos_curse 0,2,0
string manu_2
win 0,0fh,3,0,3,10
pos_curse 0,3,0
string manu_3
red_chr
cmp al,0dh
jz save_0
cmp ah,48h
je manu_o0
cmp ah,50h
je manu_a
jmp manu_hid
open_1: jmp open_2
manu_n1:
jmp manu_n
manu_s0:
win 0,70h,4,0,4,10
pos_curse 0,4,0
string manu_4
jmp manu_s
save_0: jmp save_1 ;仅供中间跳转
manu_a:
win 0,70h,3,0,3,10
pos_curse 0,3,0
string manu_3
win 0,0fh,4,0,4,10
pos_curse 0,4,0
string manu_4
red_chr
cmp ah,1ch
jz save_2
cmp ah,48h
je manu_s0
cmp ah,50h
je manu_e
jmp manu_hid
manu_n2:
jmp manu_n1
new_2: jmp new
save_1: call save
save_2: call saveas
manu_a0:
win 0,70h,5,0,5,10
pos_curse 0,5,0
string manu_5
jmp manu_a
manu_e:
win 0,70h,4,0,4,10
pos_curse 0,4,0
string manu_4
win 0,0fh,5,0,5,10
pos_curse 0,5,0
string manu_5
red_chr
cmp ah,50h
je manu_n2
cmp ah,48h
je manu_a0
cmp ah,1ch
je exit
jmp manu_hid
exit: ;退出程序
call backdisplay
win 0,06h,15,10,17,61
win 0,70h,14,9,16,60
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message4 ;退出前是否保存?
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,79h
jnz quit
call save_p ;输入Y则保存,N或其他则退出且不保存
quit: win 0,07h,0,0,24,79
pos_curse 0,0,0
mov ah,4ch
int 21h
pop bx
ret
menu_show endp
;------------------------------新建文件-------------------------------------
new proc near
push ax
push cx
push bx
push dx
ds1: ;打开新档案前是否储存旧档案?
win 0,07h,15,10,17,61
win 0,70h,14,9,16,60
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message4
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,79h ;输入Y则保存,N则不保存,其他字符无效
je sa
cmp al,6eh
je nsa
jmp ds1
sa:
call save_p
nsa:
pos_get ;提示输入新档案名
push dx
call backdisplay
win 0,06h,15,10,17,61
win 0,70h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message1
mov ah,9
int 21h
pos_get
mov tempLine,dl ;保存菜单中第一个待输入实际字符的位置
mov bx,0
all:
mov ah,0 ;输入一个字符
int 16h
cmp ah,1ch ;回车
je alll
cmp ah,0eh ;退格
je backA
mov ah,2
mov dl,al
int 21h
pos_get
cmp dl,60 ;判断字符输入是否已达最大值
je tempA1
mov path[bx],al
inc bx
jmp all
backA:
pos_get
cmp dl,59 ;判断光标不否到窗口末端
je tempA3
cmp dl,tempLine ;判断光标是否到达输入窗口的前端
jbe tempA2
dec dl
jmp tempA2
tempA3: ;光标在窗口末端时,删除光标当前的字符
mov ah,2
mov dl,00
int 21h
pos_get
dec dl
dec dl
tempA2: ;删除光标前一个字符
pos_curse 0,dh,dl
mov ah,2
mov dl,00
int 21h
pos_get
dec dl
pos_curse 0,dh,dl
jmp all
tempA1: ;光标向前移一位
pos_get
dec dl
pos_curse 0,dh,dl
jmp all
alll: ;清屏,光标置顶,准备开始新的档案输入
win 0,3eh,15,9,17,61
pop dx
pos_curse 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,1fh,1,0,23,79
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
pop dx
pop bx
pop cx
pop ax
jmp char_get
new endp
open_2: jmp open
;-------------------------另存为文件---------------------------------------
saveas proc near
push ax
push bx
push cx
push dx
win 0,3eh,1,0,6,10
call backdisplay
win 0,06h,15,10,17,61
win 0,70h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message5
mov ah,9
int 21h
pos_get ;获取光标当前位置
mov tempLine,dl ;保存菜单中第一个待输入实际字符的位置
mov bx,0
bll:
mov ah,0 ;输入一个字符
int 16h
cmp ah,1ch ;回车
je blll
cmp ah,0eh ;退格
je backB
mov ah,2
mov dl,al
int 21h
pos_get
cmp dl,60 ;判断字符输入是否已达最大值
je tempB1
mov path[bx],al
inc bx
jmp bll
backB:
pos_get
cmp dl,59 ;判断光标不否到窗口末端
je tempB3
cmp dl,tempLine ;判断光标是否到达输入窗口的前端
jbe tempB2
dec dl
jmp tempB2
tempB3: ;光标在窗口末端时,删除光标当前的字符
mov ah,2
mov dl,00
int 21h
pos_get
dec dl
dec dl
tempB2: ;删除光标前一个字符
pos_curse 0,dh,dl
mov ah,2
mov dl,00
int 21h
pos_get
dec dl
pos_curse 0,dh,dl
jmp bll
tempB1: ;光标向前移一位
pos_get
dec dl
pos_curse 0,dh,dl
jmp bll
blll:
pos_get
push dx
win 0,1fh,1,0,23,79
call backdisplay
pop dx
pos_curse 0,dh,dl
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
pop dx
pop cx
pop bx
pop ax
jmp char_get
saveas endp
;--------------------------打开文件-----------------------------------------
open proc near
win 0,1fh,1,0,23,79 ;清屏
call backdisplay
push ax
push bx
push cx
push dx
;input:
win 0,06h,13,14,16,66
win 0,70h,12,13,15,65
pos_curse 0,13,18
string message3 ;显示Message3
pos_get
mov tempLine,dl ;保存菜单中第一个待输入实际字符的位置
mov bx,0
cll:
mov ah,0 ;输入一个字符
int 16h
cmp ah,1ch ;回车
je clll
cmp ah,0eh ;退格
je backC
mov ah,2
mov dl,al
int 21h
pos_get
cmp dl,65 ;判断字符输入是否已达最大值
je tempC1
mov path[bx],al
inc bx
jmp cll
backC:
pos_get
cmp dl,64 ;判断光标不否到窗口末端
je tempC3
cmp dl,tempLine ;判断光标是否到达输入窗口的前端
jbe tempC2
dec dl
jmp tempC2
tempC3: ;光标在窗口末端时,删除光标当前的字符
mov ah,2
mov dl,00
int 21h
pos_get
dec dl
dec dl
tempC2: ;删除光标前一个字符
pos_curse 0,dh,dl
mov ah,2
mov dl,00
int 21h
pos_get
dec dl
pos_curse 0,dh,dl
jmp cll
tempC1: ;光标向前移一位
pos_get
dec dl
pos_curse 0,dh,dl
jmp cll
clll:
win 0,1fh,1,0,23,79
lea dx,path
mov ah,3dh
mov al,0
int 21h ;打开文件
mov handle,ax ;成功:AX=文件代号;失败:AX=错误码
;cmp handle,01h
;jl yeah
; cmp handle,13h
;ja nomatch ;没有找到路径则显示message6
yeah:
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,3fh
int 21h ;读文件或设备
pos_curse 0,1,0
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 ;关闭文件
pos_curse 0,1,0
mov cx,10
mov bx,0
cleapath_3:
mov bl,0
mov path[bx],bl
loop cleapath_3
pop dx
pop cx
pop bx
pop ax
jmp char_get
;nomatch:
; win 0,06h,13,14,16,65
; win 0,70h,12,13,15,66
; pos_curse 0,13,18
; string message3 ;显示Message3
; jmp input
open endp
;------------------------------保存文件----------------------------------------
save proc near
push ax
push bx
push cx
push dx
pos_get
push dx
win 0,3eh,1,0,6,10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -