|
Запуск внешних программ
Из программы, написанной
на Турбо Паскале, можно запустить любую другую готовую
к работе программу. Для этого используется процедура
ЕХЕС из библиотечного модуля DOS. Формат обращения к
процедуре:
ЕХЕС (<имя>,<параметры>)
Здесь <имя> - выражение типа STRING;
имя файла с вызываемой программой; <параметры>
- выражение типа STRING; параметры вызова.
Имени запускаемой программы может предшествовать
путь к файлу. Параметры передаются запускаемой программе
в виде текстовой строки и могут быть проанализированы
ею с помощью двух следующих функций.
Функция PARAMCOUNT.
Возвращает общее количество параметров
вызова программы (значение типа WORD). Обращение:
PARAMCOUNT
Параметры вызова обычно следуют в командной
строке ДОС сразу за именем вызываемой программы и отделяются
от этого имени и друг от друга пробелами, например:
C:\TP\TURBO MYPROG.PAS
C:\SIAM A:\SYSTEM1.SIA
Здесь MYPROG.PAS и A:\SYSTEM1.SIA -
параметры, передаваемые программам TURBO и SIAM.
При вызове программы непосредственно
из среды Турбо Паскаля ей можно передать параметры с
помощью опции OPTIONS/PARAMETERS (см. прил.1).
Функция PARAMSTR.
Возвращает значение типа STRING, соответствующее
нужному параметру вызова. Формат обращения:
PARAMSTR (<D>)
Здесь <D> - выражение типа WORD;
порядковый номер параметра.
Заметим, что программе всегда передается
параметр, соответствующий N = 0. В этом параметре ДОС
сообщает полное имя запущенной программы с указанием
диска и каталога, откуда она была загружена.
Использование процедуры ЕХЕС имеет ряд
особенностей. Прежде всего необходимо отметить, что
сама вызывающая программа остается резидентной в памяти,
поэтому она не должна занимать всю оперативную память.
Объем выделяемой программе памяти регулируется опцией
OPTIONS/MEMORY SIZES (см. прил.1). По умолчанию параметры
LOW HEAP LIMIT и HIGH HEAP LIMIT этой опции таковы (соответственно
0 и 655360 байт), что вызывающая программа, написанная
на Турбо Паскале, занимает весь доступный объем памяти,
и вызываемая программа не будет загружена. Полезно включить
в текст вызывающей программы директиву компилятора,
в которой изменяются принятые по умолчанию размеры памяти.
Например, так:
{$М 2048, 0, 0}
Такая директива ограничивает используемую
программой область стека величиной 2 Кбайта и исключает
возможность использования в ней динамической памяти.
Разумеется, Вы можете установить и другие значения параметров
в этой директиве.
Специфические особенности исполнения
программ Турбо Паскаля требуют изменения стандартных
значений некоторых векторов прерываний. К ним относятся
векторы со следующими шестнадцатеричными номерами:
$00, $02, $18, $23, $24, $34, $35, $36,
$37,
$38, $39, $ЗА, $ЗВ, $ЗС, $3D, $3E,
$3F, $75.
Начальные значения этих векторов сохраняются
в восемнадцати переменных с именами SA VEINTXX из библиотечного
модуля SYSTEM, где XX - шестнадцатеричный номер прерывания.
Поэтому непосредственно перед запуском внешней программы
и сразу после возврата из нее рекомендуется вызывать
библиотечную процедуру без параметров SWAPVECTORS, которая
обменивает содержимое векторов прерывания и перечисленных
переменных.
Программа из примера 11.4 читает с клавиатуры
любую команду ДОС, затем вызывает командный процессор
COMMAND. COM операционной системы и передает ему эту
команду.
Обратите внимание: для указания файла
COMMAND.COM и пути к нему используется обращение к библиотечной
функции GETENV, с помощью которой можно получить параметры
настройки операционной системы. В частности, параметр
COMSPEC определяет спецификацию файла, содержащего командный
процессор.
Пример 11.4
{$М 1024, 0, 0}
Uses DOS;
var
st : string [79];
begin
write ('Введите команду ДОС: ');
readln (st); if st <> '' then
begin
st := '/C '+st;
SwapVectors;
Exec (GetEnv ('COMSPEC'), st) ;
SwapVectors
end
end.
Функция ENVCOUNT.
Возвращает значение типа INTEGER, в
котором содержится общее количество установленных в
ДОС параметров. Обращение:
ENVCOUNT
Функция ENVSTR.
Возвращает значение типа STRING, содержащее
имя и значение нужного параметра настройки операционной
системы. Формат обращения:
ENVSTR (<D>)
Здесь <D> - выражение типа INTEGER;
номер параметра.
Эта функция возвращает строку типа NAME-VALUE,
где NAME - имя, a VALUE -значение соответствующего параметра
настройки.
Функция GETENV.
Возвращает значение типа STRING, в котором
содержится параметр настройки ДОС. Формат обращения:
GETENV (<имя>)
Здесь <имя> - выражение типа STRING;
имя параметра.
Эта функция имеет параметр обращения
NAME, а возвращает значение VALUE (см. функцию ENVSTR).
|