home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fish 'n' More 2
/
fishmore-publicdomainlibraryvol.ii1991xetec.iso
/
fish
/
languages
/
oberon
/
demos
/
sparks.mod
< prev
next >
Wrap
Text File
|
1990-10-11
|
2KB
|
112 lines
MODULE Sparks;
IMPORT g: Graphics,
I: Intuition,
sys: SYSTEM;
(* $OvflChk- $RangeChk- $StackChk- $NilChk- $ReturnChk- $CaseChk- *)
CONST
maxLines = 64;
erase = 0;
x = 0;
y = 1;
start = 0;
end = 1;
TYPE
point = ARRAY 2 OF INTEGER; (* x,y *)
line = ARRAY 2 OF point; (* start,end *)
ColArr = ARRAY 32 OF INTEGER;
VAR
i: INTEGER;
ns: I.NewScreen;
screen: I.ScreenPtr;
Ciapra[0BFE001H]: SHORTSET;
lines: ARRAY maxLines OF line;
l: line;
cl: INTEGER;
color,coldir: INTEGER;
deltas: line;
PROCEDURE DrawLine(VAR l: line; color: INTEGER);
VAR rp: g.RastPortPtr;
BEGIN
rp := sys.ADR(screen.rastPort);
g.SetAPen(rp,color);
g.SetDrMd(rp,g.jam1);
g.Move(rp,l[start,x],l[start,y]);
g.Draw(rp,l[end, x],l[end, y]);
END DrawLine;
PROCEDURE Adjust(VAR c,dc: INTEGER; max: INTEGER);
VAR
i: INTEGER;
VHPosR[0DFF006H]: SET;
BEGIN
i := dc - 8;
INC(c,i);
IF (c<0) OR (c>=max) THEN
DEC(c,i);
i := sys.VAL(INTEGER,VHPosR*{0..3});
IF i>7 THEN INC(i,1) END;
dc := i;
END;
END Adjust;
BEGIN
ns.width := g.gfx.normalDisplayColumns DIV 2;
ns.height := -1;
ns.depth := 5;
ns.type := I.customScreen+{I.screenQuiet};
screen := I.OpenScreen(ns);
IF screen#NIL THEN
g.LoadRGB4(sys.ADR(screen.viewPort),
ColArr(0000H,0F00H,0F30H,0F60H,0F90H,0FC0H,0FF0H,0CF0H,
09F0H,06F0H,03F0H,00F0H,00F3H,00F6H,00F9H,00FCH,
00FFH,00CFH,009FH,006FH,003FH,000FH,030FH,060FH,
090FH,0C0FH,0F0FH,0F3FH,0F6FH,0F9FH,0FCFH,0FFFH),32);
color:=1; coldir := 1;
REPEAT
DrawLine(lines[cl],erase);
INC(color,coldir);
CASE color OF 1,31: coldir := -coldir ELSE END;
i := start;
REPEAT
Adjust(l[i,x],deltas[i,x],screen.width);
Adjust(l[i,y],deltas[i,y],screen.height);
INC(i);
UNTIL i>end;
DrawLine(l,color);
lines[cl] := l;
INC(cl);
IF cl=maxLines THEN cl := 0 END;
UNTIL NOT(6 IN Ciapra);
I.CloseScreen(screen);
END
END Sparks.