📄 page2.cpp
字号:
}
else
{
/*for(i=0;i<flag;i++)
{
printf("%c",contect[i]);
}*/
contect[flag]='\0';
m_display+=contect;
m_display+="\r\n";
}
}
close(b);
m_display+=bufferdir;
m_display+=">";
strLine.Format("%s",m_display);
GetDlgItem(IDC_EDITDIS)->SetWindowText(strLine);
m_cmd.Empty();
UpdateData(FALSE);
break;
case 4:/*--编辑文件--*/
flag=0;
k=0;
for(j=0;j<strlen(a);)
if(a[j]!=' '&&flag==0) j++;
else
{
flag=1;
b[k++]=a[++j];
}
b[k]='\0';
fd = open(b); //打开所创建的文件
if(fd ==-1)m_display+="Error:\n The file is not exist! \n Please create it first!\r\n";
else if(fd==-4)m_display+="Error:it's not a file,but a directory!\r\n";
else
{
m_display+="Please input the file contect:\r\n";
EditFile dlgInput;
if( dlgInput.DoModal() == IDOK )
{
// Create MIPS Pipeline dialog
UpdateData(TRUE);
this->SetActiveWindow();
}
dlgInput.m_input+='\0';
m_display+="Finish Editing\r\n";
strcpy(contect,dlgInput.m_input);
flag=write(fd,contect,strlen(contect));
if(flag == 0) m_display+="Finish Editing\r\n";
else if(flag ==-1) m_display+="Error:\n The disk size is not enough!\r\n";
else m_display+="The disk is not exist!\r\n";
}
close(b);
m_display+=bufferdir;
m_display+=">";
strLine.Format("%s",m_display);
GetDlgItem(IDC_EDITDIS)->SetWindowText(strLine);
m_cmd.Empty();
UpdateData(FALSE);
break;
case 5: /*-删除目录-*/
flag=0;
k=0;
for(j=0;j<strlen(a);)
if(a[j]!=' '&&flag==0) j++;
else
{
flag=1;
b[k++]=a[++j];
}
b[k]='\0';
rmdir(b);
m_display+=bufferdir;
m_display+=">";
strLine.Format("%s",m_display);
GetDlgItem(IDC_EDITDIS)->SetWindowText(strLine);
m_cmd.Empty();
UpdateData(FALSE);
break;
case 6:/*--更改当前目录--*/
flag=0;
k=0;
for(j=0;j<strlen(a);)
if(a[j]!=' '&&flag==0) j++;
else
{
flag=1;
b[k++]=a[++j];
}
b[k]='\0';
flag = chdir(b);
if(flag == -1) m_display+="Error:\n The path is not correct!\r\n";
else if(flag == -2) m_display+="Error:\nThe opened is not direct!\r\n";
else if(flag == -3) m_display+="Error:\nThe '\\' is too much !\r\n";
m_display+=bufferdir;
m_display+=">";
strLine.Format("%s",m_display);
GetDlgItem(IDC_EDITDIS)->SetWindowText(strLine);
m_cmd.Empty();
UpdateData(FALSE);
break;
case 9:///*-显示当前目录-*/
dir();
m_cmd.Empty();
UpdateData(FALSE);
break;
case 10: //*--创建子目录--/
flag=0;
k=0;
for(j=0;j<strlen(a);)
if(a[j]!=' '&&flag==0) j++;
else
{
flag=1;
b[k++]=a[++j];
}
b[k]='\0';
// strLine.Format("%d",strlen(b));
// GetDlgItem(IDC_EDIT1)->SetWindowText(strLine);
flag =mkdir(b);
if(flag == -1) m_display+="Error:\n The length of name is too long!\r\n";
else if(flag == -2) m_display+="Error:\n The direct item is already full !\r\n";
else if(flag == -3) m_display+="Error:\n The name is already in the direct ! \r\n";
else if(flag == -4) m_display+="Error:\n \\ can not in the name of a direct !\r\n";
else if(flag == -5) m_display+="Error:\n Error: \n The disk space is full!\r\n";
else if(flag == -6) m_display+="Error: \n '..' or '.' can not as the name of the direct!\r\n";
else if(flag == 0) m_display+="Successfully make dircet!!\r\n";
m_display+=bufferdir;
m_display+=">";
strLine.Format("%s",m_display);
GetDlgItem(IDC_EDITDIS)->SetWindowText(strLine);
m_cmd.Empty();
UpdateData(FALSE);
break;
case 12:/*---显示帮助信息--*/
print();
m_display+=bufferdir;
m_display+=">";
strLine.Format("%s",m_display);
edit->SetWindowText(strLine);
// edit->SetFocus();
// edit->SetSel(edit->LineLength(),edit->LineLength(), TRUE);
m_cmd.Empty();
UpdateData(FALSE);
break;
case 14:/*----执行可执行文件---*/
fd = open(a); //打开所创建的文件
if(fd ==-1) m_display+="Error:\n The file is not opened !\r\n";
else if(fd==-2) m_display+="The file can't open !\r\n";
else
{
flag = read(fd,contect);
if(flag == -1) m_display+="Error: \n The size is over the length of the file!\r\n";
else executive(contect,flag);
}
close(a);
psw=3;
// executive();
m_display+=bufferdir;
m_display+=">";
strLine.Format("%s",m_display);
GetDlgItem(IDC_EDITDIS)->SetWindowText(strLine);
m_cmd.Empty();
UpdateData(FALSE);
break;
default:
m_display+="ERROR: the command isn't exist!\r\n";
strLine.Format("%s",m_display);
GetDlgItem(IDC_EDITDIS)->SetWindowText(strLine);
m_cmd.Empty();
UpdateData(FALSE);
break;
}
return true;
}
return CDialog::PreTranslateMessage(pMsg);
}
/*----------------------------------------------------------------------------------------------*/
/*---------------------------------------更改当前目录-------------------------------------------*/
int CPage2::chdir(char *name)
{
int i,j,k,item;
char *str,*str1;
char *temp;
CString strLine;
struct direct *temp_dir;
temp_dir=(struct direct *)malloc(sizeof(struct direct));
*temp_dir=*cur_dir; /*-先用临时目录代替当前目录-*/
str=name; /*-str用来记录下次查找的起始地址-*/
if((!strcmp("..",name))||(!strcmp(".",name)))
{
m_display+="Error:the two directories are not exist!\r\n";
strLine.Format("%s",m_display);
GetDlgItem(IDC_EDITDIS)->SetWindowText(strLine);
return 0;
}
else
{
if(!strcmp("\\",name)) /*如果输入"\" ,回根目录*/
{
cur_dir = root;
curdir_block=2;
strcpy(bufferdir,"Root:");
return 0;
}
j=0;
for(i=0;i<(int)strlen(str);i++)/*查找有两个连续是"\",即"\\",退出 */
{
if(name[i]=='\\')
{
j++;
if(j>=2)
{
return -3;
}
}
else
j=0;
}
if(name[0]=='\\') /*如果最后一个是"\" ,去掉这个"\"*/
{
*temp_dir = *root;
strcpy(bufferdir,"Root:");
str++;
}
if(str[strlen(str)-1] == '\\')
{
str[strlen(str)-1] = '\0';
}
str1=strchr(str,'\\'); /*-找到'\'字符的位置-*/
temp = (char *)malloc(4*sizeof(char));/*-为子目录的名字分配空间-*/
if((fp=fopen("disk.dat","rb"))==NULL)
{
m_display+="Error:\nCannot open file!\r\n";
strLine.Format("%s",m_display);
GetDlgItem(IDC_EDITDIS)->SetWindowText(strLine);
return -11;
}
while(str1!=NULL) /*-找到-*/
{
for(i=0;i<str1-str;i++)
{
temp[i]=str[i];
}
temp[i]='\0';
for(j=0;j<MSD;j++) /*-查找该子目录是否在当前目录中-*/
{
for(k=0;k<(int)strlen(temp);)
{
if(temp_dir->directitem[j].name[k]==temp[k]) k++;
else break;
if(k==(int)strlen(temp)) {k=-1; break;}
}
if((temp_dir->directitem[j].property=='1')&&(k==-1))
break;
}
if(j>=MSD) /*-不在当前目录-*/
return(-1);
item=temp_dir->directitem[j].firstdisk;
fseek(fp,item*DISKSIZE,0);
fread(temp_dir,sizeof(struct direct),1,fp);
str=str1+1;
str1=strchr(str,'\\');
}
for(i=0;i<(int)strlen(str);i++)
temp[i]=str[i];
temp[i]='\0';
for(j=0;j<MSD;j++) /*-查找该子目录是否在当前目录中-*/
{
for(k=0;k<(int)strlen(temp);)
{
if(temp_dir->directitem[j].name[k]==temp[k]) k++;
else break;
if(k==(int)strlen(temp)) {k=-1;break;}
}
if((temp_dir->directitem[j].property=='1')&&(k==-1))
break;
}
free(temp);/*释放申请的临时空间*/
if(temp_dir->directitem[j].property!='1') /*-打开的不是目录-*/
return(-2);
if(j>=MSD) /*-不在当前目录-*/
return(-1);
item=temp_dir->directitem[j].firstdisk;
/*-当前目录在磁盘中位置-*/
fseek(fp,item*DISKSIZE,0);
fread(temp_dir,sizeof(struct direct),1,fp);
fclose(fp);
}
if(name[0] !='\\')
bufferdir = strcat(bufferdir,"\\"); /*-修改当前目录-*/
bufferdir = strcat(bufferdir,name);
curdir_block=item;
cur_dir=temp_dir; /*-将当前目录确定下来-*/
return 0;
}
/*----------------------------------------------------------------------------------------------*/
/*----------------------------------------关闭文件----------------------------------------------*/
int CPage2::close(char *name)
{
int i;
for(i=0;i<MOFN;i++)
{
if(!strcmp(u_opentable.openitem[i].name,name))
break;
}
if(i>=MOFN) /*--文件没有打开-*/
return(-1);
/*-----------清空该文件的用户打开表项的内容---------------------*/
strcpy(u_opentable.openitem[i].name,"");
u_opentable.openitem[i].firstdisk ='F';
u_opentable.openitem[i].size = 0;
u_opentable.cur_size--;
fd = -1; //文件打开表的序号为 -1
return 0;
}
/*----------------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------------*/
/*----------------------------------------创建文件----------------------------------------------*/
int CPage2::create(char *name)
{
int flag=0;
char *temdirect=(char*)malloc(sizeof(DIR_LENGTH));
char *t=(char*)malloc(5);
struct direct * temp_dir;
int i,j,r=0;
char extend=-1;
char name_temp[3]={0};
char *bufferdir_temp=(char*)malloc(sizeof(DIR_LENGTH));
char curdir_block_temp;
for(i=0;i<=int(strlen(bufferdir));i++)
*(bufferdir_temp+i)=*(bufferdir+i);
curdir_block_temp=curdir_block;
temp_dir=(struct direct *)malloc(sizeof(struct direct));
*temp_dir=*cur_dir; /*-将当前目录确定下来-*/
i=strlen(name)-1;
while(i>=0&&name[i]!='\\')
i--;
if(i!=-1)
{
for(int temp_i=0;temp_i<=5;temp_i++)
if((name+i)!=NULL)
{
i++;
*(t+(temp_i))=*(name+i);
}
name[i-5]='\0';
i=0;
while(name[i]!='\0')
{
*(temdirect+i)=*(name+i);
i++;
}
*(temdirect+i)='\0';
flag=1;
}
else
{
for(i=0;i<=int(strlen(name));i++)
*(t+i)=*(name+i);
}
if(flag==1)
r=chdir(temdirect);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -