Получение доступа а параметрам командной строки, запуск внешних программ.
Обычно форма запуска внешних программ через командную строку имеет вид:
Имя.ехе параметр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; просмотров: 1742;