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

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

Changes to Assembly Library:
Completely rewritten line splitting (slower but no need to modify string).
Some changes to string processing functions.
Saved few bytes from CGA detection.

File size: 4.8 KB
Line 
1; File name : MenuInit.asm
2; Project name : Assembly Library
3; Created date : 13.7.2010
4; Last update : 12.10.2010
5; Author : Tomi Tilli
6; Description : Functions for initializing menu system.
7
8; Section containing code
9SECTION .text
10
11;--------------------------------------------------------------------
12; MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX
13; Parameters
14; DX:AX: User specified data
15; BX: Menu event handler
16; Returns:
17; AX: Index of selected item or NO_ITEM_SELECTED
18; Corrupts registers:
19; All except segments
20;--------------------------------------------------------------------
21ALIGN JUMP_ALIGN
22MenuInit_DisplayMenuWithHandlerInBXandUserDataInDXAX:
23 push es
24 push ds
25 LOAD_BDA_SEGMENT_TO ds, cx
26 push WORD [BDA.wVidCurShape]
27 eENTER_STRUCT MENU_size
28
29 mov cx, MENU_size
30 call Memory_ZeroSSBPwithSizeInCX
31 call MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX
32 mov ax, [bp+MENUINIT.wHighlightedItem]
33
34 eLEAVE_STRUCT MENU_size
35 pop ax
36 CALL_DISPLAY_LIBRARY SetCursorShapeFromAX
37 pop ds
38 pop es
39 ret
40
41
42;--------------------------------------------------------------------
43; MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX
44; Parameters
45; DX:AX: User specified data
46; BX: Menu event handler
47; SS:BP: Ptr to MENU
48; Returns:
49; Nothing
50; Corrupts registers:
51; All, except SS:BP
52;--------------------------------------------------------------------
53ALIGN JUMP_ALIGN
54MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX:
55 mov [bp+MENU.fnEventHandler], bx
56 mov [bp+MENU.dwUserData], ax
57 mov [bp+MENU.dwUserData+2], dx
58
59 mov ax, CURSOR_HIDDEN
60 CALL_DISPLAY_LIBRARY SetCursorShapeFromAX
61 call MenuEvent_InitializeMenuinit ; User initialization
62 call MenuTime_RestartSelectionTimeout
63 call MenuInit_RefreshMenuWindow
64 jmp MenuLoop_Enter
65
66
67;--------------------------------------------------------------------
68; MenuInit_RefreshMenuWindow
69; Parameters
70; SS:BP: Ptr to MENU
71; Returns:
72; Nothing
73; Corrupts registers:
74; AX, BX, CX, DX, SI, DI
75;--------------------------------------------------------------------
76ALIGN JUMP_ALIGN
77MenuInit_RefreshMenuWindow:
78 call MenuBorders_RefreshAll ; Draw borders
79 call MenuText_RefreshTitle ; Draw title strings
80 call MenuText_RefreshAllItems ; Draw item strings
81 jmp MenuText_RefreshInformation ; Draw information strings
82
83
84;--------------------------------------------------------------------
85; MenuInit_CloseMenuWindow
86; Parameters
87; SS:BP: Ptr to MENU
88; Returns:
89; Nothing
90; Corrupts registers:
91; Nothing
92;--------------------------------------------------------------------
93ALIGN JUMP_ALIGN
94MenuInit_CloseMenuWindow:
95 or BYTE [bp+MENU.bFlags], FLG_MENU_EXIT
96 ret
97
98
99;--------------------------------------------------------------------
100; MenuInit_HighlightItemFromAX
101; Parameters
102; AX: Item to highlight
103; SS:BP: Ptr to MENU
104; Returns:
105; Nothing
106; Corrupts registers:
107; AX, BX, CX, DX, SI, DI
108;--------------------------------------------------------------------
109ALIGN JUMP_ALIGN
110MenuInit_HighlightItemFromAX:
111 sub ax, [bp+MENUINIT.wHighlightedItem]
112 jmp MenuScrollbars_MoveHighlightedItemByAX
113
114;--------------------------------------------------------------------
115; MenuInit_GetHighlightedItemToAX
116; Parameters
117; SS:BP: Ptr to MENU
118; Returns:
119; AX: Index of highlighted item or NO_ITEM_HIGHLIGHTED
120; Corrupts registers:
121; Nothing
122;--------------------------------------------------------------------
123ALIGN JUMP_ALIGN
124MenuInit_GetHighlightedItemToAX:
125 mov ax, [bp+MENUINIT.wHighlightedItem]
126 ret
127
128
129;--------------------------------------------------------------------
130; MenuInit_SetTitleHeightFromAL
131; MenuInit_SetInformationHeightFromAL
132; MenuInit_SetTotalItemsFromAX
133; Parameters
134; AX/AL: Parameter
135; SS:BP: Ptr to MENU
136; Returns:
137; Nothing
138; Corrupts registers:
139; Nothing
140;--------------------------------------------------------------------
141ALIGN JUMP_ALIGN
142MenuInit_SetTitleHeightFromAL:
143 mov [bp+MENUINIT.bTitleLines], al
144 ret
145
146ALIGN JUMP_ALIGN
147MenuInit_SetInformationHeightFromAL:
148 mov [bp+MENUINIT.bInfoLines], al
149 ret
150
151ALIGN JUMP_ALIGN
152MenuInit_SetTotalItemsFromAX:
153 mov [bp+MENUINIT.wItems], ax
154 ret
155
156
157;--------------------------------------------------------------------
158; MenuInit_SetUserDataFromDSSI
159; MenuInit_GetUserDataToDSSI
160; Parameters
161; DS:SI: User data (MenuInit_SetUserDataFromDSSI)
162; SS:BP: Ptr to MENU
163; Returns:
164; DS:SI: User data (MenuInit_GetUserDataToDSSI)
165; Corrupts registers:
166; Nothing
167;--------------------------------------------------------------------
168ALIGN JUMP_ALIGN
169MenuInit_SetUserDataFromDSSI:
170 mov [bp+MENU.dwUserData], si
171 mov [bp+MENU.dwUserData+2], ds
172 ret
173
174ALIGN JUMP_ALIGN
175MenuInit_GetUserDataToDSSI:
176 lds si, [bp+MENU.dwUserData]
177 ret
Note: See TracBrowser for help on using the repository browser.