tmyapdosexec.PAS

{* Переназначение StdIn в файл *}

Unit TMYAPDOSEXEC;
Interface
Implementation
Begin
 writeln('Как переназначить StdIn в файл ');
End.

Program pas51852;

Uses tmyapdosexec.pas; {* Эту строку можно удалить *}
Procedure tmyapp.dosexec (command : String);
Var {* Объявление переменных *}
  buf : pointer;
  aa  : Array [0..12] Of Char;
  reg : Registers;
  i   : Word;
  j   : Word;
Function force_dup (existing, second : Word) : Boolean;
Begin
  reg. AH := $46;
  reg. BX := existing;
  reg. CX := second;
  MsDos (reg);
  If (reg. Flags And fCarry)  0 Then
    force_dup := False
  Else force_dup := True;
End;
Begin
  DoneSysError;
  DoneEvents;
  DoneVideo;
  DoneDosMem;
  WriteLn; {* Пустая строка *}
  StrPCopy (aa, TmpDir + TmpFileName);
  reg. AH := $3D;
  reg. AL := 0;
  reg. DS := Seg (aa);
  reg. DX := Ofs (aa);
  MsDos (reg);
  j := reg. AX;
  reg. BX := 0;
  reg. AH := $45;
  MsDos (reg);
  i := reg. AX;
  If force_dup (j, 0) Then
  Begin
    SwapVectors;
    Exec (sendmail, command);
    SwapVectors;
    force_dup (i, 0);
    reg. BX := j;
    reg. AH := $3e;
    MsDos (reg);
    reg. BX := i;
    reg. AH := $3e;
    MsDos (reg);
  End;
  InitDosMem;
  InitVideo;
  InitEvents;
  InitSysError;
  Redraw;
  If DosError  0 Then
  Begin
    Str (DosError, command);
    MessageBox (^C + 'Dos error #' + command ,      Nil, mfInformation + mfOKButton);
  End;
  Else Begin
    Str (DosExitCode, command);
  MessageBox (^C + 'Exec successful.' + #13 + ^c'Child process  exit code = ' + command,    Nil, mfInformation + mfOKButton);
End;

End...