?? textedit.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 ;定義數據段
menu db 'F1:Menu','$'
menu1 db ' New(F1) ','$'
menu2 db ' Open(F2) ','$'
menu3 db ' Save(F3) ','$'
menu4 db ' Save as ',13,10,'$'
menu5 db ' Exit ','$'
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
setcurse 0,1,1
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,47h ;HOME鍵
jz home
cmp ah,4fh ;END鍵
jz _end
cmp ah,0eh ;退格鍵
jz bak_sp
cmp ah,53h
jz del
ret
home: ;HOME鍵的功能
getcurse
mov row,dh
mov line,0
jmp first
_end: ;END鍵的功能
getcurse
mov row,dh
mov line,79
jmp first
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 ;顯示菜單
call savedisplay
push cx
cmp ah,3bh ;F1功能
jz new
cmp ah,3ch
jz open
cmp ah,3dh
jz save
jmp char_get
menu_sh: ;定義菜單的背景字體顏色
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
string menu4
string menu5
pop dx
dec dl
setcurse 0,dh,dl
copmar:
readchar
cmp ah,50h
jz menu_n
jmp menu_hid
menu_hid: ;菜單隱藏
win 0,1eh,1,1,7,11
call backdisplay
jmp char_get
menu_n: ;開始定義各個菜單項
win 0,65h,5,1,5,8
setcurse 0,5,0
string menu5
win 0,15h,1,1,1,8
setcurse 0,1,0
string menu1
readchar
cmp ah,48h
je menu_n
cmp al,0dh
jz new_1
cmp ah,50h
je menu_o
jmp menu_hid
menu_n0:
jmp menu_n
menu_o:
win 0,65h,1,1,1,8
setcurse 0,1,0
string menu1
win 0,15h,2,1,2,8
setcurse 0,2,0
string menu2
readchar
cmp ah,48h
je menu_o
cmp al,0dh
jz open_1
cmp ah,50h
je menu_s
jmp menu_hid
new_1:
jmp new_2
menu_s:
win 0,65h,2,1,2,8
setcurse 0,2,0
string menu2
win 0,15h,3,1,3,8
setcurse 0,3,0
string menu3
readchar
cmp al,0dh
jz save_1
cmp ah,48h
je menu_s
cmp ah,50h
je menu_a
jmp menu_hid
open_1:
jmp open_2
menu_n1:
jmp menu_n
menu_a:
win 0,65h,3,1,3,8
setcurse 0,3,0
string menu3
win 0,15h,4,1,4,8
setcurse 0,4,0
string menu4
readchar
cmp ah,1ch
jz save_2
cmp ah,48h
je menu_a
cmp ah,50h
je menu_e
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -