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

Last change on this file since 528 was 527, checked in by aitotat@…, 11 years ago

Changes to Assembly Library:

  • Menu system KeyStroke event related code now always included since the %ifdef did not seem to work.
File size: 6.2 KB
RevLine 
[41]1; Project name : Assembly Library
2; Description : Functions for initializing menu system.
3
[376]4;
[526]5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
[376]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.
[526]12;
[376]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
[526]16; GNU General Public License for more details.
[376]17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
19
[526]20
[41]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;--------------------------------------------------------------------
[369]34ALIGN MENU_JUMP_ALIGN
[41]35MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX:
36 push es
37 push ds
[390]38 xchg cx, ax ; Backup user data
39 CALL_DISPLAY_LIBRARY PushDisplayContext
[41]40
[390]41 ; Create MENU struct to stack
42 mov ax, MENU_size
43 eENTER_STRUCT ax
44 xchg ax, cx ; Restore user data to AX
[46]45 call Memory_ZeroSSBPwithSizeInCX
[390]46
47 ; Display menu
[391]48 call MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX
[390]49
50 ; Get menu selection and destroy menu variables from stack
[129]51 mov dx, [bp+MENUINIT.wHighlightedItem]
[390]52 eLEAVE_STRUCT MENU_size
[41]53
[390]54 CALL_DISPLAY_LIBRARY PopDisplayContext
[129]55 xchg ax, dx ; Return highlighted item in AX
[41]56 pop ds
57 pop es
58 ret
59
60
61;--------------------------------------------------------------------
[390]62; EnterMenuWithHandlerInBXandUserDataInDXAX
[41]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;--------------------------------------------------------------------
[369]72ALIGN MENU_JUMP_ALIGN
[391]73MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX:
[41]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
[104]80 call MenuEvent_InitializeMenuinit ; User initialization
[133]81%ifndef USE_186
[41]82 call MenuInit_RefreshMenuWindow
83 jmp MenuLoop_Enter
[133]84%else
85 push MenuLoop_Enter
86 ; Fall to MenuInit_RefreshMenuWindow
87%endif
[41]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;--------------------------------------------------------------------
[369]99ALIGN MENU_JUMP_ALIGN
[41]100MenuInit_RefreshMenuWindow:
101 call MenuBorders_RefreshAll ; Draw borders
102 call MenuText_RefreshTitle ; Draw title strings
103 call MenuText_RefreshAllItems ; Draw item strings
[116]104 jmp MenuText_RefreshInformation ; Draw information strings
[41]105
106
107;--------------------------------------------------------------------
[205]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
[369]117ALIGN MENU_JUMP_ALIGN
[205]118MenuInit_CloseMenuIfExitEventAllows:
119 call MenuEvent_ExitMenu
120 jc SHORT MenuInit_CloseMenuWindow
121 ret
122%endif
123
124
125;--------------------------------------------------------------------
[41]126; MenuInit_CloseMenuWindow
127; Parameters
128; SS:BP: Ptr to MENU
129; Returns:
130; Nothing
131; Corrupts registers:
132; Nothing
133;--------------------------------------------------------------------
[369]134ALIGN MENU_JUMP_ALIGN
[41]135MenuInit_CloseMenuWindow:
136 or BYTE [bp+MENU.bFlags], FLG_MENU_EXIT
137 ret
138
[526]139
140%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[41]141;--------------------------------------------------------------------
142; MenuInit_HighlightItemFromAX
143; Parameters
144; AX: Item to highlight
145; SS:BP: Ptr to MENU
146; Returns:
147; Nothing
148; Corrupts registers:
149; AX, BX, CX, DX, SI, DI
150;--------------------------------------------------------------------
[369]151ALIGN MENU_JUMP_ALIGN
[41]152MenuInit_HighlightItemFromAX:
[52]153 sub ax, [bp+MENUINIT.wHighlightedItem]
[41]154 jmp MenuScrollbars_MoveHighlightedItemByAX
[489]155%endif
[41]156
[526]157
[48]158;--------------------------------------------------------------------
159; MenuInit_GetHighlightedItemToAX
160; Parameters
161; SS:BP: Ptr to MENU
162; Returns:
163; AX: Index of highlighted item or NO_ITEM_HIGHLIGHTED
164; Corrupts registers:
165; Nothing
166;--------------------------------------------------------------------
[369]167ALIGN MENU_JUMP_ALIGN
[48]168MenuInit_GetHighlightedItemToAX:
[52]169 mov ax, [bp+MENUINIT.wHighlightedItem]
[48]170 ret
[41]171
[48]172
[41]173;--------------------------------------------------------------------
174; MenuInit_SetTitleHeightFromAL
175; MenuInit_SetInformationHeightFromAL
176; MenuInit_SetTotalItemsFromAX
177; Parameters
178; AX/AL: Parameter
179; SS:BP: Ptr to MENU
180; Returns:
181; Nothing
182; Corrupts registers:
183; Nothing
184;--------------------------------------------------------------------
[133]185%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[369]186ALIGN MENU_JUMP_ALIGN
[41]187MenuInit_SetTitleHeightFromAL:
188 mov [bp+MENUINIT.bTitleLines], al
189 ret
190
[369]191ALIGN MENU_JUMP_ALIGN
[41]192MenuInit_SetInformationHeightFromAL:
193 mov [bp+MENUINIT.bInfoLines], al
194 ret
195
[369]196ALIGN MENU_JUMP_ALIGN
[41]197MenuInit_SetTotalItemsFromAX:
198 mov [bp+MENUINIT.wItems], ax
199 ret
[133]200%endif
[41]201
202
203;--------------------------------------------------------------------
204; MenuInit_SetUserDataFromDSSI
205; MenuInit_GetUserDataToDSSI
206; Parameters
207; DS:SI: User data (MenuInit_SetUserDataFromDSSI)
208; SS:BP: Ptr to MENU
209; Returns:
210; DS:SI: User data (MenuInit_GetUserDataToDSSI)
211; Corrupts registers:
212; Nothing
213;--------------------------------------------------------------------
[133]214%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[369]215ALIGN MENU_JUMP_ALIGN
[41]216MenuInit_SetUserDataFromDSSI:
217 mov [bp+MENU.dwUserData], si
218 mov [bp+MENU.dwUserData+2], ds
219 ret
220
[369]221ALIGN MENU_JUMP_ALIGN
[41]222MenuInit_GetUserDataToDSSI:
223 lds si, [bp+MENU.dwUserData]
224 ret
[133]225%endif
Note: See TracBrowser for help on using the repository browser.