📄 cmd.h
字号:
#include"openfile.h"
enum Or{CD=1,CD_,CD__,CATCON,DEL,DIR,EXIT,HELP,MD,NEW,RD,MORE,CHMOD,SHOWUSER,WR,WRONG};
enum Pro{EIFREG=1,EIREAD,EIWRITE,EIEXEC,EGREAD,EGWRITE,EGEXEC,EOREAD,EOWRITE,EOEXEC,EWRONG};
class TCmd
{
public:
TCmd();
void Op();
Or Tran(string tempin1); // 把string类型转换成Or类型
void Cd(string para); //设置目录
void Cd_(); //进入当前目录
void Cd__(); //返回上层目录
void Close(string para); //关闭文件
void Create(string str); //创建文件
void Del(string para); //删除文件
void Dir(); //列文件目录
void Exit(); //退出文件系统
void Help();
void Md(string para); //创建目录
void New(); //新建用户
int Properly(string para);//转换文件属性
void Open(string para); //打开文件
void Read(string para);
void Rd(string para); //删除目录
void Set(string para); //设置文件目录属性
void ShowUser();
void Wr(string para); //写文件
void StrUp(string &str);//将str中的小写字母变成大写字母
void CharToString(string &str1,string &str2,int n);//将接收到的array数组转化成string 类型
protected:
string In1;
string In2;
Or TranOr;
char array[80];
TEnter enter;
};
TCmd::TCmd()
{
Op();
}
void TCmd::Cd(string para)
{
if(para.length()<=0)
cout<<"Can not find the DIR!\n";
enter.ECd(para);
}
void TCmd::Cd_()
{
}
void TCmd::Cd__()
{
enter.ECd__();
}
void TCmd::Close(string para)
{
if(para.length()<=0)
cout<<"Can not find the File!\n";
if(enter.ECloseFile(para)!=true)
cout<<"Can not close the file!\n";
}
void TCmd::Create(string str)
{
if(enter.CFile(str)==true)
cout<<"A file was built!\n";
else
cout<<"Can not build the file!\n";
}
void TCmd::CharToString(string &str1,string &str2,int n)
{
int i,j;
char order[40],para[40];
int corder=0,cpara=0;
for(i=0,j=0;i<=n&&j<40;j++,i++)
{
if(array[i]==' '||array[i]=='\n')
{
order[j]='\0';
str1=order;
break;
}
else
{
order[j]=array[i];
corder++;
}
}
if(array[i]!='\n')
{
i++;
for(j=0;i<n&&j<40;j++,i++)
{
para[j]=array[i];
}
para[j]='\0';
str2=para;
}
else
str2="\0";
}
void TCmd::Del(string para)
{
if(para.length()<=0)
{
cout<<"Can not find the file!\n";
return ;
}
if(enter.EDelFile(para)==true)
cout<<"A file deleted!\n";
else
cout<<"Can not delete the file!\n";
}
void TCmd::Dir()
{
enter.EDirectory();
}
void TCmd::Exit()
{
cout<<"Good bye!\n";
exit(0);
}
void TCmd::Help()
{
cout<<setiosflags(ios::left)<<endl<<endl
<<setw(13)<<"命令"<<setw(13)<<"说明"<<setw(17)<<" 格式"<<endl<<endl
<<setw(13)<<"new"<<setw(13)<<"新建新用户"<<setw(17)<<" new"<<endl
<<setw(13)<<"user"<<setw(13)<<"显示用户清单"<<setw(17)<<" user"<<endl
<<setw(13)<<"catcon"<<setw(13)<<"新建文件"<<setw(17)<<" catcon [filename]"<<endl
<<setw(13)<<"write"<<setw(13)<<"写文件"<<setw(17)<<" write [filename]"<<endl
<<setw(13)<<"more"<<setw(13)<<"读文件"<<setw(17)<<" more [filename]"<<endl
<<setw(13)<<"delete"<<setw(13)<<"删除文件"<<setw(17)<<" delete [filename]"<<endl
<<setw(13)<<"chmod"<<setw(13)<<"改变属性"<<setw(17)<<" chmod [filename]"<<endl
<<setw(13)<<"dir"<<setw(13)<<"显示目录"<<setw(17)<<" dir"<<endl
<<setw(13)<<"cd"<<setw(13)<<"改变路径"<<setw(17)<<" cd [dirname]"<<endl
<<setw(13)<<"cd~"<<setw(13)<<"反回上一级"<<setw(17)<<" cd~"<<endl
<<setw(13)<<"md"<<setw(13)<<"新建文件夹"<<setw(17)<<" md [dirname]"<<endl
<<setw(13)<<"rd"<<setw(13)<<"删除文件夹"<<setw(17)<<" rd [dirname]"<<endl
<<setw(13)<<"help"<<setw(13)<<"显示帮助"<<setw(17)<<" help"<<endl
<<setw(13)<<"logout"<<setw(13)<<"注消"<<setw(17)<<" logout"<<endl<<endl<<endl;
}
void TCmd::Md(string para)
{
if(enter.ECreateDir(para)==true)
cout<<"A DIR created!\n";
else
cout<<"Can not create a DIR!\n";
}
void TCmd::New()
{
if(user[fun].u_uid==0)
{
enter.NewUser();
}
else
cout<<"You have not initiate a user!\n";
}
void TCmd::Op()
{
int i,c;
while(1)
{
c=0;
while(user[fun].u_name[c]!='\0'&&c<8)
{
cout<<user[fun].u_name[c];
c++;
}
cout<<":";
c=0;
while(user[fun].u_cdir->f_name[c]!='\0'&&c<8)
{
cout<<user[fun].u_cdir->f_name[c];
c++;
}
cout<<">";
begin:
for(i=0;i<80;i++)
{
array[i]=getchar();
if(array[i]!='\n')
continue;
else
break;
}
if(array[0]=='\n')
goto begin;
TCmd::CharToString(In1,In2,i);
StrUp(In1);//小写字母变大写
TranOr=Tran(In1);
switch(TranOr)
{
case CD:
Cd(In2);break;
case CD_:
Cd_();break;
case CD__:
Cd__();break;
case CATCON:
Create(In2);break;
case DEL:
Del(In2);break;
case DIR:
Dir();break;
case EXIT:
Exit();break;
case HELP:
Help();break;
case MD:
Md(In2);break;
case NEW:
New();break;
case RD:
Rd(In2);break;
case MORE:
Open(In2);
Read(In2);
Close(In2);
break;
case CHMOD:
Set(In2);break;
case SHOWUSER:
ShowUser();break;
case WR:
Open(In2);
Wr(In2);
Close(In2);break;
default: cout<<"'"<<In1<<"'"<<"未知的命令,请检查您的输入\n";
continue;
}
}
}
void TCmd::Open(string para)
{
if(enter.EOpenFile(para)!=true)
cout<<"Can not open the file!\n";
}
int TCmd::Properly(string para)
{
if(para=="IREAD")
return IREAD;
if(para=="IFREG")
return IFREG;
if(para=="IWRITE")
return IWRITE;
if(para=="IEXEC")
return IEXEC;
if(para=="GREAD")
return GREAD;
if(para=="GWRITE")
return GWRITE;
if(para=="GEXEC")
return GEXEC;
if(para=="OREAD")
return OREAD;
if(para=="OWRITE")
return EOWRITE;
if(para=="OEXEC")
return OEXEC;
return -1;
}
void TCmd::Rd(string para)
{
if(enter.EDelDir(para)==true)
cout<<"The DIR was deleted!\n";
else
cout<<"Can not delete the DIR!\n";
}
void TCmd::Read(string para)
{
enter.ERead(para);
}
void TCmd::ShowUser()
{
enter.EShowUser();
}
void TCmd::Set(string para)
{
if(para.length()<=0)
{
cout<<"Unsuccessful configuration!\n";
return ;
}
string in;
cout<<"Please input the file attribute: ";
cin>>in;
StrUp(in);
int pr=TCmd::Properly(in);
if(pr!=-1)
{
enter.ESet(pr,para);
}
else
{
cout<<"Unacceptible file attribute!\n";
}
}
void TCmd::StrUp(string &str)
{
int i=0;
for(i=0;i<str.length();i++)
{
if(str[i]>=97&&str[i]<=122)
{
str[i]=str[i]-32;
}
}
}
Or TCmd::Tran(string temp)
{
if(temp=="CD")
return CD;
if(temp=="CD.")
return CD_;
if(temp=="CD~")
return CD__;
if(temp=="CATCON")
return CATCON;
if(temp=="DELETE")
return DEL;
if(temp=="DIR")
return DIR;
if(temp=="LOGOUT")
return EXIT;
if(temp=="HELP")
return HELP;
if(temp=="MD")
return MD;
if(temp=="NEW")
return NEW;
if(temp=="MORE")
return MORE;
if(temp=="RD")
return RD;
if(temp=="USER")
return SHOWUSER;
if(temp=="CHMOD")
return CHMOD;
if(temp=="WRITE")
return WR;
return WRONG;
}
void TCmd::Wr(string para)
{
enter.EWrite(para);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -