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 + -
显示快捷键?