Запуск внешних программ
Из Турбо-Паскалевой программы можно запустить любую другую готовую к работе программу. Для этого используется процедура ЕХЕС из библиотечного модуля DOS;
формат обращения ЕХЕС(< имя >, < параметры >);
Здесь < имя > - выражение типа STRING, в котором задается имя файла с вызываемой программой;
< параметры > - выражение типа STRING, в котором передаются параметры вызова.
Имени запускаемой программы должен предшествовать путь к файлу. Параметры передаются запускаемой программе в виде текстовой строки и могут быть проанализированы ею с помощью двух следующих функций.
Функция PARAMCOUNT. Возвращает общее количество параметров вызова программы (значение типа WORD). Обращение PARAMCOUNT
Параметры вызова обычно следуют в командной строке ДОС сразу за именем вызываемой программы и отделяются от этого имени и друг от друга пробелами, например:
С:\ТURBO MyProg.Рas
C:\SIAM A:\Sistem.Sia
Здесь MyProg.Pas и A:\Sistem.Sia - параметры, передаваемые программам TURBO и SIAM.
При вызове программы непосредственно из среды Турбо-Паскаля ей можно передать параметры с помощью опции OPTIONS/PARAMETERS
Функция PARAMSTR Возвращает значение типа STRING, соответствующее нужному параметру вызова, формат обращения PARAMSTR(< N >)
Здесь < N > - выражение типа WORD, задающее порядковый номер параметра.
Использование процедуры ЕХЕС имеет ряд специфических особенностей. Прежде всего необходимо отметить, что сама Турбо- Паскалевая вызывающая программа остается резидентной в памяти, поэтому она не должна занимать всю оперативную память. Объем выделяемой программе памяти регулируется опцией OPTIONS/COMPILER/MEMORY SIZE или директивой компилятора {$M . . }. По умолчанию параметры этой опции таковы (0 и 655360 байт соответственно), что Турбо-Паскалевая программа занимает весь доступный объем памяти и вызываемая программа не будет загружена. Полезно включить в текст вызывающей программы директиву компилятора, в которой изменяются принятые по умолчанию размеры памяти. Это можно сделать, например, так:
{$М 2048, 0, 0}
Такая директива ограничивает используемую программой область стека объемом 2 Кбайт и исключает возможность использования в ней динамической памяти. Разумеется, Вы можете установить и другие значения параметров в этой директиве.
Далее, специфические особенности исполнения Турбо-Паскалевых программ требуют изменения стандартных значений некоторых векторов прерываний. К ним относятся векторы со следующими шестнадцатеричными номерами: $00, $02, $18, $23, $24, $34, $35, $36, $37, $38, $39, $3А, $3В, $3С, $3D, $3Е, $3F, $75.
Начальные значения этих векторов сохраняются в восемнадцати переменных с именами SAVEINTXX из библиотечного модуля SYSTEM, где ХХ -шестнадцатеричный номер прерывания. Поэтому непосредственно перед запуском внешней программы и сразу после возврата из нее рекомендуется вызвать библиотечную процедуру без параметров SWAPVECTORS, которая обменивает содержимое векторов прерывания и перечисленных переменных.
Пример: программа воспринимает с клавиатуры любую команду ДОС, затем вызывает командный процессор СОММАND.СОМ операционной системы и передает ему эту команду.
Program ExecDemo;
{$M 1024, 0, 0}
Uses DOS;
Var
st: string [79];
Begin
Write(‘Введите команду DOS:’);
Readln(st);
if st <> '' then
Begin
st:= 'C:\'+st,;
SwapVectors;
Exec(GetEnv('COMSPEC'), st);
SwapVectors;
End;
End.
Обратите внимание: для указания файла СОММАND.СОМ и пути к нему использовано обращение к библиотечной функции GETENV, с помощью которой можно получить параметры настройки операционной системы. В частности, параметр СОМSPЕС определяет спецификацию файла, содержащего командный процессор.
С помощью следующей несложной программы можно вывести на экран ПЭВМ список всех параметров настройки ДОС.
Program EnvParDemo;
Uses DOS;
Var
i: integer;
Begin
For i:= 0 To EnvCount Do
Writeln(EnvStr(i));
End.
Функция ENVCOUNT. Возвращает значение типа INTEGER, в котором содержится общее количество установленных в ДОС параметров. Обращение ENVCOUNT.
Функция ENVSTR. Возвращает значение типа STRING, содержащее имя и значение нужного параметра настройки операционной системы; формат обращения ENVSTR(< N >)
Здесь < N > - выражение типа INTEGER, в котором указывается номер параметра.
Эта функция возвращает строку вида NАМЕ = VАLUЕ, где NАМЕ - имя, а VALUE - значение соответствующего параметра настройки.
Функция GETENV возвращает значение типа STRING, в котором содержится параметр настройки ДОС; формат обращения GETENV (< имя >)
Здесь < имя > - выражение типа STRING, определяющее имя параметра.
Эта функция имеет параметр обращения NАМЕ и возвращает значение VALUE (см. функцию ENVSTR).