⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dosusr.c

📁 凌阳MP3 spSPCA755yuanma
💻 C
📖 第 1 页 / 共 4 页
字号:

#if (ID3Tag_OPTION==1)
//=========================================================================================
//add by XYQ 021118
//=========================================================================================
bit USR_Get_ID3Info(UCHAR selectDir,WORD fileIndex)
{

	unsigned char Status;
	unsigned char j,k;

	ULONG fdbLogAddr;
	WORD fdbOffset,i;
	BYTE *fdb;
	BYTE dirIndex;
	BYTE filereq;

	if(!fileIndex)
	{
		return false;
	}

	if ((dirIndex = USR_SetDir1(selectDir))!=0xff) //@@chchang_012203
	{
		filereq=USR_GetFileType(dirIndex);

		if (USR_FindCountedFile(fileIndex, &fdbLogAddr, &fdbOffset, filereq))
		{
			fdb = &G_ucStorData[fdbOffset]; //find the currfdb addr
			//get file startcluster
			G_searchCluster = fdb[0x1a] | (USHORT)fdb[0x1b]<<8;
			G_CurrentFile_StartCluster = G_searchCluster;
			//the file length
			G_DOS_FileSize = fdb[0x1c] | (ULONG)fdb[0x1d]<<8 | (ULONG)fdb[0x1e]<<16 | (ULONG)fdb[0x1f]<<24;
			//====Get ID3 TAG==========
			//	DbgPrint("search ID3!!!\n");
			//====ID3V2================
			if(X_Get_ID3V2_3())
			{
				unsigned long ID3V2_3_FrameSize;
				DbgPrint("Get ID3 V2.3!\n");
				ID3V2_3_FrameSize=X_Get_ID3V2_3_Frame(ID3V2_3_SongName,SongNameNDSingerName,60);
				if(ID3V2_3_FrameSize)
				{
					DbgPrint("get ID3V2.3 song name!-----------");
					for(i=0;(i<ID3V2_3_FrameSize && i<60);i++)
					{
						DbgPrint("%c",SongNameNDSingerName[i]);
					}
					DbgPrint("\n");
				}
				if(ID3V2_3_FrameSize<60)
				{
					ID3V2_3_FrameSize=X_Get_ID3V2_3_Frame(ID3V2_3_SingerName,&SongNameNDSingerName[ID3V2_3_FrameSize],60-ID3V2_3_FrameSize);
					if(ID3V2_3_FrameSize)
					{
						DbgPrint("get ID3V2.3 singer name!---------");
						for(Status=i;(Status<i+ID3V2_3_FrameSize && Status<60);Status++)
						{
							DbgPrint("%c",SongNameNDSingerName[Status]);
						}
						DbgPrint("\n");
					}
					i=i+ID3V2_3_FrameSize;
				}
				for(j=0;j<i;j++)
				{
		//			DbgPrint("%c",SongNameNDSingerName[j]);
				}
		//		DbgPrint("\n");
				G_SongNameNDSingerName_Length=j;
			}
			else
			//-----------------------------------------------
			//  ID3V1
			{
				if(X_Get_ID3V1_Info(SongNameNDSingerName,60))
				{
					DbgPrint("Get ID3 V1.0!\n");
					for(i=59;i>29;i--)//为在歌曲名和歌手名间插入'_'
					{
						SongNameNDSingerName[i+1]=SongNameNDSingerName[i];
					}
					SongNameNDSingerName[30]=0x00;
					for(i=29;i>0;i--)
					{
						if(SongNameNDSingerName[i]!=0x00 && SongNameNDSingerName[i]!=0x20) break;
					}
					for(j=60;j>31;j--)
					{
						if(SongNameNDSingerName[j]!=0x00 && SongNameNDSingerName[j]!=0x20) break;
					}
					i++;
					SongNameNDSingerName[i]='_';
					for(i++,k=31;k<=j;k++,i++)
					{
						SongNameNDSingerName[i]=SongNameNDSingerName[k];
					}

					G_SongNameNDSingerName_Length=i;

					for(Status=0;(Status<i);Status++)
					{
						DbgPrint("%c",SongNameNDSingerName[Status]);
					}
					DbgPrint("\n");
				}
				else
				{
				//-----------------------------------------------
				//No ID3 infomation, Disp file name
					DbgPrint("No ID3 infomation, Disp file name\n");
					//get long file name
					{
						unsigned char ContinueSearchLFN;

						DbgPrint("==start read long file name!==\n");

						ContinueSearchLFN=2;
						i=fdbOffset;
						if (DOS_ReadSector(K_DOS_DstSram, G_CurrentLongFDB_SectorAddr, 0))
						{
							while(i>=32)//add by XYQ
							{
								i=i-32;//add by XYQ
								fdb = &G_ucStorData[i]; //find the currfdb addr
								ContinueSearchLFN=X_Get_LongFileName(fdb,SongNameNDSingerName,60);
								if(ContinueSearchLFN!=2)
								{
									if(ContinueSearchLFN==1)
									{
										for(Status=0;(Status<26);Status++)
										{
											DbgPrint("%c",SongNameNDSingerName[Status]);
										}
									}
									break;
								}else{
									for(Status=0;(Status<26);Status++)
									{
										DbgPrint("%c",SongNameNDSingerName[Status]);
									}
								}
							}
							if(ContinueSearchLFN==2 && G_OldLongFDB_SectorAddr!=0)
							{
								DbgPrint("search lod sector\n");
								if (DOS_ReadSector(K_DOS_DstSram, G_OldLongFDB_SectorAddr, 0))
								{
									i=512;
									while(i>=32)//add by XYQ
									{
										i=i-32;//add by XYQ
										fdb = &G_ucStorData[i]; //find the currfdb addr
										ContinueSearchLFN=X_Get_LongFileName(fdb,SongNameNDSingerName,60);
										if(ContinueSearchLFN!=2)
										{
											if(ContinueSearchLFN==1)
											{
												for(Status=0;(Status<26);Status++)
												{
													DbgPrint("%c",SongNameNDSingerName[Status]);
												}
											}
											break;
										}else{
											for(Status=0;(Status<26);Status++)
											{
												DbgPrint("%c",SongNameNDSingerName[Status]);
											}
										}
									}
								}
							}
							if(ContinueSearchLFN==0)
							{
								#if 1   //get short file name
								if (DOS_ReadSector(K_DOS_DstSram, G_CurrentLongFDB_SectorAddr, 0))
								{
									unsigned char i;
									fdb = &G_ucStorData[fdbOffset]; //find the currfdb addr
									for(i=0;i<13;i++)
									{
										if(i<8)
										{
											SongNameNDSingerName[i]=fdb[i];
										}else{
											if(i==8)
											{
												SongNameNDSingerName[i]='.';
											}else{
												SongNameNDSingerName[i]=fdb[i-1];
											}
										}
									}
								}
								for(Status=0;(Status<12);Status++)
								{
									DbgPrint("%c",SongNameNDSingerName[Status]);
								}
								G_SongNameNDSingerName_Length=12;
								#endif
							}
							DbgPrint("\n==end read long file name!==\n");
						}
					}
				}
			}
		}
		else
		{
//			DbgPrint("no file\n\n");
			return false;
		}
 	}
	else
	{
//		DbgPrint("USR_SetDir1 fail\n");
		return false;
	}

//	File_Close(1, NULL, K_DOS_ReadFile, 0); // close file now

}
#endif
//End of ID3 Tag Supported

void USR_File_Lock(bit OnOff) USING_0
//BYTE USR_FileOpenPlay(UCHAR selectDir, UCHAR minorMode, WORD fileIndex) USING_0 //@@chchang_012203
{
	ULONG fdbLogAddr;
	WORD fdbOffset;
	BYTE *fdb;
	BYTE sts = FALSE;
	//WORD fHandle;
	BYTE dirIndex;
	BYTE filereq;

	if(G_FileCurrentIndex&& ((sts = dirIndex = USR_SetDir1(G_DSPPrimeMODE))!=0xff)) //@@chchang_012203
	{
		filereq=USR_GetFileType(dirIndex);

		if (USR_FindCountedFile(G_FileCurrentIndex, &fdbLogAddr, &fdbOffset, filereq))
		{
			if(DOS_ReadSector(K_DOS_DstSram,fdbLogAddr,0))
			{
				fdb = &G_ucStorData[fdbOffset]; //find the currfdb addr
				G_FileLock=OnOff;
				if(OnOff)
					fdb[0x0b]|=0x01; 
		    	else
					fdb[0x0b]&=0xfe;
				DOS_WriteSector(K_DOS_SrcSram,fdbLogAddr,0);
			}
		}
	}
}

//-----------------------------------------------------------------------------
BYTE USR_SerachDeletedfdb(WORD fileCount, BYTE filereq) USING_0
{
	BYTE sts = TRUE;
	WORD j, k, count=0;
	ULONG logAddr;
	WORD searchCluster;
	WORD prevCluster;
	BYTE fileType,search;
#if (ID3Tag_OPTION==1)
	G_OldLongFDB_SectorAddr = 0;
#endif
	search=0;
	searchCluster = G_DOS_CurrDirCluster;
	while ((searchCluster != 0xffff) && sts)
	{
		prevCluster = searchCluster;
		logAddr = DOS_ClusterLogAddr(searchCluster);
		for (j = 0; j < G_DOS_ClusterSize && sts; j += K_DOS_SectorSize)
		{
			sts = DOS_ReadSector(K_DOS_DstSram, logAddr+j, 0);
#if (ID3Tag_OPTION==1)
			G_CurrentLongFDB_SectorAddr=logAddr+j;
#endif
			if (sts)
			{
				for (k = 0; k < K_DOS_SectorSize; k += 32)
				{
					if (G_ucDataBuffer[k] != 0x00)
					{
						
						//DbgPrint("before file open_G723=%bx\n",(BYTE)_G723);
						if(!search)
                        {
							if(G_ucDataBuffer[k]==0xe5)
							{
							  search=1;
							  deletedfdbLogAddr=logAddr + j;
							  deletedfdbOffset = k;
							};
                        };
						fileType = USR_CheckType(&G_ucDataBuffer[k]);
						if (fileType!=0)
						{
							
							if(fileType==filereq)
							{
								count++;
							    if(search)
								{
									movingfdbLogAddr=logAddr + j;
							  		movingfdbOffset = k;
									return TRUE;
								}
							};
							if(count >= fileCount)
							{
								
								return FALSE;
							}
						}
					}
					else
						return FALSE;
				}  // end for
#if (ID3Tag_OPTION==1)
				G_OldLongFDB_SectorAddr = logAddr+j;
#endif
			}
		} // end for
		searchCluster = DOS_GetNextCluster(searchCluster);
		if (prevCluster == searchCluster || searchCluster == 0)//@wyeo@110502
			break;
	} // end while
	
    return FALSE;
}

void USR_ClearFile(void)
{
    BYTE i,*fdb;
	BYTE sts = TRUE;
	//WORD fHandle;
	BYTE dirIndex;
	BYTE filereq;
	USHORT fileIndex;
	fileIndex = G_USR_DirList[G_UIMODE].totalFile;
	if(!fileIndex) return;
	while(sts)
	{
		if( ((dirIndex = USR_SetDir1(G_DSPPrimeMODE))!=0xff)) //@@chchang_012203
		{//WIA
			filereq=USR_GetFileType(dirIndex);

			if (USR_SerachDeletedfdb(fileIndex, filereq))
			{//WIAA
				if(DOS_ReadSector(K_DOS_DstSram,movingfdbLogAddr,0))
				{//WIAAA
					fdb = &G_ucStorData[movingfdbOffset]; //find the currfdb addr
					for(i=0;i<32;i++)
					  fdbBack[i] = fdb[i];
					fdb[0x00] = 0xe5;
				   
					if(movingfdbLogAddr!=deletedfdbLogAddr)
					{
					   DOS_WriteSector(K_DOS_SrcSram,movingfdbLogAddr,0);
					   DOS_ReadSector(K_DOS_DstSram,deletedfdbLogAddr,0);
					};
					fdb = &G_ucStorData[deletedfdbOffset];
					for(i=0;i<32;i++)
					  fdb[i]=fdbBack[i];
					DOS_WriteSector(K_DOS_SrcSram,deletedfdbLogAddr,0);
					
					//DOS_ReadSector(K_DOS_DstSram,movingfdbLogAddr,0);
		
					//fdb = &G_ucStorData[movingfdbOffset]; //find the currfdb addr
					//for(i=0;i++;i<32)
					  //fdbBack[i] = fdb[i];
					//fdb[0x00] = 'K';
				    //DOS_WriteSector(K_DOS_SrcSram,movingfdbLogAddr,0);
					
				};//WIAAA
			  }//WIAA
			  else
			   sts=FALSE;
		}//WIA
		else
			sts=FALSE; //
    }//WHILE
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -