Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители - Анализ информации командной строки
ОГЛАВЛЕНИЕ
5.3.6 Анализ информации командной строки.
При запуске многие программы позволяют пользователю поместить
добавлчную информацию в командной строке, обычно указывающую имя
файла, с которым программа будет работать. Эта информация записы-
вается в 128-байтную область, начинающуюся со смещения 80H в
префиксе программного сегмента [1.3.0]. (Эта же область исполь-
зуется как DTA по умолчанию, как обсуждалось в [5.3.5].) Первый
байт содержит длину строки, а затем идет сама строка.
Для программ, использующих метод дескриптора файла для работы
с файлами, имя файла, вводимое в командной строке, должно иметь
адекватную форму. Требуется, чтобы пользователь программы исполь-
зовал стандартный протокол MS DOS для строки пути. С другой сто-
роны, управляющий блок файла требует, чтобы строка вида 'A:ACCT.-
BAK' была преобразована к виду 1,'ACCT BAK'. MS DOS имеет
специальную функцию, которая выполняет такое преобразование над
первой порцией информации, следующей за именем программы в ко-
мандной строке. Эта процедура называется разбором строки (par-
sing).
Средний уровень.
Имя файла должно быть первой информацией, следующей за именем
загружаемой программы. Оно должно быть отделено от имени програм-
мы одним из следующих символов : . ; , = + табуляцией или пробе-
лом. Конец имени файла должен быть указан одним из символов : . ;
, = + \ < > | / " [ ] табуляцией, пробелом или одним из управляю-
щих символов (коды 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 равно пробелу. Вот пример, который
помещает код в область 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 ;