📄 srpd.cpp
字号:
hidden=dpt[i].pflag>0x10?"隐藏":" ";
goto_xy(x,y+1+i);
cprintf(" %3d %9s %1s%6s %14.1lf %10.1f%% %8s",i+1,dpt[i].bflag==0x80?"活动":" ",pflag,type,dpt[i].sectors/double(pow(2,11)),used,hidden);
}
i=0;
for(;;)
{
j=i;
textbackground(2);
textcolor(1);
goto_xy(x,y+1+i);
type=ptype(dpt[j].pflag);
pflag=(dpt[j].pflag==0x0f?"*":" ");
used=(dpt[j].flag=='L'||(dpt[j].flag==0x0&&dpt[j].pflag==0x05))?dpt[j].sectors/double(E_SECTORS)*100:dpt[j].sectors/double(SECTORS)*100;
hidden=dpt[j].pflag>0x10?"隐藏":" ";
cprintf(" %3d %9s %1s%6s %14.1lf %10.1f%% %8s",j+1,dpt[j].bflag==0x80?"活动":" ",pflag,type,dpt[j].sectors/double(pow(2,11)),used,hidden);
while(!bioskey(1));
c.i=bioskey(0);
if(c.ch[0])
{
k=find(c.ch[0],s);
if(k!=-1)
{
SELECT=i+1;
return k;
}
else if(c.ch[0]==27)
return -1;
else
{
sound(1500);
delay(10);
nosound();
}
}
else
{
switch(c.ch[1])
{
case 72:i--;
break;
case 80:i++;
break;
}
}
if(i==P_TOTAL) i=0;
if(i<0)i=P_TOTAL-1;
goto_xy(x,y+1+j);
textbackground(1);
textcolor(15);
cprintf(" %3d %9s %1s%6s %14.1lf %10.1f%% %8s",j+1,dpt[j].bflag==0x80?"活动":" ",pflag,type,dpt[j].sectors/double(pow(2,11)),used,hidden);
textbackground(2);
textcolor(1);
goto_xy(x,y+1+i);
cprintf(" %3d %9s %1s%6s %14.1lf %10.1f%% %8s",i+1,dpt[i].bflag==0x80?"活动":" ",pflag,type,dpt[i].sectors/double(pow(2,11)),used,hidden);
}
}
int dbr_dpt(int x,int y,char *sd)
{
union inkey
{
char ch[2];
int i ;
}c;
int i,j,t,d;
float used;
BYTE *type;
BYTE name[6]="";
DPT ddpt[24];
DWORD sectors;
read_dbr(HDD);
void notice(char *);
for(i=0,t=0;t<P_TOTAL;t++)
{
if(dpt[t].flag==0x0)
continue;
if(dpt[t].flag=='E')
continue;
ddpt[i].flag=dpt[t].flag;
ddpt[i].pflag=dpt[t].pflag;
ddpt[i].ssectors=dpt[t].ssectors;
ddpt[i].sectors=dpt[t].sectors;
ddpt[i].s_position=dpt[t].s_position;
i++;
}
t=i;/*保存分区数*/
window(1,1,80,25);
textbackground(0);
clrscr();
goto_xy((80-strlen(sd))/2,2);
textcolor(14);
cprintf(sd);
goto_xy(20,4);
cprintf("B---备份DBR R---恢复DBR X---返回");
goto_xy(20,24);
cprintf("已备份%d个DBR",DBR);
goto_xy(46,24);
cprintf("Copyright(C) Soaking Rain");
textbackground(2);
textcolor(4);
goto_xy(x,y);
cprintf(" 分区号 类型 大小(M) 起始扇区号 扇区数 ");
textbackground(1);
textcolor(15);
for(i=0;i<t;i++)
{
type=ptype(ddpt[i].pflag);
goto_xy(x,y+1+i);
cprintf("%5d %8s %10.1lf %9lx %9lx ",i+1,type,ddpt[i].sectors/double(pow(2,11)),ddpt[i].s_position,ddpt[i].sectors);
}
i=0;
for(;;)
{
j=i;
textbackground(2);
textcolor(1);
goto_xy(x,y+1+i);
type=ptype(ddpt[i].pflag);
cprintf("%5d %8s %10.1lf %9lx %9lx ",i+1,type,ddpt[i].sectors/double(pow(2,11)),ddpt[i].s_position,ddpt[i].sectors);
while(!bioskey(1));
c.i=bioskey(0);
if(c.ch[0])
{
if(c.ch[0]=='R'||c.ch[0]=='r')
{
switch(dbr_bck(2,HDD,i+1," ",ddpt))
{
case 1: notice("已经恢复DBR!!!");break;
case 2: notice("你以前没有备份该分区的DBR!!!");break;
case 0: notice("恢复DBR失败!!!");break;
}
return 1;
}
else if(c.ch[0]=='B'||c.ch[0]=='b')
{
goto_xy(15,7+i);
textbackground(6);
textcolor(14);
cprintf("请输入标识名(最长6个字节):");
gets(name);
if(dbr_bck(1,HDD,i+1,name,ddpt)==1)
notice("已成功备份DBR!!!");
else
notice("备份DBR失败!!!");
return 1;
}
else if(c.ch[0]=='X'||c.ch[0]=='x')
return -1;
else if(c.ch[0]==27)
return -1;
else
{
sound(1500);
delay(10);
nosound();
}
}
else
{
switch(c.ch[1])
{
case 72:i--;
break;
case 80:i++;
break;
}
}
if(i==t) i=0;
if(i<0)i=t-1;
goto_xy(x,y+1+j);
textbackground(1);
textcolor(15);
cprintf("%5d %8s %10.1lf %9lx %9lx ",j+1,type,ddpt[j].sectors/double(pow(2,11)),ddpt[j].s_position,ddpt[j].sectors);
textbackground(2);
textcolor(1);
goto_xy(x,y+1+i);
cprintf("%5d %8s %10.1lf %9lx %9lx ",i+1,type,ddpt[i].sectors/double(pow(2,11)),ddpt[i].s_position,ddpt[i].sectors);
}
}
void about()
{
int i,j;
char *s[]={" 该程序是一个全中文的分区程序,它除了据有分区功能外,还有MBR(Main Boot Record)、DBR(DOS Boot Record)、DPT(Disk Partition Table)备份及恢复功能,可以更有效的防止数据丢失.\n",
" " ," 版权(C)2006.4-2006.5 淋雨",
" Ver 1.0.0 Beta\n",
" QQ:124208056 Tel:13399830686 E-mail:cqfjjin@163.com"};
textbackground(0);
clrscr();
goto_xy(10,10);
textcolor(2);
window(10,9,70,24);
for(i=0;i<5;i++)
{
cprintf(*(s+i));
cprintf("\r\n");
}
getch();
srgui();
}
void notice(char *s)
{
goto_xy(15,23);
textbackground(0);
textcolor(14);
cprintf(s);
getch();
textcolor(8);
goto_xy(0,23);
cprintf(" ************************************************************************");
}
void reset(void)
{
asm mov ax,0x0040
asm push ax
asm pop ds
asm mov word ptr [0x0072],0x1234
asm mov ax,0xffff
asm push ax
asm mov ax,0x0
asm push ax
asm retf
}
void main()
{
DWORD t;
int i,r1,r2,r3;
union inkey
{
char c[2];
int i;
}c;
clrscr();
if(detect_ext13(HDD)==0)
{
puts("你的BIOS不支持扩展INT 13!");
exit(0);
}
detect_hdd(HDD);
if(detect_hdd(HDD)==1)
if(SECTORS==0||HEADS>255||T_SECTS>63)
{
detect_hdd(HDD);
if(SECTORS==0||HEADS>255||T_SECTS>63)
{
puts("硬盘不存在或读取硬盘参数错误!");
exit(0);
}
}
srgui();
read_dpt(HDD);
for(;;)
{
switch(menu(20,14,4,menu1,"MDAX"))
{
case 0:
textbackground(0);
do
{
r1=p_dpt(10,4,"CDAHX","磁盘分区管理");
switch(r1)
{
case 0:if(dpt[SELECT-1].flag==0x0)
{
while(1)
{
goto_xy(20,5+SELECT);
textbackground(2);
textcolor(14);
cprintf("请输入分区大小(%10lu)M",(dpt[SELECT-1].sectors/DWORD(pow(2,11))));
goto_xy(36,5+SELECT);
while(!bioskey(1));
c.i=bioskey(0);
if(c.c[0])
{
if(c.c[0]!='\r')
{
cprintf(" ");
goto_xy(36,5+SELECT);
scanf("%ld",&t);
t=t*DWORD(pow(2,11));
}
else
t=dpt[SELECT-1].sectors;
}
if(t>dpt[SELECT-1].sectors)
{
notice("输入的分区值太大!!!");
continue;
}
else if(t<pow(2,14))
{
notice("输入的分区值太小!!!");
continue;
}
break;
}
if(EXT==0)
{
switch(menu(30,5+SELECT,2,cp_notice,"PE"))
{
case 0:if(create_p(1,HDD,SELECT,t,dpt[SELECT-1].s_position))
notice("主分区已创建!!!");
else
notice("创建主分区失败!!!");
break;
case 1:if(create_p(2,HDD,SELECT,t,dpt[SELECT-1].s_position))
notice("扩展分区已创建!!!");
else
notice("创建扩展分区失败!!!");
break;
}
}
else if(dpt[SELECT-1].pflag==0x0&&dpt[SELECT-1].flag==0x0)
{
if(create_p(1,HDD,SELECT,t,dpt[SELECT-1].s_position))
notice("主分区已创建!!!");
else
notice("创建主分区失败!!!");
}
else if(dpt[SELECT-1].flag==0x0&&dpt[SELECT-1].pflag==0x05)
{
if(create_p(3,HDD,SELECT,t,dpt[SELECT-1].s_position))
notice("逻辑分区已创建成功!!!");
else
notice("创建逻辑分区失败!!!");
}
}
break;
case 1:
if(dpt[SELECT-1].flag==0x0)
{
sound(1500);
delay(20);
nosound();
}
else
{
if(answer(" 你真的要删除该分区吗?")==1)
{
if(dpt[SELECT-1].flag=='E'&&PNO_L>0)
{
sound(1500);
delay(20);
nosound();
notice("不能删除扩展分区,还有逻辑分区!!!");
}
else
{
if(delete_p(HDD,SELECT))
notice("分区已被删除!!!");
else
notice("分区没有被删除掉!!!");
}
}
}
break;
case 2:if(dpt[SELECT-1].flag!='P')
{
sound(1500);
delay(20);
nosound();
notice("只能激活主分区!!!");
}
else if(answer(" 更改活动分区后可能系统不能正常运行,你真的要继续吗?")==1)
if(active_p(HDD,SELECT,dpt[SELECT-1].s_position))
{
notice("分区已被激活!!!");
}
else
{
notice("激活分区失败!!!");
}break;
case 3:if(dpt[SELECT-1].pflag==0)
{
sound(1500);
delay(20);
nosound();
}
else if(dpt[SELECT-1].flag=='E')
notice("不能隐藏扩展分区!!!");
else
if(dpt[SELECT-1].pflag<0x10)
{
if(answer(" 隐藏分区后无法使用该分区的数据,你真的要继续吗?")==1)
if(hidden_p(1,HDD,SELECT))
notice("分区已被隐藏!!!");
}
else
if(hidden_p(2,HDD,SELECT))
notice("分区已被显示!!!");
break;
case 4:r1=-1;
}
read_dpt(HDD);
}while(r1!=-1);
clrscr();
srgui();
break;
case 1:
switch(menu(24,15,4,sub_menu1,"MDPX"))
{
case 0:
switch(menu(28,16,4,sub_menu2,"BRFX"))
{
case 0:
if(answer(" 你真的要覆盖复有备份吗? ")==1)
{
if(back_mbr(1,HDD)==1)
{
notice("MBR已成功备份!!!");
read_dpt(HDD);
}
else
notice("MBR备份失败!!!");
}
break;
case 1:
if(answer(" 你真的要覆盖现有MBR吗? ")==1)
{
switch(back_mbr(2,HDD))
{
case 1:notice("MBR已成功恢复!!!");
read_dpt(HDD);
break;
case 2:notice("您还没有备份MBR!!!");break;
case 0:notice("MBR恢复失败!!!");break;
}
}
break;
case 2:
if(back_mbr(3,HDD)==1)
notice("MBR已成功写入!!!");
else
notice("MBR写入失败!!!");
break;
}
break;
case 1:
do
{
r2=dbr_dpt(10,5,"DBR管理");
}while(r2!=-1);
break;
case 2:
switch(menu(28,18,3,sub_menu3,"BRX"))
{
case 0:if(answer(" 你真的要覆盖原有备份吗? ")==1)
{
if(back_dpt(1,HDD))
notice("DPT已成功备份!!!");
else
notice("DPT备份失败!!!");
}
break;
case 1:
if(answer(" 你真的要覆盖现有DPT吗? ")==1)
{
switch(back_dpt(2,HDD))
{
case 0:notice("DPT恢复失败!!!");break;
case 1:notice("DPT成功已恢复!!!");read_dpt(HDD);break;
case 2:notice("您还没有备份DPT!!!");break;
}
}
}
break;
}
srgui();
break;
case 2:clrscr();
about();
break;
case -1:
case 3:if(CHANGE==1)
{
switch(answer(" 分区参已修改,是否重新启动计算机?"))
{
case 1:
reset();break;
case -1:break;
case 0:textbackground(0);
textcolor(7);
clrscr();
exit(1);
}
}
else
{
textbackground(0);
textcolor(7);
clrscr();
exit(1);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -