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 + -
显示快捷键?