Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители
Страница 25. Анализ информации командной строки


     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   ;

 
« Предыдущая статья   Следующая статья »