Иллюстрированный самоучитель по Турбо Паскалю
Запуск внешних программ
Из программы, написанной на Турбо Паскале, можно запустить любую другую
готовую к работе программу. Для этого используется процедура ЕХЕС из
библиотечного модуля 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).