unit dosdos;
interface
uses winprocs, wintypes, windos, dvcrt, dvwin, dosproc,
     dosgeral, dosmsg, dosed;

procedure chamaProg;

implementation

{--------------------------------------------------------}
{              opcao de chamada de programa
{--------------------------------------------------------}

procedure chamaProg;
var
    comando, param, s: string;
    nomedir: string;
    arq: text;
    erro: word;
    modoDOS: boolean;
    modoTela: integer;
    i, p: integer;
    c: char;

label inicio, fim;

begin

inicio:
    gotoxy (1, 25);
    clreol;
    mensagem (DVTECCMD, 1);
    sintReadln (comando);
    if comando = '' then exit;

    while (comando <> '') and (comando [1] = ' ') do
        delete (comando, 1, 1);
    p := pos (' ', comando);
    if p = 0 then p := length (comando)+1;
    param := copy (comando, p+1, length (comando)-p);
    comando := copy (comando, 1, p-1);

    getdir (0, nomeDir);

    modoDOS := false;
    if (comando = 'dos') or (comando = 'DOS') then
        begin
            modoDOS := true;
            assign (arq, 'c:\dos.$$$');
            {$I-}  erase (arq);  {$I-}
            if ioresult <> 0 then;   { ignora }

            comando := 'command';
            param := '/c ' + param + ' > c:\dos.$$$';
        end;

    while sintFalando do;

    modoTela := SW_SHOWNORMAL;
    if modoDos then
        begin
            s := param;
            delete (s, 1, 3);
            while (s <> '') and (s[1] = ' ') do
                delete (s, 1, 1);
            for i := 1 to length (s) do s[i] := upcase (s[i]);
            s := s + ' ';
            if (copy (s, 1, 5) = 'COPY ') or
               (copy (s, 1, 5) = 'TYPE ') or
               (copy (s, 1, 4) = 'DEL ') or
               (copy (s, 1, 4) = 'DIR ') or
               (copy (s, 1, 6) = 'ERASE ') or
               (copy (s, 1, 6) = 'ERASE ') then
                       modoTela := SW_SHOWMINIMIZED;
        end;

    if executaProg (comando, nomeDir, param, modoTela) then
        esperaProgVoltar;

    while keypressed do readkey;
    while sintFalando do;

    if modoDOS then
        begin
            mensagem (DVLEITEL, 1);
            while sintFalando do;
            editarLerArquivo ('c:\dos.$$$ /d', 2);
        end;
end;

end.
