📄 ui_stop.s01
字号:
NAME ui_stop(17)
RSEG CODE_1(0)
RSEG CSTR(0)
RSEG CONST(0)
RSEG UDATA0(0)
EXTERN FS_Backup
EXTERN FS_CD
EXTERN FS_GetName
EXTERN FS_Restore
EXTERN MenuInReader
EXTERN PutS
EXTERN ResShowMultiString
EXTERN ResShowPic
EXTERN SetBackgdColor
EXTERN SetPenColor
EXTERN SetTextPos
EXTERN UpdateFileSelector
PUBLIC active
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN ap_message_init
EXTERN dir_name
EXTERN do_play
PUBLIC fileName
EXTERN fselGetErrID
EXTERN fselGetLocation
EXTERN fselGetNext
EXTERN fselGetNo
EXTERN fselGetPrev
EXTERN fselGetTotal
EXTERN fselInit
EXTERN fselSetLocation
EXTERN fselSetMode
EXTERN g_comval
PUBLIC g_file_total
EXTERN g_from_browser
EXTERN g_menu_active
EXTERN g_reader_vars
PUBLIC make_dirname
PUBLIC menu_pos
PUBLIC need_sel_file
EXTERN read_idm_data_reader
EXTERN reinit_idm_buf_reader
EXTERN reset_cur_list_bg_color_reader
PUBLIC sel_next
PUBLIC sel_prev
EXTERN show_active_list_reader
PUBLIC show_stop
EXTERN ui_err_msg
EXTERN unitochar
EXTERN ?CLZ80B_4_04_L00
EXTERN ?SS_DIV_L02
EXTERN ?S_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?STRCPY_L11
RSEG CODE_1
make_dirname:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * voice player stop program.
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. * $Id: ui_stop.c,v 1.2 2006/07/14 06:52:52 tangwh Exp $
; 10. *******************************************************************************
; 11. */
; 12. #include "actos.h"
; 13. #include "enhanced.h"
; 14. #include "ap_common.h"
; 15. #include "display.h"
; 16. #include "ap_reader.h"
; 17. extern bool g_menu_active; //为1进入MENU菜单,主要用来丢掉从目录选择时长按mode键返回
; 18. int active; //当前文件序号
; 19. int g_file_total; //总文件数
; 20. bool need_sel_file;
; 21. char fileName[50]; //用作存放一些局部变量的buffer,避免过多的局部变量造成堆栈溢出
; 22. const char menu_pos[6] = {22,22+18,22+18*2,22+18*3,22+18*4,22+18*5};
; 23.
; 24. #pragma codeseg(CODE_1)
; 25. /*
; 26. ********************************************************************************
; 27. *
; 28. ********************************************************************************
; 29. */
; 30. void make_dirname(void)
; 31. {
PUSH BC
PUSH DE
PUSH IX
LD HL,65504
ADD HL,SP
LD SP,HL
; 32. int result;
; 33.
; 34. char Backbuf[32];
; 35. fselGetLocation(&g_reader_vars.location);
CALL LWRD ?0116
; 36. if(g_reader_vars.location.path[0]==':')
LD A,(g_reader_vars+20)
CP 58
JR NZ,?0003
?0002:
; 37. {
; 38. strcpy(dir_name,"ROOT");
LD DE,?0004
LD HL,dir_name
CALL LWRD ?STRCPY_L11
; 39. }
; 40. else
JR ?0005
?0003:
; 41. {
; 42.
; 43. FS_Backup(Backbuf,FS_BACKUP_DIRINFO,0);//目录项备份
LD HL,0
PUSH HL
LD C,2
INC HL
INC HL
ADD HL,SP
EX DE,HL
CALL LWRD FS_Backup
POP HL
; 44. FS_CD("\\");
LD DE,?0006
CALL LWRD FS_CD
; 45. memcpy(dir_name, g_reader_vars.location.path, 12);
LD BC,12
LD DE,dir_name
LD HL,g_reader_vars+20
LDIR
; 46. result = FS_GetName(dir_name, 14); //取出长名
LD C,14
LD DE,dir_name
CALL LWRD FS_GetName
LD B,0
; 47. if (result != 0)
OR A
JR Z,?0008
?0007:
; 48. {
; 49. unitochar(dir_name, sizeof(dir_name), g_comval.langid);
LD HL,g_comval+12
LD C,(HL)
PUSH BC
LD C,30
LD DE,dir_name
LD A,BYTE3 unitochar
LD HL,LWRD unitochar
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
; 50. }
; 51. else
JR ?0009
?0008:
; 52. {
; 53. memcpy(dir_name, g_reader_vars.location.path, 12);
LD C,12
LD DE,dir_name
LD HL,g_reader_vars+20
LDIR
; 54. dir_name[8]=0;
LD (dir_name+8),A
; 55. dir_name[9]=0;
LD (dir_name+9),A
?0009:
; 56.
; 57. }
; 58. FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
LD HL,0
PUSH HL
LD C,2
INC HL
INC HL
ADD HL,SP
EX DE,HL
CALL LWRD FS_Restore
POP HL
?0005:
; 59.
; 60. }
; 61. }
LD HL,32
ADD HL,SP
LD SP,HL
POP IX
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0116:
LD DE,g_reader_vars+6
LD A,BYTE3 fselGetLocation
LD HL,LWRD fselGetLocation
JP LWRD ?BANK_CALL_DIRECT_L08
sel_next:
; 62.
; 63.
; 64.
; 65. BOOL sel_next(BOOL select_all)
; 66. {
PUSH BC
PUSH DE
PUSH AF
; 67. BOOL mc_result;
; 68.
; 69. mc_result = FSELSetMode(FSEL_DIR_REPEATALL);
LD E,3
LD A,BYTE3 fselSetMode
LD HL,LWRD fselSetMode
CALL LWRD ?BANK_CALL_DIRECT_L08
; 70.
; 71. mc_result = fselGetNext(g_reader_vars.location.filename);
LD DE,g_reader_vars+32
LD A,BYTE3 fselGetNext
LD HL,LWRD fselGetNext
CALL LWRD ?BANK_CALL_DIRECT_L08
LD B,L
; 72. if(!mc_result)
XOR A
OR B
JR NZ,?0011
?0010:
; 73. {
; 74. if(fselGetErrID() == FSEL_ERR_OUTOF) {return FALSE;}
LD A,BYTE3 fselGetErrID
LD HL,LWRD fselGetErrID
CALL LWRD ?BANK_CALL_DIRECT_L08
DEC L
JR NZ,?0014
?0012:
JR ?0014
?0013:
; 75. }
; 76. else //normal next file
?0011:
; 77. {
; 78. mc_result = fselGetLocation(&g_reader_vars.location);
CALL LWRD ?0116
; 79. fselSetLocation(&g_reader_vars.location);
LD DE,g_reader_vars+6
LD A,BYTE3 fselSetLocation
LD HL,LWRD fselSetLocation
CALL LWRD ?BANK_CALL_DIRECT_L08
; 80. return TRUE;
LD L,1
; 81. }
JR ?0015
?0014:
; 82.
; 83. return FALSE;
LD L,B
; 84. }
?0015:
POP AF
POP AF
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
sel_prev:
; 85.
; 86. BOOL sel_prev(BOOL select_all)
; 87. {
PUSH BC
PUSH DE
PUSH AF
; 88. BOOL mc_result;
; 89. mc_result = FSELSetMode(FSEL_DIR_REPEATALL);;
LD E,3
LD A,BYTE3 fselSetMode
LD HL,LWRD fselSetMode
CALL LWRD ?BANK_CALL_DIRECT_L08
; 90.
; 91. mc_result = fselGetPrev(g_reader_vars.location.filename);
LD DE,g_reader_vars+32
LD A,BYTE3 fselGetPrev
LD HL,LWRD fselGetPrev
CALL LWRD ?BANK_CALL_DIRECT_L08
LD B,L
; 92. if(!mc_result)
XOR A
OR B
JR NZ,?0017
?0016:
; 93. {
; 94. if(fselGetErrID() == FSEL_ERR_OUTOF) {return FALSE;}//normal end
LD A,BYTE3 fselGetErrID
LD HL,LWRD fselGetErrID
CALL LWRD ?BANK_CALL_DIRECT_L08
DEC L
JR NZ,?0020
?0018:
JR ?0020
?0019:
; 95. //else ASSERT(FALSE);
; 96. }
; 97. else //normal prev file
?0017:
; 98. {
; 99. mc_result = fselGetLocation(&g_reader_vars.location);
CALL LWRD ?0116
; 100. fselSetLocation(&g_reader_vars.location);
LD DE,g_reader_vars+6
LD A,BYTE3 fselSetLocation
LD HL,LWRD fselSetLocation
CALL LWRD ?BANK_CALL_DIRECT_L08
; 101. return TRUE;
LD L,1
; 102. }
JR ?0021
?0020:
; 103. return FALSE;
LD L,B
; 104. }
?0021:
POP AF
POP AF
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
show_stop:
; 105.
; 106.
; 107. /****************************************
; 108. *Function Name:show_stop
; 109. *
; 110. *****************************************/
; 111.
; 112. int show_stop(void)
; 113. {
PUSH BC
PUSH DE
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
LD HL,65518
ADD HL,SP
LD SP,HL
; 114. bool need_draw=FALSE;
; 115. bool mc_result;
; 116. unsigned char err_id;
; 117. int key;
; 118. int result;
; 119. int top, bottom, old_active, tmp, i, cur_group;
; 120. BOOL file_changed=TRUE; //文件改变
; 121. bool list_change;
; 122. g_menu_active=TRUE;
LD A,1
LD (g_menu_active),A
; 123. output8(0x4e,input8(0x4e)|0x8);
IN A,(78)
SET 3,A
OUT (78),A
; 124. mc_result = fselInit(FSEL_TYPE_TXT, FSEL_ALL_SEQUENCE, 0,g_reader_vars.location.disk); // init the file selector
LD HL,g_reader_vars+6
LD C,(HL)
PUSH BC
LD C,0
PUSH BC
LD E,4
LD A,BYTE3 fselInit
LD HL,LWRD fselInit
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
POP AF
; 125. need_sel_file = TRUE;
LD A,1
LD (need_sel_file),A
; 126. list_change = FALSE;
LD (IX-18),0
LD (IX-17),A
LD (IX-16),0
?0023:
; 127. while(1)
; 128. {
; 129. if(need_sel_file)
LD A,(need_sel_file)
OR A
JR Z,?0026
?0025:
; 130. { // 设置路径,初始化驱动器
; 131. // BYTE err_id;
; 132. if(UpdateFileSelector() == 0)
LD A,BYTE3 UpdateFileSelector
LD HL,LWRD UpdateFileSelector
CALL LWRD ?BANK_CALL_DIRECT_L08
LD A,L
OR H
JR NZ,?0028
?0027:
; 133. {
; 134. return 0;
LD L,A
LD H,A
; 135. }
JP LWRD ?0096
?0028:
; 136. need_sel_file = FALSE;
XOR A
LD (need_sel_file),A
; 137. file_changed = TRUE;
; 138. need_draw = TRUE;
LD (IX-17),1
LD (IX-18),1
?0026:
; 139. }
; 140. if(file_changed)
OR (IX-17)
JR Z,?0030
?0029:
; 141. {
; 142. //获得序号
; 143. active = fselGetNo();
LD A,BYTE3 fselGetNo
LD HL,LWRD fselGetNo
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (active),HL
; 144. if(active > 0)
LD C,L
LD B,H
LD HL,0
OR 128
SBC HL,BC
JP PO,?0104
XOR H
?0104:
JP P,?0032
?0031:
; 145. active--;
LD L,C
LD H,B
DEC HL
LD (active),HL
?0032:
; 146. g_file_total = fselGetTotal();
LD A,BYTE3 fselGetTotal
LD HL,LWRD fselGetTotal
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (g_file_total),HL
?0034:
; 147. while(ap_get_message()!= AP_KEY_NULL) {;}
CALL LWRD ap_get_message
OR A
JR NZ,?0034
?0035:
?0033:
; 148. 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
; 149.
; 150. //获得 loaction
; 151. fselGetLocation(&g_reader_vars.location);
CALL LWRD ?0116
; 152. make_dirname();
LD A,BYTE3 make_dirname
LD HL,LWRD make_dirname
CALL LWRD ?BANK_CALL_DIRECT_L08
; 153. file_changed = FALSE;
; 154. need_draw = TRUE;
LD (IX-17),0
LD (IX-18),1
?0030:
; 155. }
; 156. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 157. if(need_draw)
XOR A
OR (IX-18)
JP Z,?0037
?0036:
; 158. {
; 159. old_active=active;
LD HL,(active)
LD (IX-6),L
LD (IX-5),H
; 160. cur_group = active / 6;
LD BC,6
EX DE,HL
CALL LWRD ?SS_DIV_L02
LD (IX-8),E
LD (IX-7),D
; 161. top = cur_group*6;
EX DE,HL
ADD HL,HL
LD C,L
LD B,H
ADD HL,HL
ADD HL,BC
LD (IX-10),L
LD (IX-9),H
; 162. tmp = g_file_total - 1;
LD BC,(g_file_total)
DEC BC
; 163. bottom = top+5;
LD DE,5
ADD HL,DE
LD (IX-4),L
LD (IX-3),H
; 164. if(bottom>tmp)bottom = tmp;
EX DE,HL
LD L,C
LD H,B
OR 128
SBC HL,DE
JP PO,?0105
XOR H
?0105:
JP P,?0039
?0038:
LD L,C
LD H,B
LD (IX-4),L
LD (IX-3),H
?0039:
; 165.
; 166. //获得 loaction
; 167. fselGetLocation(&g_reader_vars.location);
CALL LWRD ?0116
; 168. reinit_idm_buf_reader(top, bottom, 0, g_comval.langid);
LD BC,(g_comval+12)
LD B,0
PUSH BC
LD L,B
LD H,B
PUSH HL
LD C,(IX-4)
LD B,(IX-3)
LD E,(IX-10)
LD D,(IX-9)
LD A,BYTE3 reinit_idm_buf_reader
LD HL,LWRD reinit_idm_buf_reader
CALL LWRD ?BANK_CALL_DIRECT_L08
POP HL
POP HL
; 169. ResShowPic(MENUTWO1,0,0);
LD C,0
PUSH BC
LD DE,196
LD A,BYTE3 ResShowPic
LD HL,LWRD ResShowPic
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
; 170. ///-SetTextOutMode(1);
; 171. SetBackgdColor(0x0000df1c);
LD BC,0
LD DE,57116
CALL LWRD SetBackgdColor
; 172. SetPenColor(Color_BLACK_def);
LD BC,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -