[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]