/*********************************************************************/ /* THE MANDELBROT SET --- faster than ever PUBLIC DOMAIN */ /* (C) 1987 by J. Loviscach, D-4800 Bielefeld, Tel. (0521) 88 97 81 */ /*********************************************************************/ /*********************************************************************/ /* INCLUDE FILES */ /*********************************************************************/ #include #include #include #include #include #include "mandelbr.h" /*********************************************************************/ /* DEFINES */ /*********************************************************************/ #define WI_KIND (NAME) #define NO_WINDOW (-1) #define MIN_WIDTH (2*gl_wbox) #define MIN_HEIGHT (3*gl_hbox) #define MAX_DEPTH 8 int seed; #define rand() ( seed=abs((int)(seed * 6707 + 170253)) ) #define min(x,y) ( x>y ? y : x ) #define max(x,y) ( x>y ? x : y ) #define ONE 134217728 #define FOUR 520000000 /* at least similar to 4*ONE */ #define ROWS 82 #define COLUMNS 1300 /*********************************************************************/ /* EXTERNALS */ /*********************************************************************/ extern int gl_apid; /*********************************************************************/ /* GLOBAL VARIABLES */ /*********************************************************************/ int gl_hchar; int gl_wchar; int gl_wbox; int gl_hbox; /* system sizes */ int phys_handle; /* physical workstation handle */ int handle; /* virtual workstation handle */ int wi_handle; /* window handle */ int top_window; /* handle of topped window */ int xdesk,ydesk,hdesk,wdesk; int xold,yold,hold,wold; int xwork,ywork,hwork,wwork; /* desktop and work areas */ int msgbuff[8]; /* event message buffer */ int keycode; /* keycode returned by event-keyboard */ int mx,my; /* mouse x and y pos. */ int butdown; /* button state tested for, UP/DOWN */ int ret; /* dummy return variable */ int i,j; long k; long scradr; int hidden; /* current state of cursor */ int contrl[12]; int intin[128]; int ptsin[128]; int intout[128]; int ptsout[128]; /* storage wasted for idiotic bindings */ int work_in[11]; /* Input to GSX parameter array */ int work_out[57]; /* Output from GSX parameter array */ int pxyarray[10]; /* input point array */ /****************************************************************/ /* GSX UTILITY ROUTINES */ /****************************************************************/ hide_mouse() { if(! hidden){ graf_mouse(M_OFF,0x0L); hidden=TRUE; } } show_mouse() { if(hidden){ graf_mouse(M_ON,0x0L); hidden=FALSE; } } /****************************************************************/ /* open virtual workstation */ /****************************************************************/ open_vwork() { for(i=0;i<10;work_in[i++]=1); work_in[10]=2; handle=phys_handle; v_opnvwk(work_in,&handle,work_out); } /****************************************************************/ /* Init. Until First Event_Multi */ /****************************************************************/ OBJECT *maintree,*helptree; int xobj,yobj,wobj,hobj,xhi,yhi,xlo,ylo,xhi0,yhi0,xlo0,ylo0; int max_depth,frames,depth,recalc_on; int a[8],b[8]; int buffer_flag; long elements; char *malloc(),*matrix,*addr; main() { scradr=xbios(3); /* logbase */ appl_init(); phys_handle=graf_handle(&gl_wchar,&gl_hchar,&gl_wbox,&gl_hbox); wind_get(0, WF_WORKXYWH, &xdesk, &ydesk, &wdesk, &hdesk); open_vwork(); if(work_out[13]!=2) form_alert(1,"[3][Monochrome|version only.][Sorry!]"); else { if(!rsrc_load("mandelbr.rsc")) form_alert(1,"[3][I would like|to get my RSC file!][Damn!]"); else { elements=((long)(3))*ROWS*COLUMNS; matrix=malloc(32000); for ( k=32000; k