Глава 5. Дисковые накопители.
Раздел 3. Подготовка к работе с файлами.
5.3.6 Анализ информации командной строки.
При запуске многие программы позволяют пользователю поместить добавлчную информацию в командной строке, обычно указывающую имя файла, с которым программа будет работать. Эта информация записывается в 128-байтную область, начинающуюся со смещения 80H в префиксе программного сегмента {1.3.0}. (Эта же область используется как DTA по умолчанию, как обсуждалось в {5.3.5}.) Первый байт содержит длину строки, а затем идет сама строка.
Для программ, использующих метод дескриптора файла для работы с файлами, имя файла, вводимое в командной строке, должно иметь адекватную форму. Требуется, чтобы пользователь программы использовал стандартный протокол MS DOS для строки пути. С другой стороны, управляющий блок файла требует, чтобы строка вида 'A:ACCT.BAK' была преобразована к виду 1,'ACCT BAK'. MS DOS имеет специальную функцию, которая выполняет такое преобразование над первой порцией информации, следующей за именем программы в командной строке. Эта процедура называется разбором строки (parsing).
Средний уровень.
Имя файла должно быть первой информацией, следующей за именем загружаемой программы. Оно должно быть отделено от имени программы одним из следующих символов : . ; , = + табуляцией или пробелом. Kонец имени файла должен быть указан одним из символов : . ; , = + \ < > | / " табуляцией, пробелом или одним из управляющих символов (коды ASCII от 1 до 31).
Функция 29H прерывания 21H производит разбор имени файла. DS:SI должны указывать на смещение 81H в PSP. Помните, что при загрузке программы как DS, так и ES указывают на начало PSP. ES:DI должны указывать на область памяти, которая будет служить управляющим блоком для нового файла. Установка битов в AL определяет как будет выполняться разборка. Имеют значение только биты 0-3:
бит 0 1 = начальный ограничитель игнорируется 1 1 = байт, идентифицирующий накопитель, устанавливается в FCB, только если он указан в командной строке 2 1 = имя файла в FCB меняется только если командная строка содержит имя файла 3 1 = расширение файла в FCB меняется только если коман ная строка содержит расширение файлаПосле того как эта информация установлена, программа может вызывать функцию. Если в командной строке не указан накопитель, то берется накопитель по умолчанию. Если отсутствует расширение файла, то предполагается, что оно пробельное (ASCII 32). Если в имени файла указана звездочка, то она заменяется на нужное число вопросительных знаков в поле имени файла FCB. AL возвращает 1, если имя файла содержит * или ? и FF, если указан неверный накопитель.
При возврате DS:SI указывают на первый символ, следующий за именем файла, которое начинается со смещения 81H. Дальнейшая информация, содержащаяся в командной строке должна расшифровываться Вашей программой. ES:DI указывают на первый байт вновь сформированного FCB. Если в FCB не создано допустимого имени файла, то содержимое ES:{DI]+1}+1 равно пробелу. Вот пример, который помещает код в область FCB в PSP, начиная со смещения 5CH:
;---разбираем командную строку, создавая FCB со смещением 5CH | |
;---в PSP | |
MOV AH,29H | ; |
MOV SI,81H | ; |
MOV DI,5CH | ; |
MOV AL,1111B | ; |
INT 21H | ; |
MOV AL,ES:[DI]+1 | ; |
CMP AL,32 | ; |
JE ERROR_ROUTINE | ; |
<~-5.3.5 Подготовка к файловым операциям.
Содержание
Раздел 4. Чтение и запись файла.-~>