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

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

Spaces can now be generated before format specifier when printing formatted string.
Background character and attribute can now be easily specified before compiling.

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