⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat.c

📁 MP3播放器详细设计方案
💻 C
📖 第 1 页 / 共 5 页
字号:
                /* 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 + -