📄 ui_playlist.s01
字号:
NAME ui_playlist(17)
RSEG COM_PLAYLIST(0)
RSEG UDATA0(0)
EXTERN PlaylistClassTotal
EXTERN PlaylistCurClass
EXTERN ScrollFlag
EXTERN SetSWAPAddress
EXTERN ShowPlaylist
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN ap_message_init
PUBLIC cur_grouplist
EXTERN fselGetLocation
EXTERN fselGetNextGroup
EXTERN fselGetPrevGroup
EXTERN fselSetLocation
PUBLIC playlist_active
EXTERN reinit_idm_buf_playlist
PUBLIC ui_playlist
EXTERN ?CLZ80B_4_04_L00
EXTERN ?US_DIV_L02
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?ENT_PARM_DIRECT_L09
EXTERN ?ENT_AUTO_DIRECT_L09
EXTERN ?LEAVE_DIRECT_L09
EXTERN ?MEMSET_L11
RSEG COM_PLAYLIST
ui_playlist:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * ap common lib, directory control file
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * $Id: ui_playlist.c,v 1.1.1.1 2006/05/22 03:23:59 selina Exp $
; 10. *******************************************************************************
; 11. */
; 12. #pragma codeseg(COM_PLAYLIST)
; 13.
; 14. #include "ap_common.h"
; 15. #include "list.h"
; 16. #include "filesys.h"
; 17.
; 18. WORD playlist_active,cur_grouplist; //目录总数,文件总数和浏览项数,浏览活动项
; 19. extern WORD PlaylistClassTotal;
; 20. extern WORD PlaylistCurClass;
; 21. extern BYTE ScrollFlag;
; 22.
; 23. #pragma memory=dataseg(RCODE)
; 24. #pragma memory=default
; 25. void ShowPlaylist(BYTE top,BYTE bottom,BYTE Old_active,BYTE active,char *Longnamebuf,BYTE string_id,BYTE ScrollMode);
; 26. void reinit_idm_buf_playlist(int top, int bottom, char *Longnamebuf, BYTE string_id,BOOL direction);
; 27.
; 28. static void DmaCpy(WORD descadd, BYTE descpg, WORD srcadd, BYTE srcpg, WORD Length);
; 29.
; 30. /********************************************************************************
; 31. * Description : select the directory.
; 32. *
; 33. * Arguments :
; 34. * location: get thedisk type
; 35. * type : show file kind
; 36. * string_id: language type
; 37. * Returns :
; 38. * other: Successful
; 39. * 0: Fail, detail information in fselError
; 40. * Notes : only select the valid directory
; 41. *
; 42. ********************************************************************************/
; 43.
; 44. int ui_playlist(file_location_t *location, BYTE type,BYTE string_id)
; 45. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -10
PUSH IY
; 46. BYTE i, pagebak,TimeoutCnt;
; 47. char * Strname;
; 48. BYTE result;
; 49. char key;
; 50. int top, bottom;
; 51.
; 52. if ( !fselSetLocation(location) )
CALL LWRD ?0072
INC L
DEC L
JR Z,?0070
?0002:
; 53. {
; 54. return RESULT_IGNORE;
; 55. }
?0003:
; 56.
; 57. if (PlaylistClassTotal == 0)
LD HL,(PlaylistClassTotal)
LD A,L
OR H
JR NZ,?0005
?0004:
; 58. return RESULT_IGNORE;
?0070:
LD HL,52
JP LWRD ?0064
?0005:
; 59.
; 60. ////////////////////////////////换页//////////////////////////////////////
; 61. DmaCpy( 0x4000, 0x06, 0x4000, 0x07, 0x2000-1 ); //备份第7页0x4000~0x6000的8K代码到第6页0x4000~0x6000
LD HL,8191
PUSH HL
LD C,7
PUSH BC
LD HL,16384
PUSH HL
LD C,6
EX DE,HL
CALL LWRD DmaCpy
POP HL
POP HL
POP HL
; 62. i = input8(0x05);
IN A,(5)
LD (IX-2),A
; 63. output8(0x05, 0xf6);
LD A,246
OUT (5),A
; 64. pagebak = SetSWAPAddress(0x06);
LD E,6
CALL LWRD SetSWAPAddress
LD (IX-3),A
; 65. Strname = (char *)STRNAMEBUF;
LD (IX-8),0
LD (IX-7),112
; 66. ////////////////////////////////换页//////////////////////////////////////
; 67.
; 68. memset(Strname, 0x00, LISTNAME_DISP_LENNGTH+1);
LD BC,513
LD DE,28672
LD L,E
CALL LWRD ?MEMSET_L11
?0007:
; 69. while(PlaylistCurClass>1) //返回根目录
LD BC,(PlaylistCurClass)
LD HL,1
AND A
SBC HL,BC
JR NC,?0006
?0008:
; 70. {
; 71. fselGetPrevGroup(Strname);
LD E,(IX-8)
LD D,(IX-7)
LD A,BYTE3 fselGetPrevGroup
LD HL,LWRD fselGetPrevGroup
CALL LWRD ?BANK_CALL_DIRECT_L08
JR ?0007
?0006:
; 72. }
; 73. top=0;
; 74. bottom=4;
; 75. playlist_active=0;
LD HL,0
LD (playlist_active),HL
; 76. cur_grouplist=0;
LD (cur_grouplist),HL
; 77. if(PlaylistClassTotal<5)
XOR A
LD (IX-10),A
LD (IX-9),A
LD IY,4
LD BC,5
LD HL,(PlaylistClassTotal)
SBC HL,BC
JR NC,?0010
?0009:
; 78. bottom=PlaylistClassTotal-1;
LD HL,65535
LD BC,(PlaylistClassTotal)
ADD HL,BC
PUSH HL
POP IY
?0010:
; 79. FSELGetLocation(location); //保存location
CALL LWRD ?0071
; 80. reinit_idm_buf_playlist(top, bottom, Strname, string_id,TRUE);
LD C,1
PUSH BC
LD L,(IX+10)
PUSH HL
LD L,(IX-8)
LD H,(IX-7)
PUSH HL
CALL LWRD ?0073
POP HL
POP HL
POP HL
; 81. FSELSetLocation(location);
CALL LWRD ?0072
; 82. ShowPlaylist(top,bottom,playlist_active,playlist_active,Strname,string_id,1);
LD C,1
PUSH BC
LD L,(IX+10)
PUSH HL
LD L,(IX-8)
LD H,(IX-7)
PUSH HL
LD A,(playlist_active)
LD C,A
PUSH BC
LD C,A
PUSH BC
CALL LWRD ?0074
POP HL
POP HL
POP HL
POP HL
POP HL
?0012:
; 83. while(ap_get_message()!=0) {;} //丢掉多余按键
CALL LWRD ap_get_message
OR A
JR NZ,?0012
?0013:
?0011:
; 84.
; 85. ap_message_init(NULL);
LD E,A
LD D,A
LD A,BYTE3 ap_message_init
LD HL,LWRD ap_message_init
CALL LWRD ?BANK_CALL_DIRECT_L08
?0015:
; 86. while(1)
; 87. {
; 88. //handle msg
; 89. key = ap_get_message();
CALL LWRD ap_get_message
; 90. switch(key)
LD E,A
CALL LWRD ?C_V_SWITCH_L06
DEFW 11
DEFB 5
DEFB 6
DEFB 28
DEFB 30
DEFB 33
DEFB 48
DEFB 55
DEFB 56
DEFB 69
DEFB 70
DEFB 144
DEFW ?0056
DEFW ?0040
DEFW ?0018
DEFW ?0029
DEFW ?0015
DEFW ?0051
DEFW ?0015
DEFW ?0038
DEFW ?0045
DEFW ?0015
DEFW ?0018
DEFW ?0029
?0018:
; 91. {
; 92.
; 93. case AP_KEY_NEXT:
; 94. case AP_KEY_NEXT | AP_KEY_HOLD:
; 95.
; 96. if(playlist_active<PlaylistClassTotal -1 ) //当前项小于总列表数
LD HL,65535
LD BC,(PlaylistClassTotal)
ADD HL,BC
LD C,L
LD B,H
LD HL,(playlist_active)
AND A
SBC HL,BC
JP NC,?0023
?0019:
; 97. {
; 98.
; 99. fselGetNextGroup(Strname);
LD E,(IX-8)
LD D,(IX-7)
LD A,BYTE3 fselGetNextGroup
LD HL,LWRD fselGetNextGroup
CALL LWRD ?BANK_CALL_DIRECT_L08
; 100. playlist_active++;
LD HL,(playlist_active)
INC HL
; 101. if(playlist_active/5==cur_grouplist)
CALL LWRD ?0076
JR NZ,?0022
?0021:
; 102. {
; 103. ShowPlaylist(top,bottom,playlist_active-1,playlist_active,Strname,string_id,1);
LD C,1
PUSH BC
LD L,(IX+10)
PUSH HL
LD L,(IX-8)
LD H,(IX-7)
PUSH HL
LD A,(playlist_active)
LD C,A
PUSH BC
ADD A,255
JR ?0068
; 104. }
; 105. else
?0022:
; 106. {
; 107. cur_grouplist=cur_grouplist+1;
LD HL,1
; 108. top=(playlist_active/5)*5; //顶的序号
CALL LWRD ?0075
; 109. bottom=top+4; //底的序号
; 110. if(bottom>(PlaylistClassTotal-1))
LD HL,65535
LD BC,(PlaylistClassTotal)
ADD HL,BC
PUSH IY
POP BC
AND A
SBC HL,BC
JR NC,?0025
?0024:
; 111. bottom=PlaylistClassTotal-1;
LD HL,65535
LD BC,(PlaylistClassTotal)
ADD HL,BC
PUSH HL
POP IY
?0025:
; 112. FSELGetLocation(location);
CALL LWRD ?0071
; 113. reinit_idm_buf_playlist(top, bottom, Strname, string_id,TRUE); //换页要重新初始化IDM数据
LD C,1
PUSH BC
LD L,(IX+10)
PUSH HL
LD L,(IX-8)
LD H,(IX-7)
PUSH HL
CALL LWRD ?0073
POP HL
POP HL
POP HL
; 114. FSELSetLocation(location);
CALL LWRD ?0072
; 115. ShowPlaylist(top,bottom,playlist_active,playlist_active,Strname,string_id,1);
LD C,1
PUSH BC
LD L,(IX+10)
PUSH HL
LD L,(IX-8)
LD H,(IX-7)
PUSH HL
LD A,(playlist_active)
LD C,A
PUSH BC
?0068:
LD C,A
PUSH BC
CALL LWRD ?0074
POP HL
POP HL
POP HL
POP HL
POP HL
?0023:
?0020:
?0027:
; 116. }
; 117.
; 118. }
; 119. while(ap_get_message() != 0);
CALL LWRD ap_get_message
OR A
JR NZ,?0023
?0028:
; 120. break;
?0026:
JP LWRD ?0015
?0029:
; 121. case AP_KEY_PREV:
; 122. case AP_KEY_PREV | AP_KEY_HOLD :
; 123. if(playlist_active >0)
LD HL,(playlist_active)
LD A,L
OR H
JR Z,?0034
?0030:
; 124. {
; 125. fselGetPrevGroup(Strname);
LD E,(IX-8)
LD D,(IX-7)
LD A,BYTE3 fselGetPrevGroup
LD HL,LWRD fselGetPrevGroup
CALL LWRD ?BANK_CALL_DIRECT_L08
; 126. playlist_active--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -