// mandel.c - Zortech C++ program to draw Mandelbrot set.
#include <conio.h>
#include "fg.h"
#include "dcomplex.h"

inline float scale(int point, int maxpoint)
    {
    maxpoint    /= 2;
    return 2 * (point - maxpoint)/float(maxpoint);
    }
int     resolution    = 50;
int     maxrow;
int     maxcol;

int     mandel(float row, float col)
    {
    DComplex    Z(0,0);
    DComplex    C(col, row);
    int color       = 0;
    for(int iter = 0; iter < resolution && abs(Z) < 2.0; ++iter, ++color)
        Z   = Z * Z + C;
    return iter < resolution ? color : 0;
    }

int     main(int argc, char **argv)
    {
    int     status  = fg_init();        // initialize graphics package
    maxrow  = fg.displaybox[FG_Y2];
    maxcol  = fg.displaybox[FG_X2];
    int     maxcolor    = fg.nsimulcolor;
    if(status != 0)
        {
        int     step    = 20;
        for(resolution = 1; !kbhit(); ++resolution)
            {
            for(int col=maxcol; col >= 0 && !kbhit(); col -= step)
                for(int row = 0; row <= maxrow/2; row += step)
                    {
                    int color   = mandel(scale(row,maxrow),
                                         scale(col,maxcol))
                                % maxcolor;
                    fg_drawdot(color, FG_MODE_SET, ~0, col, row);
                    fg_drawdot(color, FG_MODE_SET, ~0, col, maxrow-row);
                    }
            if(step > 1) --step;
            }
        while(!kbhit())     // hit key to terminate program
            ;
        fg_term();          // return to text mode
        }
    }
