[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]
{
I went ahead and wrote a fade_HorizontalExpand using Kai
Rohrbacher's fade_VerticalExpand as a guide. The fade was too slow, so I
reduced the detailed inner loop and had the clean-up complete the effect.
}
PROCEDURE HorizontalExpand(pa, time: WORD); { JH }
{ in: pa = page, which contents will be made visible }
{ time = time (in milliseconds) for this action (approx.) }
{out: - }
{rem: the contents of page "pa" has been copied to page visualPage }
{jh "n" was (YMAX+1)*(YMAX+1) DIV 8 = 5000}
CONST n = 2000; {number of executions of the delay loop}
VAR ClockTicks:^LONGINT;
counter: WORD;
t: LONGINT;
temp, middle, step, akku: REAL;
lines, x: INTEGER;
PROCEDURE CopyLine(from, dest: WORD);
{ in: from = to duplicate line from page pa}
{ dest = endline in page visualPage differ}
VAR p1:POINTER;
BEGIN
p1 := GetImage(from+StartVirtualX,StartVirtualY,
from+StartVirtualX,StartVirtualY+YMAX,pa);
PutImage(dest+StartVirtualX,StartVirtualY,p1, 1-Page); {jh visualPage}
FreeImageMem(p1);
END; {CopyLine}
BEGIN
ClockTicks := Ptr(Seg0040,$6C);
t := ClockTicks^;
counter := 0;
temp := 0.0182*time/n;
middle := XMAX/2;
{jh FOR lines := 1 TO ((XMAX+1) SHR 1)-1 DO =159}
FOR lines := 1 TO 99 DO
BEGIN
step := XMAX/(lines SHL 1);
akku := step;
FOR x := 0 TO lines-1 DO
BEGIN {jh The SHR 1 handling is for only two Copylines at a time}
CopyLine( TRUNC(middle-akku),(XMAX+1) SHR 1 -x-1);
CopyLine( TRUNC(middle+akku),(XMAX+1) SHR 1 +x);
akku := akku + step;
INC(counter);
WHILE (ClockTicks^ < (t+counter*temp)) DO BEGIN END;
END;
END;
{Cleanup:}
lines := XMAX SHR 1;
FOR x := 0 TO XMAX SHR 1 DO
BEGIN
CopyLine( lines-x,lines-x);
CopyLine( lines+x,lines+x);
INC(counter);
WHILE (ClockTicks^ < (t+counter*temp)) DO BEGIN END;
END;
IF Odd(XMAX)
THEN CopyLine(XMAX,XMAX);
END; {HorizontalExpand}
[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]