www.pudn.com > schdgurd.zip > HDFIXERA.C


#define Us unsigned 
#define Uc Us char 
#define Ul Us long 
#include 
#include 
#include 
#include 
#include 
#include 
Uc Sector1[512]= 
      { 0xFA,0x33,0xC0,0x8E,0xD0,0xBC,0x00,0x7C,0x8B,0xF4,0x50,0x07, 
	0x50,0x1F,0xFB,0xFC,0xBF,0x00,0x06,0xB9,0x00,0x01,0xF2,0xA5, 
	0xEA,0x1D,0x06,0x00,0x00,0xBE,0xBE,0x07,0xB3,0x04,0x80,0x3C, 
	0x80,0x74,0x0E,0x80,0x3C,0x00,0x75,0x1C,0x83,0xC6,0x10,0xFE, 
	0xCB,0x75,0xEF,0xCD,0x18,0x8B,0x14,0x8B,0x4C,0x02,0x8B,0xEE, 
	0x83,0xC6,0x10,0xFE,0xCB,0x74,0x1A,0x80,0x3C,0x00,0x74,0xF4, 
	0xBE,0x8B,0x06,0xAC,0x3C,0x00,0x74,0x0B,0x56,0xBB,0x07,0x00, 
	0xB4,0x0E,0xCD,0x10,0x5E,0xEB,0xF0,0xEB,0xFE,0xBF,0x05,0x00, 
	0xBB,0x00,0x7C,0xB8,0x01,0x02,0x57,0xCD,0x13,0x5F,0x75,0x0C, 
	0x33,0xC0,0xCD,0x13,0x4F,0x75,0xED,0xBE,0xA3,0x06,0xEB,0xD3, 
	0xBE,0xC2,0x06,0xBF,0xFE,0x7D,0x81,0x3D,0x55,0xAA,0x75,0xC7, 
	0x8B,0xF5,0xEA,0x00,0x7C,0x00,0x00,0x49,0x6E,0x76,0x61,0x6C, 
	0x69,0x64,0x20,0x70,0x61,0x72,0x74,0x69,0x74,0x69,0x6F,0x6E, 
	0x20,0x74,0x61,0x62,0x6C,0x65,0x00,0x45,0x72,0x72,0x6F,0x72, 
	0x20,0x6C,0x6F,0x61,0x64,0x69,0x6E,0x67,0x20,0x6F,0x70,0x65, 
	0x72,0x61,0x74,0x69,0x6E,0x67,0x20,0x73,0x79,0x73,0x74,0x65, 
	0x6D,0x00,0x4D,0x69,0x73,0x73,0x69,0x6E,0x67,0x20,0x6F,0x70, 
	0x65,0x72,0x61,0x74,0x69,0x6E,0x67,0x20,0x73,0x79,0x73,0x74, 
	0x65,0x6D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x42,0x61,0x62,0x79,0x73,0x6F,0x66,0x74,0x20,0x48, 
	0x44,0x46,0x69,0x78,0x65,0x72,0x20,0x76,0x31,0x2E,0x31,0x61, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x80,0x01,0x01,0x00,0x06,0x0F,0xBE,0x6B,0x3E,0x00, 
	0x00,0x00,0x42,0x62,0x09,0x00,0x00,0x00,0x81,0x6C,0x05,0x0F, 
	0xFE,0x45,0x80,0x62,0x09,0x00,0xC0,0x4C,0x03,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xAA}; 
Uc Extp[512]= 
      { 0x00,0x00,0x00,0x00,0x00,0x44,0x69,0x73,0x6B,0x20,0x44,0x6F, 
	0x63,0x20,0x49,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x42,0x61,0x62,0x79,0x73,0x6F,0x66,0x74,0x20,0x48, 
	0x44,0x46,0x69,0x78,0x65,0x72,0x20,0x76,0x31,0x2E,0x31,0x61, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x01,0x81,0x6C,0x06,0x0F,0xFE,0x45,0x3E,0x00, 
	0x00,0x00,0x82,0x4C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
	0x00,0x00,0x00,0x00,0x00,0x00,0x55,0xAA}; 
Us Cyl,Head,Sct,drv=0x80,N,Cy[4]; 
FILE *fp; 
struct HSC 
{Uc hd; 
 Uc sc; 
 Uc cy; 
}last; 
struct PartitionTable 
{ 
 Uc Flg; 
 struct HSC bgn; 
 Uc Tp; 
 struct HSC end; 
 Ul id,sz; 
}pt[16][2]; 
struct DiskBPB 
{ 
 Us bytespersect; 
 Uc sectperclust; 
 Us reservedsect; 
 Uc numberofFAT; 
 Us itemsofroot; 
 Us totalsect; 
 Uc media; 
 Us sectperFAT; 
 Us sectperCyl; 
 Us Head; 
 Us hiddensect; 
}db[16]; 
long HSCtold(Us,Us,Us); 
long hsctoid(struct HSC *s); 
struct HSC ldtoHSC(long); 
void getenddata(); 
void searchBOOT(int); 
void getbiosHSC(int); 
void showPTable(int); 
void showBPB(int); 
void copyright(); 
void main() 
{ 
 int i; 
 char ft; 
 Us *mb,*cp; 
 clrscr(); 
 copyright(); 
 getbiosHSC(0x80); 
 searchBOOT(0x80); 
 showPTable(0x80); 
 printf("\n"); 
 getbiosHSC(0x81); 
 searchBOOT(0x81); 
 showPTable(0x81); 
} 
void getbiosHSC(int drv) 
{ 
 Uc bff[8]; 
 if(biosdisk(8,drv,1,1,1,1,bff)){printf("\a\n The No.%d Physical Hard Disk doesn't exist or Read error!\n",(drv-127));exit(1);} 
 Head=bff[3]+1; 
 Sct=bff[0]%64; 
 Cyl=bff[0]/64*256+bff[1]+2; 
} 
void searchBOOT(int drv) 
{ 
 Us cyl,i=0; 
 char bff[512],dos[9]; 
 if(biosdisk(2,drv,1,0,1,1,bff)) 
 { 
  printf("\a\n Searching for DOS Boot sector failed!\n"); 
  exit(1); 
 } 
 printf("\n Fixing the No.%d Physical Hard Disk... ",(drv-127)); 
 printf("\n Searching for DOS Boot Sector...\n"); 
 printf("\n CylNum head sector cylinder \n"); 
 for(cyl=0;cyl=2)Cy[i-2]=cyl; 
  } 
 } 
 N=i; 
 /*if(N==0){printf("\n\a Searching for DOS Boot sector failed!\n");exit(0);}*/ 
 showBPB(N); 
} 
void showPTable(int drv) 
{ 
 int i,j,k; 
 char ch; 
 getenddata(); 
 printf("\n Cyl=%d  Head=%d  Sect=%d  Partiton=%d\n",Cyl,Head,Sct,N); 
 printf("\n Partition Table Data:\n"); 
 for(i=0;i65535)pt[i][0].Tp=6; 
  else if((Ul)db[i].bytespersect*db[i].sectperFAT*db[i].sectperclust>=2*((Ul)pt[i][0].sz-1-(Ul)db[i].numberofFAT*db[i].sectperFAT-(Ul)db[i].itemsofroot*32/db[i].bytespersect)+4) 
	  pt[i][0].Tp=4; 
       else pt[i][0].Tp=1; 
 } 
 ext=pt[0][0].sz+pt[0][0].id; 
 for(i=0;ihd,s->sc,s->cy); 
} 
long HSCtold(Us hd,Us sct,Us cyl) 
{ 
 long id; 
 Ul cylinder,sector; 
 cylinder=cyl+sct/64*256;sector=sct%64-1; 
 id=(long)cylinder*Head*Sct+hd*Sct+sector; 
 return id; 
} 
struct HSC ldtoHSC(long id) 
{ 
 struct HSC hsc; 
 Us r,cyl; 
 cyl=id/((long)Head*Sct);hsc.cy=cyl%256; 
 r=id%((long)Head*Sct);hsc.hd=r/Sct; 
 hsc.sc=r%Sct+1+cyl/256*64; 
 return hsc; 
} 
void showBPB(int n) 
{ 
 int i; 
 printf("\n Partition number :  "); 
 for(i=0;i