home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / OB3.2D2.DMS / in.adf / Demos / Sparks.mod < prev    next >
Encoding:
Text File  |  1992-11-02  |  2.1 KB  |  117 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.  
  21. VAR
  22.   i: INTEGER;
  23.   ns: I.NewScreen;
  24.   screen: I.ScreenPtr;
  25.   Ciapra[0BFE001H]: SHORTSET;
  26.   lines: ARRAY maxLines OF line;
  27.   l: line;
  28.   cl: INTEGER;
  29.   color,coldir: INTEGER;
  30.   deltas: line;
  31.  
  32. TYPE
  33.   ColArr = ARRAY 32 OF INTEGER;
  34.  
  35. CONST
  36.   colors = ColArr(0000H,0F00H,0F30H,0F60H,0F90H,0FC0H,0FF0H,0CF0H,
  37.                   09F0H,06F0H,03F0H,00F0H,00F3H,00F6H,00F9H,00FCH,
  38.                   00FFH,00CFH,009FH,006FH,003FH,000FH,030FH,060FH,
  39.                   090FH,0C0FH,0F0FH,0F3FH,0F6FH,0F9FH,0FCFH,0FFFH);
  40.  
  41.  
  42. PROCEDURE DrawLine(VAR l: line; color: INTEGER);
  43.  
  44. VAR rp: g.RastPortPtr;
  45.  
  46. BEGIN
  47.   rp := sys.ADR(screen.rastPort);
  48.   g.SetAPen(rp,color);
  49.   g.SetDrMd(rp,g.jam1);
  50.   g.Move(rp,l[start,x],l[start,y]);
  51.   g.Draw(rp,l[end,  x],l[end,  y]);
  52. END DrawLine;
  53.  
  54.  
  55. PROCEDURE Adjust(VAR c,dc: INTEGER; max: INTEGER);
  56.  
  57. VAR
  58.   i: INTEGER;
  59.   VHPosR[0DFF006H]: SET;
  60.  
  61. BEGIN
  62.   i := dc - 8;
  63.   INC(c,i);
  64.   IF (c<0) OR (c>=max) THEN
  65.     DEC(c,i);
  66.     i := sys.VAL(INTEGER,VHPosR*{0..3});
  67.     IF i>7 THEN INC(i,1) END;
  68.     dc := i;
  69.   END;
  70. END Adjust;
  71.  
  72.  
  73.  
  74. BEGIN
  75.  
  76.   ns.width  := g.gfx.normalDisplayColumns DIV 2;
  77.   ns.height := -1;
  78.   ns.depth  := 5;
  79.   ns.type   := I.customScreen+{I.screenQuiet};
  80.   screen := I.OpenScreen(ns);
  81.  
  82.   IF screen#NIL THEN
  83.  
  84.     g.LoadRGB4(sys.ADR(screen.viewPort),colors,32);
  85.  
  86.     color:=1; coldir := 1;
  87.  
  88.     REPEAT
  89.  
  90.       DrawLine(lines[cl],erase);
  91.  
  92.       INC(color,coldir);
  93.       CASE color OF 1,31: coldir := -coldir ELSE END;
  94.  
  95.       i := start;
  96.       REPEAT
  97.         Adjust(l[i,x],deltas[i,x],screen.width);
  98.         Adjust(l[i,y],deltas[i,y],screen.height);
  99.         INC(i);
  100.       UNTIL i>end;
  101.  
  102.       DrawLine(l,color);
  103.       lines[cl] := l;
  104.  
  105.       INC(cl);
  106.       IF cl=maxLines THEN cl := 0 END;
  107.  
  108.     UNTIL NOT(6 IN Ciapra);
  109.  
  110.     I.OldCloseScreen(screen);
  111.  
  112.   END
  113.  
  114. END Sparks.
  115.  
  116.  
  117.