#
# mandelbrot.jako
#
# Print the Mandlebrot set.
#
# Translated from Parrot assembler to Jako by Gregor Purdy <gregor@focusresearch.com>.
# Translated from C to Parrot assembler by Leon Brocard <acme@astray.com>.
# Original C version by Glenn Rhodes.
#
# The C code is:
#
# main(){
#  int x, y, k;
#  char *b = " .:,;!/>)|&IH%*#";
#  float r, i, z, Z, t, c, C;
#
#  for (y=30; puts(""), C = y*0.1 - 1.5, y--;){
#     for (x=0; c = x*0.04 - 2, z=0, Z=0, x++ < 75;){
#        for (r=c, i=C, k=0; t = z*z - Z*Z + r, Z = 2*z*Z + i, z=t, k<112; k++)
#           if (z*z + Z*Z > 10) break;
#        printf ("%c", b[k%16]);
#        }
#     }
# }
#
# Copyright (C) 2001 Gregor N. Purdy. All rights reserved.
# This program is free software. It is subject to the same
# license as Parrot itself.
#

var str b = " .:,;!/>)|&IH%*#";
var int x;
var int y;
var int k;

var num r;
var num i;
var num z;
var num Z;
var num t;
var num c;
var num C;

y = 30;

YREDO:

goto END if (y == 0);

C  = y;
C *= 0.1;
C -= 1.5;

y--;
x = 0;

XREDO:

goto YLOOP if (x == 75);

c  = x;
c *= 0.04;
c -= 2.0;

z = 0.0;
Z = 0.0;
x++;

r = c;
i = C;
k = 0;

KREDO:

goto PRINT if (k == 112);

var num temp_8;
var num temp_9;

temp_8 = z * z;
temp_9 = Z * Z;
t = temp_8 - temp_9;
t += r;

Z *= 2.0;
Z *= z;
Z += i;

z = t;

temp_8 = z * z;
temp_9 = Z * Z;
temp_8 += temp_9;

goto PRINT if (temp_8 > 10.0);

KLOOP:

k++;
goto KREDO;

PRINT:

var int temp_int_4;
var int temp_int_5;

temp_int_4 = k % 16;
temp_int_5 = 1;

var str ch;

ch = substr(b, temp_int_4, temp_int_5);
print(ch);

XLOOP:

goto XREDO;

YLOOP:

print("\n");
goto YREDO;

END:

end;