📄 windows.cpp
字号:
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 + -