Скачать Переназначение StdIn в файл

21.07.1993
Скачать файл (1,32 Кб)


{ Cut here. FileName= DOSEXEC.PAS }}
Procedure tmyapp.dosexec (command: String);
Var buf: pointer;
  aa: Array [0..12] Of Char;
  reg: Registers;
  i, 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 { Error? }
    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;