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

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

Changes to Assembly Library:

  • Menu dialogs now compile again.
File size: 6.2 KB
Line 
1; Project name : Assembly Library
2; Description : Functions for initializing menu system.
3
4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team.
7;
8; This program is free software; you can redistribute it and/or modify
9; it under the terms of the GNU General Public License as published by
10; the Free Software Foundation; either version 2 of the License, or
11; (at your option) any later version.
12;
13; This program is distributed in the hope that it will be useful,
14; but WITHOUT ANY WARRANTY; without even the implied warranty of
15; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16; GNU General Public License for more details.
17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
19
20
21; Section containing code
22SECTION .text
23
24;--------------------------------------------------------------------
25; MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX
26; Parameters
27; DX:AX: User specified data
28; BX: Menu event handler
29; Returns:
30; AX: Index of selected item or NO_ITEM_SELECTED
31; Corrupts registers:
32; All except segments
33;--------------------------------------------------------------------
34ALIGN MENU_JUMP_ALIGN
35MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX:
36 push es
37 push ds
38 xchg cx, ax ; Backup user data
39 CALL_DISPLAY_LIBRARY PushDisplayContext
40
41 ; Create MENU struct to stack
42 mov ax, MENU_size
43 eENTER_STRUCT ax
44 xchg ax, cx ; Restore user data to AX
45 call Memory_ZeroSSBPwithSizeInCX
46
47 ; Display menu
48 call MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX
49
50 ; Get menu selection and destroy menu variables from stack
51 mov dx, [bp+MENUINIT.wHighlightedItem]
52 eLEAVE_STRUCT MENU_size
53
54 CALL_DISPLAY_LIBRARY PopDisplayContext
55 xchg ax, dx ; Return highlighted item in AX
56 pop ds
57 pop es
58 ret
59
60
61;--------------------------------------------------------------------
62; EnterMenuWithHandlerInBXandUserDataInDXAX
63; Parameters
64; DX:AX: User specified data
65; BX: Menu event handler
66; SS:BP: Ptr to MENU
67; Returns:
68; Nothing
69; Corrupts registers:
70; All, except SS:BP
71;--------------------------------------------------------------------
72ALIGN MENU_JUMP_ALIGN
73MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX:
74 mov [bp+MENU.fnEventHandler], bx
75 mov [bp+MENU.dwUserData], ax
76 mov [bp+MENU.dwUserData+2], dx
77
78 mov ax, CURSOR_HIDDEN
79 CALL_DISPLAY_LIBRARY SetCursorShapeFromAX
80 call MenuEvent_InitializeMenuinit ; User initialization
81%ifndef USE_186
82 call MenuInit_RefreshMenuWindow
83 jmp MenuLoop_Enter
84%else
85 push MenuLoop_Enter
86 ; Fall to MenuInit_RefreshMenuWindow
87%endif
88
89
90;--------------------------------------------------------------------
91; MenuInit_RefreshMenuWindow
92; Parameters
93; SS:BP: Ptr to MENU
94; Returns:
95; Nothing
96; Corrupts registers:
97; AX, BX, CX, DX, SI, DI
98;--------------------------------------------------------------------
99ALIGN MENU_JUMP_ALIGN
100MenuInit_RefreshMenuWindow:
101 call MenuBorders_RefreshAll ; Draw borders
102 call MenuText_RefreshTitle ; Draw title strings
103 call MenuText_RefreshAllItems ; Draw item strings
104 jmp MenuText_RefreshInformation ; Draw information strings
105
106
107;--------------------------------------------------------------------
108; MenuInit_CloseMenuIfExitEventAllows
109; Parameters
110; SS:BP: Ptr to MENU
111; Returns:
112; Nothing
113; Corrupts registers:
114; AX, BX, DX
115;--------------------------------------------------------------------
116%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
117ALIGN MENU_JUMP_ALIGN
118MenuInit_CloseMenuIfExitEventAllows:
119 call MenuEvent_ExitMenu
120 jc SHORT MenuInit_CloseMenuWindow
121 ret
122%endif
123
124
125;--------------------------------------------------------------------
126; MenuInit_CloseMenuWindow
127; Parameters
128; SS:BP: Ptr to MENU
129; Returns:
130; Nothing
131; Corrupts registers:
132; Nothing
133;--------------------------------------------------------------------
134ALIGN MENU_JUMP_ALIGN
135MenuInit_CloseMenuWindow:
136 or BYTE [bp+MENU.bFlags], FLG_MENU_EXIT
137 ret
138
139
140;--------------------------------------------------------------------
141; MenuInit_HighlightItemFromAX
142; Parameters
143; AX: Item to highlight
144; SS:BP: Ptr to MENU
145; Returns:
146; Nothing
147; Corrupts registers:
148; AX, BX, CX, DX, SI, DI
149;--------------------------------------------------------------------
150ALIGN MENU_JUMP_ALIGN
151MenuInit_HighlightItemFromAX:
152 sub ax, [bp+MENUINIT.wHighlightedItem]
153 jmp MenuScrollbars_MoveHighlightedItemByAX
154
155;--------------------------------------------------------------------
156; MenuInit_GetHighlightedItemToAX
157; Parameters
158; SS:BP: Ptr to MENU
159; Returns:
160; AX: Index of highlighted item or NO_ITEM_HIGHLIGHTED
161; Corrupts registers:
162; Nothing
163;--------------------------------------------------------------------
164%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
165ALIGN MENU_JUMP_ALIGN
166MenuInit_GetHighlightedItemToAX:
167 mov ax, [bp+MENUINIT.wHighlightedItem]
168 ret
169%endif
170
171
172;--------------------------------------------------------------------
173; MenuInit_SetTitleHeightFromAL
174; MenuInit_SetInformationHeightFromAL
175; MenuInit_SetTotalItemsFromAX
176; Parameters
177; AX/AL: Parameter
178; SS:BP: Ptr to MENU
179; Returns:
180; Nothing
181; Corrupts registers:
182; Nothing
183;--------------------------------------------------------------------
184%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
185ALIGN MENU_JUMP_ALIGN
186MenuInit_SetTitleHeightFromAL:
187 mov [bp+MENUINIT.bTitleLines], al
188 ret
189
190ALIGN MENU_JUMP_ALIGN
191MenuInit_SetInformationHeightFromAL:
192 mov [bp+MENUINIT.bInfoLines], al
193 ret
194
195ALIGN MENU_JUMP_ALIGN
196MenuInit_SetTotalItemsFromAX:
197 mov [bp+MENUINIT.wItems], ax
198 ret
199%endif
200
201
202;--------------------------------------------------------------------
203; MenuInit_SetUserDataFromDSSI
204; MenuInit_GetUserDataToDSSI
205; Parameters
206; DS:SI: User data (MenuInit_SetUserDataFromDSSI)
207; SS:BP: Ptr to MENU
208; Returns:
209; DS:SI: User data (MenuInit_GetUserDataToDSSI)
210; Corrupts registers:
211; Nothing
212;--------------------------------------------------------------------
213%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
214ALIGN MENU_JUMP_ALIGN
215MenuInit_SetUserDataFromDSSI:
216 mov [bp+MENU.dwUserData], si
217 mov [bp+MENU.dwUserData+2], ds
218 ret
219
220ALIGN MENU_JUMP_ALIGN
221MenuInit_GetUserDataToDSSI:
222 lds si, [bp+MENU.dwUserData]
223 ret
224%endif
Note: See TracBrowser for help on using the repository browser.