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

📄 music_list_menu.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
📖 第 1 页 / 共 2 页
字号:
	NAME	music_list_menu(17)
	RSEG	AP_MUSIC_LIST(0)
	RSEG	APC_MUSIC_LIST(0)
	RSEG	APD_MUSIC_LIST(0)
	PUBLIC	ActiveSeekNum
	PUBLIC	BLANKSTRING
	PUBLIC	BlankInfor
	EXTERN	FS_FClose
	EXTERN	FS_FRead
	EXTERN	FS_FSeek
	PUBLIC	HeadIDDisplay
	PUBLIC	LastSeekNum
	EXTERN	PutS
	PUBLIC	ReadListBuffer
	PUBLIC	ReadOneSectorData
	EXTERN	ResShowMultiString
	EXTERN	ResShowPic
	EXTERN	ScrollFlag
	EXTERN	ScrollString
	EXTERN	SetBackgdColor
	EXTERN	SetTextOutMode
	EXTERN	SetTextPos
	PUBLIC	active_location
	EXTERN	ap_get_message
	EXTERN	ap_handle_hotkey
	EXTERN	g_comval
	EXTERN	g_file_list_total
	EXTERN	g_music_vars
	EXTERN	list_fp
	EXTERN	menu_pos_list
	EXTERN	menulist_bck_pic
	EXTERN	region_scroll
	EXTERN	scroll_buf
	PUBLIC	show_active_musiclist
	PUBLIC	show_music_list
	PUBLIC	ui_music_list
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?US_DIV_L02
	EXTERN	?US_MOD_L02
	EXTERN	?S_MUL_L02
	EXTERN	?C_V_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_LEAVE_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?ENT_AUTO_DIRECT_L09
	EXTERN	?STRLEN_L11
	RSEG	AP_MUSIC_LIST
show_active_musiclist:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*        This program demostrates how to build an AP
; 5.	*
; 6.	*        (c) Copyright Actions Co,Ld.
; 7.	*
; 8.	*  $Id: music_list_menu.c,v 1.1.1.1 2007/03/02 16:31:22 mars Exp $
; 9.	*******************************************************************************
; 10.	*/                                                
; 11.	#include "ap_music.h"     
; 12.	#define   ListDisplayNum  6          //一屏最多显示的列表数目
; 13.	#define   OneSectorListNum    7      //每个扇区存储的列表数目  
; 14.	#define   ListPerByte         71     //每个列表项总的字节数   
; 15.	#define   OneLocationBYTE    41      //sizeof(location)      
; 16.	#define Color_BULE_Scroll_def  0x0000001f//深蓝 
; 17.	extern  handle   list_fp;                          
; 18.	extern  char     ScrollFlag;   //滚动标志位   
; 19.	extern char      scroll_buf[];     //滚屏buffer区 
; 20.	extern region_t region_scroll;  //滚屏区域
; 21.	extern const char menu_pos_list[];
; 22.	extern const WORD menulist_bck_pic[];     
; 23.	 
; 24.	#pragma memory=constseg(APC_MUSIC_LIST) 
; 25.	const char BLANKSTRING[4] = "[]--";      
; 26.	#pragma memory=dataseg(APD_MUSIC_LIST)  
; 27.	char  ReadListBuffer[512]; 
; 28.	file_location_t active_location;   //当前选择列表文件的路径
; 29.	char  BlankInfor[16];  
; 30.	unsigned int  ActiveSeekNum;               //
; 31.	unsigned int  LastSeekNum;     
; 32.	WORD  HeadIDDisplay;                      //列表类型显示
; 33.	#pragma memory=default
; 34.	
; 35.	
; 36.	#pragma codeseg(AP_MUSIC_LIST)
; 37.	void ReadOneSectorData(unsigned int currentlist);
; 38.	void show_active_musiclist(unsigned int active_one)
; 39.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65534
; 40.	    BYTE buf_num = active_one% OneSectorListNum;   
	LD	BC,7
	LD	E,(IX+2)
	LD	D,(IX+3)
	CALL	LWRD ?US_MOD_L02
	LD	(IX-1),E
; 41.	    BYTE pos_num = active_one% ListDisplayNum;   
	DEC	BC
	LD	E,(IX+2)
	LD	D,(IX+3)
	CALL	LWRD ?US_MOD_L02
	LD	(IX-2),E
; 42.	    if(LastSeekNum!= ActiveSeekNum)     //当前选中列表文件数据不在buffer中
	LD	HL,(ActiveSeekNum)
	LD	BC,(LastSeekNum)
	AND	A
	SBC	HL,BC
	JR	Z,?0003
?0002:
; 43.	      ReadOneSectorData(active_one);
	LD	E,(IX+2)
	LD	D,(IX+3)
	CALL	LWRD ?0078
?0003:
; 44.	    memcpy(&active_location,&ReadListBuffer[buf_num*ListPerByte+30],OneLocationBYTE); //将当前active的路径保存起来    
	LD	BC,41
	LD	HL,ReadListBuffer+30
	LD	C,(IX-1)
	LD	DE,71
	CALL	LWRD ?S_MUL_L02
	ADD	HL,DE
	LD	DE,active_location
	LD	C,41
	LDIR
; 45.	    ResShowPic(MFILE, explorer_pic_x_def, menu_pos_list[pos_num]-1);
	LD	C,(IX-2)
	LD	HL,menu_pos_list
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,255
	LD	C,A
	PUSH	BC
	CALL	LWRD ?0087
	POP	AF
; 46.	    ResShowPic(FILEBCK, explorer_str_x_def-2, menu_pos_list[pos_num]-4);
	LD	C,(IX-2)
	LD	B,0
	LD	HL,menu_pos_list
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,252
	LD	C,A
	PUSH	BC
	LD	C,30
	LD	DE,44
	CALL	LWRD ?0088
	POP	AF
; 47.	    ResShowPic(DHTHK,194,menu_pos_list[pos_num]+6); 
	LD	C,(IX-2)
	LD	B,0
	LD	HL,menu_pos_list
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,6
	LD	C,A
	PUSH	BC
	LD	C,194
	LD	DE,39
	CALL	LWRD ?0088
	POP	AF
; 48.	    if(ReadListBuffer[buf_num*ListPerByte]!=0)
	LD	C,(IX-1)
	CALL	LWRD ?0085
	JR	Z,?0005
?0004:
; 49.	    {                         
; 50.	         memcpy(scroll_buf,&ReadListBuffer[buf_num*ListPerByte],30);        //取要滚动的数据到buf   
	LD	DE,71
	CALL	LWRD ?S_MUL_L02
	LD	HL,ReadListBuffer
	ADD	HL,DE
	LD	DE,scroll_buf
	LD	C,30
	LDIR
; 51.	         region_scroll.y = menu_pos_list[pos_num]-2;                 //滚动纵坐标的位置             
	LD	C,(IX-2)
	LD	HL,menu_pos_list
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,254
	LD	(region_scroll+1),A
; 52.	         ScrollString(scroll_buf, TRUE,g_comval.langid,&region_scroll);   //滚动第一屏  
	LD	HL,region_scroll
	PUSH	HL
	LD	HL,g_comval+12
	LD	C,(HL)
	PUSH	BC
	LD	C,1
	CALL	LWRD ?0089
	POP	HL
	POP	HL
; 53.	         if(strlen(scroll_buf)<20)
	LD	HL,scroll_buf
	CALL	LWRD ?STRLEN_L11
	LD	BC,20
	AND	A
	SBC	HL,BC
	JR	NC,?0007
?0006:
; 54.	         ScrollFlag=0;
	XOR	A
	JR	?0070
; 55.	         else
?0007:
; 56.	         ScrollFlag=1;
	LD	A,1
?0070:
	LD	(ScrollFlag),A
?0008:
; 57.	    }
; 58.	  
; 59.	   else
	JR	?0009
?0005:
; 60.	    {
; 61.	        ScrollFlag = 0;
	LD	(ScrollFlag),A
; 62.	        memcpy(BlankInfor,BLANKSTRING,4);
	LD	C,4
	LD	DE,BlankInfor
	LD	HL,BLANKSTRING
	LDIR
; 63.	        memcpy(&BlankInfor[4],&ReadListBuffer[buf_num*ListPerByte+56],12);  //取短名    
	LD	HL,ReadListBuffer+56
	LD	C,(IX-1)
	CALL	LWRD ?0083
; 64.	        SetTextPos(explorer_str_x_def, menu_pos_list[pos_num]-2); 
	LD	C,(IX-2)
	CALL	LWRD ?0090
; 65.	        PutS(BlankInfor,-1);    
?0009:
; 66.	    }   
; 67.	}
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0081:
	DEC	BC
?0080:
	PUSH	IY
	POP	DE
	CALL	LWRD ?US_DIV_L02
	EX	DE,HL
	ADD	HL,HL
	LD	C,L
	LD	B,H
	ADD	HL,HL
?0079:
	ADD	HL,BC
	EX	DE,HL
?0078:
	LD	A,BYTE3 ReadOneSectorData
	LD	HL,LWRD ReadOneSectorData
	JP	LWRD ?BANK_CALL_DIRECT_L08
?0082:
	LD	E,(IX-2)
	LD	D,B
	LD	C,71
	CALL	LWRD ?S_MUL_L02
	LD	HL,ReadListBuffer
	ADD	HL,DE
	EX	DE,HL
	LD	A,BYTE3 ScrollString
	LD	HL,LWRD ScrollString
	RET
?0084:
	LD	C,4
	LD	DE,BlankInfor
	LD	HL,BLANKSTRING
	LDIR
	LD	HL,ReadListBuffer+56
	LD	C,(IX-2)
?0083:
	LD	DE,71
	CALL	LWRD ?S_MUL_L02
	ADD	HL,DE
	LD	DE,BlankInfor+4
	LD	C,12
	LDIR
	RET
?0085:
	LD	B,0
	LD	DE,71
?0086:
	CALL	LWRD ?S_MUL_L02
	LD	HL,ReadListBuffer
	ADD	HL,DE
	LD	A,(HL)
	OR	A
	RET
?0087:
	LD	C,13
	LD	DE,198
?0088:
	LD	A,BYTE3 ResShowPic
	LD	HL,LWRD ResShowPic
	JP	LWRD ?BANK_CALL_DIRECT_L08
?0089:
	LD	DE,scroll_buf
	LD	A,BYTE3 ScrollString
	LD	HL,LWRD ScrollString
	JP	LWRD ?BANK_CALL_DIRECT_L08
?0090:
	LD	HL,menu_pos_list
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,254
	LD	C,A
	LD	E,32
	CALL	LWRD SetTextPos
	LD	C,255
	LD	DE,BlankInfor
	CALL	LWRD PutS
	RET
ui_music_list:
; 68.	
; 69.	void ui_music_list(unsigned int active,unsigned int old_active,bool scroll_flag)
; 70.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65528
	PUSH	IY
; 71.	    BYTE i;
; 72.	    unsigned int  top_list,bottom_list;    
; 73.	    BYTE last_list,buf_num;
; 74.	    region_scroll.x=30;
	LD	A,30
	LD	(region_scroll),A
; 75.	    region_scroll.width=162;
	LD	A,162
	LD	(region_scroll+2),A
; 76.	    region_scroll.height=16;    
	LD	A,16
	LD	(region_scroll+3),A
; 77.	    SetTextOutMode(1);      
	LD	E,1
	CALL	LWRD SetTextOutMode
; 78.	    if(scroll_flag)   
	XOR	A
	OR	(IX+10)
	JR	Z,?0011
?0010:
; 79.	    {
; 80.	        SetTextOutMode(0);
	LD	E,0
	CALL	LWRD SetTextOutMode
; 81.	        SetBackgdColor(Color_BULE_Scroll_def);        
	LD	BC,0
	LD	DE,31
	CALL	LWRD SetBackgdColor
; 82.	        ScrollString(scroll_buf, FALSE,g_comval.langid,&region_scroll);
	LD	HL,region_scroll
	PUSH	HL
	LD	HL,g_comval+12
	LD	C,(HL)
	PUSH	BC
	LD	C,0
	CALL	LWRD ?0089
	POP	HL
	POP	HL
; 83.	        SetTextOutMode(1);  
	LD	E,1
	CALL	LWRD SetTextOutMode
; 84.	    }   
; 85.	    else 
	JP	LWRD ?0018
?0011:
; 86.	    { 
; 87.	     ActiveSeekNum = active/OneSectorListNum;       //当前选中列表文件所在的扇区
	CALL	LWRD ?0092
	LD	(ActiveSeekNum),DE
; 88.	     if(old_active!=active)
	LD	L,(IX+2)
	LD	H,(IX+3)
	LD	C,(IX+4)
	LD	B,(IX+5)
	SBC	HL,BC
	LD	BC,6
	JP	Z,?0014
?0013:
; 89.	     {
; 90.	         //清除旧的活动列表项
; 91.	     BYTE pos_num = old_active%ListDisplayNum;
	LD	E,(IX+4)
	LD	D,(IX+5)
	CALL	LWRD ?US_MOD_L02
	LD	(IX-1),E
; 92.	     ResShowPic(menulist_bck_pic[pos_num],menu_bck_x_def,menu_pos_list[pos_num]-4);            //分段刷新背景
	LD	D,B
	LD	HL,menu_pos_list
	ADD	HL,DE
	LD	A,(HL)
	ADD	A,252
	LD	C,A
	PUSH	BC
	LD	C,9
	LD	L,E
	LD	H,B
	ADD	HL,HL
	LD	DE,menulist_bck_pic
	ADD	HL,DE
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	CALL	LWRD ?0088
	POP	AF
; 93.	     ResShowPic(MFILE, explorer_pic_x_def, menu_pos_list[pos_num]-1);   
	LD	C,(IX-1)
	LD	B,0
	LD	HL,menu_pos_list
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,255
	LD	C,A
	PUSH	BC
	CALL	LWRD ?0087
	POP	AF
; 94.	     ResShowPic(DHT,194,8);     
	LD	C,8
	PUSH	BC
	LD	C,194
	LD	DE,38
	CALL	LWRD ?0088
	POP	AF
; 95.	     SetTextPos(explorer_str_x_def, menu_pos_list[pos_num]-2);          
	LD	C,(IX-1)
	LD	B,0
	LD	HL,menu_pos_list
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,254
	LD	C,A
	LD	E,32
	CALL	LWRD SetTextPos
; 96.	     buf_num = old_active%OneSectorListNum;    //                         
	LD	BC,7
	LD	E,(IX+4)
	LD	D,(IX+5)
	CALL	LWRD ?US_MOD_L02
	LD	(IX-2),E
; 97.	     if(ReadListBuffer[buf_num*ListPerByte]!=0)        
	LD	D,B
	LD	C,71
	CALL	LWRD ?0086
	JR	Z,?0016
?0015:
; 98.	     {
; 99.	       region_scroll.y = menu_pos_list[pos_num]-2;
	LD	C,(IX-1)
	LD	HL,menu_pos_list
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,254
	LD	(region_scroll+1),A
; 100.	       ScrollString(&ReadListBuffer[buf_num*ListPerByte],TRUE,g_comval.langid,&region_scroll);
	LD	HL,region_scroll
	PUSH	HL
	LD	HL,g_comval+12
	LD	C,(HL)
	PUSH	BC
	LD	C,1
	PUSH	BC
	CALL	LWRD ?0082
	POP	BC
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	HL
	POP	HL
; 101.	     }
; 102.	     else
	JR	?0017
?0016:
; 103.	     {
; 104.	      memcpy(BlankInfor,BLANKSTRING,4);
; 105.	      memcpy(&BlankInfor[4],&ReadListBuffer[buf_num*ListPerByte+56],12);  //取短名        
	CALL	LWRD ?0084
; 106.	      PutS(BlankInfor,-1);    
	LD	C,255
	LD	DE,BlankInfor
	CALL	LWRD PutS
?0017:
; 107.	     }
; 108.	 //显示当前活动项
; 109.	     LastSeekNum = old_active/OneSectorListNum;          //旧的活动列表文件所在的扇区 
	LD	BC,7
	LD	E,(IX+4)
	LD	D,(IX+5)
	CALL	LWRD ?US_DIV_L02
	LD	(LastSeekNum),DE
; 110.	     show_active_musiclist(active);   
	JP	LWRD ?0022
; 111.	    }    
; 112.	    else
?0014:
; 113.	    {
; 114.	        top_list = (active/ListDisplayNum)*ListDisplayNum;
	LD	E,(IX+2)
	LD	D,(IX+3)
	CALL	LWRD ?0091
	PUSH	HL
	POP	IY
; 115.	        if(top_list+ListDisplayNum > g_file_list_total) 
	LD	BC,6
	ADD	HL,BC
	LD	C,L
	LD	B,H
	LD	HL,(g_file_list_total)
	AND	A
	SBC	HL,BC
	JR	NC,?0020
?0019:
; 116.	         bottom_list = g_file_list_total-1;   
	LD	HL,65535
	LD	BC,(g_file_list_total)
	JR	?0072
; 117.	        else
?0020:
; 118.	         bottom_list = top_list + ListDisplayNum-1 ;   //尾项          
	LD	HL,5
	PUSH	IY
	POP	BC
?0072:
	ADD	HL,BC
?0021:
; 119.	        last_list = bottom_list%ListDisplayNum;            
	LD	BC,6
	LD	E,L
	LD	D,H
	CALL	LWRD ?US_MOD_L02
	LD	(IX-3),E
; 120.	        LastSeekNum = bottom_list/OneSectorListNum;   //最后一项列表文件所在的扇区
	INC	BC
	LD	E,L
	LD	D,H
	CALL	LWRD ?US_DIV_L02
	LD	(LastSeekNum),DE
; 121.	        ResShowPic(MENUTWO,0,0);                //显示背景画面     
	LD	C,B
	PUSH	BC
	LD	DE,195
	CALL	LWRD ?0088
	POP	AF
; 122.	        ResShowMultiString(HeadIDDisplay, g_comval.langid,list_str_x_def, list_str_y_def); //显示列表名
	LD	C,148
	PUSH	BC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -