📄 ui_userlist.s01
字号:
LD HL,12
ADD HL,SP
EX DE,HL
LD A,BYTE3 Process_onePage
LD HL,LWRD Process_onePage
CALL LWRD ?BANK_CALL_DIRECT_L08
POP HL
; 179. need_read= FALSE;
LD (IX-7),0
?0050:
; 180. }
; 181. if(need_draw)
XOR A
OR (IX-11)
JR Z,?0052
?0051:
; 182. {
; 183. ui_viewlist(old_active,new_active,list_num,type,0);
LD C,0
PUSH BC
LD L,(IX+4)
PUSH HL
LD L,(IX-8)
PUSH HL
LD C,(IX-12)
LD E,(IX-10)
LD A,BYTE3 ui_viewlist
LD HL,LWRD ui_viewlist
CALL LWRD ?BANK_CALL_DIRECT_L08
POP HL
POP HL
POP HL
; 184. need_draw = FALSE;
LD (IX-11),0
?0052:
; 185. }
; 186. //handle msg
; 187. key = ap_get_message();
CALL LWRD ap_get_message
; 188. old_active = new_active;
LD B,(IX-12)
LD (IX-10),B
; 189. switch(key)
LD E,A
CALL LWRD ?C_V_SWITCH_L06
DEFW 7
DEFB 5
DEFB 6
DEFB 30
DEFB 33
DEFB 48
DEFB 69
DEFB 70
DEFW ?0086
DEFW ?0054
DEFW ?0060
DEFW ?0067
DEFW ?0085
DEFW ?0085
DEFW ?0054
DEFW ?0060
?0054:
; 190. {
; 191.
; 192. case AP_KEY_NEXT:
; 193. case AP_KEY_NEXT | AP_KEY_HOLD:
; 194. if(g_list_count<vTotal-1)
LD HL,65535
LD BC,(vTotal)
ADD HL,BC
LD C,L
LD B,H
PUSH IY
POP HL
AND A
SBC HL,BC
JR NC,?0056
?0055:
; 195. {
; 196. g_list_count++;
; 197. new_active++;
INC (IX-12)
; 198. need_draw = TRUE;
LD (IX-11),1
; 199. if(new_active%MENU_GROUP==0)
LD B,6
LD A,(IX-12)
CALL LWRD ?UC_MOD_L01
OR A
INC IY
JR NZ,?0059
?0057:
; 200. {
; 201. need_read = TRUE;
; 202. new_active =0;
; 203. old_active = 0;
; 204. direct =0;
; 205. memcpy(&CurOffset,disbuff+28+30*(MENU_GROUP-1),2);
LD BC,2
LD HL,10
ADD HL,SP
EX DE,HL
LD HL,disbuff+178
LDIR
; 206. list_num =vTotal-g_list_count;
PUSH IY
POP HL
LD A,(vTotal)
SUB L
LD (IX-8),A
LD (IX-7),1
LD (IX-12),B
LD (IX-10),B
LD (IX-5),B
?0058:
; 207. }
; 208. }
; 209. else //最后一项回到头部
JR ?0059
?0056:
; 210. {
; 211. need_draw = TRUE;
; 212. need_read = TRUE;
; 213. new_active =0;
; 214. old_active = 0;
; 215. direct =0;
; 216. g_list_count = 0;
; 217.
; 218. CurOffset = vFirstOffset;
LD HL,(vFirstOffset)
LD (IX-4),L
LD (IX-3),H
; 219. list_num = vTotal;
LD A,(vTotal)
LD (IX-8),A
LD (IX-11),1
LD (IX-7),1
LD (IX-12),0
LD (IX-10),0
LD (IX-5),0
LD IY,0
?0059:
; 220. }
; 221.
; 222. break;
JP LWRD ?0047
?0060:
; 223. case AP_KEY_PREV:
; 224. case AP_KEY_PREV | AP_KEY_HOLD :
; 225. if(g_list_count>0)
PUSH IY
POP HL
LD A,L
OR H
JR Z,?0062
?0061:
; 226. {
; 227. g_list_count--;
; 228. last_list = 0;
; 229. need_draw = TRUE;
; 230. if(new_active==0)
LD (IX-2),0
LD (IX-11),1
XOR A
OR B
DEC IY
JR NZ,?0064
?0063:
; 231. {
; 232. need_read = TRUE;
; 233. new_active = MENU_GROUP-1;
; 234. old_active = MENU_GROUP-1;
; 235. direct =1;
; 236. memcpy(&CurOffset,disbuff+26,2);
LD C,2
LD HL,10
ADD HL,SP
EX DE,HL
LD HL,disbuff+26
LDIR
; 237. list_num = MENU_GROUP;
LD (IX-7),1
LD (IX-12),5
LD (IX-10),5
LD (IX-5),1
LD (IX-8),6
; 238. break;
JP LWRD ?0047
?0064:
; 239. }
; 240. new_active--;
DEC (IX-12)
; 241. }
; 242. else //从第一项跳到最后一项
JR ?0065
?0062:
; 243. {
; 244. need_draw = TRUE;
; 245. need_read = TRUE;
; 246. new_active = (vTotal-1)%MENU_GROUP; //最后一项的编号
LD HL,65535
LD BC,(vTotal)
ADD HL,BC
EX DE,HL
LD BC,6
CALL LWRD ?US_MOD_L02
LD (IX-12),E
; 247. old_active = new_active;
; 248. last_list = new_active+1; //最后一项的位置
INC E
LD (IX-2),E
; 249. direct =1;
; 250. // vsave_offset = 0xffff;
; 251. list_num = new_active+1;
LD (IX-8),E
; 252. g_list_count = vTotal-1;
LD HL,65535
LD BC,(vTotal)
ADD HL,BC
PUSH HL
POP IY
; 253. CurOffset = vLastOffset; //最后一项的偏移
LD HL,(vLastOffset)
LD (IX-4),L
LD (IX-3),H
LD B,(IX-12)
LD (IX-10),B
LD (IX-11),1
LD (IX-7),1
LD (IX-5),1
?0065:
; 254. }
; 255. break;
JP LWRD ?0047
?0066:
; 256. case AP_KEY_PLAY | AP_KEY_UP:
; 257.
; 258. output8(0x27,00);
; 259. FS_FClose(fpview);
; 260. output8(0x27,IO27);
; 261. return RESULT_IGNORE;
; 262. case AP_KEY_MODE | AP_KEY_UP:
?0067:
; 263.
; 264. if(type==0)
XOR A
OR (IX+4)
JR NZ,?0069
?0068:
; 265. {
; 266. output8(0x27,00);
; 267. FS_FClose(fpview);
CALL LWRD ?0107
; 268. output8(0x27,IO27);
; 269. location->PL_Cur = g_list_count+1;
LD HL,41
LD C,(IX+2)
LD B,(IX+3)
ADD HL,BC
PUSH IY
POP BC
INC BC
LD (HL),C
INC HL
LD (HL),B
; 270. return RESULT_NULL;
JP LWRD ?0080
; 271. }
?0069:
; 272. else
; 273. {
; 274. output8(0x27,00);
; 275. FS_FClose(fpview);
CALL LWRD ?0108
; 276. output8(0x27,IO27);
; 277. if(new_active>0) //从双向链表被删除项的前驱的直接后继找当前的offset
XOR A
OR B
JR Z,?0071
?0070:
; 278. {
; 279. memcpy(&CurOffset,disbuff+(new_active-1)*30+28,2);
LD BC,2
LD HL,10
ADD HL,SP
PUSH HL
LD HL,disbuff+28
LD C,A
DEC BC
JR ?0101
; 280. }
; 281. // memcpy(&CurOffset,disbuff+26,2);
; 282. else //active = 0;从双向链表被删除项的后继的直接前驱找当前的offset
?0071:
; 283. {
; 284. if(g_list_count == vTotal-1) //最后一项
LD HL,65535
LD BC,(vTotal)
ADD HL,BC
PUSH IY
POP BC
AND A
SBC HL,BC
JR NZ,?0074
?0073:
; 285. CurOffset = vLastOffset; //最后一项的偏移
LD HL,(vLastOffset)
LD (IX-4),L
LD (IX-3),H
; 286. else
JR ?0075
?0074:
; 287. memcpy(&CurOffset,disbuff+(new_active+1)*30+26,2);
LD BC,2
LD HL,10
ADD HL,SP
PUSH HL
LD HL,disbuff+26
LD C,A
INC BC
?0101:
LD DE,30
CALL LWRD ?S_MUL_L02
ADD HL,DE
POP DE
LD BC,2
LDIR
?0075:
?0072:
; 288. }
; 289. user_pl_del(CurOffset);
LD E,(IX-4)
LD D,(IX-3)
LD A,BYTE3 user_pl_del
LD HL,LWRD user_pl_del
CALL LWRD ?BANK_CALL_DIRECT_L08
; 290.
; 291. if(PlaylistCount==0)
LD HL,(PlaylistCount)
LD A,L
OR H
JR NZ,?0077
?0076:
; 292. {
; 293. FirstOffset = 0;
LD L,A
LD H,A
LD (FirstOffset),HL
; 294. LastOffset =0;
LD (LastOffset),HL
; 295. WrHead_PL(1); //删除所有文件,将所有信息clear zhangxs add 2007.05.11
LD E,1
JR ?0102
; 296. }
; 297. else
?0077:
; 298. WrHead_PL(0);
LD E,0
?0102:
LD A,BYTE3 WrHead_PL
LD HL,LWRD WrHead_PL
CALL LWRD ?BANK_CALL_DIRECT_L08
?0078:
; 299. /*
; 300. if(location->PL_Cur>(g_list_count+1)) //删除的是当前曲且为最后一曲,取下一曲为列表第一曲
; 301. {
; 302. location->PL_Cur = 1; //
; 303. return RESULT_USERLIST; //需要重新选择列表文件
; 304. }
; 305. */
; 306. if(g_music_vars.fselmod == FSEL_TYPE_USERPL) //当前为收藏夹模式要重新选择
LD A,(g_music_vars+81)
DEC A
DEC A
JR NZ,?0080
?0079:
; 307. {
; 308. // if(location->PL_Cur == (g_list_count+1)) //删除的是当前曲,取下一曲
; 309. // {
; 310. // location->PL_Cur ++;
; 311. // if((g_list_count+1) == vTotal)
; 312. // location->PL_Cur =1; // 删除的是当前曲且为最后一曲,取下一曲为列表第一曲
; 313. // else
; 314. // location->PL_Cur++; //取下一曲
; 315. if(location->PL_Cur>=(g_list_count+1)) //删除为当前曲或者
PUSH IY
POP BC
INC BC
LD HL,41
LD E,(IX+2)
LD D,(IX+3)
ADD HL,DE
LD D,(HL)
INC HL
LD H,(HL)
LD L,D
AND A
SBC HL,BC
JR C,?0084
?0081:
; 316. {
; 317. location->PL_Cur--;
LD HL,41
LD C,E
LD B,(IX+3)
ADD HL,BC
LD E,(HL)
INC HL
LD D,(HL)
DEC DE
LD (HL),D
DEC HL
LD (HL),E
; 318. if(location->PL_Cur==0)
LD HL,41
ADD HL,BC
LD A,(HL)
INC HL
OR (HL)
JR NZ,?0084
?0083:
; 319. location->PL_Cur = 1;
LD HL,41
ADD HL,BC
LD (HL),1
INC HL
LD (HL),A
?0084:
?0082:
; 320. }
; 321. //return RESULT_USERLIST;
; 322. // }
; 323. return RESULT_USERLIST;
LD HL,108
; 324. } //非收藏夹模式不重新选择文件
JR ?0094
?0080:
; 325. else
; 326. return NULL;
LD HL,0
; 327. }
JR ?0094
; 328. break;
?0085:
; 329. // case AP_KEY_MODE | AP_KEY_LONG: //修改为返回main ap
; 330. // break;
; 331.
; 332. case AP_MSG_WAIT_TIMEOUT:
; 333. output8(0x27,00);
; 334. FS_FClose(fpview);
CALL LWRD ?0108
; 335. output8(0x27,IO27);
; 336. return RESULT_IGNORE;
?0104:
LD HL,52
; 337. break;
JR ?0094
?0086:
; 338.
; 339. default:
; 340. key = ap_handle_hotkey(key);
CALL LWRD ap_handle_hotkey
LD (IX-6),A
; 341. if(key == RESULT_REDRAW)
CP 50
JR NZ,?0088
?0087:
; 342. need_draw = TRUE;
LD (IX-11),1
; 343. else
JR ?0091
?0088:
; 344. if(key != 0)
XOR A
OR (IX-6)
JR Z,?0091
?0090:
; 345. {
; 346. output8(0x27,00);
; 347. FS_FClose(fpview);
CALL LWRD ?0108
; 348. output8(0x27,IO27);
; 349. return key;
LD L,(IX-6)
LD H,0
; 350. }
JR ?0094
?0091:
?0089:
; 351. if(ScrollFlag)
LD A,(ScrollFlag)
OR A
JR Z,?0093
?0092:
; 352. ui_viewlist(old_active,new_active,list_num,type,1);
LD C,1
PUSH BC
LD L,(IX+4)
PUSH HL
LD L,(IX-8)
PUSH HL
LD C,B
LD E,B
LD A,BYTE3 ui_viewlist
LD HL,LWRD ui_viewlist
CALL LWRD ?BANK_CALL_DIRECT_L08
POP HL
POP HL
POP HL
?0093:
?0053:
JP LWRD ?0047
; 353. }//switch
; 354. } //while
; 355. output8(0x27,00);
; 356. FS_FClose(fpview);
; 357. output8(0x27,IO27);
; 358. return RESULT_IGNORE;
; 359. }
?0094:
POP IY
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0108:
XOR A
?0107:
OUT (39),A
LD DE,(fpview)
CALL LWRD FS_FClose
LD A,(IX-9)
OUT (39),A
RET
; 360.
RSEG CSTR
?0002:
DEFB ':'
DEFB 0
RSEG APD_UI_PLAYLIST
vbuff:
DEFS 512
disbuff:
DEFS 180
vfilename:
DEFS 12
fpview:
DEFS 2
vFirstOffset:
DEFS 2
vLastOffset:
DEFS 2
vTotal:
DEFS 2
vsave_offset:
DEFS 2
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -