Warning, /frameworks/syntax-highlighting/autotests/input/highlight.tig is written in an unsupported language. File is not indexed.

0001 /* Mandelbrot integer demo
0002  * Released under the MIT License
0003  */
0004 
0005 let
0006   /* Basic types.  */
0007   type bool = int
0008   type coord = int
0009   type value = int
0010   type array2d = array of value
0011   type image2d = { nrows : coord, ncols : coord, data : array2d }
0012 
0013   /* Image creation.  */
0014   function image_new (ncols : coord, nrows : coord) : image2d =
0015     image2d { nrows = nrows, ncols = ncols,
0016               data = array2d[nrows * ncols] of 0 }
0017 
0018   function image_set (input : image2d, col : coord, row : coord,
0019                       value : value) =
0020     (
0021       input.data[row * input.ncols + col] := value
0022     )
0023 
0024   function mandelbrot () =
0025     let
0026       type fp = int
0027       var X : int := 300
0028       var Y : int := 300
0029       var ima : image2d := image_new (X, Y)
0030       var fixsize: int := 16834
0031 
0032       function mul(a : fp, b : fp) : fp = (a*b)/fixsize
0033       function frac(n : int, d : int) : fp = (n*fixsize)/d
0034 
0035       var xcenter : fp := frac(0016, 10000)
0036       var ycenter : fp := frac(8224, 10000)
0037       var xmin : fp := xcenter - frac(5,100)
0038       var ymin : fp := ycenter - frac(5,100)
0039       var xmax : fp := xcenter + frac(5,100)
0040       var ymax : fp := ycenter + frac(5,100)
0041       var xs   : fp := (xmax - xmin)/X
0042       var ys   : fp := (ymax - ymin)/Y
0043 
0044     function iterations(x:int, y:int) : int =
0045     let
0046         var i : int := 0
0047         var p : fp := xmin+x*xs
0048         var q : fp := ymin+y*ys
0049         var x0 : fp := 0
0050         var y0 : fp := 0
0051         var xn : fp := 0
0052         var four : fp := frac(4,1)
0053         var two  : fp := frac(2,1)
0054     in
0055         while (mul(xn,xn)+mul(y0,y0) < four) & (i < 256) do
0056         (
0057             i  := i + 1;
0058             xn := mul((x0+y0),(x0-y0)) + p;
0059             y0 := mul(two,mul(x0,y0)) + q;
0060             x0 := xn
0061         );
0062         i
0063     end
0064 
0065     in
0066 
0067     (for y := 0 to (Y-1) do
0068         for x := 0 to (X-1) do
0069             let
0070                 var i : int  := iterations(x,y)
0071              in
0072                 image_set (ima, x, y, i)
0073              end);
0074     end
0075 in
0076     print("Mandelbrot demo\n");
0077     mandelbrot()
0078 end