?? gui.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 + -