Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Переадресация Ввода-Вывода    >>    dosexec
   
 
 Переназначение StdIn в файл  Роман Димов 21.07.1993

Как переназначить стандартный ввод на файл



1k 
 

From: roma@mark-nv.izhmark.udmurtia.su (Roma Dimov) Organization: Communication Company MARK ITT, машина в углу andy@hq.icc.tsaritsyn.su спрашивал: > Мужики, help me, please! > >procedure MyApp.RunExtApp; >begin > DoneSysError; > DoneEvents; > DoneVideo; > DoneDosMem; > SwapVectors; > Exec('ExtApp.exe', '-t123 -p3 < command.lst') > ^^^^^^^^^^^^^^ > SwapVectors; > InitDosMem; > InitVideo; > InitEvents; > InitSysError; > Redraw; >end; > > В чем пpоблема: После запуска ExtApp.exe, последняя упоpно не >хочет бpать данные из command.lst, а ожидает ввод с клавиатуpы :( >Как сделать пеpеназначение, что бы ввод шел не с клавы, а с файла ? > > Заpанее, THX! > > С уважением, Andy. Вот так работает: {> 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;