begin
Find := m[i]=Dir[j].NameExtti];
inc(i) end;
end;
if not Find then inc(j);
if j = 17 then begin
inc (k, 16) ;
if k >= DirSize then
exit; {Дошли до конца каталога} j := 1; {Продолжаем с 1-го элемента
следующего сектора}
if (k div 16) mod DI.ClusSize°0 then if succ(Dirs)<DI.DataLock then
inc(Dirs) (Корневой каталог} else
begin {Конец кластера} {Новый кластер} Clus :=- GetFATItem(Disk,GetCluster(Disk,Dirs));
{Новый сектор} Dirs := GetSector(Disk,Clus) end
else {Очередной сектор - в кластере/ inc(Dirs);
ReadSector(Dislt,Dirs, 1, Dir) end until Find end; {Find.Item} {————} begin (GetDicItem} (Готовим имя файла) FileName := FExpand(FileName);
FSplit(FileName, Path, NameF, Ext);
{Искать каталог} GetDirSector(Path,Disk,Dirs,DirSize);
Find := DirsoO; {Dirs'=0 - ошибка в маршруте} if Find then
Findltem; {Ищем нужный элемент} if Find then begin
(Переносим элемент каталога в Item} Move(Dir[j],Item,SizeOf(Dir_Type)) ;
{Сбросить ошибку} Disk Error := False end else
begin {Файл не найден} Disk_Error := True;
Disk_Status := $FFFF end end; tGetDirItem} ^———————————————;
Procedure GetDirSector(Path: String; var Disk: Byte; var Dirs,DirSize: Word);
(Возвращает адрес сектора, в котором содержится начало нужного каталога, или 0, если каталог не найден. Вход:
PATH - полное имя каталога ('', если каталог - текущий). Выход: