322 Приложение
move(s[1],m,ord(s[0]));
(Просмотр очередного каталога}
k := 0; {Количество просмотренных элементов каталога) j :° 1; (Текущий элемент в Die} repeat (Цикл поиска в каталоге} if Dir[j],Name[l]=#0 then {Если имя}
Goto Err; {начинается с 0 - это конец каталога} if Dir(j].FAttr=Directory then begin
Find := True;
i :» 1;
while Find and (i<=ll) do
begin {Проверяем иыя] Find := m[i]=Dir[j] .NameExt[i];
inc(i) end end;
if not Find •then inc(j);
if j = 17 then
begin {Исчерпан сектор каталога} j :« 1; {Продолжаем с J--I'O элемента
следующего сектора} inc(k,16); (k - сколько элементов просмотрели} if k >= DirSize then
goto err; (Дошли до конца каталога} if (k div 16) mod DI.ClusSize=0 then
begin {Исчерпан кластер - ищем следующий} {Получаем новый кластер} Clus := GetFATItem(Disk,Clus);
{Можно не проверять на конец цепочки, т.к. каталог еще не исчерпан} {Получаем новый сектор/ Dirs := GetSector(Disk,Clus) end else (Очередной сектор -}
inc(Dirs); {в текущем кластере} ReadSector(Disk,Dirs,l,Dir);
end until Find;
{Наден каталог для очередного имени в маршруте}
Clus := Dir[j].FirstC; {Кластер начала} Dirs := GetSector(Disk,Clus); {Сектор} ReadSector(Disk,Dirs,l,Dir);
Find := Path = '' {Продолжаем поиск,
если не исчерпан путь} end {while not Find} end; {GetDlrSector} ^————————————————/
Procedure ReadWriteSector(Disk: Byte;
Sec: LongInt; NSec: Word; var Buf; Op: Byte); forward;
Procedure GetDiskInfo(Disk: Byte; var Disklnfo: TDisk);
{Возвращает информацию о диске DISK} var
Boot: TBoot;
I!. : IOCTL_Type;
p: PListDisk;
label
Get;