{ Norbert Igl Fido : 2:243/8301.3 Gernet : 21:100/40.3 Internet: q3976866@fernuni-hagen.de > I seen some code posted here a few weeks ago. I meant to save it, > but didn't. The code creates a windowed DOS shell. > I would like to simply run a .BAT installation file in a window > from my pascal program. ...same question a few days ago here in our local echo ... (:-) Its not only with windowed output ( easy possible ) but also stores the pgm's output in your pgm's buffer .... have fun! } program test29; {$M $1000,0,$FFF0}{ $C } uses crt, dos; const maxBufSize = 64000; old29 : pointer = nil; type tVBuff = record siz : word; last: word; txt : array[1..MaxBufSize] of char; end; pVBuff = ^tVBuff; var Buf : pVBuff; procedure New29(Flags, CS, IP, AX, BX,CX, DX, SI, DI, DS, ES, BP: Word); interrupt; begin if Buf <> NIL then with Buf^ do begin if last < siz then inc( Last ); txt[last] := CHAR(AX) end end; procedure BeginCapture; begin if Old29 = NIL then getintvec($29, Old29); SetIntVec($29, @New29 ); end; procedure DoneCapture; begin if old29 <> Nil then begin SetIntVec($29, old29); old29 := NIL end end; procedure InitBuffer; begin Buf := NIL end; procedure BeginBuffer(Size:word); begin if Size > maxBufSize then size := maxBufSize; GetMem( Buf, Size ); Buf^.siz := Size; Buf^.last:= 0; fillchar( Buf^.txt, size-4, 0); end; procedure DoneBuffer; begin if Buf <> NIL then begin dispose(buf); initBuffer; end end; procedure ShowBuffer; var i, maxy : word; begin if buf = NIL then exit; maxy := (WindMax - WindMin) shr 8; clrscr; for i := 1 to Buf^.last do begin if wherey = maxy then begin write(' --- weiter mit Taste --- '); clreol; readkey; clrscr; end; write( buf^.txt[i] ); end; write(#13#10' --- Ende, weiter mit Taste --- '); clreol; readkey; clrscr; end; begin InitBuffer; BeginBuffer($4000); { 16k Buffer, max=64k } BeginCapture; swapvectors; exec( getenv('comspec'),' /C DIR *.pas'); swapvectors; DoneCapture; ShowBuffer; DoneBuffer end.