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

Last change on this file since 369 was 369, checked in by gregli@…, 12 years ago

Removed align directives for initalization code and added define for align in boot-time calls to the assembly library (defaulting to 1), resulting in a significant savings for the AT and 386 builds. Fixed a bug with switch command line handling in the serial server. Put in CR characters in licesnse.txt, so that it properly displays on Windows. In the configurator, added default values for user supplied CHS and LBA values, defaulting to values within range when those features are enabled. Updated the copyright message in the configurator as the literal word Copyright is important.

File size: 5.5 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 MENU_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    CALL_DISPLAY_LIBRARY SynchronizeDisplayContextToHardware
34    xchg    ax, dx          ; Return highlighted item in AX
35    pop     ds
36    pop     es
37    ret
38
39
40;--------------------------------------------------------------------
41; MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX
42;   Parameters
43;       DX:AX:  User specified data
44;       BX:     Menu event handler
45;       SS:BP:  Ptr to MENU
46;   Returns:
47;       Nothing
48;   Corrupts registers:
49;       All, except SS:BP
50;--------------------------------------------------------------------
51ALIGN MENU_JUMP_ALIGN
52MenuInit_EnterMenuWithHandlerInBXandUserDataInDXAX:
53    mov     [bp+MENU.fnEventHandler], bx
54    mov     [bp+MENU.dwUserData], ax
55    mov     [bp+MENU.dwUserData+2], dx
56
57    mov     ax, CURSOR_HIDDEN
58    CALL_DISPLAY_LIBRARY SetCursorShapeFromAX
59    call    MenuEvent_InitializeMenuinit    ; User initialization
60%ifndef USE_186
61    call    MenuInit_RefreshMenuWindow
62    jmp     MenuLoop_Enter
63%else
64    push    MenuLoop_Enter
65    ; Fall to MenuInit_RefreshMenuWindow
66%endif
67
68
69;--------------------------------------------------------------------
70; MenuInit_RefreshMenuWindow
71;   Parameters
72;       SS:BP:  Ptr to MENU
73;   Returns:
74;       Nothing
75;   Corrupts registers:
76;       AX, BX, CX, DX, SI, DI
77;--------------------------------------------------------------------
78ALIGN MENU_JUMP_ALIGN
79MenuInit_RefreshMenuWindow:
80    call    MenuBorders_RefreshAll          ; Draw borders
81    call    MenuText_RefreshTitle           ; Draw title strings
82    call    MenuText_RefreshAllItems        ; Draw item strings
83    jmp     MenuText_RefreshInformation     ; Draw information strings
84
85
86;--------------------------------------------------------------------
87; MenuInit_CloseMenuIfExitEventAllows
88;   Parameters
89;       SS:BP:  Ptr to MENU
90;   Returns:
91;       Nothing
92;   Corrupts registers:
93;       AX, BX, DX
94;--------------------------------------------------------------------
95%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
96ALIGN MENU_JUMP_ALIGN
97MenuInit_CloseMenuIfExitEventAllows:
98    call    MenuEvent_ExitMenu
99    jc      SHORT MenuInit_CloseMenuWindow
100    ret
101%endif
102
103
104;--------------------------------------------------------------------
105; MenuInit_CloseMenuWindow
106;   Parameters
107;       SS:BP:  Ptr to MENU
108;   Returns:
109;       Nothing
110;   Corrupts registers:
111;       Nothing
112;--------------------------------------------------------------------
113ALIGN MENU_JUMP_ALIGN
114MenuInit_CloseMenuWindow:
115    or      BYTE [bp+MENU.bFlags], FLG_MENU_EXIT
116    ret
117
118
119;--------------------------------------------------------------------
120; MenuInit_HighlightItemFromAX
121;   Parameters
122;       AX:     Item to highlight
123;       SS:BP:  Ptr to MENU
124;   Returns:
125;       Nothing
126;   Corrupts registers:
127;       AX, BX, CX, DX, SI, DI
128;--------------------------------------------------------------------
129ALIGN MENU_JUMP_ALIGN
130MenuInit_HighlightItemFromAX:
131    sub     ax, [bp+MENUINIT.wHighlightedItem]
132    jmp     MenuScrollbars_MoveHighlightedItemByAX
133
134;--------------------------------------------------------------------
135; MenuInit_GetHighlightedItemToAX
136;   Parameters
137;       SS:BP:  Ptr to MENU
138;   Returns:
139;       AX:     Index of highlighted item or NO_ITEM_HIGHLIGHTED
140;   Corrupts registers:
141;       Nothing
142;--------------------------------------------------------------------
143%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
144ALIGN MENU_JUMP_ALIGN
145MenuInit_GetHighlightedItemToAX:
146    mov     ax, [bp+MENUINIT.wHighlightedItem]
147    ret
148%endif
149
150
151;--------------------------------------------------------------------
152; MenuInit_SetTitleHeightFromAL
153; MenuInit_SetInformationHeightFromAL
154; MenuInit_SetTotalItemsFromAX
155;   Parameters
156;       AX/AL:  Parameter
157;       SS:BP:      Ptr to MENU
158;   Returns:
159;       Nothing
160;   Corrupts registers:
161;       Nothing
162;--------------------------------------------------------------------
163%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
164ALIGN MENU_JUMP_ALIGN
165MenuInit_SetTitleHeightFromAL:
166    mov     [bp+MENUINIT.bTitleLines], al
167    ret
168
169ALIGN MENU_JUMP_ALIGN
170MenuInit_SetInformationHeightFromAL:
171    mov     [bp+MENUINIT.bInfoLines], al
172    ret
173
174ALIGN MENU_JUMP_ALIGN
175MenuInit_SetTotalItemsFromAX:
176    mov     [bp+MENUINIT.wItems], ax
177    ret
178%endif
179
180
181;--------------------------------------------------------------------
182; MenuInit_SetUserDataFromDSSI
183; MenuInit_GetUserDataToDSSI
184;   Parameters
185;       DS:SI:  User data (MenuInit_SetUserDataFromDSSI)
186;       SS:BP:  Ptr to MENU
187;   Returns:
188;       DS:SI:  User data (MenuInit_GetUserDataToDSSI)
189;   Corrupts registers:
190;       Nothing
191;--------------------------------------------------------------------
192%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
193ALIGN MENU_JUMP_ALIGN
194MenuInit_SetUserDataFromDSSI:
195    mov     [bp+MENU.dwUserData], si
196    mov     [bp+MENU.dwUserData+2], ds
197    ret
198
199ALIGN MENU_JUMP_ALIGN
200MenuInit_GetUserDataToDSSI:
201    lds     si, [bp+MENU.dwUserData]
202    ret
203%endif
Note: See TracBrowser for help on using the repository browser.