⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ui_userlist.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
📖 第 1 页 / 共 2 页
字号:
	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 + -