home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / M2V11-1.LHA / modula / examples / src / Mandel.mod < prev    next >
Encoding:
Text File  |  1994-10-03  |  1.8 KB  |  80 lines

  1. MODULE Mandel ;
  2.  
  3. FROM SYSTEM IMPORT ADR ;
  4.  
  5. IMPORT
  6.   E := Exec ,
  7.   I := Intuition,
  8.   G := Graphics,
  9.   StdIO,
  10.   StdLib ;
  11.  
  12. CONST
  13.   realC   = 0.2  ;
  14.   imgC    = 0.15 ;
  15.   zoom    = 6.0  ;
  16.   maxI    = 50   ;
  17.   tv      = 210  ;
  18.   th      = 170  ;
  19.  
  20. VAR
  21.   ns    : I.NewScreen ;
  22.   s     : I.ScreenPtr ;
  23.   rp    : G.RastPortPtr ;
  24.   h     : LONGINT ;
  25.   v     : LONGINT ;
  26.   k     : LONGINT ;
  27.   cr    : SHORTREAL ;
  28.   ci    : SHORTREAL ;
  29.   t     : SHORTREAL ;
  30.   zr    : SHORTREAL ;
  31.   zi    : SHORTREAL ;
  32.   horiF : SHORTREAL ;
  33.   vertF : SHORTREAL ;
  34.   loop  : BOOLEAN   ;
  35.   colarr: ARRAY [0..31] OF INTEGER ;
  36.  
  37. PROCEDURE ExitProc( ) ;
  38. BEGIN I.CloseScreen( s )
  39. END ExitProc ;
  40.  
  41. BEGIN
  42.   ns := [0,0,320,400,5,1,7,G.LACE,I.CUSTOMSCREEN+I.SCREENQUIET,NIL,""];
  43.   s := I.OpenScreen( ns ) ;
  44.   IF s = NIL THEN RETURN 10 END ;
  45.   StdIO.puts("CTRL-C to quit...") ;
  46.   rp := ADR( s^.RastPort ) ;
  47.   StdLib.atexit( ExitProc ) ;
  48.  
  49.   colarr := [0000H,0F00H,0F30H,0F60H,0F90H,0FC0H,0FF0H,0CF0H,
  50.          09F0H,06F0H,03F0H,00F0H,00F3H,00F6H,00F9H,00FCH,
  51.          00FFH,00CFH,009FH,006FH,003FH,000FH,030FH,060FH,
  52.          090FH,0C0FH,0F0FH,0F3FH,0F6FH,0F9FH,0FCFH,0FFFH] ;
  53.  
  54.   G.LoadRGB4( ADR( s^.ViewPort ) , ADR( colarr ) , 32 ) ;
  55.  
  56.   horiF := zoom/320.0 ;
  57.   vertF := zoom/400.0 ;
  58.   FOR v := -tv TO 399-tv DO
  59.      ci := imgC + vertF * SHORTFLOAT(v) ;
  60.      FOR h := -th TO 319-th DO
  61.        cr := horiF * SHORTFLOAT(h) + realC ;
  62.        zr := 0.0 ; zi := 0.0 ;
  63.        loop := TRUE ; k := 1 ;
  64.        WHILE ( k <= maxI ) & loop DO
  65.          t := zr ;
  66.          zr := (zr*zr)-(zi*zi)+cr ;
  67.          zi := 2.0*t*zi+ci ;
  68.          IF (zr*zr)+(zi*zi) >= 4.0 THEN loop := FALSE END ;
  69.          INC( k );
  70.        END ;
  71.        IF k < maxI THEN G.SetAPen( rp, k MOD 32 )
  72.        ELSE G.SetAPen( rp, 0 );
  73.        END ;
  74.        G.WritePixel( rp, h+th, v+tv ) ;
  75.        StdLib.chkabort( )
  76.      END
  77.   END ;
  78.   E.Wait({12}) (* Wait for BREAK signal *)
  79. END Mandel.
  80.