ui_licensinf.s01

来自「MP3 整个 SDK」· S01 代码 · 共 1,182 行 · 第 1/2 页

S01
1,182
字号
	NAME	ui_licensinf(17)
	RSEG	COM_CTRL(0)
	EXTERN	ClearScreen
	PUBLIC	DisplayDate
	PUBLIC	NextItem
	PUBLIC	PrevItem
	EXTERN	PutS
	EXTERN	ResShowMultiString
	EXTERN	SetTextPos
	EXTERN	UpdateScreen
	EXTERN	ap_get_message
	EXTERN	ap_handle_hotkey
	EXTERN	ap_sleep
	PUBLIC	delstartzero
	PUBLIC	displaycase
	EXTERN	itoa_2
	EXTERN	itoa_4
	EXTERN	musicpSendCommand
	EXTERN	ui_auto_update
	PUBLIC	ui_licensinf
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?C_S_SWITCH_L06
	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
	RSEG	COM_CTRL
ui_licensinf:
; 1.	/*
; 2.	*******************************************************************************
; 3.	*                ACTOS AP
; 4.	*        ap common lib, file/folder delete control file 
; 5.	*
; 6.	*        (c) Copyright, Actions Co,Ld.                             
; 7.	*             All Right Reserved                          
; 8.	*
; 9.	*  $Id: ui_LicensInf.c,v 1.1.1.1 2006/05/22 03:24:01 selina Exp $
; 10.	*******************************************************************************
; 11.	*/ 
; 12.	#include "ap_music.h"
; 13.	
; 14.	//如下定义了结构中的开关位
; 15.	#define     on_AllItem_def                  0x80
; 16.	#define     on_PLAYCNT_def              0x20
; 17.	#define     on_BEGINDAT_def            0x10
; 18.	#define     on_EXPDATE_def              0x08
; 19.	#define     on_REMAINTM_def           0x04
; 20.	#define     on_REMAINST_def            0x02
; 21.	#define     on_DEALCLKBCK_def        0x01
; 22.	
; 23.	#define     DisplayItem0_def    0
; 24.	#define     DisplayItem1_def    1
; 25.	#define     DisplayItem2_def    2
; 26.	#define     DisplayItem3_def    3
; 27.	#define     DisplayItem4_def    4
; 28.	#define     DisplayItem5_def    5
; 29.	#define     DisplayItem6_def    6
; 30.	
; 31.	#define     RemainPlayCntDisp_def          DisplayItem0_def
; 32.	#define     OriginalPlayCntDisp_def         DisplayItem1_def
; 33.	#define     BeginDateTimeDisp_def         DisplayItem2_def
; 34.	#define     ExpDateTimeDisp_def            DisplayItem3_def
; 35.	#define        RemainTimeDisp_def              DisplayItem4_def
; 36.	#define        RemainStoreTimeDisp_def      DisplayItem5_def
; 37.	#define        DealOnClkBckDisp_def            DisplayItem6_def
; 38.	#define     lincensinf_maxitem_def        DisplayItem6_def
; 39.	typedef struct
; 40.	{
; 41.	    date_t date;
; 42.	    time_t time;
; 43.	}DateTime_t;
; 44.	
; 45.	bool displaycase(licensinf_t *infbuf, char cnt, char subcnt, int lan_id);
; 46.	char NextItem(licensinf_t *infbuf, char cnt,  int  lan_id);
; 47.	char PrevItem(licensinf_t *infbuf, char cnt,  int lan_id);
; 48.	void DisplayDate(int ID, DateTime_t *pDate,char discnt, BYTE string_id);
; 49.	void delstartzero(char* buf);
; 50.	
; 51.	#pragma codeseg(COM_CTRL)
; 52.	/*
; 53.	//===================================================================
; 54.	接口: int ui_licensinf(, int string_id)
; 55.	input:
; 56.	
; 57.	    int string_id: 显示用的语言
; 58.	
; 59.	output:
; 60.	    return int:  NULL: 选中了OK
; 61.	                 RESULT_IGNORE: 时间到了未按确定,按了PLAY键,或选中了NO
; 62.	                 其他非0的值: 当热键返回    
; 63.	//===================================================================
; 64.	*/
; 65.	int ui_licensinf(int string_id)
; 66.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65506
	PUSH	IY
	LD	L,(IX+2)
	LD	H,(IX+3)
	PUSH	HL
	POP	IY
; 67.	    char key;
; 68.	    bool need_draw = TRUE;
; 69.	    char itemcnt = 0;    
; 70.	    char subitemcnt = 0;
; 71.	    wma_inf_t licensinfbuf;
; 72.	    bool result;
; 73.	
; 74.	
; 75.	    //取lincens 信息
; 76.	    if (!musicpSendCommand(MC_GETINF,  (int)&licensinfbuf))
	LD	(IX-30),0
	LD	(IX-28),0
	LD	HL,6
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	E,16
	LD	A,BYTE3 musicpSendCommand
	LD	HL,LWRD musicpSendCommand
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	INC	L
	DEC	L
	JR	Z,?0083
?0002:
; 77.	    {
; 78.	        //如命令出错,则跳回
; 79.	        return RESULT_IGNORE;
; 80.	    }
?0003:
; 81.	    if (licensinfbuf.drmmode != INF_DRMHVLICENSE)       
	LD	B,(IX-26)
	DEC	B
	JR	NZ,?0083
?0004:
; 82.	    //if (licensinfbuf.drmmode == INF_NORMALWMA)    
; 83.	    {
; 84.	        //普通WMA也跳回
; 85.	        return RESULT_IGNORE;        
; 86.	    }
?0005:
; 87.	
; 88.	
; 89.	    /*
; 90.	    //add for test
; 91.	    
; 92.	    licensinfbuf.drminf.switchflag = 0xff;
; 93.	
; 94.	    licensinfbuf.drminf.originalPlayCnt = 38;
; 95.	    licensinfbuf.drminf.RemainPlayCnt = 35;
; 96.	    licensinfbuf.drminf.BeginDate.year = 2004;
; 97.	    licensinfbuf.drminf.BeginDate.month = 10;
; 98.	    licensinfbuf.drminf.BeginDate.day = 15;
; 99.	    licensinfbuf.drminf.BeginTime.hour = 3;
; 100.	    licensinfbuf.drminf.BeginTime.minute = 4;
; 101.	    licensinfbuf.drminf.BeginTime.second = 12;
; 102.	    
; 103.	    licensinfbuf.drminf.ExpDate.year = 2004;
; 104.	    licensinfbuf.drminf.ExpDate.month =  12;
; 105.	    licensinfbuf.drminf.ExpDate.day = 23;
; 106.	    licensinfbuf.drminf.ExpTime.hour = 4;
; 107.	    licensinfbuf.drminf.ExpTime.minute = 15;
; 108.	    licensinfbuf.drminf.ExpTime.second = 27;
; 109.	                
; 110.	    licensinfbuf.drminf.RemainStoreTime = 12;
; 111.	    licensinfbuf.drminf.RemainTime =12;
; 112.	    licensinfbuf.drminf.DealOnClkBck = 1;
; 113.	    */
; 114.	            
; 115.	//    SetAsciiFont(FONT_TYPE_LARGE); //ASCII码用大字体
; 116.	//    SetAsciiFont(FONT_TYPE_SMALL); //ASCII码用小字体
; 117.	    ClearScreen(NULL);
	LD	E,B
	LD	D,B
	CALL	LWRD ClearScreen
; 118.	    
; 119.	    if ((licensinfbuf.drminf.switchflag & on_AllItem_def) == 0)
	BIT	7,(IX-25)
	JR	NZ,?0007
?0006:
?0009:
; 120.	    {
; 121.	        while( ap_get_message() != NULL );//清空消息池,确保DELAY时间准确
	CALL	LWRD ap_get_message
	OR	A
	JR	NZ,?0006
?0010:
?0008:
; 122.	        ResShowMultiString(NOLIMIT, string_id, 255, 80);
	LD	C,80
	PUSH	BC
	LD	C,255
	PUSH	BC
	PUSH	IY
	POP	HL
	LD	C,L
	LD	DE,450
	CALL	LWRD ?0107
	POP	AF
	POP	AF
; 123.	        ap_sleep(4);
	LD	DE,4
	LD	A,BYTE3 ap_sleep
	LD	HL,LWRD ap_sleep
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 124.	        return RESULT_IGNORE;
?0083:
	JP	LWRD ?0019
; 125.	    }
?0007:
; 126.	    ui_auto_update = FALSE;  
	XOR	A
	LD	(ui_auto_update),A
; 127.	
; 128.	    //先显示第一项
; 129.	    if (! displaycase(&licensinfbuf.drminf, itemcnt, subitemcnt, string_id))
	PUSH	IY
	LD	L,(IX-28)
	PUSH	HL
	LD	C,(IX-30)
	LD	HL,10
	ADD	HL,SP
	LD	DE,1
	ADD	HL,DE
	EX	DE,HL
	CALL	LWRD ?0108
	POP	AF
	POP	AF
	INC	L
	DEC	L
	JR	NZ,?0012
?0011:
; 130.	    {
; 131.	        itemcnt = NextItem(&licensinfbuf.drminf, itemcnt, string_id);
?0087:
	PUSH	IY
	LD	C,(IX-30)
	LD	HL,8
	ADD	HL,SP
	LD	DE,1
	ADD	HL,DE
	EX	DE,HL
	LD	A,BYTE3 NextItem
	LD	HL,LWRD NextItem
?0086:
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
	LD	(IX-30),L
?0012:
?0014:
; 132.	    }
; 133.	
; 134.	    while(1)
; 135.	    {
; 136.	        UpdateScreen(NULL);
	LD	DE,0
	CALL	LWRD UpdateScreen
; 137.	
; 138.	        key = ap_get_message();                          //获取消息
	CALL	LWRD ap_get_message
; 139.	        
; 140.	        switch (key)
	LD	E,A
	CALL	LWRD ?C_V_SWITCH_L06
	DEFW	11
	DEFB	3
	DEFB	4
	DEFB	5
	DEFB	6
	DEFB	30
	DEFB	33
	DEFB	48
	DEFB	67
	DEFB	68
	DEFB	69
	DEFB	70
	DEFW	?0020
	DEFW	?0087
	DEFW	?0018
	DEFW	?0087
	DEFW	?0018
	DEFW	?0019
	DEFW	?0019
	DEFW	?0019
	DEFW	?0087
	DEFW	?0018
	DEFW	?0087
	DEFW	?0018
?0017:
; 141.	        {
; 142.	        case AP_KEY_NEXT:
; 143.	        case AP_KEY_NEXT | AP_KEY_HOLD:
; 144.	        case AP_KEY_VOLADD:
; 145.	         case AP_KEY_VOLADD | AP_KEY_HOLD:
; 146.	                     /*
; 147.	                     if ((itemcnt == BeginDateTimeDisp_def) || (itemcnt == ExpDateTimeDisp_def))
; 148.	                     {
; 149.	                             if(subitemcnt == 0)
; 150.	                             {
; 151.	                                     subitemcnt = 1;
; 152.	                                    if (displaycase(&licensinfbuf.drminf, itemcnt, 1,string_id))
; 153.	                                    {
; 154.	                                            break;
; 155.	                                    }
; 156.	                             }
; 157.	                            subitemcnt = 0;
; 158.	                     }
; 159.	                    */
; 160.	                 itemcnt = NextItem(&licensinfbuf.drminf, itemcnt, string_id);
; 161.	                break;
?0018:
; 162.	
; 163.	        case AP_KEY_PREV:
; 164.	        case AP_KEY_PREV | AP_KEY_HOLD:
; 165.	        case AP_KEY_VOLSUB:
; 166.	        case AP_KEY_VOLSUB | AP_KEY_HOLD:       
; 167.	                    /*
; 168.	                     if ((itemcnt == BeginDateTimeDisp_def) || (itemcnt == ExpDateTimeDisp_def))
; 169.	                     {
; 170.	                             if (subitemcnt == 1)
; 171.	                             {
; 172.	                                     subitemcnt = 0;
; 173.	                                    if (displaycase(&licensinfbuf.drminf, itemcnt, 0,string_id))
; 174.	                                    {
; 175.	                                            break;
; 176.	                                    }
; 177.	                                    
; 178.	                             }
; 179.	                            subitemcnt = 0;                                                    
; 180.	                     }    
; 181.	                     */
; 182.	                 itemcnt = PrevItem(&licensinfbuf.drminf, itemcnt, string_id);                    
	PUSH	IY
	LD	C,(IX-30)
	LD	HL,8
	ADD	HL,SP
	LD	DE,1
	ADD	HL,DE
	EX	DE,HL
	LD	A,BYTE3 PrevItem
	LD	HL,LWRD PrevItem
	JR	?0086
; 183.	                break;
?0019:
; 184.	        
; 185.	        case AP_KEY_MODE | AP_KEY_UP:                
; 186.	        case AP_MSG_WAIT_TIMEOUT://8秒退出    
; 187.	        case AP_KEY_PLAY | AP_KEY_UP:
; 188.	                 return RESULT_IGNORE;
	LD	HL,52
; 189.	                
; 190.	        default:
	JR	?0026
?0020:
; 191.	            key=ap_handle_hotkey(key);//热键处理
	CALL	LWRD ap_handle_hotkey
	LD	(IX-29),A
; 192.	            if(key == RESULT_REDRAW)
	CP	50
	JR	Z,?0012
?0021:
; 193.	            {
; 194.	                need_draw=TRUE;
?0022:
; 195.	            }
; 196.	            else if(key!=0)
	XOR	A
	OR	(IX-29)
	JR	Z,?0012
?0024:
; 197.	            {
; 198.	                return key;                                              
	LD	L,A
	LD	H,0
; 199.	            }
?0026:
	POP	IY
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0107:
	LD	A,BYTE3 ResShowMultiString
	LD	HL,LWRD ResShowMultiString
	JP	LWRD ?BANK_CALL_DIRECT_L08
?0109:
	LD	E,(IX+2)
	LD	D,(IX+3)
?0108:
	LD	A,BYTE3 displaycase
	LD	HL,LWRD displaycase
	JP	LWRD ?BANK_CALL_DIRECT_L08
?0025:
?0023:
?0016:
; 200.	        }//switch(key)            
; 201.	    }//while(1)
; 202.	}
NextItem:
; 203.	
; 204.	/*
; 205.	output: 输出最后选中的项目的号                    
; 206.	*/
; 207.	
; 208.	char NextItem(licensinf_t *infbuf, char cnt,  int  lan_id)
; 209.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65534
; 210.	    bool result;
; 211.	    char i;
; 212.	    
; 213.	    if (cnt>=lincensinf_maxitem_def)
	LD	A,C
	CP	6
	JR	C,?0028
?0027:
; 214.	    {
; 215.	        return lincensinf_maxitem_def;            
	LD	L,6
; 216.	    }
	JR	?0034
?0028:
; 217.	    
; 218.	    i = cnt + 1;
	LD	B,C
	INC	B
	LD	(IX-2),B
?0030:
; 219.	    
; 220.	    for (; i<=lincensinf_maxitem_def;)
	LD	A,6
	CP	(IX-2)
	JR	C,?0029
?0031:
; 221.	    {
; 222.	        result = displaycase(infbuf, i, 0,lan_id);
	LD	L,(IX+10)
	LD	H,(IX+11)
	PUSH	HL
	LD	C,0
	PUSH	BC
	LD	C,(IX-2)
	CALL	LWRD ?0109
	POP	AF
	POP	AF
; 223.	        if (result)            
	INC	L
	DEC	L
	JR	NZ,?0029
?0032:
; 224.	        {
; 225.	            return i;
; 226.	        }
?0033:
; 227.	        i++;
	INC	(IX-2)
	JR	?0030
?0029:
; 228.	    }
; 229.	    return i;
	LD	L,(IX-2)
; 230.	}
?0034:
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
PrevItem:
; 231.	
; 232.	char PrevItem(licensinf_t *infbuf, char cnt,  int lan_id)
; 233.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65534
; 234.	    bool result;
; 235.	    char i;
; 236.	    
; 237.	    if (cnt == 0)
	INC	C
	DEC	C
	JR	NZ,?0036
?0035:
; 238.	    {
; 239.	        return 0;
	LD	L,C
; 240.	    }
	JR	?0042
?0036:
; 241.	
; 242.	    i = cnt - 1;
	LD	A,C
	ADD	A,255
	LD	(IX-2),A
?0038:
; 243.	    
; 244.	    for (; i>=0;)
	LD	A,(IX-2)
?0039:
; 245.	    {
; 246.	        result = displaycase(infbuf, i, 0,lan_id);
	LD	L,(IX+10)
	LD	H,(IX+11)
	PUSH	HL
	LD	C,0
	PUSH	BC
	LD	C,A
	CALL	LWRD ?0109
	POP	AF
	POP	AF
; 247.	        if (result)            
	INC	L
	DEC	L
	JR	Z,?0041
?0040:
; 248.	        {
; 249.	            return i;
	LD	L,(IX-2)
; 250.	        }
	JR	?0042
?0041:
; 251.	        i--;
	DEC	(IX-2)
	JR	?0038
?0037:
; 252.	    }
; 253.	    return i;
; 254.	}
?0042:
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
displaycase:
; 255.	
; 256.	
; 257.	
; 258.	
; 259.	//=============================================
; 260.	//显示的项目
; 261.	/*
; 262.	如当前项目不要显示,则跳到下一个项目,
; 263.	如已到最后一个或最前一个,则不动
; 264.	
; 265.	input:
; 266.	    要显示的项目
; 267.	
; 268.	output:
; 269.	    返回是否能显示T: 已显示; 
; 270.	                                                F: 没有显示
; 271.	*/
; 272.	
; 273.	//=============================================
; 274.	bool displaycase(licensinf_t *infbuf, char cnt, char subcnt, int lan_id)
; 275.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65530
	PUSH	IY
	LD	L,(IX+2)
	LD	H,(IX+3)
	PUSH	HL
	POP	IY
; 276.	    switch(cnt)
	LD	E,C
	CALL	LWRD ?C_S_SWITCH_L06
	DEFB	0
	DEFW	7
	DEFW	?0068
	DEFW	?0044
	DEFW	?0047
	DEFW	?0050
	DEFW	?0053
	DEFW	?0056
	DEFW	?0059
	DEFW	?0062
?0044:
; 277.	    {        
; 278.	    case RemainPlayCntDisp_def:
; 279.	        if ((infbuf->switchflag & on_PLAYCNT_def) == 0)
	BIT	5,(IY+0)
	JP	Z,?0068
?0045:
; 280.	        {
; 281.	            return FALSE;    
; 282.	        }
?0046:
; 283.	        else
; 284.	        {
; 285.	                char tmpbuf[5];
; 286.	                //显示标题
; 287.	                ClearScreen(NULL);
	CALL	LWRD ?0106
; 288.	                ResShowMultiString(PLAYCNT, lan_id, 255, 90);
	PUSH	BC
	LD	C,255
	PUSH	BC
	LD	C,(IX+12)
	LD	DE,439
	CALL	LWRD ?0107
	POP	AF
	POP	AF

⌨️ 快捷键说明

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