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

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

Changes to Assembly Library:
Added functions to clear Menu Title and Information areas.
Implemented automatic line change when writing Menu Title and Information areas.
CGA snow related functions have been moved to CgaSnow.asm.
Keyboard input functions no longer produce beep for backspace.

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