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

Last change on this file since 130 was 129, checked in by Tomi Tilli, 14 years ago

Changes to Assembly Library:

  • MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX now properly returns highlighted item in AX.
File size: 4.7 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 call MenuInit_RefreshMenuWindow
60 jmp MenuLoop_Enter
61
62
63;--------------------------------------------------------------------
64; MenuInit_RefreshMenuWindow
65; Parameters
66; SS:BP: Ptr to MENU
67; Returns:
68; Nothing
69; Corrupts registers:
70; AX, BX, CX, DX, SI, DI
71;--------------------------------------------------------------------
72ALIGN JUMP_ALIGN
73MenuInit_RefreshMenuWindow:
74 call MenuBorders_RefreshAll ; Draw borders
75 call MenuText_RefreshTitle ; Draw title strings
76 call MenuText_RefreshAllItems ; Draw item strings
77 jmp MenuText_RefreshInformation ; Draw information strings
78
79
80;--------------------------------------------------------------------
81; MenuInit_CloseMenuWindow
82; Parameters
83; SS:BP: Ptr to MENU
84; Returns:
85; Nothing
86; Corrupts registers:
87; Nothing
88;--------------------------------------------------------------------
89ALIGN JUMP_ALIGN
90MenuInit_CloseMenuWindow:
91 or BYTE [bp+MENU.bFlags], FLG_MENU_EXIT
92 ret
93
94
95;--------------------------------------------------------------------
96; MenuInit_HighlightItemFromAX
97; Parameters
98; AX: Item to highlight
99; SS:BP: Ptr to MENU
100; Returns:
101; Nothing
102; Corrupts registers:
103; AX, BX, CX, DX, SI, DI
104;--------------------------------------------------------------------
105ALIGN JUMP_ALIGN
106MenuInit_HighlightItemFromAX:
107 sub ax, [bp+MENUINIT.wHighlightedItem]
108 jmp MenuScrollbars_MoveHighlightedItemByAX
109
110;--------------------------------------------------------------------
111; MenuInit_GetHighlightedItemToAX
112; Parameters
113; SS:BP: Ptr to MENU
114; Returns:
115; AX: Index of highlighted item or NO_ITEM_HIGHLIGHTED
116; Corrupts registers:
117; Nothing
118;--------------------------------------------------------------------
119ALIGN JUMP_ALIGN
120MenuInit_GetHighlightedItemToAX:
121 mov ax, [bp+MENUINIT.wHighlightedItem]
122 ret
123
124
125;--------------------------------------------------------------------
126; MenuInit_SetTitleHeightFromAL
127; MenuInit_SetInformationHeightFromAL
128; MenuInit_SetTotalItemsFromAX
129; Parameters
130; AX/AL: Parameter
131; SS:BP: Ptr to MENU
132; Returns:
133; Nothing
134; Corrupts registers:
135; Nothing
136;--------------------------------------------------------------------
137ALIGN JUMP_ALIGN
138MenuInit_SetTitleHeightFromAL:
139 mov [bp+MENUINIT.bTitleLines], al
140 ret
141
142ALIGN JUMP_ALIGN
143MenuInit_SetInformationHeightFromAL:
144 mov [bp+MENUINIT.bInfoLines], al
145 ret
146
147ALIGN JUMP_ALIGN
148MenuInit_SetTotalItemsFromAX:
149 mov [bp+MENUINIT.wItems], ax
150 ret
151
152
153;--------------------------------------------------------------------
154; MenuInit_SetUserDataFromDSSI
155; MenuInit_GetUserDataToDSSI
156; Parameters
157; DS:SI: User data (MenuInit_SetUserDataFromDSSI)
158; SS:BP: Ptr to MENU
159; Returns:
160; DS:SI: User data (MenuInit_GetUserDataToDSSI)
161; Corrupts registers:
162; Nothing
163;--------------------------------------------------------------------
164ALIGN JUMP_ALIGN
165MenuInit_SetUserDataFromDSSI:
166 mov [bp+MENU.dwUserData], si
167 mov [bp+MENU.dwUserData+2], ds
168 ret
169
170ALIGN JUMP_ALIGN
171MenuInit_GetUserDataToDSSI:
172 lds si, [bp+MENU.dwUserData]
173 ret
Note: See TracBrowser for help on using the repository browser.