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

📄 windows.cpp

📁 一个微型操作系统源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:

int get_index(int &u1)
{       char s[50],name[11],*c,*d;
	int i,j,count=0,k,x1;
	for(i=0,j=2;clipboard[j]!='\0';j++,i++)
		s[i]=clipboard[j];
	for(;clipboard[j]!=':'&&clipboard[j]!='\\';j--);
	s[j-2]='\0';
	j++;
	for(i=0;clipboard[j]!='\0';j++,i++)
	name[i]=clipboard[j];
	name[i]='\0';
       /*	write(50,200,0,name);
	write(50,300,0,s);
	asm{	mov ax,0
		int 16h;
	}*/
	Dir_Entries *entries;
	Directory dir(s);
	entries=dir.dir_read();
	if(entries[0].name[0]=='.')count++;
	if(entries[1].name[0]=='.')count++;
	if(s[3]==0)count=4;
	u1=count;
	d=To_String(count);
     //	write(100,400,0,d);
	for(j=count;j<30;j++ )
	{       write(100,100,0,entries[j].name);
		getchar();
		 write(100,100,15,entries[j].name);
		getchar();
		for(i=0;i<8;i++)
			if(name[i]!=entries[j].name[i])break;
		if((name[i]=='.'&&entries[j].name[i]==' ')||(i==8))
		{       i++;
			for(k=8;k<=10;k++,i++)
				if(name[i]!=entries[j].name[k])break;
			if(k==11)
			{
				x1=j-count;
				return (x1);
			      /*	c=To_String(j);
				write(100,400,0,c);
				asm{mov ax,0
					int 16h;
				}*/
			}
		}
	    //	if(entries[0].name[0]=='\x0')break;
	}

      return(-1);
}

void gui_paste()
{       int i,j,k;
	char s[50],ch[50];
	init_shell();
	if(clipboard[0]=='1')
	{	for(i=0;curr_directory[i]!='\0';i++)
			ch[i]=curr_directory[i];
			ch[i]='\0';
		for(k=0,j=2;clipboard[j]!='\0';j++,k++)
			s[k]=clipboard[j];
		s[k]='\0';
		for(;clipboard[j]!=':';j--);
		if(i<=2)j--;
		for(;clipboard[j]!='\0';j++,i++)
		ch[i]=clipboard[j];
		ch[i]='\0';
	      /*	write(100,200,0,ch);
		write(100,300,0,s);
		asm{mov ax,0
		int 16h;
		} */
		copy(ch,s);//call rename
	}
}
void copy_name(int x,int unwanted,char *name)
{       int i,j,k,flag=0;
	char s[50],ch[50];
	init_shell();
	for(i=0;curr_directory[i]!='\0';i++)
	{	ch[i]=curr_directory[i];
		s[i]=curr_directory[i];
	}
	s[i]=0;
	k=i;
	ch[k++]=':';
	Dir_Entries *entries;
	Directory dir(s);
	entries=dir.dir_read();
	for(i=0;curr_directory[i]!='\0';i++)
	s[i]=curr_directory[i];
	if(i>4)s[i++]=':';
	int c=i;
	for(j=0;j<=10;i++,j++)
	{
		if(entries[x+unwanted].name[j]==' ')
		{	s[i]='.';
			j=7;
		}
		else
		s[i]=entries[x+unwanted].name[j];
	}
	s[i] ='\0';
	for(i=0;name[i]!='.';i++,k++)
		ch[k]=name[i];
	if(i==8)i++;
	for(;name[i]!='\0';i++,k++)
		ch[k]=name[i];
	ch[k]=0;
	write(100,200,1,entries[x+unwanted].name);
	write(100,200,0,ch);
	write(100,300,0,s);
	asm{mov ax,0
	int 16h;
	}
	copy(ch,s);//call rename

}
int Window ::Event_Handler()
{   	char c1,c2,val,x=0,t=1,*z,s[50],dt[50],*d1;
	//select_type select;
	int i,j,k,x1,u1;
	char ch[20];
	Icons icon(1);
	Popupmenu *p;
	if(Active_Count!=0)
	icon.Draw(x,1);
	while(1)
	{	asm{   	mov ax,00h
			int 16h
			mov c1,ah
			mov c2,al
		   }
		   while(1)
		   {	if(c1==0x14)//Tasks key
			{   	taskbar.Select_Deselect('t',1);
					p=new Popupmenu(Active_Count,0);
					val=p->Init();
					delete p;
					taskbar.Select_Deselect('t',0);
					if(val!=-1)
					{	switch(val)
						{	case 0: Shade();
								int h=Turn_Off();
								if(h==0||h==1)
								{       int x=xmax/2-150,y=ymax/2-100,ht=120,wd=350;
									Message_Window(x,y,wd,ht,"TURNING OFF....... ");
									write(x+50,y+65,4,"QUITTING SPLENDOR , BYE !!!!!!");
									asm{    mov  ah,00h;
										int  16h;
									    }
									closesvga();
									return turnoff;
								}
								Draw();
								taskbar.Draw_Bar('t');
								break;
							case 1:closesvga();shell();load();init(Resolution);Draw();/*taskbar.Draw_Bar('t');*/break;
							case 2:break;
							case 3: z=Get_File();
								if(z[0]!='e')
								{
									for(i=0;z[i]!='\0';i++)
									ch[i]=z[i];
									ch[i]='\0';
									if(ch[i-1]=='T'&&ch[i-2]=='X'&&ch[i-3]=='T'&&ch[i-4]=='.')
									TXT_Reader(ch);
									else
									{       int x=xmax/2-150,y=ymax/2-100,ht=120,wd=400;
										Message_Window(x,y,wd,ht,"ERROR !!!");
										load_font(1);
										write(x+30,y+50,4,"Format  Not  Supported ");
										load_font(3);
										asm{   	mov ax,00h
											int 16h
										   }
									}
								}
								 break; //readerbreak;
							case 4:Change_Color(1);
								Plot_All(view);
								if(view==0) icon.Draw(x,1);
								else if(view==1|| view==2) icon.List_Draw(x,1,view);
								break;
							case 5: Change_Resolution();
								taskbar.Draw_Bar('t');
								Draw();
								break;
						}
					}
					break;
				}
				else if(c1==0x21)
				{	taskbar.Select_Deselect('f',1);
					p=new Popupmenu(Active_Count+1,t);//t represents obj selected or not in window
					val=p->Init();
					delete p;
					taskbar.Select_Deselect('f',0);
					if((t==0&&val==2)||(t==1&&val==6)) return(exit);
					else if(val==0)//create folder
					{
						z=Get_File();
						make_directory(z);
						Draw();
					}
					else if(t==1&&val==1)//open
					{ 	if((Active_Type[x]==folder||Active_Type[x]==drive)&&(Active_Count!=0))
						{	view=0;Body_Handler(0,0,1);return x; }
						else if((Active_Type[x]==file)&&(Active_Count!=0))
						{       for(i=0;curr_directory[i]!='\0';i++)
							ch[i]=curr_directory[i];
							ch[i++]=':';
							for(j=0;Active_List[x][j]!='\0';i++,j++)
								ch[i]=Active_List[x][j];
							ch[i]='\0';
							ch[i++]='.';
							ch[i++]='T';
							ch[i++]='X';
							ch[i++]='T';
							ch[i]='\0';
								//write(200,200,0,ch);
							TXT_Reader(ch);
						}
						else if((Active_Type[x]==bmp)&&(Active_Count!=0))
						{	for(i=0;curr_directory[i]!='\0';i++)
							ch[i]=curr_directory[i];
							ch[i++]=':';
							for(j=0;Active_List[x][j]!='\0';i++,j++)
								ch[i]=Active_List[x][j];
							ch[i]='\0';
							ch[i++]='.';
							ch[i++]='B';
							ch[i++]='M';
							ch[i++]='P';
							ch[i]='\0';
								//write(200,200,0,ch);
							//PIC_Viewer(ch);
						}
						else if(Active_Type[x]==unknown)
						{ for(i=0;curr_directory[i]!='\0';i++)
							ch[i]=curr_directory[i];
							ch[i++]=':';
							for(j=0;Active_List[x][j]!='\0';i++,j++)
								ch[i]=Active_List[x][j];
							ch[i]='\0';
							ch[i++]='.';
							ch[i++]='T';
							ch[i++]='X';
							ch[i++]='T';
							ch[i]='\0';
								//write(200,200,0,ch);
							TXT_Reader(ch);
						}
						Draw();
					}
					else if(t==1&&val==2)//save as
					{       if(Active_Type[x]!=folder)
						{	z=Get_File();
							if(z[0]!='e')
							{	for(i=0;z[i]!='\0';i++)
									ch[i]=z[i];
								ch[i]='\0';
								copy_name(x,unwanted,ch);
								Fly();
							}
							Draw();
						}
					}
					else if(t==1&&val==3)//rename
					{       if(Active_Type[x]!=folder)
						{	z=Get_File();
							if(z[0]!='e')
							{	for(i=0;z[i]!='\0';i++)
									ch[i]=z[i];
								ch[i]='\0';
								copy_name(x,unwanted,ch);
								remove_file(x,unwanted);
							}
							Draw();
						}

					}
					else if(t==1&&val==4)//remove
					{	//call remove
						remove_file(x,unwanted);
						Draw();
					}
					else if((t==0&&val==1)||(t==1&&val==5)) Properties(x);
				    //	t=1;
					break;
				}
				else if(c1==0x12)
				{  	taskbar.Select_Deselect('e',1);
					p=new Popupmenu(Active_Count+2,t);
					val=p->Init();
					delete p;
					taskbar.Select_Deselect('e',0);
					if(t==1&&val==0)//shift
					{       if(Active_Type[x]!=folder)
						{	tempx=x;
							copy_to_clipboard(x,1,unwanted);
						}
						else{Error("NOT SUPPORTED IN THIS VERSION !!");Draw();}

					}
					else if(t==1&&val==1)//copy
					{       if(Active_Type[x]!=folder)
						copy_to_clipboard(x,0,unwanted);
						else{Error("NOT SUPPORTED IN THIS VERSION !!");Draw();}
					}
					else if(val==2)//place
					{       gui_paste();
						if(clipboard[1]=='0')
						{       for(i=0;curr_directory[i]!='\0';i++)
								ch[i]=curr_directory[i];
							ch[i]=0;
							for(k=0,j=2;clipboard[j]!='\0';j++,k++)
							curr_directory[k]=clipboard[j];
							for(;clipboard[j]!=':';j--,k--);
								if(j<=4){j--;k--;}
							curr_directory[k]='\0';
							write(300,400,0,curr_directory);
							x1=get_index(u1);
							if(x1==-1)Error("Already moved or removed");
						       /*	d1=To_String(u1);
							write(400,400,10,d1);
							asm{	mov ax,0
								int 16h;
							   } */
							   else
							remove_file(x1,u1);
							for(i=0;ch[i]!='\0';i++)
							       curr_directory[i]=curr_directory[i];
							curr_directory[i]=0;

						}
						Fly();
						Draw();
					}          //	t=1;
					break;
				}
				else if(c1==0x2f)
				{  	taskbar.Select_Deselect('v',1);
					p=new Popupmenu(Active_Count+3,t);
					val=p->Init();
					delete p;
					taskbar.Select_Deselect('v',0);
					if(val>=0&&val<=2)
					{	Plot_All(val);
						view=val;
						if(view==0) icon.Draw(x,1);
						else if(view==1|| view==2) icon.List_Draw(x,1,view);
					}
					else if(val==3&& curr_directory[0]!='S')
					{	view=0;
						Body_Handler(0,0,1);   //reset now
						return(goup);
					}
					else if(val==4) //settings
					{       Change_Color(0);
						Winini();
						Plot_All(view);
						if(view==0) icon.Draw(x,1);
						else if(view==1|| view==2) icon.List_Draw(x,1,view);
					}
				      //	t=1;
				      break;
				}
				else if(c1==0x4b||c1==0x4d ||c1==0x50||c1==0x48)
				{       if(Active_Count!=0)
					{       t=1;
						x=Body_Handler(c1,c2,0);
						if(c1==0x1c)
						{	if(Active_Type[x]==folder||Active_Type[x]==drive)
							{	view=0;Body_Handler(0,0,1);return x; }
							else if(Active_Type[x]==file)
							{       for(i=0;curr_directory[i]!='\0';i++)
									ch[i]=curr_directory[i];
								ch[i++]=':';
								for(j=0;Active_List[x][j]!='\0';i++,j++)
									ch[i]=Active_List[x][j];
								ch[i]='\0';
								ch[i++]='.';
								ch[i++]='T';
								ch[i++]='X';
								ch[i++]='T';
								ch[i]='\0';
								//write(200,200,0,ch);
								TXT_Reader(ch);
							}
							else if(Active_Type[x]==bmp){}
							else if(Active_Type[x]==unknown){}
							Draw();
						}
						else if(c1==0x01&&c2==0x1b)
						{	t=0;
							break;
						}
						break;
				}
			 else break;
		   }
		   else if(c1==0x01&&c2==0x1b)
		   {	if(view==0) icon.Draw(x,0);
			else if(view==1|| view==2) icon.List_Draw(x,0,view);
			break;
		   }
		   else if(c1==0x1c)
		   {	if(Active_Count!=0)
			{	if(Active_Type[x]==folder||Active_Type[x]==drive)
				{view=0;Body_Handler(0,0,1);return x; }
				else if(Active_Type[x]==file)
				{       for(i=0;curr_directory[i]!='\0';i++)
						ch[i]=curr_directory[i];
					ch[i++]=':';
					for(j=0;Active_List[x][j]!='\0';i++,j++)
						ch[i]=Active_List[x][j];
					ch[i]='\0';
					ch[i++]='.';
					ch[i++]='T';
					ch[i++]='X';
					ch[i++]='T';
					ch[i]='\0';
					//write(200,200,0,ch);
					TXT_Reader(ch);
				}
				else if(Active_Type[x]==bmp){}
				else if(Active_Type[x]==unknown){}
				Draw();
			}
			break;
		   }
		   else break;
	}
	/*	if(c1==0x0e&&c2==0x08)
			break;  */
}
}

char Window ::Body_Handler(char &c1,char&c2,char reset)
{static char now=0;
 char x;
 Icons icon(1);
 char c3=c1,c4=c2,row=0,max=Active_Column[0]-1,min=0,col,i;
 int sum=0;
 if(reset) now=0;
 else
 { for(i=0;;i++)
   {	sum+=Active_Column[i];
	if(sum>now) break;
   }
   min=sum-Active_Column[i];
   max=sum-1;
   if(view==0)
   {    row=i;
	while(1)
	{	if(c3==0x4b &&now>min)//left arrow
		{	icon.Draw(now,0);
			now--;
			icon.Draw(now,1);
		}
		else if(c3==0x4d &&now<max)//Active_Count-1)//right arrow
		{       icon.Draw(now,0);
			now++;
			icon.Draw(now,1);
		//	if(now>max)
		}
		else if(c3==0x50)//down arrow
		{     if(now+Active_Column[row]<=max+Active_Column[row+1]
				&&now+Active_Column[row]<Active_Count )
			{     	icon.Draw(now,0);
				now+=Active_Column[row];
				icon.Draw(now,1);
				row++;
				min=max+1;
				max+=Active_Column[row];
			}
		}
		else if(c3==0x48&&row!=0)//up arrow
		{     if(now-Active_Column[row-1]<min)
			{       icon.Draw(now,0);
				row--;
				now-=Active_Column[row];
				icon.Draw(now,1);
				max=min-1;
				min=min-Active_Column[row];
			}
		}
		asm{   	mov ax,00h
			int 16h
			mov c3,ah
			mov c4,al
		}

		if(c3==0x14||c3==0x21 ||c3==0x12||c3==0x2f||c3==0x01||c3==0x1c)
		{       if(c3==0x01)
			{	icon.Draw(now,0);
				now=0;
			}

			x=now;
			if(c3==0x1c && Active_Type[x]==folder)
			now=0;
			c1=c3;
			c2=c4;
			return x;
		}
	}
   }
   else //if(view==1)
   {    col=i;
	while(1)
	{
		if(c3==0x48&&now>min)//up arrow
		{	icon.List_Draw(now,0,view);
			now--;
			icon.List_Draw(now,1,view);
		 }
		 else if(c3==0x50&&now<max)//Active_Count-1)//down arrow
		 {       icon.List_Draw(now,0,view);
			now++;
			icon.List_Draw(now,1,view);
			   //	if(now>max)
		 }
		 else if(c3==0x4d)//right arrow
		 {     if(now+Active_Column[col]<=max+Active_Column[col+1])
			{	icon.List_Draw(now,0,view);
				now+=Active_Column[col];
				icon.List_Draw(now,1,view);
				col++;
				min=max+1;
				max+=Active_Column[col];
			  }
		 }
		 else if(c3==0x4b&&col!=0)//left arrow
		 {     if(now-Active_Column[col-1]<min)
			{	icon.List_Draw(now,0,view);
				col--;
				now-=Active_Column[col];
				icon.List_Draw(now,1,view);
				max=min-1;
				min=min-Active_Column[col];
			  }
		  }
		  asm{   	mov ax,00h
			int 16h
			mov c3,ah
			mov c4,al
			  }
		if(c3==0x14||c3==0x21 ||c3==0x12||c3==0x2f||c3==0x01||c3==0x1c)
		{       if(c3==0x01)
			{	icon.List_Draw(now,0,view);
				now=0;
			}
			x=now;
			if(c3==0x1c && Active_Type[x]==folder) now=0;
			c1=c3;
			c2=c4;
			return x;
		}
	}
   }
 }
}
/*else */

⌨️ 快捷键说明

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