source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/MenuInit.asm @ 289

Last change on this file since 289 was 289, checked in by aitotat@…, 12 years ago

Changes to Assembly Library:

  • Menu Library now properly restores cursor when closing menu.
File size: 5.4 KB
Line 
1; Project name  :   Assembly Library
2; Description   :   Functions for initializing menu system.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
8; MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX
9;   Parameters
10;       DX:AX:  User specified data
11;       BX:     Menu event handler
12;   Returns:
13;       AX:     Index of selected item or NO_ITEM_SELECTED
14;   Corrupts registers:
15;       All except segments
16;--------------------------------------------------------------------
17ALIGN JUMP_ALIGN
18MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX:
19    push    es
20    push    ds
21    LOAD_BDA_SEGMENT_TO ds, cx, !
22    push    WORD [BDA.wVidCurShape]
23    mov     cl, MENU_size
24    eENTER_STRUCT cx
25
26    call    Memory_ZeroSSBPwithSizeInCX
27    call    MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX
28    mov     dx, [bp+MENUINIT.wHighlightedItem]
29
30    eLEAVE_STRUCT MENU_size
31    pop     ax
32    CALL_DISPLAY_LIBRARY SetCursorShapeFromAX
33    CALL_DISPLAY_LIBRARY SynchronizeDisplayContextToHardware
34    xchg    ax, dx          ; Return highlighted item in AX
35    pop     ds
36    pop     es
37    ret
38
39
40;--------------------------------------------------------------------
41; MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX
42;   Parameters
43;       DX:AX:  User specified data
44;       BX:     Menu event handler
45;       SS:BP:  Ptr to MENU
46;   Returns:
47;       Nothing
48;   Corrupts registers:
49;       All, except SS:BP
50;--------------------------------------------------------------------
51ALIGN JUMP_ALIGN
52MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX:
53    mov     [bp+MENU.fnEventHandler], bx
54    mov     [bp+MENU.dwUserData], ax
55    mov     [bp+MENU.dwUserData+2], dx
56
57    mov     ax, CURSOR_HIDDEN
58    CALL_DISPLAY_LIBRARY SetCursorShapeFromAX
59    call    MenuEvent_InitializeMenuinit    ; User initialization
60%ifndef USE_186
61    call    MenuInit_RefreshMenuWindow
62    jmp     MenuLoop_Enter
63%else
64    push    MenuLoop_Enter
65    ; Fall to MenuInit_RefreshMenuWindow
66%endif
67
68
69;--------------------------------------------------------------------
70; MenuInit_RefreshMenuWindow
71;   Parameters
72;       SS:BP:  Ptr to MENU
73;   Returns:
74;       Nothing
75;   Corrupts registers:
76;       AX, BX, CX, DX, SI, DI
77;--------------------------------------------------------------------
78ALIGN JUMP_ALIGN
79MenuInit_RefreshMenuWindow:
80    call    MenuBorders_RefreshAll          ; Draw borders
81    call    MenuText_RefreshTitle           ; Draw title strings
82    call    MenuText_RefreshAllItems        ; Draw item strings
83    jmp     MenuText_RefreshInformation     ; Draw information strings
84
85
86;--------------------------------------------------------------------
87; MenuInit_CloseMenuIfExitEventAllows
88;   Parameters
89;       SS:BP:  Ptr to MENU
90;   Returns:
91;       Nothing
92;   Corrupts registers:
93;       AX, BX, DX
94;--------------------------------------------------------------------
95%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
96ALIGN JUMP_ALIGN
97MenuInit_CloseMenuIfExitEventAllows:
98    call    MenuEvent_ExitMenu
99    jc      SHORT MenuInit_CloseMenuWindow
100    ret
101%endif
102
103
104;--------------------------------------------------------------------
105; MenuInit_CloseMenuWindow
106;   Parameters
107;       SS:BP:  Ptr to MENU
108;   Returns:
109;       Nothing
110;   Corrupts registers:
111;       Nothing
112;--------------------------------------------------------------------
113ALIGN JUMP_ALIGN
114MenuInit_CloseMenuWindow:
115    or      BYTE [bp+MENU.bFlags], FLG_MENU_EXIT
116    ret
117
118
119;--------------------------------------------------------------------
120; MenuInit_HighlightItemFromAX
121;   Parameters
122;       AX:     Item to highlight
123;       SS:BP:  Ptr to MENU
124;   Returns:
125;       Nothing
126;   Corrupts registers:
127;       AX, BX, CX, DX, SI, DI
128;--------------------------------------------------------------------
129ALIGN JUMP_ALIGN
130MenuInit_HighlightItemFromAX:
131    sub     ax, [bp+MENUINIT.wHighlightedItem]
132    jmp     MenuScrollbars_MoveHighlightedItemByAX
133
134;--------------------------------------------------------------------
135; MenuInit_GetHighlightedItemToAX
136;   Parameters
137;       SS:BP:  Ptr to MENU
138;   Returns:
139;       AX:     Index of highlighted item or NO_ITEM_HIGHLIGHTED
140;   Corrupts registers:
141;       Nothing
142;--------------------------------------------------------------------
143%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
144ALIGN JUMP_ALIGN
145MenuInit_GetHighlightedItemToAX:
146    mov     ax, [bp+MENUINIT.wHighlightedItem]
147    ret
148%endif
149
150
151;--------------------------------------------------------------------
152; MenuInit_SetTitleHeightFromAL
153; MenuInit_SetInformationHeightFromAL
154; MenuInit_SetTotalItemsFromAX
155;   Parameters
156;       AX/AL:  Parameter
157;       SS:BP:      Ptr to MENU
158;   Returns:
159;       Nothing
160;   Corrupts registers:
161;       Nothing
162;--------------------------------------------------------------------
163%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
164ALIGN JUMP_ALIGN
165MenuInit_SetTitleHeightFromAL:
166    mov     [bp+MENUINIT.bTitleLines], al
167    ret
168
169ALIGN JUMP_ALIGN
170MenuInit_SetInformationHeightFromAL:
171    mov     [bp+MENUINIT.bInfoLines], al
172    ret
173
174ALIGN JUMP_ALIGN
175MenuInit_SetTotalItemsFromAX:
176    mov     [bp+MENUINIT.wItems], ax
177    ret
178%endif
179
180
181;--------------------------------------------------------------------
182; MenuInit_SetUserDataFromDSSI
183; MenuInit_GetUserDataToDSSI
184;   Parameters
185;       DS:SI:  User data (MenuInit_SetUserDataFromDSSI)
186;       SS:BP:  Ptr to MENU
187;   Returns:
188;       DS:SI:  User data (MenuInit_GetUserDataToDSSI)
189;   Corrupts registers:
190;       Nothing
191;--------------------------------------------------------------------
192%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
193ALIGN JUMP_ALIGN
194MenuInit_SetUserDataFromDSSI:
195    mov     [bp+MENU.dwUserData], si
196    mov     [bp+MENU.dwUserData+2], ds
197    ret
198
199ALIGN JUMP_ALIGN
200MenuInit_GetUserDataToDSSI:
201    lds     si, [bp+MENU.dwUserData]
202    ret
203%endif
Note: See TracBrowser for help on using the repository browser.