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