⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui.asm

📁 一个DOS下的文本编辑器
💻 ASM
字号:
;--------------MACRO-CREAT WINDOW-----------------------
WIN     MACRO   OP1,OP2,OP3,OP4,OP5,OP6    
        MOV     AH,06H
        MOV     AL,OP1
        MOV     BH,OP2
        MOV     CH,OP3
        MOV     CL,OP4
        MOV     DH,OP5
        MOV     DL,OP6
        INT     10H
ENDM
;-------------------------------------------------------

;--------------SET CURSOR POSITION----------------------
SET_CUR MACRO   OP1,OP2
        MOV     AH,02H
        MOV     BH,00H
        MOV     DH,OP1
        MOV     DL,OP2
        INT     10H
ENDM
;-------------------------------------------------------

;--------------SHOW/HIDE CURSOR-------------------------
SHOW_CUR        MACRO
        MOV     AH,01H
        MOV     CH,13
        MOV     CL,14
        INT     10H
ENDM

HIDE_CUR        MACRO
        MOV     AH,01H
        MOV     CH,20H
        MOV     CL,20H
        INT     10H
ENDM        
;-------------------------------------------------------

;--------------PRINT TEXT-------------------------------
PRINT	MACRO	OP
	MOV	AH,09H
	LEA	DX,OP
	INT	21H
ENDM
;-------------------------------------------------------

EXTRN   SAVE_SCR:FAR
EXTRN   RESET_SCR:FAR
EXTRN   GET_INPUT:FAR

DATA    SEGMENT PARA
NO_IN   DW      0000H
ESCA    DW      011BH
ALT_F   DW      2100H
ALT_H   DW      2300H
ALT_X   DW      2D00H
UP      DW      4800H
DOWN    DW      5000H
LEFT    DW      4B00H
RIGHT   DW      4D00H
ENTE    DW      1C0DH   ;ENTER IS RESERVED WORD
MENU1_TITLE     DB      'File$'
MENU2_TITLE     DB      'Help$'
M1_CUR_ITEM     DB      01H
MENU1_ITEMS     DB      0DAH,15 DUP(0C4H),0BFH
                DB      0B3H,' New           ',0B3H
                DB      0B3H,' Save          ',0B3H
                DB      0B3H,' Exit          ',0B3H
                DB      0C0H,15 DUP(0C4H),0D9H
M2_CUR_ITEM     DB      01H
MENU2_ITEMS     DB      0DAH,15 DUP(0C4H),0BFH
                DB      0B3H,' Short Cuts    ',0B3H
                DB      0B3H,' About         ',0B3H
                DB      0C0H,15 DUP(0C4H),0D9H
DATA    ENDS

CODE	SEGMENT	PARA	'CODE'
        ASSUME  CS:CODE,DS:DATA,ES:DATA
        PUBLIC  DARW_WIN
        PUBLIC  SHOW_M1
        PUBLIC  SHOW_M2
        PUBLIC  INIT_WS

;-------------INITAL WORKSPACE--------------------------
INIT_WS PROC    FAR
        WIN     0,0FH,1,1,23,79
        SET_CUR 1,1
        SHOW_CUR
        RETF
INIT_WS ENDP
;-------------------------------------------------------

;-------------SHOW MENU 1 -FILE MENU--------------------
SHOW_M1 PROC    FAR
        ;RETURN BX
        ;BH
        ;-00 RETURN AND EXIT
        ;-01 RETURN ONLY
        ;-02 OTHER MENU, INDEX NO. IN BL
        ;-03 ITEM SELECTED, INDEX NO. IN BL
        PUSH    AX
        PUSH    CX
        PUSH    DX
        PUSH    DS
        MOV     AX,DATA
        MOV     ES,AX

        CALL    SAVE_SCR

        MOV     AX,DATA
        MOV     DS,AX
        WIN     0,0FH,0,2,0,7
        SET_CUR 0,3
        PRINT   MENU1_TITLE

        WIN     0,70H,1,1,5,18
        CALL    M1_DRAW
        HIDE_CUR

M1_LP:  CALL    GET_INPUT
        CMP     AX,NO_IN        ;DO NOTHING
        JZ      M1_LP
        CMP     AX,ALT_X        ;RETURN AND EXIT AFTER RETURN
        JNZ     M1_CONT1
        MOV     BX,0000H
        JMP     M1_RETURN
M1_CONT1:
        CMP     AX,ALT_F        ;RETURN TO MAIN LOOP
        JNZ     M1_CONT2
        MOV     BX,0100H
        JMP     M1_RETURN
M1_CONT2:
        CMP     AX,ESCA         ;RETURN TO MAIN LOOP
        JNZ     M1_CONT3
        MOV     BX,0100H
        JMP     M1_RETURN
M1_CONT3:
        CMP     AX,ALT_H
        JNZ     M1_CONT4
        MOV     BX,0202H
        JMP     M1_RETURN
M1_CONT4:
        CMP     AX,UP
        JNZ     M1_CONT5
        ;TODO:  CHANGE CURRENT SELECTED ITEM
        MOV     AL,M1_CUR_ITEM
        DEC     AL
        CMP     AL,00H
        JNZ     M1_C4_C1
        MOV     AL,03H
M1_C4_C1:
        MOV     M1_CUR_ITEM,AL
        CALL    M1_DRAW
M1_CONT5:
        CMP     AX,DOWN
        JNZ     M1_CONT6
        ;TODO:  CHANGE CURRENT SELECTED ITEM
        MOV     AL,M1_CUR_ITEM
        INC     AL
        CMP     AL,04H
        JNZ     M1_C4_C1
        MOV     AL,01H
M1_C5_C1:
        MOV     M1_CUR_ITEM,AL
        CALL    M1_DRAW
M1_CONT6:
        CMP     AX,LEFT
        JNZ     M1_CONT7
        MOV     BX,0202H
        JMP     M1_RETURN
M1_CONT7:
        CMP     AX,RIGHT
        JNZ     M1_CONT8
        MOV     BX,0202H
        JMP     M1_RETURN

M1_CONT8:
        CMP     AX,ENTE
        JNZ     M1_CONT9
        MOV     BH,03H
        MOV     BL,M1_CUR_ITEM
        JMP     M1_RETURN
M1_CONT9:
        JMP     M1_LP

M1_RETURN:
        CALL    RESET_SCR
        POP     DS
        POP     DX
        POP     CX
        POP     AX
        RETF
SHOW_M1 ENDP
;-------------------------------------------------------

;---DRAW THE MENU CONTENT WITH BLACK SELECTED ITEM------
M1_DRAW PROC    NEAR
        ;ENTRY M1_CUR_ITEM:CURRENT SELECTED ITEM INDEX NO.
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX

        MOV     AX,1300H
        MOV     BX,70H
        LEA     BP,MENU1_ITEMS
        MOV     CX,17   ;LENGTH OF ROW
        MOV     DH,1    ;TOP ROW
        MOV     DL,1    ;LEFT COLUMN
M1D_LP:
        INT     10H
        ADD     BP,17   ;NEXT ROW
        INC     DH
        CMP     DH,6    ;BOTTON ROW + 1
        JNZ     M1D_LP

        MOV     BL,17
        MOV     AL,M1_CUR_ITEM
        MUL     BL
        LEA     SI,MENU1_ITEMS+1
        ADD     SI,AX

        MOV     AX,1300H
        MOV     BX,0FH
        MOV     BP,SI
        MOV     CX,15   ;LENGTH OF ITEM
        MOV     DH,M1_CUR_ITEM
        INC     DH
        MOV     DL,2    ;LEFT COLUMN + 1
        INT     10H

        POP     DX
        POP     CX
        POP     BX
        POP     AX
        RET
M1_DRAW ENDP
;--------------------------------------------------

;-------------SHOW MENU 2 -HELP MENU--------------------
SHOW_M2 PROC    FAR
        ;RETURN BX
        ;BH
        ;-00 RETURN AND EXIT
        ;-01 RETURN ONLY
        ;-02 OTHER MENU, INDEX NO. IN BL
        ;-03 ITEM SELECTED, INDEX NO. IN BL
        PUSH    AX
        PUSH    CX
        PUSH    DX
        PUSH    DS
        MOV     AX,DATA
        MOV     ES,AX

        CALL    SAVE_SCR

        MOV     AX,DATA
        MOV     DS,AX
        WIN     0,0FH,0,8,0,13 ;!!
        SET_CUR 0,9          ;!!
        PRINT   MENU2_TITLE

        WIN     0,70H,1,7,4,24;!!
        CALL    M2_DRAW
        HIDE_CUR

M2_LP:  CALL    GET_INPUT
        CMP     AX,NO_IN        ;DO NOTHING
        JZ      M2_LP
        CMP     AX,ALT_X        ;RETURN AND EXIT AFTER RETURN
        JNZ     M2_CONT1
        MOV     BX,0000H
        JMP     M2_RETURN
M2_CONT1:
        CMP     AX,ALT_H        ;RETURN TO MAIN LOOP
        JNZ     M2_CONT2
        MOV     BX,0100H
        JMP     M2_RETURN
M2_CONT2:
        CMP     AX,ESCA         ;RETURN TO MAIN LOOP
        JNZ     M2_CONT3
        MOV     BX,0100H
        JMP     M2_RETURN
M2_CONT3:
        CMP     AX,ALT_F
        JNZ     M2_CONT4
        MOV     BX,0201H
        JMP     M2_RETURN
M2_CONT4:
        CMP     AX,UP
        JNZ     M2_CONT5
        ;TODO:  CHANGE CURRENT SELECTED ITEM
        MOV     AL,M2_CUR_ITEM
        DEC     AL
        CMP     AL,00H
        JNZ     M2_C4_C1
        MOV     AL,02H
M2_C4_C1:
        MOV     M2_CUR_ITEM,AL
        CALL    M2_DRAW
M2_CONT5:
        CMP     AX,DOWN
        JNZ     M2_CONT6
        ;TODO:  CHANGE CURRENT SELECTED ITEM
        MOV     AL,M2_CUR_ITEM
        INC     AL
        CMP     AL,03H
        JNZ     M2_C4_C1
        MOV     AL,01H
M2_C5_C1:
        MOV     M2_CUR_ITEM,AL
        CALL    M2_DRAW
M2_CONT6:
        CMP     AX,LEFT
        JNZ     M2_CONT7
        MOV     BX,0201H
        JMP     M2_RETURN
M2_CONT7:
        CMP     AX,RIGHT
        JNZ     M2_CONT8
        MOV     BX,0201H
        JMP     M2_RETURN

M2_CONT8:
        CMP     AX,ENTE
        JNZ     M2_CONT9
        MOV     BH,03H
        MOV     BL,M2_CUR_ITEM
        JMP     M2_RETURN
M2_CONT9:
        JMP     M2_LP

M2_RETURN:
        CALL    RESET_SCR
        POP     DS
        POP     DX
        POP     CX
        POP     AX
        RETF
SHOW_M2 ENDP
;-------------------------------------------------------

;---DRAW THE MENU CONTENT WITH BLACK SELECTED ITEM------
M2_DRAW PROC    NEAR
        ;ENTRY M1_CUR_ITEM:CURRENT SELECTED ITEM INDEX NO.
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX

        MOV     AX,1300H
        MOV     BX,70H
        LEA     BP,MENU2_ITEMS
        MOV     CX,17   ;LENGTH OF ROW
        MOV     DH,1    ;TOP ROW
        MOV     DL,7    ;LEFT COLUMN
M2D_LP:
        INT     10H
        ADD     BP,17   ;NEXT ROW
        INC     DH
        CMP     DH,5    ;BOTTON ROW + 1
        JNZ     M2D_LP

        MOV     BL,17
        MOV     AL,M2_CUR_ITEM
        MUL     BL
        LEA     SI,MENU2_ITEMS+1
        ADD     SI,AX

        MOV     AX,1300H
        MOV     BX,0FH
        MOV     BP,SI
        MOV     CX,15   ;LENGTH OF ITEM
        MOV     DH,M2_CUR_ITEM
        INC     DH
        MOV     DL,8    ;LEFT COLUMN + 1
        INT     10H

        POP     DX
        POP     CX
        POP     BX
        POP     AX
        RET
M2_DRAW ENDP
;--------------------------------------------------

;---------------DARW MAIN WINDOW------------------------
DARW_WIN        PROC    FAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    DS

        MOV     AX,DATA
        MOV     DS,AX
        WIN     0,1FH,1,0,23,0
        WIN     0,0FH,1,1,23,79
        WIN     0,70H,0,0,0,79
        WIN     0,70H,24,0,24,79
        SET_CUR 0,3
        PRINT   MENU1_TITLE
        SET_CUR 0,9
        PRINT   MENU2_TITLE
        HIDE_CUR

        POP     DS
        POP     DX
        POP     CX
        POP     BX
        POP     AX

        RETF
DARW_WIN        ENDP
;-------------------------------------------------------

CODE    ENDS
	END	DARW_WIN

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -