Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Задание
Перечень занятых кластеров.
Программа
#include<stdio.h>
#include<dos.h>
#include<conio.h>
#include<ctype.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#include<bios.h>
#define drive 3
#define CMD_READ 2 // Команда чтения
#define CMD_RESET 0 // Команда сброса
#define NSECT 1 // Число секторов
char ch;
typedef struct
{
unsigned char jmp[3];
unsigned char ibm[8];
unsigned sec_size;
unsigned char sec_per_cluster;
unsigned rsv_sec;
unsigned char fat;
unsigned root_size;
unsigned tot_secs;
unsigned char med;
unsigned fat_size;
unsigned trk_secs;
unsigned head_cnt;
unsigned long hid_secs;
unsigned long total_sec;
union
{
struct
{
unsigned char no_drv;
unsigned char rezerv;
unsigned char signat;
unsigned long serial_num;
unsigned char label[11];
unsigned char marker[8];
}FAT12_16;
struct
{
unsigned long fat_size;
unsigned int active_fat;
unsigned int FS;
unsigned long clst_root;
unsigned int FS_inf;
unsigned int bkp_root_clst;
unsigned char rsrv[12];
unsigned char ndrive;
unsigned char resrv;
unsigned char sign_0x29;
unsigned long serial_num;
unsigned char label[11];
unsigned char marker[8];
}FAT32;
};
}BOOT;
BOOT boot,*pboot=&boot;
char *pfat1; //*pdate;
int i,sinfat,marker;
void fat_line16();
void fat_line32();
void absreadinfat(unsigned sector);
struct date d;
int ft;
unsigned long ft1;
int main(void)
{
clrscr();
absread(drive,1,0,pboot);
pboot->FAT12_16.marker[5]='\0';
marker=atoi(pboot->FAT12_16.marker+3);
if ((marker!=12) && (marker!=16))
{
pboot->FAT32.marker[5]='\0';
marker=atoi(pboot->FAT32.marker+3);
}
printf("FAT%d\n",marker);getch();
char* proot=(char *)malloc(pboot->sec_size*sizeof(char)); //выделение розмера
char* fat1=(char *)malloc(pboot->sec_size*sizeof(char));
int ss,num,fat_sec=1;
pfat1=fat1;
if (marker==16)
{ printf("SizeFAT=%u\n",pboot->fat_size);
absread(drive,1,1,pfat1);
}
else if(marker==32)
{ printf("SizeFAT=%u\n",pboot->FAT32.fat_size);
printf("reserv=%u",pboot->rsv_sec);
getch();
absreadinfat(pboot->rsv_sec);
}
else
{printf("ERROR FAT!!! ");
exit(0);
}
getch();
if(marker==16)
{
for(sinfat=1; sinfat<=pboot->fat_size;sinfat++ )
{
fat_line16();
fat_sec++;
absread(drive,1,fat_sec,pfat1);
if(ft==0)
{ break;}
}
}
else if(marker==32)
{fat_sec=pboot->rsv_sec;
for(sinfat=1; sinfat<=pboot->FAT32.fat_size;sinfat++ )
{ fat_line32();
fat_sec++;
absreadinfat(fat_sec); //(drive,1,32/*fat_sec*/,pfat1);
if(ft1==0)
{ break;}
}
}
getch();
return 0;
}
void absreadinfat(unsigned sector)
{
unsigned H, C, S,A;
int i;
int error_count,result;
/*S=fmod(sector,pboot->trk_secs);
A=sector/pboot->trk_secs;
H=fmod(A,pboot->head_cnt+1)+1;
C=A/(pboot->head_cnt+1);
printf("H=%u C=%u S=%u\n",H,C,S);
*/
S=0;H=1;C=0;
for(i=0;i<sector;i++)
{ S++;
if(S>pboot->trk_secs)
{ S++;
H++;
if(H>pboot->head_cnt)
{H=0;
C++;
}
}
}
//printf("H=%u C=%u S=%u\n",H,C,S);
while(error_count < 3)
{result = biosdisk(CMD_READ, drive, H,C,S, NSECT,pfat1);
if (!result) break;
error_count++;
biosdisk(CMD_RESET, drive, H, C, S,NSECT,pfat1);
}
}
void fat_line16()
{ int x,j,noclst;
ft=0;
for(noclst=0; noclst< 256 ;noclst++)
{x=2*noclst;// off in FAt
ft=peek(FP_SEG(pfat1+x),FP_OFF(pfat1+x));
if((ft!=0xfff7)&&(ft!=0))
printf(" %04X=%04X",noclst+256*(sinfat-1),ft);
if(noclst==255)
{ printf("\n**************\n");
getch();}
}
}
void fat_line32()
{ unsigned long x,j,noclst;//0xFFFFFFF7
ft1=0;
for(noclst=0; noclst< 128 ;noclst++)
{x=4*noclst;// off in FAt
ft1=peek(FP_SEG(pfat1+x),FP_OFF(pfat1+x));
if((ft1!=0xFFFFFFF7)&&(ft1!=0))
printf(" %04X=%04X",noclst+128*(sinfat-1),ft1);
if(noclst==127)
{ printf("\n**************\n");
getch();}
}
}