#!/usr/bin/env gbs3

Private Const MAXITER As Integer = 50
Private Const LIMIT As Float = 4.0

Sub Mandelbrot(W As Integer, H As Integer)

  Dim XMin As Float = -1.5
  Dim YMin As Float = -1
  Dim InvN As Float = 2.0 / W
  Dim CheckNext As Boolean = True
  Dim X, Y, K As Integer
  Dim Cr, Ci, Zr, Zi, {Tr}, Ti, T As Float

  For Y = 0 To H - 1

    Ci = Y * InvN + YMin

    For X = 0 To W - 1

      Zr = 0
      Zi = 0
      {Tr} = 0
      Ti = 0
      Cr = X * InvN + XMin

      If CheckNext Then

        For K = 1 To MAXITER
          Zi = 2.0 * Zr * Zi + Ci
          Zr = {Tr} - Ti + Cr
          Ti = Zi * Zi
          {Tr} = Zr * Zr
          T = {Tr} + Ti
          If IsNan(T) Or If T > LIMIT Then Break
        Next
        If K > MAXITER Then
          Print "1";
          CheckNext = False
        Else
          Print "0";
        Endif

      Else

        For K = 1 To MAXITER

          Zi = 2.0 * Zr * Zi + Ci
          Zr = {Tr} - Ti + Cr
          Ti = Zi * Zi
          {Tr} = Zr * Zr

        Next

        T = {Tr} + Ti
        If IsNan(T) Or If T > LIMIT Then
          Print "0";
          CheckNext = True
        Else
          Print "1";
        Endif

      Endif

    Next

    Print

  Next

End

Dim I As Integer

For I = 1 To 20
  Mandelbrot(200, 200)
Next

Error CStr(Jit.Time)

