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

📄 desktop.cpp

📁 一个微型操作系统源码
💻 CPP
字号:
//#include"disk.cpp"
#include"splendor\windows.cpp"
//#include"c:\tc\bin\os\project\bitmap\test2.cpp"
char Desktop_Color,Resolution;
class Desktop
{	public :char back_flag;   //flags whether back image or color
		char *b_properties; //stores color or address of image depending on flag
		int startx,starty;
		Desktop();
		void Desk_Paint();
		int Event_Handler();
};

Desktop::Desktop()
{	back_flag='n';
	*b_properties=Desktop_Color;
	startx=30;
	starty=30;
}

void Desktop::Desk_Paint()
{
	int curr_x=startx,curr_y=starty,i,k,j,count=0; //currx & y rep icon locations & count rep no of entries;
	char *c="C:\\DESKTOP",dt[]={'S','Y','S','T','E','M','\0'};
	Icons icon(0);
	type t;
	Dir_Entries *entries;
	Paint(*b_properties);
	Directory dir(c);
	entries=dir.dir_read();
	char n[4];
	for(i=0;dt[i]!='\0';i++)
	Active_List[0][i]=dt[i];
	Active_Type[0]=system;     //system
	if(entries[0].name[0]=='.')count++;
		if(entries[1].name[0]=='.')count++;
	for(j=count;j<30;j++ )
	{      // Active_List[j-2]=new(char[8]);
		   //
		for(i=0;i<=7&&entries[j].name[i]!=' ';i++)
			Active_List[j-count+1][i]=entries[j].name[i];
		Active_List[j-count+1][i]='\0';
		if(Active_List[j-count+1][0]=='\x0')break;
		for(i=8,k=0;i<=10;i++,k++)
		n[k]=entries[j].name[i];
		n[3]='\0';
		if(n[0]=='T'&&n[1]=='X'&&n[2]=='T') Active_Type[j-count+1]=file;//t=file;
		else if(n[0]=='B'&&n[1]=='M'&&n[2]=='P') Active_Type[j-count+1]=bmp;
		else if(n[0]==' ')Active_Type[j-count+1]=folder;//t=folder;
		else Active_Type[j-count+1]=unknown;//t=unknown;
	}

	Active_Count=j-count+1;
	count=0;
	k=0;
	for (i=0;i<Active_Count;i++)
	{     //Active_Position[i]=new(int[2]);
		  Active_Position[i][0]=curr_x;
		  Active_Position[i][1]=curr_y;
		  icon.Draw(i,0);
		  count++;
		  curr_y+=icon.height+50;  //updating y co-ordinate of icon
		  if(curr_y+icon.height+50>=winy)  // check for ymax of icon
		  {	curr_y=starty;
			curr_x+=icon.width+50;
			Active_Column[k]=count;
			k++;
			count=0;
		  }
	}
	if(curr_y+icon.height+30<winy)  Active_Column[k]=count;
	taskbar.Draw_Bar('t');
	Active_Position[Active_Count][0]=0;
	Active_Position[Active_Count][1]=winy;
}

int Desktop::Event_Handler()
{     	char c1,c2,col=0,max=Active_Column[0]-1,now,min=0,val;
	int t=0;
	Popupmenu *p;
	Icons icon(0);
	now=min;
	while(1)
	{
		 asm{    mov ax,00h
			int 16h
			mov c1,ah
			mov c2,al
		    }
		    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) return(-(val+1));
		    }
		    else if(c1==0x48&&now>min)//up arrow
		    {       t=1;
			    icon.Draw(now,0);
			    now--;
			    icon.Draw(now,1);
		    }
		    else if(c1==0x50&&now<max)//Active_Count-1)//down arrow
		    {   t=1;
			icon.Draw(now,0);
			now++;
			icon.Draw(now,1);
			   //	if(now>max)
		    }
		     else if(c1==0x4d)//right arrow
		     {  t=1;
			if(now+Active_Column[col]<=max+Active_Column[col+1])
			  {	icon.Draw(now,0);
				now+=Active_Column[col];
				icon.Draw(now,1);
				col++;
				min=max+1;
				max+=Active_Column[col];
			  }
		     }
		     else if(c1==0x4b&&col!=0)//left arrow
		     {   t=1;
			if(now-Active_Column[col-1]<min)
			  {	icon.Draw(now,0);
				col--;
				now-=Active_Column[col];
				icon.Draw(now,1);
				max=min-1;
				min=min-Active_Column[col];
			  }
		     }
		     else if(c1==0x1c&&t==1)//enter key
		     return now;
	}
}
void Initialize()
{	Desktop_Color=54;
	Resolution=2;
	win.fcolor=0;
	win.bcolor=15;
}

void gui()
//void main()
{   	int c,i,k=8;
	int x=xmax/2-150,y=ymax/2-100,ht=120,wd ;
	char n[]="C:\\DESKTOP:",s[]="SYSTEM",ch[50],*z;
	int flag=0;
	d[0].initialise(2);
	d[1].initialise(3);
	Initialize();//loading default values for settings
	init(Resolution); // setiing mode and initializing Graphics
	load_font(3);
      /*	curr_dir.drive = 2;
	curr_dir.dir_lba = d[0].rootdir_lba;
	 curr_dir.dir_details.lba =  curr_dir.dir_lba ;
	 curr_dir.found = 1;  */
	 path[0]='C';
	 path[3] = 0;
       //	PIC_Viewer();
	/*asm{   	mov ax,00h
		int 16h
	   }           */

	while(1)
	{       for(i=0;i<20;i++)
		curr_directory[i]=n[i];
		{	Desktop d;
			d.Desk_Paint();
			c=d.Event_Handler();
		}
		if(c>=0)
		{	if(Active_Type[c]==system ||Active_Type[c]==folder)
			{	if(c!=0)   k=11;
				else k=0;
				Window w(ch);
				//w=new Window(ch);
				while(1)
				{	if(c!=goup)
					{       if(curr_directory[0]=='S')
						{	for(i=0;i<3;i++)
							curr_directory[i]=n[i];
						       //	if(c==0) curr_directory[0]='A';
							curr_directory[i]='\0';
							k=i;

						}
						else
						{

							for(i=0;Active_List[c][i]!='\0';i++,k++)
							curr_directory[k]=Active_List[c][i];
							curr_directory[k]='\0';

						}
					}
					for(i=0;curr_directory[i]!='\0';i++)
					ch[i]=curr_directory[i];
					ch[i]='\0';
					if(flag==0)
					w.Draw();
					else
					{	w.Change_Title(ch);
						w.Plot_All(w.view);
						flag=1;
					}
					c=w.Event_Handler();
					if(c==goup)
					{      if(k==3)
						{	for(i=0;s[i]!='\0';i++)
							curr_directory[i]=s[i];
							curr_directory[i]='\0';
						}
						else
						{


							for(i=k;curr_directory[i]!=':'&&i>0;i--);
							if(i==1)
							{	curr_directory[++i]='\\';
								i++;
							}
							curr_directory[i]='\0';
						}
						k=i;
					}
				     /*	else if(Active_Type[c]==file)
					*/
					//else if(Active_Type[c]!=folder&&Active_Type[c]!=drive)break;
					else if (c==exit||c==turnoff)break;
					else
					{    if(curr_directory[k-1]!='\\')
					     {

						curr_directory[k]=':';
						k++;
					     }
					}
				}
			       //	delete w;
			}
			else if(Active_Type[c]==file)
			{       k=11;
				for(i=0;Active_List[c][i]!='\0';i++,k++)
					curr_directory[k]=Active_List[c][i];
				curr_directory[k]='\0';
				for(i=0;curr_directory[i]!='\0';i++)
					ch[i]=curr_directory[i];
				ch[i++]='.';
				ch[i++]='T';
				ch[i++]='X';
				ch[i++]='T';
				ch[i]='\0';
			     //write(200,200,0,ch);
				TXT_Reader(ch);
			}
		}
		else  //Selection from popup menu
		{   switch(c)
			{	case -1: Shade();
					 int h=Turn_Off();
					  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;
		       //	mov c1,ah;
						}
						closesvga();
						return;
					 break;  //turn off
				case -2: closesvga();shell();load();init(Resolution);break;  //matrix shell
				case -3: break;  //pic viewer
				case -4: 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
						{       x=xmax/2-150;
							y=ymax/2-100;
							ht=120;
							wd=400;
							Message_Window(x,y,wd,ht,"ERROR !!!");
							load_font(1);
							write(x+110,y+60,4,"Format  Not  Supported ");
							load_font(3);
							asm{   	mov ax,00h
								int 16h
							   }
						}
					}
					 break; //reader
				case -5: Change_Color(1);
					break;
				case -6: Change_Resolution();
					 break;
			}
		}
		if(c==-1)break;
	}
    //	Button(100,170,0);
}

⌨️ 快捷键说明

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