[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]