Получение доступа а параметрам командной строки, запуск внешних программ.


Обычно форма запуска внешних программ через командную строку имеет вид:

Имя.ехе параметр1 параметр 2 ... параметр N

Параметры передаваемые через командную строку
Выполняемая программа

 

 


Каждой написанной на Паскале программе можно передавать параметры через командную строку. Параметры при запуске внешней программы записываются в командной строке справа от имени программы через пробел.

Параметры можно передавать не только через командную строку, но и при запуске программы из интегрированной среды, для чего в меню OPTIONS надо указать соответствующее значение (в виде строки) для пункта PARAMETERS.

Чтобы параметры, передаваемые при запуске, воспринимались в вызванной программе, надо предусмотреть в этой программе ответы на следующие вопросы:

>1. Сколько параметров передано? функция без параметров

2. Какие параметры переданы?

Ответ на первый вопрос: paramсount - возвращает количество переданных через командную строку параметров. Если справа после имени программы ничего ни указано, то paramсount - вернет значение 0. Когда указано N параметров, то ParamCount вернет значение N.

Для ответа на второй вопрос чтобы узнать, какие конкретно параметры переданы, есть другая функция: Paramstr(<номер>). Для каждого (по номеру) значения аргумента, функция возвращает значение параметра в виде строки. Если указать Paramstr(0), то функция в ответ вернет полный путь к программе. Paramstr(ParamCount) – вернет значение последнего параметра.

writeln(‘При запуске программы,’, paramstr(0), указано paramcount, следующих параметров: ‘);

for i:=1 to paramcount do

begin

writeln(i:2, -й параметр: ,paramstr(i));

end;

 

Для запуска внешних программ из своей программы надо использовать процедуру ехес:

строки

Ехес (имя программы, параметры);

Таким же образом можно вызвать не только внешние программы, но и команды ДОС.

Ехес (getenv ('comspec'), '/c+ команда ');


Command. com

Данная строчка означает, что в интерпретатору ДОС (comand.com) передается например, dir команда (например, dir) для выполнения.

Здесь getenv - функция, которая возвращает значение, соответствующее определенной переменной среды окружения ДОС. В данном случае comspec, в котором хранится имя интерпретатора команд ДОС.

При вызове процедуры ехес нужно соблюдать следующие меры предосторожности:

1.Вызывающая программа не должна занимать всю свободную память. Это выполняется с использованием директивы компилятора {$M} - memory, которая в общем случае имеет следующий вид:

{$M размер стека , min heap size, max heap size } все значения в байтах.

 


Всего в стеке может быть 64Кб (по умолчанию 16 кбайт). Если локальных объектов в подпрограммах нет, то размер стека может быть установлен в 0.

Min heap size - минимальный размер кучи (динамической области), которая будет оставлена программе.

Max heap size - максимальный размер памяти кучи, которую предполагается оставить.

ПРИМЕР.

{$M 2048,0,0} - это означает, что не используется дополнительная свободная память. Размер стек 2Кбайт.

2.Необходимо обеспечивать сохранение векторов прерываний перед вызовом внешней программы из пользовательской и после вызова внешней программы.

Вектор прерываний - это адрес подпрограмма реального режима обработчика прерывания, которое может наступить в системе. Необходимость сохранения векторов связана с тем, что в программах на Турбо Паскале часто подменяются системные вектора прерываний и для корректной работы необходимо перед выполнением вызова программы надо сохранить текущие вектора прерываний, а потом их восстановить. Для этого используется процедура swapvectors;

Swapvectors; exec(...); Swapvectors;

 


необходимо обрамлять вызов ехес, вызовом Swapvectors сверху и снизу.

 

Записи.



Дата добавления: 2016-05-28; просмотров: 1655;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.021 сек.