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

📄 page2.cpp

📁 一个简单的操作系统
💻 CPP
📖 第 1 页 / 共 4 页
字号:
								}
								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 + -