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

О переназначении стандартного ввода для программ на TP6.0



1k 
 

From: Dmitry RECHKIN <dimer@gis.iems.msk.su> Subject: Переназначение ввода/вывода для Exec() - для DOS 3.3+ TP6.0+ASM(inline) Organization: Institute of Economics of Mineral resources Был тут как-то вопрос о переназначении стандартного ввода для программ на TP6.0. Так вот, свои соображения на эту тему излагаю в нижеследующей программе. Не знаю, как из TVision (не пробовал), а просто в MS DOS 5.0 работает. Если откомпилировать и пустить, будет веселый эффект. Если кто будет гонять под TVision - скажите, как оно там. Из общих соображений должно пахать, но - "... есть многое на свете, друг Горацио, что и не снилось нашим Паскалям..." Просьба ко всем, кто будет брать - черкните отзыв, интересно знать мнение коллег, знаете ли... С лучшими пожеланиями - Д.Речкин (dimer@gis.iems.msk.su) {> Cut here. FileName= REDIR.PAS } {$M 8191,0,0} program RedirectionDemo; { Запускать - только из ДОСа !!! } uses DOS; const { Стандартные дескрипторы ДОСа ------------------- } StdIn : Word = 0; { стандартный ввод - то, что прет с кнопок } StdOut: Word = 1; { стандартный вывод - обычно на экран } StdErr: Word = 2; { стандартные сообщения - обычно на экран } var f : Text; InH : Word; procedure RedirHandle (Src, Dst: Word); { RedirHandle - переназначение операций ввода-вывода через дескрипторы (handle); действие переназначения сохраняется до завершения текущего процесса и распространяется на все процессы, порожденные данным (через exec и т.п.) Src - дескриптор, который надо переназначить; Dst - собственный дескриптор, определенный в программе, на который надо переназначить операции ввода-вывода. } var Source, Target : Word; begin Source := Src; Target := Dst; asm mov ah, 46h mov bx, Target mov cx, Source int 21h end end; begin { тело программы } { сначала надо открыть файл, для которого будет делаться переназначение } Assign (f, 'redirect.pas'); Reset (f); { теперь надо узнать его дескриптор в системе (handle) } InH := TextRec(f).Handle; { и можно переназначать - процедура для этого есть } RedirHandle (StdIn,InH); { после этого StdIn переназначен на файл с дескриптором InH } Writeln ('********** Перед EXEC с переназначением ...'); SwapVectors; Exec (GetEnv(