Страница 11 из 41
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
|