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

    {
     Dear SWAG-TEAM,
       I am a dutch student of English and I'm also interested in programming. In
       one of my programs I make use of 'reverse video', but I'm not satisfied
       with the way I achieve this 'reverse video'. I know it can be done much
       faster by writing and reading directly to/from video memory. Instead I have
       to call interrupt 10h for each character. Another problem I face is that I
       don't know how to store each character attribute separately. If different
       colors are used, this code is useless. I've included a part of the code I
       use as an example.
       I hope you can provide me with an answer to my questions.
     Your's sincerely,

     Harro Lissenberg
     H.N.Lissenberg@let.rug.nl
    }

    {
    Reverse Video,
    by Harro Lissenberg.
    E-mail: H.N.Lissenberg@let.rug.nl
    }

    Uses crt;

    Var
      OrX, OrY, X, Y: byte;
      Kar: char;

    Procedure CursorOff; assembler;
    asm
       Mov          AH, 1
       Mov          CX, 2000h
       Int          10h
    end;

    Procedure CursorOn; assembler;
    asm
       Mov          AH, 1
       Mov          CH, 11
       Mov          CL, 12
       Int          10h
    end;

    Procedure RestoreLine(Line: integer);
    begin
      TextColor(LightGray);
      TextBackGround(Black);
      For X:=1 to 79 do
      begin
        GotoXY(X, Line);
        asm
          Mov         AH, 8      {Read character at cursor}
          Mov         BH, 0      {Set video page}
          Int         10h
          Mov         Kar, AL    {Copy AL (contains character) to variable Kar}
        end;
        Write(Kar);
      end;
    end;

    Procedure RevVideo(Line: integer);
    begin
      TextColor(Black);
      TextBackGround(LightGray);
      For X:=1 to 79 do
      begin
        GotoXY(X, Line);
        asm
          Mov         AH, 8      {Read character at cursor}
          Mov         BH, 0      {Set video page}
          Int         10h
          Mov         Kar, AL    {Copy AL (contains character) to variable Kar}
        end;
        Write(Kar);
      end;
    end;

    begin
      Y:=1;
      OrY:=WhereY;
      OrX:=WhereX;
      CursorOff;
      repeat
        RevVideo(Y);
        Delay(200);
        RestoreLine(Y);
        Inc(Y);
        If Y > 25 then Y:=1;
      until KeyPressed;
      CursorOn;
      GotoXY(OrX, OrY);
    end.

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