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

{> I need to be able to scroll the Text display in my File viewer,
> both left and right, to allowing reading of lines that extend past
> column 80.

UnFortunately there's no way to scroll horizontally by BIOS or by another
service Function. You have to implement it on your own. Here are two Procedures
that I use in my Programs (in Case they must scroll left or right ;-)):
}

{$ifNDEF VER70}
Const
  Seg0040   = $0040;
  SegB000   = $B000;
  SegB800   = $B800;
{$endif}

Type
  PageType  = Array [1..50,1..80] of Word;

Var
  Screen    : ^PageType;
  VideoMode : ^Byte;

Procedure ScrollRight(X1,Y1,X2,Y2,Attr : Byte);
Var
  Y      : Byte;
  Attrib : Word;
begin
  Attrib := Word(Attr SHL 8);
  Y      := Y1-1;
  Repeat
    Inc(Y);
    Move(Screen^[Y,X1],Screen^[Y,X1+1],(X2-X1)*2);
    Screen^[Y,X1] := Attrib+32;
  Until Y=Y2;
end;

Procedure ScrollLeft(X1,Y1,X2,Y2,Attr : Byte);
Var
  Y      : Byte;
  Attrib : Word;
begin
  Attrib := Word(Attr SHL 8);
  Y      := Y1-1;
  Repeat
    Inc(Y);
    Move(Screen^[Y,X1+1],Screen^[Y,X1],(X2-X1)*2);
    Screen^[Y,X2] := Attrib+32;
  Until Y=Y2;
end;

begin
  VideoMode := Ptr(Seg0040,$0049);
  if VideoMode^=7 then
    Screen := Ptr(SegB000,$0000)
  else
    Screen := Ptr(SegB800,$0000);
end.

{
X1, Y1, X2 and Y2 are the coordinates of the Windows to be scrolled. Attr is
the color of the vertical line that occurs after scrolling. ;-)
}

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