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;