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

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

Space optimization, added option to inline offsets for MENUEVENT structure, for situations (such as the XTIDE bios) where only one menu is needed. Ifdef'd change (set in main.asm) so either method can be used.

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