📄 windows.cpp
字号:
else if(t==floppy)
{ height=42;
width=50;
color=20;
bar(x,y,50,40,color);
bar(x+10,y-2,30,15,23);
color=0;
bar(x+32,y+1,5,10,color);
bar(x+7,y+17,36,20,15);
bar(x+2,y+30,3,5,25);
bar(x+46,y+30,3,5,25);
line(x+10,y+20,x+40,y+20,0);
line(x+10,y+24,x+40,y+24,0);
line(x+10,y+28,x+40,y+28,0);
line(x+10,y+32,x+40,y+32,0);
}
else if(t==drive)
{ height=20;
width=45;
color=8;
bar(x+1,y-1,width,height,color);
bar(x,y,width,height,color); //background
rectangle(x,y,width,height,19);
bar(x+5,y+14,width-10,1,15); // lines
bar(x+5,y+12,width-10,1,15);
bar(x+5,y+10,width-10,1,15);
bar(x+width/2-2,y+height,5,7,color);
bar(x,y+height+8,width+2,5,color);
rectangle(x,y+height+8,width+2,5,23);
bar(x,y+height+10,width,1,15);
bar(x+width/2-6,y+height+7,15,8,color);
rectangle(x+width/2-6,y+height+6,15,10,23);
height+=16;
}
else if(t==bmp)
{ y+=20;
height=25;
width=53;
int wd=45,ht=20;
color=15;
bar(x+5,y-15,wd-15,ht+20,color); // paper
rectangle(x+5,y-15,wd-15,ht+20,8);
bar(x+7,y-11,wd-20,ht+12,4); // frame
line(x+13,y+18,x+17,y-9,10); // picture
line(x+25,y+18,x+20,y-9,10);
hline(x+13,y+18,wd-34,10);
fill_par(x,y,wd,ht-5,1,color); // palette background
bar(x,y+2,wd-38,ht-15,2); // palette
fill_par(x+25,y-20,wd-41,ht+5,1,24); //brush
bar(x+9,y+2,wd-40,ht-15,0); // palette
bar(x+17,y+2,wd-40,ht-15,6);
bar(x+24,y+2,wd-40,ht-15,4);
bar(x+32,y+2,wd-40,ht-15,1);
bar(x-5,y+8,wd-40,ht-15,5);
bar(x+2,y+8,wd-40,ht-15,8);
bar(x+9,y+8,wd-40,ht-15,12);
bar(x+17,y+8,wd-40,ht-15,43);
bar(x+25,y+8,wd-40,ht-15,13);
// height+=20;
}
else //Unknown files
{ height=30;
width=40;
color=47;
fill_par(x+19,y+10,5,15,1,color);
fill_par(x+5,y+10,5,15,-1,color);
}
}
void Icons::List_Draw(int i,char select,char whom)
{ int x=Active_Position[i][0];
int y=Active_Position[i][1],j;
char color,fc,*temp;
type t=Active_Type[i];
height=10;
width=15;
if(t==0) // Folders in list
{ if(select==0) color=43;
else color=1;
bar(x,y,width,height,color);
rectangle(x-1,y+1,width+2,height+2,0);
}
else if(t==1) // Files in list
{ if(select==0) color=4;
else color=1;
rectangle(x,y,height,width,color);
hline(x+2,y+5,6,0);
hline(x+3,y+7,5,0);
hline(x+4,y+9,4,0);
}
else if(t==floppy)
{ height=14;
width=20;
if(select==0) color=20;
else color=1;
bar(x,y,width,height,color);
bar(x+3,y-2,width-6,height-8,23);
bar(x+2,y+6,width-4,height-8,15);
hline(x+4,y+8,width-8,0);
hline(x+4,y+10,width-8,0);
}
else if(t==drive)
{ height=10;
width=20;
if(select==0) color=7;
else color=1;
bar(x+1,y-1,width,height,color);
bar(x,y,width,height,color); //background
rectangle(x,y,width,height,19);
bar(x+3,y+6,width-8,1,15); // lines
bar(x+3,y+4,width-8,1,15);
bar(x+3,y+2,width-8,1,15);
bar(x+width/2-2,y+height,3,5,color);
bar(x,y+height+5,width,3,color); // bottom rod
if(select==0) color=23;
else color=1;
rectangle(x,y+height+5,width,3,color);
bar(x,y+height+6,width-2,1,15); // white line across rod
bar(x+width/2-4,y+height+5,8,4,color); // bottom block
rectangle(x+width/2-4,y+height+4,8,5,23);
height+=16;
}
else if(t==bmp)
{ y+=10;
x-=5;
height=15;
width=20;
int wd=45,ht=20;
if(!select) color=15;
else color=1;
bar(x+5,y-5,wd-35,ht-5,color); // paper
rectangle(x+5,y-5,wd-35,ht-5,8);
bar(x+6,y-3,wd-38,ht-9,4); // frame
fill_par(x+4,y,wd-30,ht-15,1,color); // palette background
bar(x+4,y+2,wd-42,ht-18,4); // palette
fill_par(x+15,y-8,wd-43,ht-9,1,24); //brush
bar(x+8,y+2,wd-43,ht-18,1);
bar(x+11,y+2,wd-43,ht-18,5);
y-=6;
// height+=10;
width-=5;
}
else // Unknown files
{ if(!select) color=47;
else color=1;
fill_par(x+5,y+5,4,7,1,color);
fill_par(x-2,y+5,4,7,-1,color);
}
if(select==0) // If selected
{ color=bcolor;
fc=fcolor;
}
else
{ color=hbcolor; // If not yet selected or deselected
fc=hfcolor;
}
y-=4;
if(whom==1)
{ for(j=0;Active_List[i][j]!='\0';j++);
size=j*8;
bar(x+width+2,y+height/2,size+2,12,color);
load_font(3);
write(x+width+2,y+height/2+2,fc,Active_List[i]);
}
else if(whom==2)
{ bar(x+width+2,y+height/2,width+340,12,color);
write(x+width+2,y+height/2+2,fc,Active_List[i]);
x+=150;
if(Active_Type[i]==file)write(x+width+2,y+height/2+2,fc,"Text File"); // Type
else if(Active_Type[i]==folder)write(x+width+2+2,y+height/2+2,fc,"Folder");
else if(Active_Type[i]==unknown)write(x+width+2+2,y+height/2+2,fc,"Unknown");
x+=150;
if(Active_Type[i]==file)
{
for(i=0;curr_directory[i]!='\0';i++)
temp[i]=curr_directory[i];
temp[i] ='\0';
Dir_Entries *entries;
Directory dir(temp);
entries=dir.dir_read();
long s=entries[i+2].size;
/* for(i=0;curr_directory[i]!='\0';i++)
temp[i]=curr_directory[i];
temp[i] ='\0';
temp[i++]=':';
for(j=0;j<=11;i++,j++)
temp[i]=entries[x+2].name[j];
temp[i] ='\0';
File f;
f.file_open(temp,RO);
s=f.get_file_size(); */
char *z=To_String(1298);
for(i=0;z[i]!='\0';i++)
temp[i]=z[i];
temp[i] ='\0';
write(x+width+2,y+height/2+2,fc,temp);
} // Size
}
}
Tool_Bar taskbar;
class Window
{ public :char *name,fcolor,bcolor,border,view;
int startx,starty,unwanted;
Tool_Bar filebar;
Window(char *);
void Winini();
void Draw();
void Change_Title(char *);
int Event_Handler();
void Plot_All(char);
char Body_Handler(char&,char&,char);
void Properties(int);
};
void Window ::Winini()
{ fcolor=win.fcolor;
bcolor=win.bcolor;
}
Window ::Window(char* s)
{ name=s;
view=0;
Winini();
border=7;
}
void Window ::Properties(int index)
{ int x,y,wd=300,ht=250;
long i;
char c1,c2,*temp;
Icons icon(2);
x=xmax/2-wd/2;
y=ymax/2-ht/2;
Message_Window(x,y,wd,ht,"Properties");
icon.Icon_Draw(x+30,y+40,index);
//if (Active_List[index])
write(x+icon.width+50,y+50,0,Active_List[index]);
//else write(x+icon.width+50,y+50,0,Active_List[index-1]);
write(x+15,y+icon.height+80,0,"Type :");
if(Active_Type[index]==file)write(x+100,y+icon.height+80,0,"Text File");
else if(Active_Type[index]==folder)write(x+100,y+icon.height+80,0,"Folder");
else if(Active_Type[index]==bmp)write(x+100,y+icon.height+80,0,"BMP File");
else if(Active_Type[index]==floppy)write(x+100,y+icon.height+80,0,"3.5 Floppy");
else if(Active_Type[index]==drive)write(x+100,y+icon.height+80,0,"Disk Drive");
else if(Active_Type[index]==unknown)write(x+100,y+icon.height+80,0,"Unknown");
write(x+15,y+icon.height+110,0,"Location :");
write(x+100,y+icon.height+110,0,curr_directory);
if(Active_Type[index]==file)
{ for(i=0;curr_directory[i]!='\0';i++)
temp[i]=curr_directory[i];
temp[i] ='\0';
Dir_Entries *entries;
Directory dir(temp);
entries=dir.dir_read();
long s=entries[i+2].size;
char *z=To_String(s);
for(i=0;z[i]!='\0';i++)
temp[i]=z[i];
temp[i] ='\0';
write(x+15,y+icon.height+140,0,"Size :");
write(x+50,y+icon.height+140,0,temp);
}
else if(Active_Type[index]==folder)
write(x+15,y+icon.height+140,0,"Contains :");
write(x+15,y+icon.height+170,0,"Created on :");
while(1)
{ asm{ mov ax,0h
int 16h
mov c1,ah
mov c2,al
}
if(c1==0x01&&c2==0x1b) break;
}
Plot_All(view);
if(view==0) icon.Draw(index,1);
else if(view==1|| view==2) icon.List_Draw(index,1,view);
}
void Window ::Change_Title(char *s)
{ int i,k,j,ht=30,count=0;
char d1[9]={'F','l','o','p','p','y','\0'},
d2[9]={'D','r','i','v','e', ' ','C','\0'},temp[50];
name=s;
for(i=0;name[i]!='\0';i++)
temp[i]=name[i];
temp[i]='\0';
if(name[0]!='S')
{ // reading into active list
Dir_Entries *entries;
Directory dir(temp);
entries=dir.dir_read();
char n[4];
if(entries[0].name[0]=='.')count++;
if(entries[1].name[0]=='.')count++;
if(curr_directory[3]==0)count=4;
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][i]=entries[j].name[i];
Active_List[j-count][i]='\0';
if(Active_List[j-count][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')||(n[0]=='t'&&n[1]=='x'&&n[2]=='t')) Active_Type[j-count]=file;//t=file;
else if((n[0]=='B'&&n[1]=='M'&&n[2]=='P')||(n[0]=='b'&&n[1]=='m'&&n[2]=='p')) Active_Type[j-count]=bmp;
else if(n[0]==' ')Active_Type[j-count]=folder;//t=folder;
else Active_Type[j-count]=unknown;//t=unknown;
}
if(Active_List[0][0]=='\x0')
Active_Count=0;
else
Active_Count=j-count;
unwanted=count;
count=0;
}
else
{ for(i=0;i<9;i++)
{ Active_List[0][i]=d1[i];
Active_List[1][i]=d2[i];
}
Active_Type[0]=floppy;
Active_Type[1]=drive;
Active_Count=2;
}
bar(0,0,xmax-1,ht,1); //titlebar
load_font(1);
write(11,11,15,name); //address
load_font(3);
}
void Window ::Draw()
{ int curr_x,curr_y,i,k,j,count=0,ht=30,height=14; //currx & y rep icon locations & count rep no of entries;
Icons icon(1);
type t;
Change_Title(name);
k=0;
//end of reading to active list
bar(0,0,xmax-1,5,7); //border of titlebar
hline(0,2,xmax-1,15);
hline(0,3,xmax-1,0);
//position of taskbar
Active_Position[Active_Count][0]=0;
Active_Position[Active_Count][1]=winy;
//position of filebar
Active_Position[Active_Count+1][0]=5;
Active_Position[Active_Count+1][1]=ht;
filebar.Draw_Bar('f'); //filebar
curr_x=0;
curr_y=ht+filebar.height+3;
bar(curr_x,curr_y,xmax-1,winy-curr_y,bcolor); //body
bar(curr_x,winy-5,xmax-1,5,7); //bar after body
hline(curr_x,winy-2,xmax-1,0);
hline(curr_x,winy-4,xmax-1,15);
// vlines of window border
bar(0,0,5,winy,7); //border of titlebar
vline(1,2,winy-2,15);
vline(3,3,winy-3,0);
bar(xmax-5,0,5,winy,7); //border of titlebar
vline(xmax-4,2,winy-2,0);
vline(xmax-2,3,winy-3,15);
starty=curr_y+30;
if(view==0)
{ curr_x=40;
curr_y+=30;
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_x+=icon.width+50; //updating x co-ordinate of icon
if(curr_x+icon.width+10>=xmax-1) // check for xmax of icon
{ curr_x=30;
curr_y+=icon.height+60;
Active_Column[k]=count;
k++;
count=0;
}
}
if(curr_y+icon.height+20<winy) Active_Column[k]=count;
}
else if(view==2||view==1)
{ starty=curr_y+30;
curr_x=5;
if(view==2)
{ bar(curr_x,curr_y,xmax-10,height,7);
hline(curr_x,curr_y,xmax-10,15);
hline(curr_x,curr_y+height-1,xmax-10,15);
bar(curr_x,curr_y+height,xmax-10,3,7); //bar after filebar
hline(curr_x,curr_y+height+1,xmax-10,0);
}
k=0;
curr_x=40;
curr_y+=30;
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.List_Draw(i,0,view);
count++;
curr_y+=icon.height+10; //updating y co-ordinate of icon
if(curr_y+icon.height+30>=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');
}
void Window ::Plot_All(char what)
{ int curr_x,curr_y,count=0,k=0,i,height=14;
Icons icon(1);
curr_x=5;
curr_y=filebar.height+32;
bar(curr_x,curr_y,xmax-10,winy-curr_y-5,bcolor);
starty=curr_y+30;
if(what==2)
{ bar(curr_x,curr_y,xmax-10,height,7);
hline(curr_x,curr_y,xmax-10,15);
hline(curr_x,curr_y+height-1,xmax-10,15);
bar(curr_x,curr_y+height,xmax-10,3,7); //bar after filebar
hline(curr_x,curr_y+height+1,xmax-10,0);
}
curr_x=40;
curr_y=starty;
if(what==0) //icons
{
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_x+=icon.width+50; //updating x co-ordinate of icon
if(curr_x+icon.width+10>=xmax-1) // check for xmax of icon
{ curr_x=30;
curr_y+=icon.height+60;
Active_Column[k]=count;
k++;
count=0;
}
}
if(curr_y+icon.height+20<winy) Active_Column[k]=count;
}//end of icons
else if(what==1 ||what==2)//list
{ 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.List_Draw(i,0,what);
count++;
curr_y+=icon.height+10; //updating y co-ordinate of icon
if(curr_y+icon.height+30>=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;
}//end of list
}
void remove_file(int x,int unwanted)
{ int i,j,flag=0;
char s[50];
for(i=0;curr_directory[i]!='\0';i++)
s[i]=curr_directory[i];
s[i] ='\0';
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++]=':';
for(j=0;j<=10;i++,j++)
{
if((entries[x+unwanted].name[j]==' '||j==8)&&flag==0)
{ s[i]='.';
if(j!=8)j=7;
else{i++;s[i]=entries[x+unwanted].name[j];}
flag=1;
}
else
s[i]=entries[x+unwanted].name[j];
}
s[i] ='\0';
write(300,100,4,s);
getchar();
File f;
int file_flag;
file_flag= f.file_open(s,RO);
/*if(file_flag==2)
{
Error_Code = File_Not_Found;
} */
dir.remove_entry(f.file_details.file_name,f.drive);
d[f.drive-2].clear_fat_entry(f.next_lba,f.drive);
}
void make_directory(char *z)
{ char *dt;
int i,j;
for(i=0,j=0;curr_directory[j]!='\0';i++,j++)
dt[i]=curr_directory[j];
dt[i]='\0';
write(100,100,0,dt);
char temp_dirname[11];
//if(z[0]!='e')curry_dir.add_dir(dt);//call md
if(z[0]!='e')
{
for(i=0;z[i]!=0&&i<11;i++) temp_dirname[i]=z[i];
temp_dirname[i]=0;
Directory dir(dt);
dir.add_dir(temp_dirname);//call md
}
}
void copy_to_clipboard(int x1,char shift,int unwanted)
{ int i,j;
char s[50];
clipboard[0]='1';
if(shift)clipboard[1]='0';
else clipboard[1]='1';
for(i=0;curr_directory[i]!='\0';i++)
s[i]=curr_directory[i];
s[i] ='\0';
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++]=':';
for(j=0;j<=10;i++,j++)
{
if(entries[x1+unwanted].name[j]==' ')
{ s[i]='.';
j=7;
}
else
s[i]=entries[x1+unwanted].name[j];
}
s[i] ='\0';
for(i=0,j=2;s[i]!='\0';i++,j++)
clipboard[j]=s[i];
clipboard[j]='\0';
}
void init_shell()
{ cmd_buff[cmd][0]='C';
cmd_buff[cmd][1]=':';
cmd_buff[cmd][2]=0;
int r=command();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -