📄 fat.c
字号:
/* FAT 1 update */
Hard_write_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
if (fat_2_is_present == TRUE)
{
/* FAT 2 update */
Hard_write_open(fat_ptr_fats + sector_number + fat_fat_size);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
}
sector_number++;
Hard_read_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
fat_buf_sector[i] = Hard_read_byte();
Hard_read_close();
i = 0;
}
if (f_delete == TRUE)
{
fat_buf_sector[i++] = 0x00;
}
else
{
fat_buf_sector[i++] = (cluster & 0x0FF0) >> 4;
}
if (i == 512)
{
/* FAT 1 update */
Hard_write_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
if (fat_2_is_present == TRUE)
{
/* FAT 2 update */
Hard_write_open(fat_ptr_fats + sector_number + fat_fat_size);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
}
sector_number++;
Hard_read_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
fat_buf_sector[i] = Hard_read_byte();
Hard_read_close();
i = 0;
}
fat12_parity = 0;
k++;
}
}
}
else
{
k++;
}
/* Fragmentation : only if k < nb_cluster - 1 that means only if we are not at the */
/* end of file */
if (k < nb_cluster - 1)
{
cluster++;
index++;
temp = (fclusters[index].cluster + 2);
if (fat12_parity == 0)
{
if (f_delete == TRUE)
{
fat_buf_sector[i++] = 0x00;
}
else
{
fat_buf_sector[i++] = temp & 0x00FF;
}
if (i == 512)
{
/* FAT 1 update */
Hard_write_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
if (fat_2_is_present == TRUE)
{
/* FAT 2 update */
Hard_write_open(fat_ptr_fats + sector_number + fat_fat_size);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
}
sector_number++;
Hard_read_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
fat_buf_sector[i] = Hard_read_byte();
Hard_read_close();
i = 0;
}
if (f_delete == TRUE)
{
fat_buf_sector[i++] &= 0xF0;
}
else
{
fat_buf_sector[i] &= 0xF0;
fat_buf_sector[i++] += ((temp & 0x0F00) >> 8);
}
fat12_parity = 1;
k++;
}
else
{
if (f_delete == TRUE)
{
fat_buf_sector[i] &= 0x0F;
}
else
{
fat_buf_sector[i] &= 0x0F;
fat_buf_sector[i] += ((temp & 0x000F) << 4);
}
i++;
if (i == 512)
{
/* FAT 1 update */
Hard_write_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
if (fat_2_is_present == TRUE)
{
/* FAT 2 update */
Hard_write_open(fat_ptr_fats + sector_number + fat_fat_size);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
}
sector_number++;
Hard_read_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
fat_buf_sector[i] = Hard_read_byte();
Hard_read_close();
i = 0;
}
if (f_delete == TRUE)
{
fat_buf_sector[i++] = 0x00;
}
else
{
fat_buf_sector[i++] = (temp & 0x0FF0) >> 4;
}
if (i == 512)
{
/* FAT 1 update */
Hard_write_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
if (fat_2_is_present == TRUE)
{
/* FAT 2 update */
Hard_write_open(fat_ptr_fats + sector_number + fat_fat_size);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
}
sector_number++;
Hard_read_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
fat_buf_sector[i] = Hard_read_byte();
Hard_read_close();
i = 0;
}
k++;
fat12_parity = 0;
}
/* End of fragmentation */
}
}
else /* scan fat to find the next starting cluster */
{
if (fat12_parity == 0)
{
i++;
if (i == 512)
{
/* FAT 1 update */
Hard_write_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
if (fat_2_is_present == TRUE)
{
/* FAT 2 update */
Hard_write_open(fat_ptr_fats + sector_number + fat_fat_size);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
}
sector_number++;
Hard_read_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
fat_buf_sector[i] = Hard_read_byte();
Hard_read_close();
i = 0;
}
i++;
if (i == 512)
{
/* FAT 1 update */
Hard_write_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
if (fat_2_is_present == TRUE)
{
/* FAT 2 update */
Hard_write_open(fat_ptr_fats + sector_number + fat_fat_size);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
}
sector_number++;
Hard_read_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
fat_buf_sector[i] = Hard_read_byte();
Hard_read_close();
i = 0;
}
cluster++;
fat12_parity = 1;
}
else
{
i++;
if (i == 512)
{
/* FAT 1 update */
Hard_write_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
if (fat_2_is_present == TRUE)
{
/* FAT 2 update */
Hard_write_open(fat_ptr_fats + sector_number + fat_fat_size);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
}
sector_number++;
Hard_read_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
fat_buf_sector[i] = Hard_read_byte();
Hard_read_close();
i = 0;
}
cluster++;
fat12_parity = 0;
}
}
}
while ((k < nb_cluster - 1) || ( (nb_cluster == 1) && (cluster < (fclusters[index].cluster + 2))));
}
/* End of file: mark it with 0xFFF */
if ( 0 /*(cluster == fclusters[index].cluster + 2) && (fat12_parity == 1) */)
{
if (i == 0)
{
/* go back to previous fat sector */
sector_number--;
Hard_read_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
{
fat_buf_sector[i] = Hard_read_byte();
}
Hard_read_close();
/* Last sector byte */
i = 511;
}
else
{
i--;
}
}
if (fat12_parity == 0)
{
if (f_delete == TRUE)
{
fat_buf_sector[i++] = 0x00;
}
else
{
fat_buf_sector[i++] = 0xFF;
}
if (i == 512)
{
/* FAT 1 update */
Hard_write_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
if (fat_2_is_present == TRUE)
{
/* FAT 2 update */
Hard_write_open(fat_ptr_fats + sector_number + fat_fat_size);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
}
sector_number++;
Hard_read_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
fat_buf_sector[i] = Hard_read_byte();
Hard_read_close();
i = 0;
}
if (f_delete == TRUE)
{
fat_buf_sector[i] &= 0xF0;
}
else
{
fat_buf_sector[i] |= 0x0F;
}
fat12_parity = 1;
cluster++;
}
else
{
if (f_delete == TRUE)
{
fat_buf_sector[i] &= 0x0F;
}
else
{
fat_buf_sector[i] |= 0xF0;
}
i++;
if (i == 512)
{
/* FAT 1 update */
Hard_write_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
if (fat_2_is_present == TRUE)
{
/* FAT 2 update */
Hard_write_open(fat_ptr_fats + sector_number + fat_fat_size);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
}
sector_number++;
Hard_read_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
fat_buf_sector[i] = Hard_read_byte();
Hard_read_close();
i = 0;
}
if (f_delete == TRUE)
{
fat_buf_sector[i++] = 0x00;
}
else
{
fat_buf_sector[i++] = 0xFF;
}
if (i == 512)
{
/* FAT 1 update */
Hard_write_open(fat_ptr_fats + sector_number);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
if (fat_2_is_present == TRUE)
{
/* FAT 2 update */
Hard_write_open(fat_ptr_fats + sector_number + fat_fat_size);
for (i = 0; i < 512; i++)
Hard_write_byte(fat_buf_sector[i]);
Hard_write_close();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -