source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/MenuEvent.asm@ 253

Last change on this file since 253 was 189, checked in by gregli@…, 13 years ago

Additional space optimizations, including making IdleProcessing an option in MENUEVENT. Note the fall-through from one file to another, but that there are assembler checks to ensure the proper linkage is maintained. First version of StringsCompress.pl, a perl script to make StringsCompressed.asm from Strings.asm.

File size: 5.0 KB
Line 
1; Project name : Assembly Library
2; Description : Functions for initializing menu system.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
8; MenuEvent_InitializeMenuinit
9; Parameters
10; SS:BP: Ptr to MENU
11; Returns:
12; DS:SI: Ptr to MENU with MENUINIT initialized from user handler
13; CF: Set if event processed
14; Cleared if event not processed
15; Corrupts registers:
16; AX, BX, DX
17;--------------------------------------------------------------------
18ALIGN JUMP_ALIGN
19MenuEvent_InitializeMenuinit:
20 push ss
21 pop ds
22 mov si, bp
23 mov bl, MENUEVENT_InitializeMenuinitFromDSSI
24 jmp SHORT MenuEvent_SendFromBX
25
26
27;--------------------------------------------------------------------
28; MenuEvent_ExitMenu
29; Parameters
30; SS:BP: Ptr to MENU
31; Returns:
32; CF: Set to exit from menu
33; Cleared to cancel exit
34; Corrupts registers:
35; AX, BX, DX
36;--------------------------------------------------------------------
37ALIGN JUMP_ALIGN
38MenuEvent_ExitMenu:
39 mov bl, MENUEVENT_ExitMenu
40 jmp SHORT MenuEvent_SendFromBX
41
42
43%ifdef MENUEVENT_IDLEPROCESSING_ENABLE
44;--------------------------------------------------------------------
45; MenuEvent_IdleProcessing
46; Parameters
47; SS:BP: Ptr to MENU
48; Returns:
49; CF: Set if event processed
50; Cleared if event not processed
51; Corrupts registers:
52; AX, BX, DX
53;--------------------------------------------------------------------
54ALIGN JUMP_ALIGN
55MenuEvent_IdleProcessing:
56 mov bl, MENUEVENT_IdleProcessing
57 jmp SHORT MenuEvent_SendFromBX
58%endif
59
60;--------------------------------------------------------------------
61; MenuEvent_RefreshTitle
62; MenuEvent_RefreshInformation
63; Parameters
64; SS:BP: Ptr to MENU
65; Cursor will be positioned to beginning of window
66; Returns:
67; CF: Set if event processed
68; Cleared if event not processed
69; Corrupts registers:
70; AX, CX, BX, DX
71;--------------------------------------------------------------------
72ALIGN JUMP_ALIGN
73MenuEvent_RefreshTitle:
74 mov bl, MENUEVENT_RefreshTitle
75 SKIP2B cx ; mov cx, <next instruction>
76
77MenuEvent_RefreshInformation:
78 mov bl, MENUEVENT_RefreshInformation
79 mov cx, [bp+MENUINIT.wHighlightedItem]
80 jmp SHORT MenuEvent_SendFromBX
81
82
83;--------------------------------------------------------------------
84; MenuEvent_RefreshItemFromCX
85; Parameters
86; CX: Index of item to refresh
87; SS:BP: Ptr to MENU
88; Cursor has been positioned to the beginning of item line
89; Returns:
90; CF: Set if event processed
91; Cleared if event not processed
92; Corrupts registers:
93; AX, BX, DX
94;--------------------------------------------------------------------
95ALIGN JUMP_ALIGN
96MenuEvent_RefreshItemFromCX:
97 mov bl, MENUEVENT_RefreshItemFromCX
98 jmp SHORT MenuEvent_SendFromBX
99
100
101;--------------------------------------------------------------------
102; MenuEvent_HighlightItemFromCX
103; Parameters
104; CX: Index of item to highlight
105; SS:BP: Ptr to MENU
106; Returns:
107; Nothing
108; Corrupts registers:
109; AX, BX, DX, SI, DI
110;--------------------------------------------------------------------
111ALIGN JUMP_ALIGN
112MenuEvent_HighlightItemFromCX:
113 mov dx, cx
114 xchg dx, [bp+MENUINIT.wHighlightedItem]
115 push dx
116
117 mov bl, MENUEVENT_ItemHighlightedFromCX
118 call MenuEvent_SendFromBX
119
120 pop ax
121 call MenuText_RefreshItemFromAX
122 mov ax, [bp+MENUINIT.wHighlightedItem]
123 jmp MenuText_RefreshItemFromAX
124
125
126;--------------------------------------------------------------------
127; MenuEvent_KeyStrokeInAX
128; Parameters
129; AL: ASCII character for the key
130; AH: Keyboard library scan code for the key
131; SS:BP: Ptr to MENU
132; Returns:
133; CF: Set if event processed
134; Cleared if event not processed
135; Corrupts registers:
136; AX, BX, DX
137;--------------------------------------------------------------------
138ALIGN JUMP_ALIGN
139MenuEvent_KeyStrokeInAX:
140 mov bl, MENUEVENT_KeyStrokeInAX
141 SKIP2B dx ; mov dx, <next instruction>
142
143
144;--------------------------------------------------------------------
145; MenuEvent_ItemSelectedFromCX
146; Parameters
147; CX: Index of selected item
148; SS:BP: Ptr to MENU
149; Returns:
150; CF: Set if event processed
151; Cleared if event not processed
152; Corrupts registers:
153; AX, BX, DX
154;--------------------------------------------------------------------
155MenuEvent_ItemSelectedFromCX:
156 mov bl, MENUEVENT_ItemSelectedFromCX
157 ; Fall to MenuEvent_SendFromBX
158
159
160;--------------------------------------------------------------------
161; MenuEvent_SendFromBX
162; Parameters
163; BL: Menu event to send
164; SS:BP: Ptr to MENU
165; Other registers: Event specific parameters
166; Returns:
167; AX, DX: Event specific return values
168; CF: Set if event processed
169; Cleared if event not processed
170; Corrupts registers:
171; BX
172;--------------------------------------------------------------------
173ALIGN JUMP_ALIGN
174MenuEvent_SendFromBX:
175 push es
176 push ds
177 push di
178 push si
179 push cx
180 xor bh, bh
181 call [bp+MENU.fnEventHandler]
182 pop cx
183 pop si
184 pop di
185 pop ds
186 pop es
187 ret
Note: See TracBrowser for help on using the repository browser.