[Back to DOS SWAG index] [Back to Main SWAG index] [Original]
{$M 8192,0,0}
{* This memory directive is used to make
certain there is enough memory left
to execute the DOS shell and any
other programs needed. *}
Program EXEC_Demo;
{*
EXEC.PAS
This program demonstrates the use of
Pascal's EXEC function to execute
either an individual DOS command or
to move into a DOS Shell.
You may enter any command you could
normally enter at a DOS prompt and
it will execute. You may also hit
RETURN without entering anything and
you will enter into a DOS Shell, from
which you can exit by typing EXIT.
The program stops when you hit a
'Q', upper or lower case.
*}
Uses Crt, Dos;
Var
Command : String;
{**************************************}
Procedure Do_Exec; {*******************}
Var
Ch : Char;
Begin
If Command <> '' Then
Command := '/C' + Command
Else
Writeln('Type EXIT to return from the DOS Shell.');
{* The /C prefix is needed to
execute any command other than
the complete DOS Shell. *}
SwapVectors;
Exec(GetEnv('COMSPEC'), Command);
{* GetEnv is used to read COMSPEC
from the DOS environment so the
program knows the correct path
to COMMAND.COM. *}
SwapVectors;
Writeln;
Writeln('DOS Error = ',DosError);
If DosError <> 0 Then
Writeln('Could not execute COMMAND.COM');
{* We're assuming that the only
reason DosError would be something
other than 0 is if it couldn't
find the COMMAND.COM, but there
are other errors that can occur,
we just haven't provided for them
here. *}
Writeln;
Writeln;
Writeln('Hit any key to continue...');
Ch := ReadKey;
End;
Function Get_Command : String;
Var
Count : Integer;
Cmnd : String;
Begin
Clrscr;
Write('Enter DOS Command (or Q to Quit): ');
Readln(Cmnd);
Get_Command := Cmnd
End;
Begin
Command := Get_Command;
While NOT ((Command = 'Q') OR (Command = 'q')) Do
Begin
Do_Exec;
Command := Get_Command
End;
End.
[Back to DOS SWAG index] [Back to Main SWAG index] [Original]