/**
*.Name      fat
*
*.Title     Выбрать элемент из FAT
*
*.Descr     Функция выбирает элемент с заданным номером из таблицы
*           размещения файлов FAT. Формат FAT передается
*           функции как параметр.
*
*.Proto     int fat(b_fat, t_fat, idx);
*
*.Params    char _far *b_fat  - буфер, содержащий FAT
*
*           int t_fat         - формат FAT, может быть
*                               равен 12 или 16
*
*           int idx           - номер элемента FAT, который
*                               должен быть выбран
*
*.Return    Содержимое ячейки FAT с указанным номером
*
*.Sample    dirlist.c
**/

#include <stdio.h>
#include <stdlib.h>
#include "sysp.h"

int fat(char _far *b_fat, int t_fat, int idx) {

  div_t clust_nu ;
  int cluster;

  if(t_fat == 12) {

		/*  FAT -  12  */

	  clust_nu = div(idx * 3, 2);

	  if( clust_nu.rem != 0 )

			cluster = (*((int*)(b_fat + clust_nu.quot)) >> 4) & 0xfff;

	  else

			cluster = *((int*)(b_fat + clust_nu.quot)) & 0xfff;
  }

  else if(t_fat == 16) {

		/*  FAT - 16  */

	  cluster = *((int*)(b_fat + idx * 2));
  }

  else {
		printf("*FAT()* FAT format error\n");
		exit(-100);
  }

  return(cluster);
}
