REM
REM H.U.G. test program - PvE August 2009, GPL.
REM
REM --------------------------------------------------------------------------------------------------
INCLUDE "hug.bac"
REM --------------------------------------------------------------------------------------------------
CONST MaxIters = 100
CONST xSize = 480
CONST ySize = 330
CONST Black = -1
CONST Left = -2.0
CONST Right = 1.0
CONST Top = 1.0
CONST Bottom = -1.0
SUB Draw_Fractal
LOCAL x, y, count TYPE short
LOCAL zr, zi, cr, ci TYPE long double
LOCAL rsquared, isquared TYPE long double
DISABLE(start_but)
DISABLE(clear_but)
REM Information to user
OUT("Please wait...", "#0000FF", "#FFFFFF", 10, 300)
FOR y = 0 TO ySize
FOR x = 0 TO xSize
zr = 0.0
zi = 0.0
cr = Left + x * (Right - Left) / xSize
ci = Top + y * (Bottom - Top) / ySize
rsquared = zr * zr
isquared = zi * zi
FOR count = 0 TO MaxIters
zi = zr * zi * 2
zi = zi + ci
zr = rsquared - isquared
zr = zr + cr
rsquared = zr * zr
isquared = zi * zi
NEXT
IF rsquared + isquared <= 4.0 THEN
PIXEL(PixelCol$[ROUND((rsquared + isquared)*4)], x, y)
END IF
NEXT
NEXT
REM Tell drawing is ready
SQUARE ("#FFFFFF", 10, 300, 100, 30, TRUE)
OUT("Drawing ready.", "#0000FF", "#FFFFFF", 10, 300)
ENABLE(clear_but)
ENABLE(start_but)
END SUB
REM --------------------------------------------------------------------------------------------------
SUB Clear_Fractal
SQUARE ("#FFFFFF", 0, 0, 480, 330, TRUE)
END SUB
REM --------------------------------------------------------------------------------------------------
SUB Quit_Prog
QUIT
END SUB
REM --------------------------------------------------------------------------------------------------
REM Get some colors
GLOBAL PixelCol$[17] TYPE STRING
FOR i = 0 TO 16
READ PixelCol$[i]
NEXT
DATA "#800000", "#800080", "#8000FF", "#808000", "#808080", "#8080FF", "#80FF00", "#80FF80", \
"#80FFFF", "#FF0000", "#FF0080", "#FF00FF", "#FF8000", "#FF8080", "#FF80FF", "#FFFF00", "#000000"
REM Create the GUI
mainwin = WINDOW("Drawing a fractal", 500, 400)
frame = FRAME(490, 340)
ATTACH (mainwin, frame, 5, 5)
canvas = CANVAS(480, 330)
ATTACH (mainwin, canvas, 10, 10)
start_but = STOCK("gtk-execute", 100, 40)
ATTACH(mainwin, start_but, 5, 355)
CALLBACK (start_but, Draw_Fractal)
clear_but = STOCK("gtk-clear", 100, 40)
ATTACH(mainwin, clear_but, 120, 355)
CALLBACK (clear_but, Clear_Fractal)
labl = MARK("H.U.G. for BaCon!", 120, 40)
ATTACH(mainwin, labl, 240, 355)
quit_but = STOCK("gtk-quit", 100, 40)
ATTACH(mainwin, quit_but, 395, 355)
CALLBACK (quit_but, Quit_Prog)
DISPLAY