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

Last change on this file since 526 was 526, checked in by krille_n_@…, 11 years ago

Changes:

  • Update of the copyright notices to include the year 2013.
File size: 6.3 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;--------------------------------------------------------------------
[133]167%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[369]168ALIGN MENU_JUMP_ALIGN
[48]169MenuInit_GetHighlightedItemToAX:
[52]170    mov     ax, [bp+MENUINIT.wHighlightedItem]
[48]171    ret
[133]172%endif
[41]173
[48]174
[41]175;--------------------------------------------------------------------
176; MenuInit_SetTitleHeightFromAL
177; MenuInit_SetInformationHeightFromAL
178; MenuInit_SetTotalItemsFromAX
179;   Parameters
180;       AX/AL:  Parameter
181;       SS:BP:      Ptr to MENU
182;   Returns:
183;       Nothing
184;   Corrupts registers:
185;       Nothing
186;--------------------------------------------------------------------
[133]187%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[369]188ALIGN MENU_JUMP_ALIGN
[41]189MenuInit_SetTitleHeightFromAL:
190    mov     [bp+MENUINIT.bTitleLines], al
191    ret
192
[369]193ALIGN MENU_JUMP_ALIGN
[41]194MenuInit_SetInformationHeightFromAL:
195    mov     [bp+MENUINIT.bInfoLines], al
196    ret
197
[369]198ALIGN MENU_JUMP_ALIGN
[41]199MenuInit_SetTotalItemsFromAX:
200    mov     [bp+MENUINIT.wItems], ax
201    ret
[133]202%endif
[41]203
204
205;--------------------------------------------------------------------
206; MenuInit_SetUserDataFromDSSI
207; MenuInit_GetUserDataToDSSI
208;   Parameters
209;       DS:SI:  User data (MenuInit_SetUserDataFromDSSI)
210;       SS:BP:  Ptr to MENU
211;   Returns:
212;       DS:SI:  User data (MenuInit_GetUserDataToDSSI)
213;   Corrupts registers:
214;       Nothing
215;--------------------------------------------------------------------
[133]216%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[369]217ALIGN MENU_JUMP_ALIGN
[41]218MenuInit_SetUserDataFromDSSI:
219    mov     [bp+MENU.dwUserData], si
220    mov     [bp+MENU.dwUserData+2], ds
221    ret
222
[369]223ALIGN MENU_JUMP_ALIGN
[41]224MenuInit_GetUserDataToDSSI:
225    lds     si, [bp+MENU.dwUserData]
226    ret
[133]227%endif
Note: See TracBrowser for help on using the repository browser.