📄 ui_play.s01
字号:
NAME ui_play(17)
RSEG CODE_1(0)
RSEG UDATA0(0)
EXTERN BankSwitch
PUBLIC Delaytime
EXTERN FS_Exit
EXTERN FS_FClose
EXTERN FS_FOpen
EXTERN FS_GetFileLen
EXTERN FS_GetUnalignedLen
EXTERN GetDCStatus
EXTERN LoadData
EXTERN SetBackgdColor
EXTERN SetPenColor
PUBLIC Stop_display
EXTERN ToPrevScreenPosition
EXTERN active
EXTERN ap_get_message
EXTERN ap_handle_hotkey
EXTERN ap_message_init
EXTERN bookmark_op
PUBLIC count_autoplay
PUBLIC do_play
EXTERN fselGetByNO
EXTERN g_comval
EXTERN g_reader_vars
EXTERN need_sel_file
EXTERN ui_err_msg
PUBLIC view_file
EXTERN view_page_down
EXTERN view_page_up
EXTERN ?CLZ80B_4_04_L00
EXTERN ?L_LSH_L03
EXTERN ?SL_CMP_L03
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
RSEG CODE_1
do_play:
; 1. /*
; 2. *******************************************************************************
; 3. * ACTOS AP
; 4. * reader program.
; 5. *
; 6. * (c) Copyright, Actions Co,Ld.
; 7. * All Right Reserved
; 8. *
; 9. *
; 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. #include "TxtDec.h"
; 18. #include "bookmark.h"
; 19. #include "mmcmd.h"//模块层命令名定义
; 20.
; 21.
; 22. char Stop_display;
; 23. char count_autoplay;
; 24. char Delaytime;
; 25.
; 26. extern bool need_sel_file;
; 27. #pragma codeseg(CODE_1)
; 28.
; 29.
; 30. int view_file( void );
; 31. /*
; 32. ********************************************************************************
; 33. *
; 34. ********************************************************************************
; 35. */
; 36. int do_play(void)
; 37. {
PUSH BC
PUSH DE
PUSH IX
LD HL,65526
ADD HL,SP
LD SP,HL
; 38.
; 39. char key;
; 40. int result;
; 41. DC hDc;
; 42.
; 43. //保存当前设备状态
; 44. GetDCStatus(&hDc);
EX DE,HL
CALL LWRD GetDCStatus
; 45.
; 46. SetBackgdColor(Color_MENU_def);
LD BC,0
LD DE,65535
CALL LWRD SetBackgdColor
; 47. SetPenColor(Color_BLACK_def);
LD BC,0
LD E,C
LD D,B
CALL LWRD SetPenColor
; 48. // 初始化打开文件
; 49. fselGetByNO(g_reader_vars.location.filename, active + 1);
LD BC,(active)
INC BC
LD DE,g_reader_vars+32
LD A,BYTE3 fselGetByNO
LD HL,LWRD fselGetByNO
CALL LWRD ?BANK_CALL_DIRECT_L08
; 50. g_reader_vars.g_txt.FileHandle =FS_FOpen(g_reader_vars.location.filename,FS_OPEN_NORMAL);
LD C,0
LD DE,g_reader_vars+32
CALL LWRD FS_FOpen
LD (g_reader_vars+49),HL
; 51. if( g_reader_vars.g_txt.FileHandle == NULL )
LD A,L
OR H
JR NZ,?0003
?0002:
; 52. { // 错误处理
; 53. ui_err_msg(MFMTERR,MFMTERR,g_comval.langid);
LD BC,(g_comval+12)
LD B,A
PUSH BC
LD BC,538
LD E,C
LD D,B
LD A,BYTE3 ui_err_msg
LD HL,LWRD ui_err_msg
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
; 54. key = 0;
; 55. return 0;
LD HL,0
; 56. }
JR ?0004
?0003:
; 57.
; 58. g_reader_vars.g_txt.SectorTotal = FS_GetFileLen( g_reader_vars.g_txt.FileHandle ) ;
EX DE,HL
CALL LWRD FS_GetFileLen
LD (g_reader_vars+65),HL
; 59. g_reader_vars.g_txt.FileLengthBytes = ((long)( g_reader_vars.g_txt.SectorTotal-1) * FILE_SECTOR ) + FS_GetUnalignedLen( g_reader_vars.g_txt.FileHandle );
LD BC,65535
ADD HL,BC
INC BC
LD A,9
CALL LWRD ?L_LSH_L03
PUSH BC
PUSH HL
LD DE,(g_reader_vars+49)
CALL LWRD FS_GetUnalignedLen
LD A,H
RLCA
SBC A,A
LD E,A
LD D,E
POP BC
ADD HL,BC
EX DE,HL
POP BC
ADC HL,BC
LD C,L
LD B,H
EX DE,HL
LD (g_reader_vars+51),HL
LD (g_reader_vars+53),BC
; 60.
; 61. result = view_file();
LD A,BYTE3 view_file
LD HL,LWRD view_file
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
POP IX
; 62.
; 63.
; 64. FS_FClose( g_reader_vars.g_txt.FileHandle );
LD DE,(g_reader_vars+49)
CALL LWRD FS_FClose
; 65. FS_Exit();
CALL LWRD FS_Exit
; 66.
; 67.
; 68. //恢复保存设备状态
; 69. SetPenColor(hDc.PenColor);
LD HL,0
ADD HL,SP
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
CALL LWRD SetPenColor
; 70. SetBackgdColor(hDc.BackgdColor);
LD HL,4
ADD HL,SP
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
CALL LWRD SetBackgdColor
; 71.
; 72. return result;
PUSH IX
POP HL
; 73. }
?0004:
EX DE,HL
LD HL,10
ADD HL,SP
LD SP,HL
EX DE,HL
POP IX
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
view_file:
; 74.
; 75.
; 76. //////////////////////////////////////////////////
; 77. //阅读文件
; 78. int view_file( void )
; 79. {
PUSH BC
PUSH DE
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
LD HL,65510
ADD HL,SP
LD SP,HL
; 80. uint AutoPlayTime, AutoPlayTimeSet = 5;
; 81. BOOL FlagAutoPlay = FALSE;
; 82. BOOL bRedraw = TRUE;
; 83. byte nDrawRow;
; 84. int result;
; 85. char key;
; 86. bool bPageDownFlag = 0; //下翻页标记
; 87.
; 88. long FileLengthLeft= g_reader_vars.g_txt.FileLengthBytes - g_reader_vars.g_txt.CurrentSeek;
AND A
LD HL,(g_reader_vars+51)
LD BC,(g_reader_vars+59)
SBC HL,BC
EX DE,HL
LD HL,(g_reader_vars+53)
LD BC,(g_reader_vars+61)
SBC HL,BC
LD C,L
LD B,H
EX DE,HL
; 89. // if(g_reader_vars.g_txt.BufSector!=(g_reader_vars.g_txt.SectorTotal-1))
; 90. if(FileLengthLeft>0)
LD (IX-24),5
LD (IX-23),0
LD (IX-21),1
LD (IX-16),0
PUSH BC
PUSH HL
LD BC,0
LD L,C
LD H,B
CALL LWRD ?SL_CMP_L03
JR NC,?0006
?0005:
; 91. bPageDownFlag = TRUE;
LD (IX-16),1
?0006:
; 92. if(g_reader_vars.playflag)
LD A,(g_reader_vars+2)
OR A
JR Z,?0008
?0007:
; 93. {
; 94. FlagAutoPlay = TRUE;
; 95. AutoPlayTimeSet = g_reader_vars.autoplaytime;
LD BC,(g_reader_vars+3)
LD B,H
LD (IX-24),C
LD (IX-23),B
; 96. AutoPlayTime=AutoPlayTimeSet*2;
LD L,C
LD H,B
ADD HL,HL
LD (IX-26),L
LD (IX-25),H
?0008:
?0010:
; 97. }
; 98.
; 99. while( 1 )
; 100. {
; 101. DC oldDC_sav;
; 102. if( bRedraw )
XOR A
OR (IX-21)
JR Z,?0013
?0012:
; 103. {
; 104. nDrawRow = view_page_down(&g_reader_vars.g_txt, FALSE,NULL ); // 显示一屏
LD HL,0
PUSH HL
LD C,H
LD DE,g_reader_vars+49
LD A,BYTE3 view_page_down
LD HL,LWRD view_page_down
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
LD (IX-20),L
; 105. bRedraw = FALSE;
LD (IX-21),0
?0013:
; 106. }
; 107. GetDCStatus(&oldDC_sav);
LD HL,15
ADD HL,SP
EX DE,HL
CALL LWRD GetDCStatus
; 108. key = ap_get_message();
CALL LWRD ap_get_message
; 109.
; 110. switch( key )
LD E,A
CALL LWRD ?C_V_SWITCH_L06
DEFW 9
DEFB 5
DEFB 6
DEFB 28
DEFB 33
DEFB 48
DEFB 55
DEFB 69
DEFB 70
DEFB 128
DEFW ?0068
DEFW ?0019
DEFW ?0026
DEFW ?0046
DEFW ?0052
DEFW ?0058
DEFW ?0015
DEFW ?0019
DEFW ?0026
DEFW ?0046
?0015:
; 111. {
; 112. case AP_KEY_PLAY | AP_KEY_UP:
; 113. {
; 114. FileLengthLeft= g_reader_vars.g_txt.FileLengthBytes - g_reader_vars.g_txt.CurrentSeek;
AND A
LD HL,(g_reader_vars+51)
LD BC,(g_reader_vars+59)
SBC HL,BC
EX DE,HL
LD HL,(g_reader_vars+53)
LD BC,(g_reader_vars+61)
SBC HL,BC
LD C,L
LD B,H
EX DE,HL
; 115. if(FileLengthLeft<=0)
PUSH BC
PUSH HL
LD BC,0
LD L,C
LD H,B
CALL LWRD ?SL_CMP_L03
JR C,?0017
?0016:
; 116. {
; 117. g_reader_vars.g_txt.PrevSeek=0;
LD (g_reader_vars+55),HL
LD (g_reader_vars+57),BC
; 118. g_reader_vars.g_txt.CurrentSeek=0;
LD (g_reader_vars+59),HL
LD (g_reader_vars+61),BC
; 119. g_reader_vars.g_txt.BufSector=0;
LD (g_reader_vars+63),HL
; 120. }
; 121. else
JP LWRD ?0082
?0017:
; 122. {
; 123. ToPrevScreenPosition(&g_reader_vars.g_txt); //回上一屏
CALL LWRD ?0084
?0018:
; 124. }
; 125. return 0;
JP LWRD ?0082
; 126. }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -