home *** CD-ROM | disk | FTP | other *** search
/ Fish 'n' More 2 / fishmore-publicdomainlibraryvol.ii1991xetec.iso / dirs / oberon_380.lzh / Oberon / Demos / Sparks.mod < prev    next >
Text File  |  1990-10-11  |  2KB  |  112 lines

  1. MODULE Sparks;
  2.  
  3. IMPORT g:   Graphics,
  4.        I:   Intuition,
  5.        sys: SYSTEM;
  6.  
  7. (* $OvflChk- $RangeChk- $StackChk- $NilChk- $ReturnChk- $CaseChk- *)
  8.  
  9. CONST
  10.   maxLines = 64;
  11.   erase = 0;
  12.   x = 0;
  13.   y = 1;
  14.   start = 0;
  15.   end    = 1;
  16.  
  17. TYPE
  18.   point = ARRAY 2 OF INTEGER; (* x,y *)
  19.   line    = ARRAY 2 OF point;   (* start,end *)
  20.   ColArr = ARRAY 32 OF INTEGER;
  21.  
  22. VAR
  23.   i: INTEGER;
  24.   ns: I.NewScreen;
  25.   screen: I.ScreenPtr;
  26.   Ciapra[0BFE001H]: SHORTSET;
  27.   lines: ARRAY maxLines OF line;
  28.   l: line;
  29.   cl: INTEGER;
  30.   color,coldir: INTEGER;
  31.   deltas: line;
  32.  
  33.  
  34. PROCEDURE DrawLine(VAR l: line; color: INTEGER);
  35.  
  36. VAR rp: g.RastPortPtr;
  37.  
  38. BEGIN
  39.   rp := sys.ADR(screen.rastPort);
  40.   g.SetAPen(rp,color);
  41.   g.SetDrMd(rp,g.jam1);
  42.   g.Move(rp,l[start,x],l[start,y]);
  43.   g.Draw(rp,l[end,  x],l[end,  y]);
  44. END DrawLine;
  45.  
  46.  
  47. PROCEDURE Adjust(VAR c,dc: INTEGER; max: INTEGER);
  48.  
  49. VAR
  50.   i: INTEGER;
  51.   VHPosR[0DFF006H]: SET;
  52.  
  53. BEGIN
  54.   i := dc - 8;
  55.   INC(c,i);
  56.   IF (c<0) OR (c>=max) THEN
  57.     DEC(c,i);
  58.     i := sys.VAL(INTEGER,VHPosR*{0..3});
  59.     IF i>7 THEN INC(i,1) END;
  60.     dc := i;
  61.   END;
  62. END Adjust;
  63.  
  64.  
  65.  
  66. BEGIN
  67.  
  68.   ns.width  := g.gfx.normalDisplayColumns DIV 2;
  69.   ns.height := -1;
  70.   ns.depth  := 5;
  71.   ns.type   := I.customScreen+{I.screenQuiet};
  72.   screen := I.OpenScreen(ns);
  73.  
  74.   IF screen#NIL THEN
  75.  
  76.     g.LoadRGB4(sys.ADR(screen.viewPort),
  77.        ColArr(0000H,0F00H,0F30H,0F60H,0F90H,0FC0H,0FF0H,0CF0H,
  78.           09F0H,06F0H,03F0H,00F0H,00F3H,00F6H,00F9H,00FCH,
  79.           00FFH,00CFH,009FH,006FH,003FH,000FH,030FH,060FH,
  80.           090FH,0C0FH,0F0FH,0F3FH,0F6FH,0F9FH,0FCFH,0FFFH),32);
  81.  
  82.     color:=1; coldir := 1;
  83.  
  84.     REPEAT
  85.  
  86.       DrawLine(lines[cl],erase);
  87.  
  88.       INC(color,coldir);
  89.       CASE color OF 1,31: coldir := -coldir ELSE END;
  90.  
  91.       i := start;
  92.       REPEAT
  93.     Adjust(l[i,x],deltas[i,x],screen.width);
  94.     Adjust(l[i,y],deltas[i,y],screen.height);
  95.     INC(i);
  96.       UNTIL i>end;
  97.  
  98.       DrawLine(l,color);
  99.       lines[cl] := l;
  100.  
  101.       INC(cl);
  102.       IF cl=maxLines THEN cl := 0 END;
  103.  
  104.     UNTIL NOT(6 IN Ciapra);
  105.  
  106.     I.CloseScreen(screen);
  107.  
  108.   END
  109.  
  110. END Sparks.
  111.  
  112.