REM Demo on how to embed an external library REM http://alleg.sourceforge.net/ REM REM The fractal code is based on the GWBasic Example REM Mr. LEUNG Chi Kit REM The Hong Kong Taoist Association Ching Chung Secondary School REM REM repaired/reworked by KindlyRat 16 Feb 2005 REM reworked for M4BASIC by PvE, August 2014 - GPL. REM REM Add the necessary include files and libraries as command line option to the compiler: REM REM gcc -include allegro5/allegro.h -include allegro5/allegro_primitives.h -g -o allegro allegro.c -lm -lgc -lallegro -lallegro_primitives REM REM -------------------------------------------------------------------------------- DECLARE *display = NULL TYPE ALLEGRO_DISPLAY DECLARE *event_queue = NULL TYPE ALLEGRO_EVENT_QUEUE DECLARE white, green, black, blue, red, yellow, COLOUR TYPE ALLEGRO_COLOR IF NOT(al_init()) THEN PRINT "failed to initialize allegro!" NL END -1 ENDIF LET display = al_create_display(640, 350) IF NOT(display) THEN PRINT "failed to create display!" NL END -1 ENDIF CALL al_set_window_title(display, "Drawing a fractal in Allegro!") LET event_queue = al_create_event_queue() IF NOT(event_queue) THEN PRINT "failed to create event_queue!" NL END -1 ENDIF LET green = al_map_rgb(0, 255, 0) LET black = al_map_rgb(0, 0, 0) LET blue = al_map_rgb(0, 0, 255) LET red = al_map_rgb(255, 0, 0) LET white = al_map_rgb(255, 255, 255) LET yellow = al_map_rgb(255, 255, 0) CALL al_register_event_source(event_queue, al_get_display_event_source(display)) CALL al_clear_to_color(black) CALL al_init_primitives_addon() REM -------------------------------------------------------------------------------- PRINT "Please wait, calculating and drawing...\n" INTEGER LFT, TOP, W, RECEN, IMCEN, X, Y, J FLOAT M, R, S, REC, IMC, RE, RE2, IM, IM2 LET LFT = 150 LET TOP = 380 LET W = 360 LET M = .833 LET R = 2.64 LET S = 2 * R / W LET RECEN = 0 LET IMCEN = 0 FOR Y = 0 TO W FOR X = 0 TO W LET REC = S * (X - W / 2) + RECEN LET IMC = S * (Y - W / 2) + IMCEN LET RE = REC LET IM = IMC LET RE2 = RE * RE LET IM2 = IM * IM LET J = 0 WHILE RE2 + IM2 <= 256 AND J < 15 LET IM = 2 * RE * IM + IMC LET RE = RE2 - IM2 + REC LET RE2 = RE * RE LET IM2 = IM * IM LET J = J + 1 WEND IF J < 3 THEN GOTO Next_Iter ELIF J >= 3 AND J < 6 THEN LET COLOUR = yellow ELIF J >= 6 AND J < 9 THEN LET COLOUR = blue ELIF J >= 9 AND J < 12 THEN LET COLOUR = green ELIF J >= 12 AND J < 15 THEN LET COLOUR = white ELIF J >= 15 THEN LET COLOUR = red ENDIF CALL al_draw_filled_circle(X + LFT, (TOP - Y)*M, 1, COLOUR) LABEL Next_Iter NEXT NEXT CALL al_flip_display() REM -------------------------------------------------------------------------------- WHILE TRUE DECLARE ev TYPE ALLEGRO_EVENT CALL al_wait_for_event(event_queue, &ev) IF ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE THEN BREAK ENDIF WEND CALL al_destroy_display(display) CALL al_destroy_event_queue(event_queue) REM --------------------------------------------------------------------------------
Return to M4BASIC