[Back to SCROLL SWAG index] [Back to Main SWAG index] [Original]
Program Scroll;
Uses
Crt, Dos;
Const
Null = #0;
UpArrow = #72;
LeftArrow = #75;
RightArrow = #77;
DownArrow = #80;
PageUp = #73;
PageDown = #81;
ESC = #27;
Type
StrPtr = ^LineBuffer;
LineBuffer = Record
Line : String[255];
Next : StrPtr;
Prev : StrPtr;
Up23 : StrPtr;
Down23 : StrPtr;
end;
Var
F : Text;
First,
Last,
Prev,
Current : StrPtr;
Line : Byte;
Row : Byte;
Function PadString( S : String ) : String;
Var
X : Byte;
begin
if ord(S[0]) > 79 then S[0]:=Chr(80);
For X := (Length(S) + 1) to 79 Do
S[X] := ' ';
S[0] := Chr(79);
PadString := S;
end;
Procedure Normal;
begin
TextColor(15);
TextBackGround(0);
end;
Procedure HighLite;
begin
TextColor(10);
TextBackGround(7);
end;
Procedure AddString;
Var
S : String;
begin
if First = Nil then
begin
Line := 1;
New(Current);
Current^.Prev := Nil;
Current^.Next := Nil;
Current^.Up23 := Nil;
Current^.Down23 := Nil;
ReadLn(F, S);
Current^.Line := S;
Last := Current;
First := Current;
end
else
begin
Prev := Current;
New(Current);
Current^.Prev:=Prev;
Current^.Next:=Nil;
ReadLn(F,Current^.Line);
if Line = 23 then
begin
Current^.Up23 := First;
First^.Down23 := Current;
Current^.Down23:= Nil;
end
else
begin
if Line > 23 then
begin
Current^.Up23 := Prev^.Up23^.Next;
Current^.Up23^.Down23 := Current;
Current^.Down23:=Nil;
end
else
begin
Current^.Up23:=Nil;
Current^.Down23:=Nil;
end;
end;
Prev^.Next:=Current;
Last:=Current;
if Line<=60 then
Line:=Line + 1;
end;
end;
Procedure DrawScreen( This : StrPtr);
Var
TRow : Byte;
begin
TRow:=1;
While TRow<=23 Do
begin
GotoXY(1,TRow);
Write(PadString(This^.Line));
This:=This^.Next;
TRow:=TRow + 1;
end;
end;
Procedure Scrolling;
Var
InKey : Char;
begin
While (MemAvail>272) and (not Eof(F)) Do AddString;
if not Eof(F) then
begin
GotoXY(1,1);
TextColor(10);
Write('Entire File not Loaded');
end;
Current:=First;
Window(1,1,1,79);
ClrScr;
HighLite;
GotoXY(1,1);
Write(PadString(ParamStr(1)));
Window(2,1,24,80);
Normal;
DrawScreen(First);
Row:=1;
Window(2,1,25,80);
While InKey<>#27 Do
begin
InKey:=ReadKey;
Case InKey of
Null :
begin
InKey:=ReadKey;
Case InKey of
UpArrow :
begin
if Current^.Prev = Nil then
begin
Sound(2000);
Delay(50);
NoSound;
end
else
begin
if Row = 1 then
begin
GotoXY(1,1);
Normal;
Write(PadString(Current^.Line));
GotoXY(1,1);
InsLine;
Current:=Current^.Prev;
HighLite;
Write(PadString(Current^.Line));
end
else
begin
GotoXY(1,Row);
Normal;
Write(PadString(Current^.Line));
Row:=Row - 1;
GotoXY(1,Row);
HighLite;
Current:=Current^.Prev;
Write(PadString(Current^.Line));
end;
end;
end;
DownArrow :
begin
if Current^.Next = Nil then
begin
Sound(2000);
Delay(50);
NoSound;
end
else
begin
if Row = 23 then
begin
GotoXY(1,23);
Normal;
Write(PadString(Current^.Line));
GotoXY(1,1);
DelLine;
GotoXY(1,23);
Current:=Current^.Next;
HighLite;
Write(PadString(Current^.Line));
end
else
begin
GotoXY(1,Row);
Normal;
Write(PadString(Current^.Line));
Row:=Row + 1;
GotoXY(1,Row);
HighLite;
Current:=Current^.Next;
Write(PadString(Current^.Line));
end;
end;
end;
PageDown :
begin
if (Row = 23) and (Current = Last) then
begin
Sound(2000);
Delay(50);
NoSound;
end
else
begin
Normal;
if Current^.Down23 = Nil then
begin
Current:=Last;
DrawScreen(Last^.Up23);
Row:=23;
GotoXY(1,Row);
HighLite;
Write(PadString(Current^.Line));
end
else
begin
Current:=Current^.Down23^.Next;
DrawScreen(Current^.Up23);
Row:=23;
GotoXY(1,Row);
HighLite;
Write(PadString(Current^.Line));
end;
end;
end;
PageUp :
begin
if (Row = 23) and (Current^.Up23 = Last) then
begin
Sound(2000);
Delay(50);
NoSound;
end
else
begin
Normal;
if Current^.Up23 = Nil then
begin
Current:=First;
DrawScreen(First);
Row:=1;
GotoXY(1,Row);
HighLite;
Write(PadString(First^.Line));
end
else
begin
Current:=Current^.Up23^.Prev;
DrawScreen(Current);
Row:=1;
GotoXY(1,Row);
HighLite;
Write(PadString(Current^.Line));
end;
end;
end;
else
begin
Sound(2000);
Delay(50);
NoSound;
end;
end;
end;
else
begin
Sound(2000);
Delay(50);
NoSound;
end;
end;
end;
end;
begin
if ParamCount < 1 then
begin
WriteLn('Invalid Number of Parameters!!!');
Halt(1);
end;
Assign(F, Paramstr(1));
Reset(F);
Current:=Nil;
First:=Nil;
Scrolling;
GotoXY(1, 23);
WriteLn;
WriteLn;
end.
[Back to SCROLL SWAG index] [Back to Main SWAG index] [Original]