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

📄 cdrdlg.cpp

📁 一个UDF系统的SCSI的CDROM刻录软件.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}
//----------------------------------------------------------------------------

void CCDRDlg::OnToc() 
{
	AfxMessageBox(m_bus.TOC());		
}
//----------------------------------------------------------------------------

void CCDRDlg::OnBusScan() 
{	
	m_bus.SCSIBusScan(info,0xff,false);
}
//----------------------------------------------------------------------------

void CCDRDlg::OnInquiry() 
{
	AfxMessageBox(m_bus.SCSIInquiry());
	AfxMessageBox(m_bus.SCSICapabilities ());
}
//----------------------------------------------------------------------------
void CCDRDlg::OnRead() 
{
	UpdateData();
	BYTE *buffer=new BYTE[m_length*2448];
	int readCount=(int)ceil((double)m_length/0x10);
	for(int i=0;i<readCount;i++){
		if(!m_bus.SCSIRead(buffer+i*0x10*(m_header?block_size+8:block_size),
			m_offset+i*0x10,m_length-i*0x10<0x10?m_length-i*0x10:0x10,
			m_header!=0)){
			delete buffer;
			return;
		}
	}
	//m_edit.m_baseAddress=m_offset*2048;
	m_edit.SetData(buffer,m_length*(m_header?block_size+8:block_size));
	FILE* file=fopen("new.txt","wb");
	fwrite(buffer,block_size,m_length,file);
	fclose(file);
	delete buffer;
	m_offset+=m_length;
	CString s;
	s.Format("%X",m_offset);
	m_str_offset=s;
	UpdateData(false);
}
//----------------------------------------------------------------------------

void CCDRDlg::OnWriteParameters() 
{
	AfxMessageBox(m_bus.WriteParameters());
}
//----------------------------------------------------------------------------

void CCDRDlg::OnBrowse() 
{
	static char BASED_CODE szFilter[] = "All Files (*.*)|*.*||";
	CFileDialog dlg(true,NULL,NULL,
				OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT,
				szFilter,NULL);
	if(dlg.DoModal()==IDOK ){
		m_fileName.Empty();
		m_fileList.DeleteAllItems ();
		POSITION pos=dlg.GetStartPosition();
		while(pos)	{
			CString name=dlg.GetNextPathName(pos);
			m_fileName+=name+"\r\n";
			m_fileList.InsertItem(0,name);
		}
		UpdateData(false);
		m_upload=true;
	}
}

//----------------------------------------------------------------------------

void CCDRDlg::OnWriteFiles() 
{
	m_fileName.Empty();
	for(int i=0;i<m_fileList.GetItemCount();i++){
		m_fileName+=m_fileList.GetItemText(i,0)+"\r\n";
	}
	if(m_fileName.IsEmpty())	return;
	m_bus.setLBA(m_offset);
	AfxMessageBox(m_bus.WriteFiles(m_fileName)?"Write Successful!":"Write Failed!");
	CString s;
	s.Format("%X",m_offset=m_bus.getLBA());
	m_str_offset=s;
	UpdateData(false);
}
//----------------------------------------------------------------------------

void CCDRDlg::OnWriteAsTemplate() 
{
	m_fileName.TrimRight();
	m_bus.setLBA(m_offset);
	FILE* file=fopen(m_fileName,"rb");
	if(file==NULL){
		AfxMessageBox("Failed to open input file.");
		return;
	}
	fseek(file,0,SEEK_END);
	unsigned int len=ftell(file);
	BYTE* buffer=new BYTE[len];
	fseek(file,0,SEEK_SET);
	ASSERT(fread(buffer,1,len,file)==len);
	m_edit.SetData(buffer,len);
	fclose(file);
	m_bus.WritePacket(buffer,m_offset,len/2048)?
		AfxMessageBox("Write Successful."):	
		AfxMessageBox("Write Failure.");

	delete buffer;
	CString s;
	s.Format("%X",m_offset=m_bus.getLBA());
	m_str_offset=s;
	UpdateData(false);
	
}
//----------------------------------------------------------------------------

void CCDRDlg::OnFormatDisc() 
{
	track_info ti;
	m_bus.ReadTrackInfo(m_track,&ti);
	if(!(ti.blank&&SCSI2::toInt32(ti.next_writtable_addr)==0)){
		AfxMessageBox("Disk is not blank.");
		return;
	}
	CLabelDlg dlg;
	dlg.m_hint="Please input disc label";
	if(dlg.DoModal()==IDOK){
		AfxMessageBox(m_bus.FormatDisc(LPCSTR(dlg.m_label))?
			"Disk Formatting Successful!":
			"Disk Formatting Failed!");
		CString s;
		s.Format("%X",m_offset=m_bus.getLBA());
		m_str_offset=s;
		UpdateData(false);
	}
}

//----------------------------------------------------------------------------

void CCDRDlg::OnCloseSession() 
{
	m_bus.setLBA(m_offset);
	AfxMessageBox(m_bus.CloseSession()?
		"CloseSession Successful!":
		"CloseSession Failed!");
	CString s;
	s.Format("%X",m_offset=m_bus.getLBA());
	m_str_offset=s;
	UpdateData(false);
}

//----------------------------------------------------------------------------

void CCDRDlg::OnReadTrackInfo() 
{
	UpdateData();
	AfxMessageBox(m_bus.ReadTrackInfo(m_track));
}
//----------------------------------------------------------------------------

void CCDRDlg::OnReadDiskInfo() 
{
	AfxMessageBox(m_bus.ReadDiskInfo());
}
//----------------------------------------------------------------------------
void CCDRDlg::OnReserveTrack() 
{
	AfxMessageBox(m_bus.ReserveTrack(0x168)?"Track Reserved Successful!":"Track Reservation Failure.");
}
//----------------------------------------------------------------------------

void CCDRDlg::OnSetMode2() 
{
	AfxMessageBox(m_bus.SetWriteParameters(0,10,5,0x20)?
		"Mode Set Successful!":
		"Mode Set Failed!");
}
//----------------------------------------------------------------------------

void CCDRDlg::OnSetMode1() 
{
	AfxMessageBox(m_bus.SetWriteParameters(1,10,4,0x20)?
		"Mode Set Successful!":
		"Mode Set Failed!");
}
//----------------------------------------------------------------------------

void CCDRDlg::OnSelectchangeCombo1() 
{
	CString curSel;
	m_driveCtrl.GetLBText(m_driveCtrl.GetCurSel(),curSel);
	for(int i=0;i<m_driveCtrl.GetCount();i++)
		if(info[i].m_name==curSel)	break;

	m_HA=info[i].m_HA;
	m_ID=info[i].m_ID;
	m_LUN=info[i].m_LUN;
	m_bus.SCSISelectDevice(m_HA,m_ID,m_LUN);
	UpdateData(false);
}
//----------------------------------------------------------------------------

void CCDRDlg::OnContent() 
{
	m_fileName=m_bus.ListFiles();
	m_fileList.DeleteAllItems();
	bool flag=false;
	int	 end=0;
	CString s=m_fileName;
	while(!s.IsEmpty()){
		end=s.FindOneOf(",;\t\r\n");
		CString singleFileName;
		if(end==-1)	{
			end=s.GetLength();
			singleFileName=s.Mid(0,end);
			s.Empty();
			continue;
		}
		else{
			singleFileName=s.Mid(0,end);
			s=s.Mid(end+1);
			s.TrimLeft();
		}
		singleFileName.TrimRight();
		m_fileList.InsertItem(0,singleFileName);
	}
	UpdateData(false);
	m_upload=false;
}
//----------------------------------------------------------------------------

void CCDRDlg::OnSave() 
{
	int total=m_fileList.GetSelectedCount();
	if(total<1){
		AfxMessageBox("Please Select the file(s) to save");
		return;
	}

	CLabelDlg dlg;
	dlg.m_hint="Please input directory to save files";
	if(dlg.DoModal()==IDOK){
		CString dir=dlg.m_label;
		//while(dir.Right(1)=="\\")	dir=dir.Left(dir.GetLength()-1);
		
		CFileFind finder;
		if(!PathFileExists(dir)&&
			!CreateDirectory(dir,NULL)){
			AfxMessageBox("Failed to create directory:\r\n"+dir);
		}
		int count=0;
		int* index=new int[total];
		POSITION pos = m_fileList.GetFirstSelectedItemPosition();
		while (pos)		  index[count++] = m_fileList.GetNextSelectedItem(pos);
		
		count=0;
		for(int i=0;i<total;i++){
			if(m_bus.SaveFileAs(index[i],dir+"\\"+m_fileList.GetItemText(index[i],0)))	
				count++;
		}
		CString s;
		s.Format("%d files are saved successfuly",count);
		AfxMessageBox(s);
		m_fileList.SetSelectionMark(-1);
	}
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------

⌨️ 快捷键说明

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