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

Last change on this file since 220 was 205, checked in by aitotat@…, 13 years ago

Changes to Assembly Library:

  • Menu Exit event can now be send when closing menu.
File size: 5.3 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 xchg ax, dx ; Return highlighted item in AX
34 pop ds
35 pop es
36 ret
37
38
39;--------------------------------------------------------------------
40; MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX
41; Parameters
42; DX:AX: User specified data
43; BX: Menu event handler
44; SS:BP: Ptr to MENU
45; Returns:
46; Nothing
47; Corrupts registers:
48; All, except SS:BP
49;--------------------------------------------------------------------
50ALIGN JUMP_ALIGN
51MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX:
52 mov [bp+MENU.fnEventHandler], bx
53 mov [bp+MENU.dwUserData], ax
54 mov [bp+MENU.dwUserData+2], dx
55
56 mov ax, CURSOR_HIDDEN
57 CALL_DISPLAY_LIBRARY SetCursorShapeFromAX
58 call MenuEvent_InitializeMenuinit ; User initialization
59%ifndef USE_186
60 call MenuInit_RefreshMenuWindow
61 jmp MenuLoop_Enter
62%else
63 push MenuLoop_Enter
64 ; Fall to MenuInit_RefreshMenuWindow
65%endif
66
67
68;--------------------------------------------------------------------
69; MenuInit_RefreshMenuWindow
70; Parameters
71; SS:BP: Ptr to MENU
72; Returns:
73; Nothing
74; Corrupts registers:
75; AX, BX, CX, DX, SI, DI
76;--------------------------------------------------------------------
77ALIGN JUMP_ALIGN
78MenuInit_RefreshMenuWindow:
79 call MenuBorders_RefreshAll ; Draw borders
80 call MenuText_RefreshTitle ; Draw title strings
81 call MenuText_RefreshAllItems ; Draw item strings
82 jmp MenuText_RefreshInformation ; Draw information strings
83
84
85;--------------------------------------------------------------------
86; MenuInit_CloseMenuIfExitEventAllows
87; Parameters
88; SS:BP: Ptr to MENU
89; Returns:
90; Nothing
91; Corrupts registers:
92; AX, BX, DX
93;--------------------------------------------------------------------
94%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
95ALIGN JUMP_ALIGN
96MenuInit_CloseMenuIfExitEventAllows:
97 call MenuEvent_ExitMenu
98 jc SHORT MenuInit_CloseMenuWindow
99 ret
100%endif
101
102
103;--------------------------------------------------------------------
104; MenuInit_CloseMenuWindow
105; Parameters
106; SS:BP: Ptr to MENU
107; Returns:
108; Nothing
109; Corrupts registers:
110; Nothing
111;--------------------------------------------------------------------
112ALIGN JUMP_ALIGN
113MenuInit_CloseMenuWindow:
114 or BYTE [bp+MENU.bFlags], FLG_MENU_EXIT
115 ret
116
117
118;--------------------------------------------------------------------
119; MenuInit_HighlightItemFromAX
120; Parameters
121; AX: Item to highlight
122; SS:BP: Ptr to MENU
123; Returns:
124; Nothing
125; Corrupts registers:
126; AX, BX, CX, DX, SI, DI
127;--------------------------------------------------------------------
128ALIGN JUMP_ALIGN
129MenuInit_HighlightItemFromAX:
130 sub ax, [bp+MENUINIT.wHighlightedItem]
131 jmp MenuScrollbars_MoveHighlightedItemByAX
132
133;--------------------------------------------------------------------
134; MenuInit_GetHighlightedItemToAX
135; Parameters
136; SS:BP: Ptr to MENU
137; Returns:
138; AX: Index of highlighted item or NO_ITEM_HIGHLIGHTED
139; Corrupts registers:
140; Nothing
141;--------------------------------------------------------------------
142%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
143ALIGN JUMP_ALIGN
144MenuInit_GetHighlightedItemToAX:
145 mov ax, [bp+MENUINIT.wHighlightedItem]
146 ret
147%endif
148
149
150;--------------------------------------------------------------------
151; MenuInit_SetTitleHeightFromAL
152; MenuInit_SetInformationHeightFromAL
153; MenuInit_SetTotalItemsFromAX
154; Parameters
155; AX/AL: Parameter
156; SS:BP: Ptr to MENU
157; Returns:
158; Nothing
159; Corrupts registers:
160; Nothing
161;--------------------------------------------------------------------
162%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
163ALIGN JUMP_ALIGN
164MenuInit_SetTitleHeightFromAL:
165 mov [bp+MENUINIT.bTitleLines], al
166 ret
167
168ALIGN JUMP_ALIGN
169MenuInit_SetInformationHeightFromAL:
170 mov [bp+MENUINIT.bInfoLines], al
171 ret
172
173ALIGN JUMP_ALIGN
174MenuInit_SetTotalItemsFromAX:
175 mov [bp+MENUINIT.wItems], ax
176 ret
177%endif
178
179
180;--------------------------------------------------------------------
181; MenuInit_SetUserDataFromDSSI
182; MenuInit_GetUserDataToDSSI
183; Parameters
184; DS:SI: User data (MenuInit_SetUserDataFromDSSI)
185; SS:BP: Ptr to MENU
186; Returns:
187; DS:SI: User data (MenuInit_GetUserDataToDSSI)
188; Corrupts registers:
189; Nothing
190;--------------------------------------------------------------------
191%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
192ALIGN JUMP_ALIGN
193MenuInit_SetUserDataFromDSSI:
194 mov [bp+MENU.dwUserData], si
195 mov [bp+MENU.dwUserData+2], ds
196 ret
197
198ALIGN JUMP_ALIGN
199MenuInit_GetUserDataToDSSI:
200 lds si, [bp+MENU.dwUserData]
201 ret
202%endif
Note: See TracBrowser for help on using the repository browser.