Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители - Получение/установка текущего каталога

ОГЛАВЛЕНИЕ

     5.2.4 Получение/установка текущего каталога.


   Текущий  каталог  это  каталог, в котором DOS ищет  файл,  для
которого не указан путь. Если не установлено противного, то теку-
щий каталог является корневым каталогом.

   Высокий уровень.


   Бейсик устанавливает текущий каталог с помощью команды  CHDIR.
За командой должна следовать строка, указывающая путь к каталогу,
на который надо перейти. Строка может содержать до 63-х символов,
включая имя накопителя, и должна быть заключена в кавычки.  CHDIR
"C:MAMMALS\PRIMATES\GIBBONS"  делает  подкталог  GIBBONS  текущим
каталогом.  Чтобы перейти в  корневой  каталог напишите CHDIR "\"
или CHDIR "B:\".
   Бейсик версии 3.0 может сообщать путь к текущему каталогу, как
это  делает  команда  DOS   PATH.   Просто  введите  PRINT  ENVI-
RON$("PATH").

   Средний уровень.


   Функция  3BH  прерывания 21H  устанавливает  текущий  каталог.
DS:DX должны указывать на  путь  к  каталогу в стандартном виде и
эта строка должна завершаться байтом ASCII 0. Например, B:BIRDS\-
PARROTS\POLLY делает POLLY текущим каталогом.  B: может быть опу-
щено,  если  это текущий накопитель по умолчанию [5.3.1].   Чтобы
сделать текущим корневой  каталог  накопителя  A: напишите A:\. В
примере текущим каталогом устанавливается POLLY:

;---в сегменте данных
PATH     DB   'B:BIRDS\PARROTS\POLLY',0

;---делаем POLLY текущим каталогом
   MOV  AH,3BH        ;номер функции
   LEA  DX,PATH       ;DS:DX должны указывать на путь
   INT  21H           ;устанавливаем текущий каталог

   Чтобы определить какой каталог является текущим надо использо-
вать функцию 47H прерывания  21H.  DS:SI  должны указывать на об-
ласть  данных размером 64 байта, в которую будет записан путь.  В
DL указывается накопитель, причем  0 = "по умолчанию", 1 = A, 2 =
B и т.д. При возврате функция возвращает строку без имени накопи-
теля.  Если был указан несуществующий накопитель, то в AL возвра-
щается код ошибки 15.  Строка начинается с имени первого подката-
лога цепочки, а не с обратной косой  черты. Байт ASCII 0 сигнали-
зирует  о  конце строки.  В данном примере имя текущего  каталога
присваивается переменной "CURRENT_DIR":

;---в сегменте данных
CURRENT_DIR   DB   64 DUP(?)

;---получить текущий каталог
   MOV  AH,47H         ;номер функции
   LEA  SI,CURRENT_DIR ;указываем на область данных
   MOV  DL,1           ;накопитель A
   INT  21H            ;помещает строку по адресу DS:SI