source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/MenuText.asm@ 66

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

Changes to Assembly Library:
Drive selection moved to own dialog from File Dialog.
File Dialog now displays loading text for better usability in slow systems.
Moved some functions from Memory.asm to new Registers.asm.

File size: 7.9 KB
RevLine 
[41]1; File name : MenuText.asm
2; Project name : Assembly Library
3; Created date : 21.7.2010
[54]4; Last update : 24.10.2010
[41]5; Author : Tomi Tilli
6; Description : Functions for drawing menu texts by the user.
7
8; Section containing code
9SECTION .text
10
11;--------------------------------------------------------------------
[48]12; MenuText_ClearTitleArea
13; MenuText_ClearInformationArea
14; Parameters
15; SS:BP: Ptr to MENU
16; Returns:
17; Nothing
18; Corrupts registers:
19; AX, BX, CX, DX, SI, DI
20;--------------------------------------------------------------------
21ALIGN JUMP_ALIGN
22MenuText_ClearTitleArea:
23 call PrepareToDrawTitleArea
24 mov cl, [bp+MENUINIT.bTitleLines]
25 jmp SHORT ClearCLlinesOfText
26
27ALIGN JUMP_ALIGN
28MenuText_ClearInformationArea:
[54]29 call MenuText_PrepareToDrawInformationArea
[48]30 mov cl, [bp+MENUINIT.bInfoLines]
31ClearCLlinesOfText:
32 mov al, [bp+MENUINIT.bWidth]
[54]33 sub al, MENU_HORIZONTAL_BORDER_LINES+(MENU_TEXT_COLUMN_OFFSET/2)
[48]34 mul cl
35 xchg cx, ax
36 mov al, ' '
37 CALL_DISPLAY_LIBRARY PrintRepeatedCharacterFromALwithCountInCX
38 ret
39
40
41;--------------------------------------------------------------------
[41]42; MenuText_RefreshTitle
43; MenuText_RefreshInformation
44; Parameters
45; SS:BP: Ptr to MENU
46; Returns:
47; Nothing
48; Corrupts registers:
[48]49; AX, BX, CX, DX, SI, DI
[41]50;--------------------------------------------------------------------
51ALIGN JUMP_ALIGN
52MenuText_RefreshTitle:
53 cmp BYTE [bp+MENUINIT.bTitleLines], 0
54 jz SHORT NothingToRefresh
[48]55 call PrepareToDrawTitleArea
[41]56 jmp MenuEvent_RefreshTitle
57
58ALIGN JUMP_ALIGN
59MenuText_RefreshInformation:
60 cmp BYTE [bp+MENUINIT.bInfoLines], 0
61 jz SHORT NothingToRefresh
[54]62 call MenuText_PrepareToDrawInformationArea
[48]63 jmp MenuEvent_RefreshInformation
[41]64
[48]65;--------------------------------------------------------------------
66; PrepareToDrawTitleArea
67; PrepareToDrawInformationArea
68; Parameters
69; SS:BP: Ptr to MENU
70; Returns:
71; Nothing
72; Corrupts registers:
73; AX, BX, DX, SI, DI
74;--------------------------------------------------------------------
75ALIGN JUMP_ALIGN
76PrepareToDrawTitleArea:
77 mov si, ATTRIBUTE_CHARS.cTitle
78 call MenuLocation_GetTitleTextTopLeftCoordinatesToAX
[52]79 jmp SHORT FinishPreparationsToDrawTitleOrInformationArea
[48]80
81ALIGN JUMP_ALIGN
[54]82MenuText_PrepareToDrawInformationArea:
[41]83 mov si, ATTRIBUTE_CHARS.cInformation
84 call MenuLocation_GetInformationTextTopLeftCoordinatesToAX
[52]85FinishPreparationsToDrawTitleOrInformationArea:
86 mov dx, MenuCharOut_MenuTeletypeOutputWithAutomaticLineChange
87 jmp SHORT AdjustDisplayContextForDrawingTextsAtCoordsInAXwithAttrTypeInSIandCharOutFunctionInDX
[41]88
89
90;--------------------------------------------------------------------
91; MenuText_RefreshAllItems
92; Parameters
93; SS:BP: Ptr to MENU
94; Returns:
95; Nothing
96; Corrupts registers:
97; AX, BX, DX, SI, DI
98;--------------------------------------------------------------------
99ALIGN JUMP_ALIGN
100MenuText_RefreshAllItems:
101 push cx
102
103 call MenuScrollbars_GetActualVisibleItemsOnPageToCX
104 mov ax, [bp+MENU.wFirstVisibleItem]
105ALIGN JUMP_ALIGN
106.ItemRefreshLoop:
107 call MenuText_RefreshItemFromAX
108 inc ax
109 loop .ItemRefreshLoop
110
111 pop cx
112NothingToRefresh:
113 ret
114
115;--------------------------------------------------------------------
116; MenuText_RefreshItemFromAX
117; Parameters
118; AX: Item to refresh
119; SS:BP: Ptr to MENU
120; Returns:
121; Nothing
122; Corrupts registers:
123; BX, DX, SI, DI
124;--------------------------------------------------------------------
125ALIGN JUMP_ALIGN
126MenuText_RefreshItemFromAX:
127 push cx
128 mov cx, ax ; Backup item to CX
129
130 call MenuScrollbars_IsItemInCXonVisiblePage
131 jnc SHORT .InvalidItem
[52]132 call MenuText_AdjustDisplayContextForDrawingItemFromCX
[41]133 call MenuEvent_RefreshItemFromCX
134 call DrawScrollbarIfNecessary
135.InvalidItem:
136 xchg ax, cx ; Restore AX
137 pop cx
138 ret
139
140;--------------------------------------------------------------------
[52]141; MenuText_AdjustDisplayContextForDrawingItemFromCX
[41]142; Parameters
[52]143; CX: Item to refresh
[41]144; SS:BP: Ptr to MENU
145; Returns:
[52]146; Nothing
[41]147; Corrupts registers:
[52]148; AX, BX, DX, SI, DI
[41]149;--------------------------------------------------------------------
150ALIGN JUMP_ALIGN
[52]151MenuText_AdjustDisplayContextForDrawingItemFromCX:
152 mov ax, cx
153 call GetItemTextAttributeTypeToSIforItemInCX
[41]154 call MenuLocation_GetTextCoordinatesToAXforItemInAX
[52]155 mov dx, MenuCharOut_MenuTeletypeOutput
156 ; Fall to AdjustDisplayContextForDrawingTextsAtCoordinatesInAXwithAttributeTypeInSI
157
158;--------------------------------------------------------------------
159; AdjustDisplayContextForDrawingTextsAtCoordsInAXwithAttrTypeInSIandCharOutFunctionInDX
160; Parameters
161; AX: Cursor coordinates to set
162; DX: Character output function
163; SI: Attribute type (from ATTRIBUTE_CHARS)
164; SS:BP: Ptr to MENU
165; Returns:
166; Nothing
167; Corrupts registers:
168; AX, BX, DX, SI, DI
169;--------------------------------------------------------------------
170ALIGN JUMP_ALIGN
171AdjustDisplayContextForDrawingTextsAtCoordsInAXwithAttrTypeInSIandCharOutFunctionInDX:
[41]172 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
173
[52]174 xchg ax, dx
175 mov bl, ATTRIBUTES_ARE_USED
176 CALL_DISPLAY_LIBRARY SetCharOutputFunctionFromAXwithAttribFlagInBL
177
178 call CharOutLineSplitter_PrepareForPrintingTextLines
179 jmp MenuAttribute_SetToDisplayContextFromTypeInSI
180
181
[41]182;--------------------------------------------------------------------
[52]183; GetItemTextAttributeTypeToSIforItemInCX
[41]184; Parameters
185; CX: Item to refresh
186; SS:BP: Ptr to MENU
187; Returns:
188; SI: Text attribute type (ATTRIBUTE_CHARS)
189; Corrupts registers:
190; Nothing
191;--------------------------------------------------------------------
192ALIGN JUMP_ALIGN
[52]193GetItemTextAttributeTypeToSIforItemInCX:
[41]194 mov si, ATTRIBUTE_CHARS.cItem
195 test BYTE [bp+MENU.bFlags], FLG_MENU_NOHIGHLIGHT
196 jnz SHORT .ReturnAttributeTypeInSI
[52]197
198 cmp cx, [bp+MENUINIT.wHighlightedItem]
[41]199 jne SHORT .ReturnAttributeTypeInSI
200 sub si, BYTE ATTRIBUTE_CHARS.cItem - ATTRIBUTE_CHARS.cHighlightedItem
201ALIGN JUMP_ALIGN, ret
202.ReturnAttributeTypeInSI:
203 ret
204
205
206;--------------------------------------------------------------------
207; DrawScrollbarIfNecessary
208; Parameters
209; CX: Item to refresh
210; SS:BP: Ptr to MENU
211; Returns:
212; Nothing
213; Corrupts registers:
[48]214; AX, BX, DX, SI, DI
[41]215;--------------------------------------------------------------------
216ALIGN JUMP_ALIGN
217DrawScrollbarIfNecessary:
218 push cx
219 call .DrawSpacesBeforeScrollbarCharacter
220 call MenuScrollbars_AreScrollbarsNeeded
221 pop cx
222 jc SHORT .DrawScrollbarCharacter
223 ret
224
225;--------------------------------------------------------------------
226; .DrawSpacesBeforeScrollbarCharacter
227; Parameters
228; CX: Item to refresh
229; SS:BP: Ptr to MENU
230; Returns:
231; Nothing
232; Corrupts registers:
233; AX, CX, DX, DI
234;--------------------------------------------------------------------
235ALIGN JUMP_ALIGN
236.DrawSpacesBeforeScrollbarCharacter:
237 CALL_DISPLAY_LIBRARY GetSoftwareCoordinatesToAX
238 xchg dx, ax ; Current coordinates to DX
239 mov ax, cx
240 call MenuLocation_GetScrollbarCoordinatesToAXforItemInAX
241 sub al, dl
242 sub al, MENU_TEXT_COLUMN_OFFSET/2
243
244 eMOVZX cx, al
245 jcxz .NoSpacesNeeded
246 mov al, ' '
247 CALL_DISPLAY_LIBRARY PrintRepeatedCharacterFromALwithCountInCX
248ALIGN JUMP_ALIGN, ret
249.NoSpacesNeeded:
250 ret
251
252;--------------------------------------------------------------------
253; .DrawScrollbarCharacter
254; Parameters
255; CX: Item to refresh
256; SS:BP: Ptr to MENU
257; Returns:
258; Nothing
259; Corrupts registers:
[48]260; AX, BX, DX, SI, DI
[41]261;--------------------------------------------------------------------
262ALIGN JUMP_ALIGN
263.DrawScrollbarCharacter:
264 push cx
265
[48]266 call MenuBorders_AdjustDisplayContextForDrawingBorders
[41]267
268 mov ax, cx
269 call MenuLocation_GetScrollbarCoordinatesToAXforItemInAX
270 CALL_DISPLAY_LIBRARY SetCursorCoordinatesFromAX
271
272 mov di, cx
273 sub di, [bp+MENU.wFirstVisibleItem] ; Item to line
274 call MenuScrollbars_GetScrollCharacterToALForLineInDI
275 CALL_DISPLAY_LIBRARY PrintCharacterFromAL
276
277 pop cx
278 ret
Note: See TracBrowser for help on using the repository browser.