DISK - номер диска;
DIRS - номер первого сектора каталога или О/ DIRSIZE - размер каталога (в элементах DIR_TYPE).} var
i,j,k Integer; {Вспомогательные переменные 1 Find Boolean; {Признак поиска) m array [1..11] of Char; {Массив имени каталога} s String; {Вспомогательная переменная} DI TDisk; {Информация о диске} Dir array [1..16] of Dir_Type; {Сектор каталога} Clus Word; {Текущий кластер каталога} label err;
begin
{Начальный этап: готовим путь к каталогу и диск} if Path = '' then {Если каталог текущий,}
GetDir(0,Path); {дополняем маршрутом поиска} if Path[2] о ':' then {Если нет диска,}
Disk := GetDefaultDrv {берем текущий} else
begin {Иначе проверяем имя диска} Disk :» GetDiskNumber(Path[l]);
if Disk-255 then
begin {Недействительное имя диска} Err: {Точка выхода при неудачном поиске}
Dirs := 0; {Нет сектора} Disk_Error :" True; {Флаг ошибки} Disk_Status :- $FFFF; {Статус fFFFF} exit end;
Delete(Path,1,2) {Удаляет имя диска из пути} end;
{Готовим цикл поиска]
if Path[l]='\' then {Удаляем символы \}
Delete(Path,I,1); /в начале} if Path[Length(Path)] = '\' then
Delete(Path,Length(Path),1); {и конце маршрута} GetDiskInfo(Disk,DI) ;
with DI do begin
Dirs := RootLock; {Сектор с каталогом} DirSize :" RootSize {Длина каталога} end;
ReadSector(Disk,Dirs,1,Dir); {Читаем корневой каталог} Clus := GetCluster(Disk,Dirs); {Кластер начала каталога} {Цикл поиска по каталогам}
Find :- Path"''; {Path-'' - конец маршрута} while not Find do begin
{Получаем в S первое имя до символа \} s := Path;
if pos('\',Path) <> 0 then
s[0] :-chr(post'\',Path)-1);
{Удаляем выделенное имя из маршрута) Delete(Path,I,Length(s)) ;
if Path[l]»'\' then
Delete (Path,1,1); '.Удаляем разделитель \} {Говим массив имени} FillChar(m,ll, ' '):