📄 ui_menu.lst
字号:
85 //show icon
86 for(i=0; i<menu->total; i++)
87 {
88 ResShowPic(menu->pic_inactive[i], menu_pos[i], 0);
89 }
90 //show active, 2 frame movie effect!!
91 ResShowPic(menu->pic_active[menu->active], menu_pos[menu->active]-2, 0);
92
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 30 DEFB 48
\ 018C 45 DEFB 69
\ 018D 46 DEFB 70
\ 018E F701 DEFW ?0038
\ 0190 9E01 DEFW ?0027
\ 0192 C001 DEFW ?0030
\ 0194 E701 DEFW ?0034
\ 0196 F201 DEFW ?0058
\ 0198 EC01 DEFW ?0035
\ 019A 9E01 DEFW ?0027
\ 019C C001 DEFW ?0030
\ 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,?0053
\ 01B2 AC XOR H
\ 01B3 ?0053:
\ 01B3 F21A02 JP P,?0043
\ 01B6 ?0028:
155 {
156 menu->active++;
\ 01B6 FD3402 INC (IY+2)
\ 01B9 2026 JR NZ,?0059
\ 01BB FD3403 INC (IY+3)
157 value_changed = TRUE;
158 need_draw = TRUE;
\ 01BE 1821 JR ?0059
\ 01C0 ?0029:
159 }
160 break;
\ 01C0 ?0030:
161 case AP_KEY_PREV:
162 case AP_KEY_PREV | AP_KEY_HOLD:
163 if(menu->active > 0)
\ 01C0 FD4E02 LD C,(IY+2)
\ 01C3 FD4603 LD B,(IY+3)
\ 01C6 210000 LD HL,0
\ 01C9 F680 OR 128
\ 01CB ED42 SBC HL,BC
\ 01CD E2D101 JP PO,?0055
\ 01D0 AC XOR H
\ 01D1 ?0055:
\ 01D1 F21A02 JP P,?0043
\ 01D4 ?0031:
164 {
165 menu->active--;
\ 01D4 FD6E02 LD L,(IY+2)
\ 01D7 FD6603 LD H,(IY+3)
\ 01DA 2B DEC HL
\ 01DB FD7502 LD (IY+2),L
\ 01DE FD7403 LD (IY+3),H
166 value_changed = TRUE;
167 need_draw = TRUE;
\ 01E1 ?0059:
\ 01E1 DD36FE01 LD (IX-2),1
\ 01E5 181A JR ?0060
\ 01E7 ?0032:
168 }
169 break;
\ 01E7 ?0033:
170 case AP_KEY_PLAY | AP_KEY_UP: //取消退出
171 return RESULT_IGNORE;
172
173 case AP_KEY_MODE | AP_KEY_UP: //确认退出
\ 01E7 ?0034:
174 return 0;
\ 01E7 210000 LD HL,0
175 //break;
176 case AP_MSG_WAIT_TIMEOUT:
\ 01EA 1824 JR ?0048
\ 01EC ?0035:
177 //if(ui_auto_select) return 0;
178
179 //this is recommoned by johnlee, 2004/03/02
180 if(ui_auto_select) return RESULT_IGNORE;
\ 01EC 3A0000 LD A,(ui_auto_select)
\ 01EF B7 OR A
\ 01F0 2828 JR Z,?0043
\ 01F2 ?0036:
\ 01F2 ?0058:
\ 01F2 213400 LD HL,52
181
182 break;
\ 01F5 1819 JR ?0048
\ 01F7 ?0037:
\ 01F7 ?0038:
183 default:
184 key = ap_handle_hotkey(key);
\ 01F7 CD0000 CALL LWRD ap_handle_hotkey
\ 01FA DD77F4 LD (IX-12),A
185 if(key == RESULT_REDRAW) need_draw = TRUE;
\ 01FD FE32 CP 50
\ 01FF 2006 JR NZ,?0040
\ 0201 ?0039:
\ 0201 ?0060:
\ 0201 DD36F501 LD (IX-11),1
\ 0205 1813 JR ?0043
\ 0207 ?0040:
186 else if(key != 0) return key;
\ 0207 AF XOR A
\ 0208 DDB6F4 OR (IX-12)
\ 020B 280D JR Z,?0043
\ 020D ?0042:
\ 020D 6F LD L,A
\ 020E 2600 LD H,0
187 }
\ 0210 ?0048:
\ 0210 DDF9 LD SP,IX
\ 0212 DDE1 POP IX
\ 0214 FDE1 POP IY
\ 0216 C1 POP BC
\ 0217 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 021A ?0043:
\ 021A ?0041:
\ 021A ?0026:
188 ASSERT( menu->active < menu->total);
189
190 //handle callback
191 if(callback != NULL && value_changed)
\ 021A DD7E0A LD A,(IX+10)
\ 021D DDB60B OR (IX+11)
\ 0220 DDB60C OR (IX+12)
\ 0223 CA4500 JP Z,?0003
\ 0226 AF XOR A
\ 0227 DDB6FE OR (IX-2)
\ 022A CA4500 JP Z,?0003
\ 022D ?0047:
\ 022D ?0046:
\ 022D ?0044:
192 {
193 callback(menu->active);
\ 022D FD5E02 LD E,(IY+2)
\ 0230 FD5603 LD D,(IY+3)
\ 0233 DD7E0C LD A,(IX+12)
\ 0236 DD6E0A LD L,(IX+10)
\ 0239 DD660B LD H,(IX+11)
\ 023C CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
194 value_changed = FALSE;
\ 023F DD36FE00 LD (IX-2),0
\ 0243 ?0045:
195 }
196
197 }//while (1)
198 //return 0;
199
200 }
\ 0243 C34500 JP LWRD ?0003
\ 0246 ?0061:
\ 0246 19 ADD HL,DE
\ 0247 5E LD E,(HL)
\ 0248 23 INC HL
\ 0249 56 LD D,(HL)
\ 024A ?0062:
\ 024A 3E00 LD A,BYTE3 ResShowPic
\ 024C 210000 LD HL,LWRD ResShowPic
\ 024F C30000 JP LWRD ?BANK_CALL_DIRECT_L08
201
\ 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: 594
Constant size: 5
Static variable size: Data(0) Iram(0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -