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

📄 udf102fvd.cpp

📁 It is for standalone platform executing DVD Burning function,it supports DVD+R/+RW Disc .
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    eahd->impAttrLocation = 24;//sizeof(struct ExtendedAttrHeaderDesc);    eahd->appAttrLocation = udf_version > 0x102 ? ULONG_MAX : leattr;    RMMemcpy(buffer+16+176 ,&(eahd->impAttrLocation) ,4);    RMMemcpy(buffer+20+176 ,&(eahd->appAttrLocation) ,4);    eahd->descTag = get_tag(TID_EXTENDED_ATTRI_HEADER_DESC, desc_version, snum, icb, buffer+176, 24);//sizeof(struct ExtendedAttrHeaderDesc));    RMMemcpy(buffer+176 ,&(eahd->descTag.tagIdent),2);	RMMemcpy(buffer+2+176 ,&(eahd->descTag.descVersion),2);	RMMemcpy(buffer+4+176 ,&(eahd->descTag.tagChecksum),1);	RMMemcpy(buffer+5+176 ,&(eahd->descTag.reserved),1);	RMMemcpy(buffer+6 +176,&(eahd->descTag.tagSerialNum),2);	RMMemcpy(buffer+8+176 ,&(eahd->descTag.descCRC),2);	RMMemcpy(buffer+10+176 ,&(eahd->descTag.descCRCLength),2);	RMMemcpy(buffer+12+176 ,&(eahd->descTag.tagLocation),4);   	    iuea = (struct ImpUseExtendedAttr *)&fe->extendedAttr[eahd->impAttrLocation];    iuea->attrType = EXTATTR_IMP_USE;    iuea->attrSubtype = 1;    iuea->impUseLength = 8;    iuea->attrLength = 48 + 8;    iuea->impIdent.flags = 0;    RMMemcpy(iuea->impIdent.ident, UDF_ID_FREE_EA, strlen(UDF_ID_FREE_EA));    ((Uint16 *)iuea->impIdent.identSuffix)[0] = udf_version;    iuea->impIdent.identSuffix[2] = os_class;    iuea->impIdent.identSuffix[3] = os_id;      RMMemcpy(buffer+200 ,&(iuea->attrType) ,4);   RMMemcpy(buffer+204 ,&(iuea->attrSubtype) ,1);   RMMemcpy(buffer+208 ,&(iuea->attrLength) ,4);   RMMemcpy(buffer+212 ,&(iuea->impUseLength) ,4);   RMMemcpy(buffer+216 ,&(iuea->impIdent.flags) ,1);   RMMemcpy(buffer+217 ,iuea->impIdent.ident ,strlen(UDF_ID_DVD_CGMS));   RMMemcpy(buffer+ 240,iuea->impIdent.identSuffix ,8);       ((struct FreeEASpace *)iuea->impUse)->headerChecksum = ComputeEAChecksum((RMint8 *)buffer+200);         RMMemcpy(buffer+ 248,&(((struct FreeEASpace *)iuea->impUse)->headerChecksum),4);          iuea = (struct ImpUseExtendedAttr *)&fe->extendedAttr[eahd->impAttrLocation + iuea->attrLength];    iuea->attrType = EXTATTR_IMP_USE;    iuea->attrSubtype = 1;    iuea->impUseLength = 8;    iuea->attrLength = 48 + 8;    iuea->impIdent.flags = 0;    RMMemcpy(iuea->impIdent.ident, UDF_ID_DVD_CGMS, strlen(UDF_ID_DVD_CGMS));    ((Uint16 *)iuea->impIdent.identSuffix)[0] = udf_version;    iuea->impIdent.identSuffix[2] = os_class;    iuea->impIdent.identSuffix[3] = os_id;    //改寫   RMMemcpy(buffer+252 ,&(iuea->attrType) ,4);   RMMemcpy(buffer+256 ,&(iuea->attrSubtype) ,1);   RMMemcpy(buffer+260 ,&(iuea->attrLength) ,4);   RMMemcpy(buffer+264 ,&(iuea->impUseLength) ,4);   RMMemcpy(buffer+268 ,&(iuea->impIdent.flags) ,1);   RMMemcpy(buffer+269 ,iuea->impIdent.ident ,strlen(UDF_ID_DVD_CGMS));   RMMemcpy(buffer+ 292,iuea->impIdent.identSuffix ,8);                  dciu = (struct DVDCopyrightImpUse *)iuea->impUse;    dciu->headerChecksum = ComputeEAChecksum((RMint8 *)buffer+252);    dciu->CGMSInfo = 0;    dciu->dataType = 0;    dciu->protectionSystemInfo[0] = 0;   //改寫   RMMemcpy(buffer+300 ,&(dciu->headerChecksum) ,2);   RMMemcpy(buffer+302 ,&(dciu->CGMSInfo) ,1);   RMMemcpy(buffer+303 ,&(dciu->dataType) ,1);   //RMMemcpy(buffer+304 ,dciu->protectionSystemInfo ,4);       sad = (struct short_ad *)&(fe->allocDescs[leattr]);    putInt64L((RMuint8 *)&(sad->extLength),length);    fe->permissions = PERM_U_READ|PERM_G_READ|PERM_O_READ;    putInt32L((RMuint8 *)&fe->permissions,fe->permissions);    putInt32L((RMuint8 *)&sad->extPosition,position);            if ((attr==0x01)||(attr==0x02)||(attr==0x03)||(attr==0x04))	{		//sad->extPosition = fr->position;        type = ICB_FILE_TYPE_REGULAR;	}	else  //DIR	{	    type = ICB_FILE_TYPE_DIRECTORY;	    fe->permissions |= PERM_U_EXEC|PERM_G_EXEC|PERM_O_EXEC;	}                  flags = ICB_FLAG_AD_SHORT;    if (access_type == PARTITION_ACCESS_R)        flags |= ICB_FLAG_CONTIGUOUS|ICB_FLAG_NONRELOCATABLE;    else        fe->permissions |= PERM_U_WRITE|PERM_U_CHATTR|PERM_U_DELETE|                           PERM_G_WRITE|PERM_G_CHATTR|PERM_G_DELETE|                           PERM_O_WRITE|PERM_O_CHATTR|PERM_O_DELETE;    RMMemcpy(buffer+308 ,&(sad->extLength) ,4);   RMMemcpy(buffer+312 ,&(sad->extPosition) ,4);   RMMemcpy(buffer+44 ,&(fe->permissions) ,4);      	fe->icbTag = get_icbtag(0, icb_strategy, 0, 1, type, 0, 0, flags);		RMMemcpy(buffer+16,&(fe->icbTag.priorRecordedNumDirectEntries),4);	RMMemcpy(buffer+20,&(fe->icbTag.strategyType) ,2);	RMMemcpy(buffer+22,&(fe->icbTag.strategyParameter) ,2);	RMMemcpy(buffer+24,&(fe->icbTag.numEntries) ,2);	RMMemcpy(buffer+26,&(fe->icbTag.reserved ),1);	RMMemcpy(buffer+27,&(fe->icbTag.fileType) ,1);	RMMemcpy(buffer+28,&(fe->icbTag.parentICBLocation.logicalBlockNum) ,4);	RMMemcpy(buffer+32,&(fe->icbTag.parentICBLocation.partitionReferenceNum)  ,2);	RMMemcpy(buffer+34,&(fe->icbTag.flags) ,2);		fe->descTag = get_tag(TID_FILE_ENTRY, desc_version, snum, icb, buffer, totsize);				RMMemcpy(buffer , &(fe->descTag.tagIdent),2);	RMMemcpy(buffer+2 ,&(fe->descTag.descVersion),2);	RMMemcpy(buffer+4 ,&(fe->descTag.tagChecksum),1);	RMMemcpy(buffer+5 ,&(fe->descTag.reserved),1);	RMMemcpy(buffer+6 ,&(fe->descTag.tagSerialNum),2);	RMMemcpy(buffer+8 ,&(fe->descTag.descCRC),2);	RMMemcpy(buffer+10 ,&(fe->descTag.descCRCLength),2);	RMMemcpy(buffer+12 ,&(fe->descTag.tagLocation),4);				memcpy(udf_ptr+(icb-44)*2048,buffer,2048);		sad=NULL;eahd=NULL;    iuea=NULL;   dciu=NULL;	//free(fe);//free(buffer);	//return 0;}void   SetISO9660_Movies_DR(RMuint32 loc, RMuint8 *pattern)//268,pattern_info);{	ISODirRecord	DirRecord;	RMuint16 i,file_num;	typeUdfPath filename;	typeICBDir *icbPtr=NULL;      typeUdfFile *UdfNodePtr=NULL;      RMuint32 startAddr,FileLength;	RMMemcpy(&file_num,ICBFidPtr,2);	RMMemset(buffer, 0x00, 4096);	pbuf = buffer;		SetFirstDir(&DirRecord, (loc+Offset_NWA));	WriteDirectoryRecord(&DirRecord);	SetFirstDir(&DirRecord, 261+Offset_NWA);	DirRecord.name[0] = 0x01;	//DR€€ªº²Ä€Gµ§°O¿ý	WriteDirectoryRecord(&DirRecord);	for (i=file_num-6;i<file_num;i++)       	{		UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile));		if(RMCompareAsciiCaseInsensitively(UdfNodePtr->F_name, "PASS_MOVIES.PVM"))		{			startAddr=UdfNodePtr->FileAddr;             		FileLength=UdfNodePtr->F_Lengh;			SetDirectoryRecord(&DirRecord, UdfNodePtr->F_name, startAddr, FileLength, ISO_FILE);			WriteDirectoryRecord(&DirRecord);      				}	}	for (i=0;i<file_num-6;i++)       {         icbPtr    = (typeICBDir *)(ICBFidPtr+2+i*sizeof(typeICBDir));         UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile));         if ((icbPtr->attr)==0x03)  //找到該類型file,count &calculate it           {                          RMCopyAscii(filename,UdfNodePtr->F_name);              startAddr=UdfNodePtr->FileAddr;             FileLength=UdfNodePtr->F_Lengh;                          SetDirectoryRecord(&DirRecord, filename, startAddr, FileLength, ISO_FILE);		WriteDirectoryRecord(&DirRecord);                      }       }	RMMemcpy(udf_ptr+ loc*2048,buffer,4096);pbuf=NULL;}void    SetISO9660_Audio_DR(RMuint32 loc, RMuint8 *pattern)//270,pattern_info);{	ISODirRecord	DirRecord;	RMuint16 i,file_num;	typeUdfPath filename;	typeICBDir *icbPtr=NULL;      typeUdfFile *UdfNodePtr=NULL;      RMuint32 startAddr,FileLength;	RMMemcpy(&file_num,ICBFidPtr,2);	RMMemset(buffer, 0x00, 4096);	pbuf = buffer;		SetFirstDir(&DirRecord, (loc+Offset_NWA));	WriteDirectoryRecord(&DirRecord);	SetFirstDir(&DirRecord, 261+Offset_NWA);	DirRecord.name[0] = 0x01;	//DR€€ªº²Ä€Gµ§°O¿ý	WriteDirectoryRecord(&DirRecord);	for (i=file_num-6;i<file_num;i++)       	{		UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile));		if(RMCompareAsciiCaseInsensitively(UdfNodePtr->F_name, "PASS_AUDIO.PVM"))		{			startAddr=UdfNodePtr->FileAddr;             		FileLength=UdfNodePtr->F_Lengh;			SetDirectoryRecord(&DirRecord, UdfNodePtr->F_name, startAddr, FileLength, ISO_FILE);			WriteDirectoryRecord(&DirRecord);      				}	}	for (i=0;i<file_num-6;i++)       {         icbPtr    = (typeICBDir *)(ICBFidPtr+2+i*sizeof(typeICBDir));         UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile));         if ((icbPtr->attr)==0x02)  //找到該類型file,count &calculate it           {                          RMCopyAscii(filename,UdfNodePtr->F_name);              startAddr=UdfNodePtr->FileAddr;             FileLength=UdfNodePtr->F_Lengh;                          SetDirectoryRecord(&DirRecord, filename, startAddr, FileLength, ISO_FILE);		WriteDirectoryRecord(&DirRecord);                      }       }	RMMemcpy(udf_ptr+ loc*2048,buffer,4096);pbuf=NULL;}void SetISO9660_JPG_DR(RMuint32 loc, RMuint8 *pattern)//262 ,pattern_info);{	ISODirRecord	DirRecord;	RMuint16 i,file_num;	typeUdfPath filename;	//typeICBDir *icbPtr=NULL;      typeUdfFile *UdfNodePtr=NULL;      RMuint32 startAddr,FileLength;	RMMemcpy(&file_num,ICBFidPtr,2);	RMMemset(buffer, 0x00, 4096);	pbuf = buffer;		SetFirstDir(&DirRecord, (loc+Offset_NWA));	WriteDirectoryRecord(&DirRecord);	SetFirstDir(&DirRecord, 261+Offset_NWA);	DirRecord.name[0] = 0x01;	//DR€€ªº²Ä€Gµ§°O¿ý	WriteDirectoryRecord(&DirRecord);	for (i=file_num-6;i<file_num;i++)       	{		UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile));		if(RMCompareAsciiCaseInsensitively(UdfNodePtr->F_name, "PASS_PICTURES.PVM"))		{			startAddr=UdfNodePtr->FileAddr;             		FileLength=UdfNodePtr->F_Lengh;			SetDirectoryRecord(&DirRecord, UdfNodePtr->F_name, startAddr, FileLength, ISO_FILE);			WriteDirectoryRecord(&DirRecord);      				}	}	for (i=0;i<file_num-6;i++)       {         //icbPtr    = (typeICBDir *)(ICBFidPtr+2+i*sizeof(typeICBDir));         UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile));	 printf("#### @@@@%d filename=%s ,nwa=%ld\n",i,UdfNodePtr->F_name,UdfNodePtr->FileAddr);         if ((UdfNodePtr->Attribute)==0x01)  //找到該類型file,count &calculate it           {                          RMCopyAscii(filename,UdfNodePtr->F_name);              startAddr=UdfNodePtr->FileAddr;             FileLength=UdfNodePtr->F_Lengh;             printf("JPG DR#%d file:%s \n",i,UdfNodePtr->F_name);             SetDirectoryRecord(&DirRecord, filename, startAddr, FileLength, ISO_FILE);		WriteDirectoryRecord(&DirRecord);                      }       }	RMMemcpy(udf_ptr+ loc*2048,buffer,4096);pbuf=NULL;}void SetISO9660_Assets_DR(RMuint32 loc, RMuint8 *pattern){	ISODirRecord	DirRecord;	RMuint16 i,file_num;	RMuint32 startAddr,FileLength;	typeUdfFile *UdfNodePtr=NULL;	RMMemcpy(&file_num,ICBFidPtr,2);	RMMemset(buffer, 0x00, 4096);	pbuf = buffer;				SetFirstDir(&DirRecord, (loc+Offset_NWA));	WriteDirectoryRecord(&DirRecord);	SetFirstDir(&DirRecord, 259+Offset_NWA);	DirRecord.name[0] = 0x01;	//DR€€ªº²Ä€Gµ§°O¿ý	WriteDirectoryRecord(&DirRecord);		SetDirectoryRecord(&DirRecord, "ITRI_JPEG", (262+Offset_NWA), 2048, ISO_DIRECTORY);	WriteDirectoryRecord(&DirRecord);	SetDirectoryRecord(&DirRecord, "ITRI_MOVIES", (268+Offset_NWA), 2048, ISO_DIRECTORY);	WriteDirectoryRecord(&DirRecord);		SetDirectoryRecord(&DirRecord, "ITRI_MP3", (270+Offset_NWA), 2048, ISO_DIRECTORY);	WriteDirectoryRecord(&DirRecord);	/*	RMMemcpy(udf_ptr+ loc*2048,buffer,2048);	SetISO9660_DR(262,pattern,0x01);    	SetISO9660_DR(268,pattern,0x03);    	SetISO9660_DR(270,pattern,0x02);	*/		for (i=file_num-6;i<file_num;i++)       	{		UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile));		if(RMCompareAsciiCaseInsensitively(UdfNodePtr->F_name, "ASSET_LIST.PVM"))		{			startAddr=UdfNodePtr->FileAddr;             		FileLength=UdfNodePtr->F_Lengh;			SetDirectoryRecord(&DirRecord, UdfNodePtr->F_name, startAddr, FileLength, ISO_FILE);			WriteDirectoryRecord(&DirRecord);      				}	}	RMMemcpy(udf_ptr+ loc*2048,buffer,2048);pbuf=NULL;}void SetISO9660_Album_DR(RMuint32 loc, RMuint8 *pattern){	ISODirRecord	DirRecord;	RMuint16 i,file_num;	RMuint32 startAddr,FileLength;			typeUdfFile *UdfNodePtr=NULL;	RMMemcpy(&file_num,ICBFidPtr,2);	RMMemset(buffer, 0x00, 2048);	pbuf = buffer;			SetFirstDir(&DirRecord, (loc+Offset_NWA));	WriteDirectoryRecord(&DirRecord);	SetFirstDir(&DirRecord, 259+Offset_NWA);	DirRecord.name[0] = 0x01;	//DR€€ªº²Ä€Gµ§°O¿ý	/*printf("\n\n@@@@@@@@@@@@@ SetISO9660_Album_DR()  ENTRY @@@@@@@@@@@@@@@@@@@@@@@@@\n\n");	for (i=file_num-6;i<file_num;i++)       	{		UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile));		printf("@@@@ %d pvm=%s @@@\n",i,UdfNodePtr->F_name);	}	*/		WriteDirectoryRecord(&DirRecord);	for (i=file_num-6;i<file_num;i++)       	{		UdfNodePtr= (typeUdfFile *)(pattern+20+i*sizeof(typeUdfFile));		if(RMCompareAsciiCaseInsensitively(UdfNodePtr->F_name, "ALBUM.PVM"))	  	{			startAddr=UdfNodePtr->FileAddr;             		FileLength=UdfNodePtr->F_Lengh;			SetDirectoryRecord(&DirRecord, UdfNodePtr->F_name, startAddr, FileLength, ISO_FILE);			WriteDirectoryRecord(&DirRecord);      		}                     	}	RMMemcpy(udf_ptr+ loc*2048,buffer,2048);    	 pbuf =NULL;}

⌨️ 快捷键说明

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