📄 osdlg.cpp
字号:
bool COsDlg::Fdisk(CString strin,CString *strshow) //分区
{
if(!strin.Compare("fdisk")) //没有参数,默认分区
{
char dn[8]={'a','b','c'};
int big[8]={24,56};
disk.Fdisk(3,dn,big);
strshow->Format("初始化为 A B C 盘");
UpdataDiskTree(); //更新磁盘树形输出,和磁盘分配表输出
UpdataShowInfo();
}
else
{ /*int index=strin.Find(' '); //返回空格键的索引
int strlength=strin.GetLength(); //获得命令的总长度
char dn[8]={'a','b','c'};
int big[8]={24,56};
disk.Fdisk(3,dn,big);
osdlg.m_strresult.Format("初始化为 A B C 盘");*/
strshow->Format("命令参数有误");
}
return TRUE;
}
bool COsDlg::Delete(CString strin,CString *strshow) //删除文件
{
int index=strin.Find(' '); //返回空格键的索引
char name[6]={' '};
int strlength=strin.GetLength(); //获得命令的总长度
if(12!=strlength)
{
strshow->Format("delete命令参数有误");
return FALSE;
}
name[0]=strin.GetAt(index+1);
name[1]=strin.GetAt(index+2);
name[2]=strin.GetAt(index+3);
name[3]=strin.GetAt(index+4);
name[4]=strin.GetAt(index+5);
if(disk.Delete(name,strshow))
{
UpdataDiskTree(); //更新磁盘树形输出,和磁盘分配表输出
UpdataShowInfo();
}
pmemory->Createprocess("delete",dwtime);
return TRUE;
}
bool COsDlg::Rdir(CString strin,CString *strshow) //删除空目录
{
int index=strin.Find(' '); //返回空格键的索引
char name[3]={' '};
int strlength=strin.GetLength(); //获得命令的总长度
if(8!=strlength)
{
strshow->Format("rdir 命令参数有误");
return FALSE;
}
name[0]=strin.GetAt(index+1);
name[1]=strin.GetAt(index+2);
name[2]=strin.GetAt(index+3);
if(disk.Rdir(name,strshow))
{
UpdataDiskTree(); //更新磁盘树形输出,和磁盘分配表输出
UpdataShowInfo();
}
pmemory->Createprocess("rdir",dwtime);
return TRUE;
}
bool COsDlg::Deldir(CString strin,CString *strshow) //删除空或非空目录
{
int index=strin.Find(' '); //返回空格键的索引
char name[3]={' '};
int strlength=strin.GetLength(); //获得命令的总长度
if(10!=strlength)
{
strshow->Format("deldir 命令参数有误");
return FALSE;
}
name[0]=strin.GetAt(index+1);
name[1]=strin.GetAt(index+2);
name[2]=strin.GetAt(index+3);
if(disk.Deldir(name,strshow))
{
UpdataDiskTree(); //更新磁盘树形输出,和磁盘分配表输出
UpdataShowInfo();
}
pmemory->Createprocess("deldir",dwtime);
return TRUE;
}
bool COsDlg::Type(CString strin,CString *strshow) //显示文件
{
int index=strin.Find(' '); //返回空格键的索引
char name[6]={' '};
int strlength=strin.GetLength(); //获得命令的总长度
if(10!=strlength)
{
strshow->Format("type 命令参数有误");
return FALSE;
}
name[0]=strin.GetAt(index+1);
name[1]=strin.GetAt(index+2);
name[2]=strin.GetAt(index+3);
name[3]=strin.GetAt(index+4);
name[4]=strin.GetAt(index+5);
CString str;
disk.Type(name,str,strshow);
pmemory->Createprocess("type",dwtime);
return TRUE;
}
bool COsDlg::Edit(CString strin,CString *strshow) //编辑文件
{
int index=strin.Find(' '); //返回空格键的索引
char name[6]={' '};
int strlength=strin.GetLength(); //获得命令的总长度
if(10!=strlength)
{
strshow->Format("edit 命令参数有误");
return FALSE;
}
name[0]=strin.GetAt(index+1);
name[1]=strin.GetAt(index+2);
name[2]=strin.GetAt(index+3);
name[3]=strin.GetAt(index+4);
name[4]=strin.GetAt(index+5);
if(disk.Edit(name,strshow))
{
UpdataShowInfo();
pmemory->Createprocess("edit",dwtime);
}
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////////////////
//执行命令函数
///////////////////////////////////////////////////////////////////////////////////////////
bool COsDlg::UpdataShowInfo() //更新显示磁盘分区表信息
{
osdlg.m_strinfo="";
CString s;
for(int i=0;i<128;i++)
{
s.Format("%2x ",disk.byinfo[i]);
osdlg.m_strinfo+=s;
if(i%16==15)
osdlg.m_strinfo+="\r\n";
}
return TRUE;
}
void COsDlg::Carryout(){ //执行命令函数
/*if(!osdlg.m_strinput.Compare("needa")){
pmemory->Createprocess(osdlg.m_strinput,dwtime);
osdlg.m_strinput="";
}*/
CString m_Strin=osdlg.m_strinput; //复制命令。
CString strError=""; //返回错误内容参数
int index=m_Strin.Find(' '); //返回空格键的索引
int strlength=m_Strin.GetLength(); //获得命令的总长度
if(!m_Strin.Compare("pub"))
{
PUB(m_Strin,&strError);
osdlg.m_strresult=strError;
}
else if(m_Strin.Left(index) == "cd") //命令为CD是,因为参数可为1,2或3个如: cd a
{
if(!CD(m_Strin,&strError))
osdlg.m_strresult=strError;
}
else if(m_Strin.Left(index) =="delete")
{
Delete(m_Strin,&strError);
osdlg.m_strresult=strError;
}
else if(m_Strin.Left(index) =="rdir")
{
Rdir(m_Strin,&strError);
osdlg.m_strresult=strError;
}
else if(m_Strin.Left(index) =="deldir")
{
Deldir(m_Strin,&strError);
osdlg.m_strresult=strError;
}
else if(m_Strin.Left(index) =="type")
{
Type(m_Strin,&strError);
osdlg.m_strresult=strError;
}
else if(m_Strin.Left(index) =="edit")
{
Edit(m_Strin,&strError);
osdlg.m_strresult=strError;
}
else if(!m_Strin.Compare("fdisk"))
{
Fdisk(m_Strin,&strError);
osdlg.m_strresult=strError;
}
else if(m_Strin.Left(index) == "create") //命令参数为五个如: Create abc.e
{
Create(m_Strin,&strError);
osdlg.m_strresult=strError;
}
else if(m_Strin.Left(index) == "makdir") //创建目录
{
Makdir(m_Strin,&strError);
osdlg.m_strresult=strError;
}
/*else if(!osdlg.m_strinput.Compare("chadir"))
{
pmemory->Createprocess(osdlg.m_strinput,dwtime);
}*/
else if(!osdlg.m_strinput.Compare("test"))
{
CString str;
str="i++";
pmemory->Createprocess("i++\r\ni--\r\ni++\r\ni--\r\ni++\r\ni--\r\ni++\r\ni--\r\ni++\r\ni--\r\ni++\r\ni--\r\ni++\r\ni--\r\ni++\r\ni--\r\n",dwtime);
}
else
{
if(m_Strin.GetLength()==5)
{
CString str;
char name[6];
name[0]=m_Strin.GetAt(0);
name[1]=m_Strin.GetAt(1);
name[2]=m_Strin.GetAt(2);
name[3]='.';
name[4]=m_Strin.GetAt(4);
if(disk.Find(name,&str,&strError))
{
if(!pmemory->Createprocess(str,dwtime))
osdlg.m_strresult="编译错误";
}
else
{
osdlg.m_strresult.Format("%s 不是内部或外部命令",m_Strin.Left(index));
}
}
else
{
osdlg.m_strresult.Format("%s 不是内部或外部命令",m_Strin.Left(index));
}
}
osdlg.m_strinput="";
osdlg.UpdateData(FALSE);
}
bool COsDlg::DiskTree(int index,HTREEITEM hRoot) //替归更新磁盘树形显示,
{
if(2>=index||128<index)
return TRUE; //出口
if(disk.byinfo[index]<=2)
return TRUE; //出口
char name[6]="";
byte type;
List list;
HTREEITEM hnewRoot;
byte newindex;
disk.file.Seek(index*64,CFile::begin);
disk.file.Read(&list,sizeof(List));
type=list.type;
switch(type)
{
case 3:
name[3]='.';
name[4]=list.postfix;
case 2:
name[2]=list.name[2];
name[1]=list.name[1];
case 1:
name[0]=list.name[0];
}
hnewRoot=osdlg.InsertTree(hRoot,name,type,1);
newindex=disk.byinfo[index]; //遍历同层目录
DiskTree(newindex,hRoot);
if(2==list.type) //如果是目录,则遍历子目录
{
newindex=list.start;
DiskTree(newindex,hnewRoot);
}
return TRUE;
}
bool COsDlg::UpdataDiskTree() //更新磁盘树形显示
{
HTREEITEM hRoot,hnewRoot;
char name[6]="";
byte type;
int index=0;
int sonindex=0;
osdlg.m_showdisk.DeleteAllItems();
for(int i=0;i<disk.byRootnum;i++)
{
hRoot=TVI_ROOT;
type=disk.Rootlist[i].type;
switch(type)
{
case 3:
name[3]='.';
name[4]=disk.Rootlist[i].postfix;
case 2:
name[2]=disk.Rootlist[i].name[2];
name[1]=disk.Rootlist[i].name[1];
case 1:
name[0]=disk.Rootlist[i].name[0];
}
hnewRoot=osdlg.InsertTree(hRoot,name,type,1);
index=disk.Rootlist[i].start;
DiskTree(index,hnewRoot); //遍历子目录
}
return TRUE;
}
void COsDlg::OnChangeEdit1()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -