[Back to SCREEN SWAG index]  [Back to Main SWAG index]  [Original]

{
KELLY SMALL

Ok here's a quick example of how you can control the screen
output during an Exec.  BAsically you hook Int $29 which is an
internal bios hook For screen output.  Any Character that would
go to the screen is intercepted by the Interrupt handler and then
TP's Write Procedure is used to output the Charcater to the
screen.  Please note that this will only work With the Crt Unit
and it's direct screen Write methods, not output via the Dos
device..  Of course I assume you are using the Crt Unit since you
are also using the Window Procedure.  if the Program you exec
Uses direct screen Writes then this routine will not work.
}

Program WinHold;
{$M 8096,0,0}
Uses
  Crt, Dos;

Var
  OldIntVect : Pointer;

{F+}
Procedure Int29Handler(AX, BX, CX, DX, SI, DI, DS, ES, BP : Word); Interrupt;
Var
  Dummy : Byte;
begin
  Asm
    Sti
  end;
  Write(Char(Lo(Ax)));
  Asm
    Cli
  end;
end;
{$F-}

begin
  ClrScr;
  Writeln('this line better stay put');
  Window(10, 15, 60, 25);
  GetIntVec($29, OldIntVect);            { Save the old vector }
  SetIntVec($29, @Int29Handler);         { Install interrupt handler }
  SwapVectors;
  Exec(GetEnv('COMSPEC'),'/c dir /p');
  SwapVectors;
  SetIntVec($29, OldIntVect);            { Restore the interrupt }
  Window(1, 1, 80, 25);
  GotoXY(1, 2);
  Writeln('2nd line I hope');
  ReadLn;
end.


[Back to SCREEN SWAG index]  [Back to Main SWAG index]  [Original]