bookmarkdel.s01
来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 678 行
S01
678 行
NAME bookmarkdel(17)
RSEG COM_MUSICBOOKMARKD(0)
RSEG COM_MUSICBOOKMARKD_C(0)
RSEG COM_MUSICBOOKMARKD_D(0)
PUBLIC BMKFileDataBuffD
PUBLIC BmkIMKD_Reg
PUBLIC DeleteBookMark
PUBLIC DeleteBookMarkItem
EXTERN FS_CD
EXTERN FS_FClose
EXTERN FS_FOpen
EXTERN FS_FRead
EXTERN FS_FRemove
EXTERN FS_FSeek
EXTERN FS_FWrite
EXTERN FS_GetCurDir
EXTERN FS_SetCurDir
PUBLIC GetBMkInforD
PUBLIC ReadBookMarkHeardD
PUBLIC hBmkFileD
PUBLIC sBmkFileNameD
PUBLIC sBmkRootD
EXTERN ?CLZ80B_4_04_L00
EXTERN ?S_MUL_L02
EXTERN ?SS_CMP_L02
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?ENT_AUTO_DIRECT_L09
EXTERN ?STRCMP_L11
RSEG COM_MUSICBOOKMARKD
ReadBookMarkHeardD:
; 1. #include "actos.h"
; 2. #include "ap_common.h"
; 3. #include <MusicBookMark.h>
; 4.
; 5. #define pMusicBookMarkFileD ((STRU_MusicBookMark*)BMKFileDataBuffD)
; 6. #define pBookMarkHeardD ((STRU_BookMarkHeard*)BMKFileDataBuffD)
; 7.
; 8. #pragma memory=constseg(COM_MUSICBOOKMARKD_C)
; 9. const char sBmkFileNameD[]="BOOKMARKBMK";
; 10. const char sBmkRootD[]=": ";
; 11. #pragma memory=default
; 12.
; 13. #pragma memory=dataseg(COM_MUSICBOOKMARKD_D)
; 14. HANDLE hBmkFileD;
; 15. uchar BmkIMKD_Reg;
; 16. char BMKFileDataBuffD[512];
; 17. #pragma memory=default
; 18.
; 19. #pragma codeseg(COM_MUSICBOOKMARKD)
; 20.
; 21.
; 22. BOOL ReadBookMarkHeardD()
; 23. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65532
; 24. long CurDirBak;
; 25.
; 26. BmkIMKD_Reg=input8(0x27);
; 27. output8(0x27,0);
; 28.
; 29. CurDirBak=FS_GetCurDir();
CALL LWRD ?0071
LD (IX-2),C
LD (IX-1),B
; 30. FS_CD(sBmkRootD);
LD DE,sBmkRootD
CALL LWRD FS_CD
; 31.
; 32. hBmkFileD=FS_FOpen(sBmkFileNameD,FS_OPEN_NORMAL);
LD C,0
LD DE,sBmkFileNameD
CALL LWRD FS_FOpen
LD (hBmkFileD),HL
; 33. FS_SetCurDir(CurDirBak);
LD C,(IX-2)
LD B,(IX-1)
LD E,(IX-4)
LD D,(IX-3)
CALL LWRD FS_SetCurDir
; 34. if(hBmkFileD==NULL)
LD HL,(hBmkFileD)
LD A,L
OR H
JR NZ,?0003
?0002:
; 35. {
; 36. output8(0x27,BmkIMKD_Reg);
LD A,(BmkIMKD_Reg)
OUT (39),A
; 37. return FALSE;
LD L,0
; 38. }
JR ?0004
?0003:
; 39. FS_FRead(BMKFileDataBuffD,1,hBmkFileD);
PUSH HL
LD C,1
LD DE,BMKFileDataBuffD
CALL LWRD FS_FRead
POP HL
; 40. return TRUE;
LD L,1
; 41. }
?0004:
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0071:
IN A,(39)
LD (BmkIMKD_Reg),A
XOR A
OUT (39),A
CALL LWRD FS_GetCurDir
LD (IX-4),L
LD (IX-3),H
RET
GetBMkInforD:
; 42.
; 43. BOOL GetBMkInforD(file_location_t *curfile, int *FileBKSecNo)
; 44. {
PUSH IY
PUSH IX
PUSH BC
PUSH DE
POP IY
; 45. int CurRecNo;
; 46.
; 47. if((pBookMarkHeardD->RecordCount>FILEBOOKMARK_MAX)||(pBookMarkHeardD->CurRecordNO>=FILEBOOKMARK_MAX))
LD BC,(BMKFileDataBuffD+2)
LD HL,15
CALL LWRD ?SS_CMP_L02
JR C,?0007
LD BC,32783
LD HL,(BMKFileDataBuffD)
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0006
?0007:
?0008:
?0005:
; 48. return FALSE;
JR ?0047
?0006:
; 49.
; 50. CurRecNo=0;
LD IX,0
?0010:
; 51. while(CurRecNo<pBookMarkHeardD->RecordCount)
CALL LWRD ?0072
JR NC,?0009
?0011:
; 52. {
; 53.
; 54. if(pBookMarkHeardD->BMkInfor[CurRecNo].ClusterNo==curfile->ClusterNo)
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,BMKFileDataBuffD
ADD HL,BC
LD BC,4
ADD HL,BC
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD L,C
LD H,B
LD C,(IY+9)
LD B,(IY+10)
AND A
SBC HL,BC
JR NZ,?0015
EX DE,HL
LD C,(IY+11)
LD B,(IY+12)
SBC HL,BC
JR NZ,?0015
?0012:
; 55. {
; 56. if(strcmp(pBookMarkHeardD->BMkInfor[CurRecNo].FileName,curfile->filename)==0)
PUSH IX
POP HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD BC,BMKFileDataBuffD
ADD HL,BC
LD BC,8
ADD HL,BC
EX DE,HL
LD HL,26
PUSH IY
POP BC
ADD HL,BC
CALL LWRD ?STRCMP_L11
LD A,L
OR H
JR NZ,?0015
?0014:
; 57. {
; 58. *FileBKSecNo=CurRecNo+1;
PUSH IX
POP HL
INC HL
PUSH HL
LD HL,2
ADD HL,SP
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
POP BC
LD (HL),C
INC HL
LD (HL),B
; 59. return TRUE; // have record
LD L,1
; 60. }
JR ?0016
?0015:
?0013:
; 61. }
; 62. CurRecNo++;
INC IX
JR ?0010
?0009:
; 63. }
; 64. *FileBKSecNo=pBookMarkHeardD->CurRecordNO+1;
LD HL,(BMKFileDataBuffD)
INC HL
PUSH HL
LD HL,2
ADD HL,SP
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
POP BC
LD (HL),C
INC HL
LD (HL),B
; 65. return FALSE;
?0047:
LD L,0
; 66. }
?0016:
POP AF
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
?0072:
LD BC,(BMKFileDataBuffD+2)
?0073:
PUSH IX
POP HL
JP LWRD ?SS_CMP_L02
DeleteBookMarkItem:
; 67.
; 68. /****************************************************************
; 69. *Description: delete bookmark item by Record Index
; 70. *Arguments:
; 71. * SelIndex:record index
; 72. * curfile:current music file information
; 73. * Returns:
; 74. * TRUE: Successful,
; 75. * FALSE: Fail.
; 76. * Notes:
; 77. ****************************************************************/
; 78. BOOL DeleteBookMarkItem(int SelIndex,file_location_t *curfile)
; 79. {
PUSH IY
PUSH IX
PUSH BC
PUSH AF
PUSH DE
POP IX
; 80. int StartIndex;
; 81. int FileBKSecNo;
; 82.
; 83. if(!ReadBookMarkHeardD())
LD A,BYTE3 ReadBookMarkHeardD
LD HL,LWRD ReadBookMarkHeardD
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JR Z,?0066
?0017:
; 84. return FALSE;
?0018:
; 85.
; 86. if(!GetBMkInforD(curfile,&FileBKSecNo))
LD HL,0
ADD HL,SP
LD C,L
LD B,H
INC HL
INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD A,BYTE3 GetBMkInforD
LD HL,LWRD GetBMkInforD
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JR Z,?0067
?0019:
; 87. {
; 88. FS_FClose(hBmkFileD);
; 89. output8(0x27,BmkIMKD_Reg);
; 90. return FALSE;
; 91. }
?0020:
; 92.
; 93. if(!FS_FSeek(FileBKSecNo,FS_SEEK_FFROMSTART,hBmkFileD))
LD HL,(hBmkFileD)
PUSH HL
LD C,0
PUSH BC
LD HL,4
ADD HL,SP
CALL LWRD ?0074
POP HL
POP HL
OR A
JR Z,?0067
?0021:
; 94. {
; 95. FS_FClose(hBmkFileD);
; 96. output8(0x27,BmkIMKD_Reg);
; 97. return FALSE;
; 98. }
?0022:
; 99. FS_FRead(BMKFileDataBuffD,1,hBmkFileD);
LD HL,(hBmkFileD)
PUSH HL
LD C,1
LD DE,BMKFileDataBuffD
CALL LWRD FS_FRead
POP HL
; 100.
; 101. if(SelIndex>=pMusicBookMarkFileD->RecordCount)
CALL LWRD ?0072
JR C,?0024
?0023:
; 102. {
; 103. FS_FClose(hBmkFileD);
?0067:
LD DE,(hBmkFileD)
CALL LWRD FS_FClose
; 104. output8(0x27,BmkIMKD_Reg);
LD A,(BmkIMKD_Reg)
OUT (39),A
; 105. return FALSE;
?0066:
LD L,0
; 106. }
JP LWRD ?0045
?0024:
; 107.
; 108. if((pMusicBookMarkFileD->CurRecordNO>=MUSICBOOKMARK_MAX)||(pMusicBookMarkFileD->RecordCount>MUSICBOOKMARK_MAX))
LD BC,32780
LD HL,(BMKFileDataBuffD)
LD A,B
XOR H
LD H,A
SBC HL,BC
JR NC,?0027
LD BC,(BMKFileDataBuffD+2)
LD HL,12
CALL LWRD ?SS_CMP_L02
JR NC,?0026
?0027:
?0028:
?0025:
; 109. {
; 110. pMusicBookMarkFileD->CurRecordNO=0;
LD HL,0
LD (BMKFileDataBuffD),HL
; 111. pMusicBookMarkFileD->RecordCount=0;
LD (BMKFileDataBuffD+2),HL
; 112. }
; 113. else
JP LWRD ?0044
?0026:
; 114. {
; 115. if(pMusicBookMarkFileD->CurRecordNO>=pMusicBookMarkFileD->RecordCount)
LD BC,(BMKFileDataBuffD+2)
LD HL,(BMKFileDataBuffD)
CALL LWRD ?SS_CMP_L02
JR C,?0031
?0030:
; 116. StartIndex=pMusicBookMarkFileD->CurRecordNO-pMusicBookMarkFileD->RecordCount;
LD BC,(BMKFileDataBuffD+2)
LD HL,(BMKFileDataBuffD)
JR ?0062
; 117. else
?0031:
; 118. StartIndex=MUSICBOOKMARK_MAX-(pMusicBookMarkFileD->RecordCount-pMusicBookMarkFileD->CurRecordNO);
LD HL,(BMKFileDataBuffD+2)
LD BC,(BMKFileDataBuffD)
AND A
SBC HL,BC
LD C,L
LD B,H
LD HL,12
?0062:
AND A
SBC HL,BC
PUSH HL
POP IY
?0032:
; 119.
; 120. SelIndex=StartIndex+SelIndex;
PUSH IY
POP BC
ADD IX,BC
; 121. if(SelIndex>=MUSICBOOKMARK_MAX)
LD BC,32780
PUSH IX
POP HL
LD A,B
XOR H
LD H,A
SBC HL,BC
JR C,?0034
?0033:
; 122. SelIndex-=MUSICBOOKMARK_MAX;
LD BC,65524
ADD IX,BC
?0034:
; 123.
; 124. if(StartIndex<=SelIndex) //delete item from buffer
PUSH IY
POP BC
CALL LWRD ?0073
JR C,?0036
?0035:
; 125. {
; 126. if(SelIndex<(MUSICBOOKMARK_MAX-1))
LD BC,32779
LD A,B
XOR H
LD H,A
SBC HL,BC
JR NC,?0059
?0037:
; 127. memcpy(&pMusicBookMarkFileD->MusicBreakPoint[SelIndex],&pMusicBookMarkFileD->MusicBreakPoint[SelIndex+1],(((MUSICBOOKMARK_MAX-1)-SelIndex)*sizeof(STRU_MusicBreakPoint)));
PUSH IX
POP BC
LD HL,11
AND A
SBC HL,BC
EX DE,HL
LD BC,30
CALL LWRD ?S_MUL_L02
PUSH DE
CALL LWRD ?0075
PUSH DE
CALL LWRD ?0076
POP DE
POP BC
LD A,C
OR B
JR Z,?0059
LDIR
?0059:
?0038:
; 128.
; 129. if(StartIndex!=0)
PUSH IY
POP HL
LD A,L
OR H
JR Z,?0061
?0039:
; 130. {
; 131. memcpy(&pMusicBookMarkFileD->MusicBreakPoint[MUSICBOOKMARK_MAX-1],&pMusicBookMarkFileD->MusicBreakPoint[0],sizeof(STRU_MusicBreakPoint));
LD BC,30
LD DE,BMKFileDataBuffD+334
LD HL,BMKFileDataBuffD+4
LDIR
; 132. memcpy(&pMusicBookMarkFileD->MusicBreakPoint[0],&pMusicBookMarkFileD->MusicBreakPoint[1],((StartIndex-1)*sizeof(STRU_MusicBreakPoint)));
PUSH IY
POP BC
DEC BC
LD DE,30
CALL LWRD ?S_MUL_L02
LD C,E
LD A,C
LD B,D
LD DE,BMKFileDataBuffD+4
LD HL,BMKFileDataBuffD+34
OR B
JR Z,?0061
JR ?0068
?0040:
; 133. }
; 134. }
; 135. else
?0036:
; 136. {
; 137. memcpy(&pMusicBookMarkFileD->MusicBreakPoint[SelIndex],&pMusicBookMarkFileD->MusicBreakPoint[SelIndex+1],((StartIndex-SelIndex-1)*sizeof(STRU_MusicBreakPoint)));
PUSH IX
POP BC
PUSH IY
POP HL
AND A
SBC HL,BC
EX DE,HL
DEC DE
LD BC,30
CALL LWRD ?S_MUL_L02
PUSH DE
CALL LWRD ?0075
PUSH DE
CALL LWRD ?0076
POP DE
POP BC
LD A,C
OR B
JR Z,?0061
?0068:
LDIR
?0061:
?0041:
; 138. }
; 139.
; 140. (pMusicBookMarkFileD->RecordCount)--;
LD HL,(BMKFileDataBuffD+2)
DEC HL
LD (BMKFileDataBuffD+2),HL
; 141.
; 142. if(pMusicBookMarkFileD->CurRecordNO==0)
LD HL,(BMKFileDataBuffD)
LD A,L
OR H
JR NZ,?0043
?0042:
; 143. pMusicBookMarkFileD->CurRecordNO=MUSICBOOKMARK_MAX-1;
LD HL,11
JR ?0063
; 144. else
?0043:
; 145. (pMusicBookMarkFileD->CurRecordNO)--;
LD HL,(BMKFileDataBuffD)
DEC HL
?0063:
LD (BMKFileDataBuffD),HL
?0044:
?0029:
; 146. }
; 147.
; 148. FS_FSeek(FileBKSecNo,FS_SEEK_FFROMSTART,hBmkFileD);
LD HL,(hBmkFileD)
PUSH HL
LD C,0
PUSH BC
LD HL,4
ADD HL,SP
CALL LWRD ?0074
POP HL
POP HL
; 149. FS_FWrite(BMKFileDataBuffD,1,hBmkFileD);
LD HL,(hBmkFileD)
PUSH HL
LD C,1
LD DE,BMKFileDataBuffD
CALL LWRD FS_FWrite
POP HL
; 150. FS_FClose(hBmkFileD);
LD DE,(hBmkFileD)
CALL LWRD FS_FClose
; 151. output8(0x27,BmkIMKD_Reg);
LD A,(BmkIMKD_Reg)
OUT (39),A
; 152.
; 153. return TRUE;
LD L,1
; 154.
; 155. }
?0045:
POP AF
JP LWRD ?0016
?0074:
LD E,(HL)
INC HL
LD D,(HL)
LD A,D
RLCA
SBC A,A
LD C,A
LD B,C
JP LWRD FS_FSeek
?0075:
LD E,C
LD D,B
PUSH IX
POP BC
CALL LWRD ?S_MUL_L02
LD HL,BMKFileDataBuffD
ADD HL,DE
LD BC,4
ADD HL,BC
EX DE,HL
RET
?0076:
LD C,30
PUSH IX
POP DE
CALL LWRD ?S_MUL_L02
LD HL,BMKFileDataBuffD
ADD HL,DE
LD C,34
ADD HL,BC
RET
DeleteBookMark:
; 156.
; 157. /****************************************************************
; 158. *Description: delete the BOOKMARK.BMK file
; 159. * Returns:
; 160. * TRUE: Successful,
; 161. * FALSE: Fail.
; 162. * Notes:
; 163. ****************************************************************/
; 164. BOOL DeleteBookMark(void)
; 165. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65532
; 166. long CurDirBak;
; 167.
; 168. BmkIMKD_Reg=input8(0x27);
; 169. output8(0x27,0);
; 170. CurDirBak=FS_GetCurDir();
CALL LWRD ?0071
; 171. FS_CD(sBmkRootD);
LD DE,sBmkRootD
CALL LWRD FS_CD
; 172.
; 173. FS_FRemove(sBmkFileNameD);
LD DE,sBmkFileNameD
CALL LWRD FS_FRemove
; 174.
; 175. FS_SetCurDir(CurDirBak);
LD E,(IX-4)
LD D,(IX-3)
CALL LWRD FS_SetCurDir
; 176. output8(0x27,BmkIMKD_Reg);
LD A,(BmkIMKD_Reg)
OUT (39),A
; 177. return TRUE;
LD L,1
; 178. }
JP LWRD ?BANK_LEAVE_DIRECT_L08
; 179.
RSEG COM_MUSICBOOKMARKD_C
sBmkFileNameD:
DEFB 'BOOKMARKBMK'
DEFB 0
sBmkRootD:
DEFB ': '
DEFB 0
RSEG COM_MUSICBOOKMARKD_D
hBmkFileD:
DEFS 2
BmkIMKD_Reg:
DEFS 1
BMKFileDataBuffD:
DEFS 512
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?