📄 ui_menu.lst
字号:
93 }
94 else //>5, to show arrow
95 {
96 //active item on middle
97 if(menu->active < 5) /* iiaii >*/
98 {
99 //show icon
100 for(i=0; i<5; i++)
101 {
102 ResShowPic(menu->pic_inactive[i], menu_pos[i], 0);
103 }
104 //show active, 2 frame movie effect!!
105 ResShowPic(menu->pic_active[menu->active], menu_pos[menu->active]-2, 0);
106 //show right arrow
107 ResShowPic(CARROWR, POSITION_MENUR, 0);
108 //clear left arrow
109 ResShowPic(CARROWN, POSITION_MENUL, 0);
110 } /* iiaii >*/
111 //active item on right
112 else /* < iiiia >*/
113 {
114 for(i=menu->active-4; i<= menu->active; i++)
115 {
116 ResShowPic(menu->pic_inactive[i], menu_pos[i-(menu->active-4)], 0);
117 }
118
119 //show active, 2 frame movie effect!!
120 ResShowPic(menu->pic_active[menu->active], menu_pos[4]-2, 0);
121
122 //show arrow
123 if(menu->active == menu->total-1)
124 {
125 //clear right arrow
126 ResShowPic(CARROWN, POSITION_MENUR, 0);
127 }
128 else
129 {
130 //show right arrow
131 ResShowPic(CARROWR, POSITION_MENUR, 0);
132 }
133 //show left arrow
134 ResShowPic(CARROWL, POSITION_MENUL, 0);
135 } /* < iiiia >*/
136 }// >5
137 #endif
138 //show text in middle of screen
139 ResShowMultiString(menu->string[menu->active], menu->string_id, 255, 16);
\ 0145 0E10 LD C,16
\ 0147 C5 PUSH BC
\ 0148 0EFF LD C,255
\ 014A C5 PUSH BC
\ 014B FD4E0A LD C,(IY+10)
\ 014E FD6E02 LD L,(IY+2)
\ 0151 FD6603 LD H,(IY+3)
\ 0154 29 ADD HL,HL
\ 0155 FD5E08 LD E,(IY+8)
\ 0158 FD5609 LD D,(IY+9)
\ 015B 19 ADD HL,DE
\ 015C 5E LD E,(HL)
\ 015D 23 INC HL
\ 015E 56 LD D,(HL)
\ 015F 3E00 LD A,BYTE3 ResShowMultiString
\ 0161 210000 LD HL,LWRD ResShowMultiString
\ 0164 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 0167 F1 POP AF
\ 0168 F1 POP AF
140
141 //check auto_update
142 if(!ui_auto_update) UpdateScreen(NULL);
\ 0169 3A0000 LD A,(ui_auto_update)
\ 016C B7 OR A
\ 016D 2005 JR NZ,?0022
\ 016F ?0021:
\ 016F 5F LD E,A
\ 0170 57 LD D,A
\ 0171 CD0000 CALL LWRD UpdateScreen
\ 0174 ?0022:
143
144 need_draw = FALSE;
\ 0174 DD36F500 LD (IX-11),0
\ 0178 ?0024:
145 while (ap_get_message() != 0);
\ 0178 CD0000 CALL LWRD ap_get_message
\ 017B B7 OR A
\ 017C 20FA JR NZ,?0024
\ 017E ?0025:
146 }//need draw
\ 017E ?0023:
\ 017E ?0008:
147
148 //handle message
149 key = ap_get_message();
\ 017E CD0000 CALL LWRD ap_get_message
150 switch( key)
\ 0181 5F LD E,A
\ 0182 CD0000 CALL LWRD ?C_V_SWITCH_L06
\ 0185 0700 DEFW 7
\ 0187 05 DEFB 5
\ 0188 06 DEFB 6
\ 0189 1E DEFB 30
\ 018A 21 DEFB 33
\ 018B 27 DEFB 39
\ 018C 45 DEFB 69
\ 018D 46 DEFB 70
\ 018E 0802 DEFW ?0040
\ 0190 9E01 DEFW ?0027
\ 0192 C901 DEFW ?0031
\ 0194 F801 DEFW ?0036
\ 0196 0302 DEFW ?0060
\ 0198 FD01 DEFW ?0037
\ 019A 9E01 DEFW ?0027
\ 019C C901 DEFW ?0031
\ 019E ?0027:
151 {
152 case AP_KEY_NEXT:
153 case AP_KEY_NEXT | AP_KEY_HOLD:
154 if(menu->active < menu->total-1)
\ 019E FD4E00 LD C,(IY+0)
\ 01A1 FD4601 LD B,(IY+1)
\ 01A4 0B DEC BC
\ 01A5 FD6E02 LD L,(IY+2)
\ 01A8 FD6603 LD H,(IY+3)
\ 01AB F680 OR 128
\ 01AD ED42 SBC HL,BC
\ 01AF E2B301 JP PO,?0055
\ 01B2 AC XOR H
\ 01B3 ?0055:
\ 01B3 F2C001 JP P,?0029
\ 01B6 ?0028:
155 {
156 menu->active++;
\ 01B6 FD3402 INC (IY+2)
\ 01B9 2037 JR NZ,?0034
\ 01BB FD3403 INC (IY+3)
157 }
158 else
\ 01BE 1832 JR ?0034
\ 01C0 ?0029:
159 {
160 menu->active = 0;
\ 01C0 AF XOR A
\ 01C1 FD7702 LD (IY+2),A
\ 01C4 FD7703 LD (IY+3),A
\ 01C7 ?0030:
161 }
162 value_changed = TRUE;
163 need_draw = TRUE;
\ 01C7 1829 JR ?0034
164 break;
\ 01C9 ?0031:
165 case AP_KEY_PREV:
166 case AP_KEY_PREV | AP_KEY_HOLD:
167 if(menu->active > 0)
\ 01C9 FD4E02 LD C,(IY+2)
\ 01CC FD4603 LD B,(IY+3)
\ 01CF 210000 LD HL,0
\ 01D2 F680 OR 128
\ 01D4 ED42 SBC HL,BC
\ 01D6 E2DA01 JP PO,?0057
\ 01D9 AC XOR H
\ 01DA ?0057:
\ 01DA F2E501 JP P,?0033
\ 01DD ?0032:
168 {
169 menu->active--;
\ 01DD FD6E02 LD L,(IY+2)
\ 01E0 FD6603 LD H,(IY+3)
\ 01E3 1806 JR ?0063
170
171 }
172 else
\ 01E5 ?0033:
173 {
174 menu->active = menu->total-1;
\ 01E5 FD6E00 LD L,(IY+0)
\ 01E8 FD6601 LD H,(IY+1)
\ 01EB ?0063:
\ 01EB 2B DEC HL
\ 01EC FD7502 LD (IY+2),L
\ 01EF FD7403 LD (IY+3),H
\ 01F2 ?0034:
175 }
176 value_changed = TRUE;
177 need_draw = TRUE;
\ 01F2 DD36FE01 LD (IX-2),1
\ 01F6 181A JR ?0062
178 break;
\ 01F8 ?0035:
179 case AP_KEY_PLAY | AP_KEY_UP: //取消退出
180 return RESULT_IGNORE;
181
182 case AP_KEY_MODE | AP_KEY_UP: //确认退出
\ 01F8 ?0036:
183 return 0;
\ 01F8 210000 LD HL,0
184 //break;
185 case AP_MSG_WAIT_TIMEOUT:
\ 01FB 1824 JR ?0050
\ 01FD ?0037:
186 //if(ui_auto_select) return 0;
187
188 //this is recommoned by johnlee, 2004/03/02
189 if(ui_auto_select) return RESULT_IGNORE;
\ 01FD 3A0000 LD A,(ui_auto_select)
\ 0200 B7 OR A
\ 0201 2828 JR Z,?0045
\ 0203 ?0038:
\ 0203 ?0060:
\ 0203 213000 LD HL,48
190
191 break;
\ 0206 1819 JR ?0050
\ 0208 ?0039:
\ 0208 ?0040:
192 default:
193 key = ap_handle_hotkey(key);
\ 0208 CD0000 CALL LWRD ap_handle_hotkey
\ 020B DD77F4 LD (IX-12),A
194 if(key == RESULT_REDRAW) need_draw = TRUE;
\ 020E FE2E CP 46
\ 0210 2006 JR NZ,?0042
\ 0212 ?0041:
\ 0212 ?0062:
\ 0212 DD36F501 LD (IX-11),1
\ 0216 1813 JR ?0045
\ 0218 ?0042:
195 else if(key != 0) return key;
\ 0218 AF XOR A
\ 0219 DDB6F4 OR (IX-12)
\ 021C 280D JR Z,?0045
\ 021E ?0044:
\ 021E 6F LD L,A
\ 021F 2600 LD H,0
196 }
\ 0221 ?0050:
\ 0221 DDF9 LD SP,IX
\ 0223 DDE1 POP IX
\ 0225 FDE1 POP IY
\ 0227 C1 POP BC
\ 0228 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 022B ?0045:
\ 022B ?0043:
\ 022B ?0026:
197 ASSERT( menu->active < menu->total);
198
199 //handle callback
200 if(callback != NULL && value_changed)
\ 022B DD7E0A LD A,(IX+10)
\ 022E DDB60B OR (IX+11)
\ 0231 DDB60C OR (IX+12)
\ 0234 CA4500 JP Z,?0003
\ 0237 AF XOR A
\ 0238 DDB6FE OR (IX-2)
\ 023B CA4500 JP Z,?0003
\ 023E ?0049:
\ 023E ?0048:
\ 023E ?0046:
201 {
202 callback(menu->active);
\ 023E FD5E02 LD E,(IY+2)
\ 0241 FD5603 LD D,(IY+3)
\ 0244 DD7E0C LD A,(IX+12)
\ 0247 DD6E0A LD L,(IX+10)
\ 024A DD660B LD H,(IX+11)
\ 024D CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
203 value_changed = FALSE;
\ 0250 DD36FE00 LD (IX-2),0
\ 0254 ?0047:
204 }
205
206 }//while (1)
207 //return 0;
208
209 }
\ 0254 C34500 JP LWRD ?0003
\ 0257 ?0064:
\ 0257 19 ADD HL,DE
\ 0258 5E LD E,(HL)
\ 0259 23 INC HL
\ 025A 56 LD D,(HL)
\ 025B ?0065:
\ 025B 3E00 LD A,BYTE3 ResShowPic
\ 025D 210000 LD HL,LWRD ResShowPic
\ 0260 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
210
\ 0000 RSEG CONST
\ 0000 menu_pos:
\ 0000 13 DEFB 19
\ 0001 26 DEFB '&'
\ 0002 39 DEFB '9'
\ 0003 4C DEFB 'L'
\ 0004 5F DEFB '_'
\ 0005 END
Errors: none
Warnings: none
Code size: 611
Constant size: 5
Static variable size: Data(0) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -