📄 ui_stop_menu.s01
字号:
NAME ui_stop_menu(17)
RSEG AP_UI_MNU_STOP(0)
RSEG IDATA0(0)
RSEG CDATA0(0)
RSEG APC_UI_MNU_STOP(0)
EXTERN BankSwitch
EXTERN ClearScreen
EXTERN ClearTimePara
EXTERN DRV_ActiveUD
EXTERN DRV_DetectUD
EXTERN DisplayErrInfor
EXTERN DisplayErrMsg
EXTERN NoCardCaseInStopMenu
PUBLIC PLFileName
PUBLIC dir_string
PUBLIC dir_string_card
EXTERN fselGetLocation
EXTERN fselGetNextFile
EXTERN fselInit
EXTERN fselPlayListEnt
EXTERN fselSetLocation
EXTERN fselSetMode
EXTERN g_DiskStateFlag
EXTERN g_comval
EXTERN g_music_vars
EXTERN list
EXTERN musicpSendCommand
EXTERN ui_delete_Music
EXTERN ui_directory
EXTERN ui_licensinf
EXTERN ui_playlist
EXTERN ui_popup_list
PUBLIC ui_stop_menu
EXTERN ?CLZ80B_4_04_L00
EXTERN ?SS_CMP_L02
EXTERN ?S_S_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?ENT_AUTO_DIRECT_L09
RSEG AP_UI_MNU_STOP
ui_stop_menu:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * This program demostrates how to build an AP
; 5. *
; 6. * (c) Copyright Actions Co,Ld.
; 7. *
; 8. * $Id: ui_stop_menu.c,v 1.2 2006/07/14 06:46:20 tangwh Exp $
; 9. *******************************************************************************
; 10. */
; 11. #include "ap_music.h"
; 12.
; 13.
; 14. extern int test_cow1;
; 15. #pragma memory=constseg(APC_UI_MNU_STOP)
; 16.
; 17. const char PLFileName[5][12] = {"MYLIST A3L","ARTIST A3L","ALBUM A3L","GENRE A3L","COMPOSERA3L"
; 18. };
; 19.
; 20.
; 21.
; 22. const WORD dir_string_card[6+5] =
; 23. {
; 24. MSTOP6, MSTOP7,MSTOP8, MSTOP9, MSTOP10, MSTOP11, MSTOP1, MSTOP2, MSTOP3, MSTOP4, MSTOP5
; 25. };
; 26.
; 27.
; 28. const WORD dir_string[6+4] =
; 29. {
; 30. MSTOP6, MSTOP7,MSTOP8, MSTOP9, MSTOP10, MSTOP11, MSTOP1, MSTOP3, MSTOP4, MSTOP5
; 31. };
; 32.
; 33. #pragma memory=default
; 34. extern void make_dirname(void);
; 35. int ui_licensinf(int string_id);
; 36. int ui_delete_Music( int type );
; 37. int NoCardCaseInStopMenu(int active);
; 38.
; 39. #pragma codeseg(AP_UI_MNU_STOP)
; 40.
; 41. int ui_stop_menu( void )
; 42. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65532
; 43. int result;
; 44. bool tmpflag = FALSE;
; 45. static char StopMenuactive=0; //保持选中菜单的序号
; 46.
; 47. ClearScreen(NULL);
LD DE,0
CALL LWRD ClearScreen
; 48.
; 49. list.headid = STOPMENU;
LD HL,490
LD (list+6),HL
; 50. if (DRV_DetectUD(1) == 0x20)
LD E,H
CALL LWRD ?0102
JR NZ,?0004
?0003:
; 51. {
; 52. //有卡时的显示
; 53. list.total = sizeof(dir_string_card) / 2;
LD HL,11
LD (list+2),HL
; 54.
; 55. list.strid = dir_string_card;
LD HL,dir_string_card
LD (list),HL
; 56. }
; 57. else
JR ?0007
?0004:
; 58. {
; 59. //无卡时的显示
; 60. list.total = sizeof(dir_string) / 2;
LD HL,10
LD (list+2),HL
; 61. list.strid = dir_string;
LD HL,dir_string
LD (list),HL
; 62. if (StopMenuactive >= list.total)
LD BC,(list+2)
LD HL,(?0002)
LD H,0
CALL LWRD ?SS_CMP_L02
JR C,?0007
?0006:
; 63. {
; 64. StopMenuactive--;
LD HL,?0002
DEC (HL)
?0007:
?0005:
; 65. }
; 66. }
; 67. list.string_id = g_comval.langid;
LD A,(g_comval+12)
LD (list+8),A
; 68. list.active = StopMenuactive;
LD BC,(?0002)
LD B,0
LD (list+4),BC
; 69.
; 70. CLEAR_WATCHDOG();
IN A,(78)
SET 3,A
OUT (78),A
; 71. result = ui_popup_list(&list, NULL);
LD C,B
PUSH BC
PUSH BC
LD DE,list
LD A,BYTE3 ui_popup_list
LD HL,LWRD ui_popup_list
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
LD (IX-4),L
LD (IX-3),H
; 72. StopMenuactive = list.active;
LD A,(list+4)
LD (?0002),A
; 73.
; 74. if (result != 0)
LD A,L
OR H
JP NZ,?0095
?0008:
; 75. {
; 76. return result;
; 77. }
?0009:
; 78.
; 79. //如下加快其他项的退出速度
; 80.
; 81. if (DRV_DetectUD(1) == 0x20)
CALL LWRD ?0103
JR NZ,?0011
?0010:
; 82. {
; 83. // 有卡
; 84. // DRV_DetectUD() 之后必须加上DRV_ActiveUD(),
; 85. // 否则系统无法对卡进行读写操作.
; 86. if(g_music_vars.location.disk == 'H')
LD A,(g_music_vars+7)
CP 72
LD C,1
JR NZ,?0013
?0012:
; 87. DRV_ActiveUD(1, MODE_SLOW);
LD E,C
JR ?0093
; 88. else
?0013:
; 89. DRV_ActiveUD(0, MODE_SLOW);
LD E,B
?0093:
CALL LWRD DRV_ActiveUD
?0014:
; 90. switch (list.active)
LD BC,(list+4)
LD A,5
XOR C
OR B
JR Z,?0100
?0016:
; 91. {
; 92. case 5://licens informations
; 93. ui_licensinf(g_comval.langid);
; 94. return RESULT_IGNORE;
; 95.
; 96. case 10://exit
?0017:
LD A,10
XOR C
OR B
JR NZ,?0019
; 97. return RESULT_IGNORE;
JR ?0099
; 98. }
?0015:
; 99. }
; 100. else
?0011:
; 101. {
; 102. //无卡
; 103. switch (list.active)
LD BC,(list+4)
LD A,5
XOR C
OR B
JR NZ,?0021
?0020:
; 104. {
; 105. case 5://licens informations
; 106. ui_licensinf(g_comval.langid);
?0100:
LD DE,(g_comval+12)
LD D,A
LD A,BYTE3 ui_licensinf
LD HL,LWRD ui_licensinf
CALL LWRD ?BANK_CALL_DIRECT_L08
; 107. return RESULT_IGNORE;
JR ?0099
; 108.
; 109. case 9://exit
?0021:
LD A,9
XOR C
OR B
JR Z,?0099
; 110. return RESULT_IGNORE;
; 111. }
?0019:
?0018:
; 112. }
; 113.
; 114.
; 115. BankSwitch((unsigned long)FSELInit >> 16);
LD B,0
LD E,BYTE3 fselInit
LD C,B
CALL LWRD BankSwitch
; 116. fselGetLocation(& g_music_vars.location);
CALL LWRD ?0104
; 117.
; 118. if (g_music_vars.location.disk == 'H')
LD A,(g_music_vars+7)
CP 72
JR NZ,?0025
?0022:
; 119. //&& (menu.active != 0) )
; 120. {
; 121. //因为在控件 ui_function_menu 中不好检测卡拔出,所以这里再测一次
; 122. if (DRV_DetectUD(1) != 0x20)
CALL LWRD ?0103
JR Z,?0025
?0024:
; 123. {
; 124. DisplayErrMsg(CARDPULL);//显示卡拔出
CALL LWRD ?0105
; 125. g_music_vars.location.disk = 'C';
LD A,67
LD (g_music_vars+7),A
; 126. //return RESULT_SD_OUT;
; 127. return RESULT_IGNORE;
?0099:
LD HL,52
; 128. }
JP LWRD ?0089
?0025:
?0023:
; 129. }
; 130.
; 131. musicpSendCommand(MC_CLOSE, NULL);
LD E,2
LD A,BYTE3 musicpSendCommand
LD HL,LWRD musicpSendCommand
CALL LWRD ?BANK_CALL_DIRECT_L08
; 132.
; 133. if (list.active < 5)
LD HL,(list+4)
LD BC,32773
LD A,B
XOR H
LD H,A
SBC HL,BC
JP NC,?0027
?0026:
; 134. {
; 135. //前面调用PLAYLIST控件选中对应的PLAYLIST
; 136. if (g_music_vars.fselmod == FSEL_TYPE_COMMONDIR)
LD A,(g_music_vars+79)
OR A
JP NZ,?0029
?0028:
; 137. {
; 138. //dir -> playlist
; 139. FSELInit(FSEL_TYPE_MUSIC, FSEL_ALL_REPEATALL, FSEL_TYPE_PLAYLIST, g_music_vars.location.disk);//初始化playlist
LD HL,g_music_vars+7
LD C,(HL)
PUSH BC
LD C,1
PUSH BC
LD C,4
LD E,A
CALL LWRD ?0106
POP AF
POP AF
; 140. g_music_vars.fselmod = FSEL_TYPE_PLAYLIST;
LD A,1
LD (g_music_vars+79),A
; 141. if (!fselPlayListEnt(PLFileName[list.active]))
LD HL,(list+4)
ADD HL,HL
ADD HL,HL
LD C,L
LD B,H
ADD HL,HL
ADD HL,BC
LD BC,PLFileName
ADD HL,BC
EX DE,HL
LD A,BYTE3 fselPlayListEnt
LD HL,LWRD fselPlayListEnt
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JR NZ,?0031
?0030:
?0032:
; 142. {
; 143. listenterr:
; 144. //不能进入PLAYLIST的情况
; 145. FSELInit(FSEL_TYPE_MUSIC, FSEL_ALL_REPEATALL, FSEL_TYPE_COMMONDIR,g_music_vars.location.disk);//初始化文件选择器
LD HL,g_music_vars+7
LD C,(HL)
PUSH BC
LD C,0
PUSH BC
CALL LWRD ?0107
POP AF
POP AF
; 146. FSELGetNext(g_music_vars.location.filename);
LD DE,g_music_vars+33
LD A,BYTE3 fselGetNextFile
LD HL,LWRD fselGetNextFile
CALL LWRD ?BANK_CALL_DIRECT_L08
; 147. g_music_vars.fselmod = FSEL_TYPE_COMMONDIR;
XOR A
LD (g_music_vars+79),A
; 148. result = RESULT_IGNORE;
LD (IX-4),52
LD (IX-3),A
; 149. }
; 150. else
JR ?0035
?0031:
; 151. {
; 152. //有PLAYLIST的情况
; 153. if (fselGetLocation(&g_music_vars.location))
CALL LWRD ?0104
INC L
DEC L
JR Z,?0035
?0034:
; 154. {
; 155. result = ui_playlist(&g_music_vars.location, DIRECTORY_MUSIC,
; 156. g_comval.langid);
LD HL,g_comval+12
LD C,(HL)
PUSH BC
CALL LWRD ?0108
POP AF
LD (IX-4),L
LD (IX-3),H
; 157. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 158. if (result == RESULT_IGNORE)
LD A,52
XOR L
OR H
JR Z,?0030
?0036:
; 159. {
; 160. goto listenterr;
?0037:
; 161. }
; 162. else
; 163. {
; 164. FSELGetNext(g_music_vars.location.filename);
LD DE,g_music_vars+33
LD A,BYTE3 fselGetNextFile
LD HL,LWRD fselGetNextFile
CALL LWRD ?BANK_CALL_DIRECT_L08
?0035:
?0033:
; 165. }
; 166. }
; 167. }
; 168.
; 169.
; 170. }
; 171.
; 172. else
JP LWRD ?0052
?0029:
; 173. {
; 174. bool tmpflag = FALSE;
LD (IX-1),0
; 175. //从 playlist -> playlist
; 176. if (list.active != g_music_vars.play_listmod)
LD BC,(g_music_vars+78)
LD B,0
LD HL,(list+4)
AND A
SBC HL,BC
JR Z,?0040
?0039:
; 177. {
; 178. if (!fselPlayListEnt(PLFileName[list.active]))
LD HL,(list+4)
ADD HL,HL
ADD HL,HL
LD C,L
LD B,H
ADD HL,HL
ADD HL,BC
LD BC,PLFileName
ADD HL,BC
EX DE,HL
LD A,BYTE3 fselPlayListEnt
LD HL,LWRD fselPlayListEnt
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JR NZ,?0042
?0041:
?0043:
; 179. {
; 180. listenterr1:
; 181. //不能进入PLAYLIST的情况
; 182. FSELInit(FSEL_TYPE_MUSIC, FSEL_ALL_REPEATALL, FSEL_TYPE_COMMONDIR,g_music_vars.location.disk);//初始化文件选择器
LD HL,g_music_vars+7
LD C,(HL)
PUSH BC
LD C,0
PUSH BC
CALL LWRD ?0107
POP AF
POP AF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -