/* * M A N D E L B R O T C O N S T R U C T I O N S E T * * (C) Copyright 1989 by Olaf Seibert. * Mandel may be freely distributed. See file 'doc/Notice' for details. * * Menu definitions. */ #include #include #define MENUFRONTPEN 2 /*- * (C) project options draw batch * ---------------------------------------------------------------- * About Mandel... new * colors * function file... * open... /O resolution * iplot wait * save /S parameters eplot continue * save as... priority * abort * stop * quit /Q * * new colors resolution priority * ------------------------------------------------------------- * absolute pos'n /A select normal /1 normal /0 * enlarge /E modulo 1/2 /2 low /- * reduce /R ranges 1/3 /3 * shift /T palette /P 1/4 /4 * zoom in /< fill in /F * zoom out /> hi-res /H * interlace /I * borderless /B * halfbrite // * * functions iplot eplot * ------------------------------------------------------------------- * z^2-c None Depth * z*c*(1-z) Z Z * z^3+z*(c-1)-c * i:user * i:z^2-c */ /* * Define some handy shortcuts. */ #define ITEXT(left,text) \ { MENUFRONTPEN,AUTOBACKPEN,JAM1,left,1,NULL, (UBYTE*)text, NULL } #define ITEM(num,top,next,text,flags,mutex,cmd) \ SITEM(num,top,next,text,flags,mutex,cmd,NULL) #define SITEM(num,top,next,text,flags,mutex,cmd,sub) \ {next,MLEFT,top,MWIDTH,10,flags,mutex,(APTR)&text[num],NULL,cmd,sub} #define Ax COMMSEQ #define Vx CHECKIT #define VV CHECKIT | CHECKED #define TG MENUTOGGLE #define EN ITEMENABLED #define DEFMLEFT 40 /* * First the menu texts. */ struct IntuiText c_it[] = { ITEXT(1, "About Mandel..."), }; struct IntuiText project_it[] = { ITEXT(1, "New \xBB"), /* 0xBB is the >> character */ ITEXT(1, "Open..."), ITEXT(1, "Save"), ITEXT(1, "Save As..."), ITEXT(1, "Stop"), ITEXT(1, "Quit..."), }; struct IntuiText opts_it[] = { ITEXT(1, "Colors \xBB"), ITEXT(1, "Resolution \xBB"), ITEXT(1, "Parameters"), ITEXT(1, "Priority \xBB"), }; struct IntuiText draw_it[] = { ITEXT(1, "Func \xBB"), ITEXT(1, "IPlot \xBB"), ITEXT(1, "EPlot \xBB"), }; struct IntuiText batch_it[] = { ITEXT(1, "File..."), ITEXT(1, "Wait"), ITEXT(1, "Continue"), ITEXT(1, "Abort"), }; struct IntuiText new_it[] = { ITEXT(1, "Absolute"), ITEXT(1, "Enlarge"), ITEXT(1, "Reduce"), ITEXT(1, "Shift"), ITEXT(1, "Zoom In"), ITEXT(1, "Zoom Out"), }; struct IntuiText color_it[] = { ITEXT(CHECKWIDTH, "Select"), ITEXT(CHECKWIDTH, "Modulo"), ITEXT(CHECKWIDTH, "Ranges"), ITEXT(CHECKWIDTH, "Palette"), }; struct IntuiText pri_it[] = { ITEXT(CHECKWIDTH, "Normal"), ITEXT(CHECKWIDTH, "Low"), }; struct IntuiText res_it[] = { ITEXT(CHECKWIDTH, "Normal"), ITEXT(CHECKWIDTH, "1/2"), ITEXT(CHECKWIDTH, "1/3"), ITEXT(CHECKWIDTH, "1/4"), ITEXT(CHECKWIDTH, "Fill In"), ITEXT(CHECKWIDTH, "Hires"), ITEXT(CHECKWIDTH, "Interlace"), ITEXT(CHECKWIDTH, "BorderLess"), ITEXT(CHECKWIDTH, "HalfBrite"), }; struct IntuiText fun_it[] = { ITEXT(CHECKWIDTH, "Z^2-C"), ITEXT(CHECKWIDTH, "Z*C*(1-Z)"), ITEXT(CHECKWIDTH, "Z^3+Z*(C-1)-C"), ITEXT(CHECKWIDTH, "iplot: User"), ITEXT(CHECKWIDTH, "iplot: Z^2-C"), }; struct IntuiText plot_it[] = { ITEXT(CHECKWIDTH, "None"), ITEXT(CHECKWIDTH, "Depth"), ITEXT(CHECKWIDTH, "Z"), }; #define FLAGS ITEMTEXT | ITEMENABLED | HIGHBOX /* * New submenu */ #define MLEFT DEFMLEFT #define MWIDTH 8*8+2+COMMWIDTH+8 /* Funny we need 2 more pixels */ struct MenuItem new_mi[] = { ITEM(0,05,&new_mi[1],new_it,FLAGS|Ax,0,'A'), /* absolute */ ITEM(1,15,&new_mi[2],new_it,FLAGS|Ax,0,'E'), /* enlarge */ ITEM(2,25,&new_mi[3],new_it,FLAGS|Ax,0,'R'), /* reduce */ ITEM(3,35,&new_mi[4],new_it,FLAGS|Ax,0,'T'), /* shift */ ITEM(4,45,&new_mi[5],new_it,FLAGS|Ax,0,'<'), /* Zoom In */ ITEM(5,55,NULL, new_it,FLAGS|Ax,0,'>'), /* Zoom Out */ }; /* * Colors submenu */ #undef MWIDTH #define MWIDTH CHECKWIDTH+7*8+COMMWIDTH+8 struct MenuItem color_mi[] = { ITEM(0,05,&color_mi[1],color_it,FLAGS|Vx,1<<1|1<<2,0), /* select */ ITEM(1,15,&color_mi[2],color_it,FLAGS|VV,1<<0|1<<2,0), /* modulo */ ITEM(2,25,&color_mi[3],color_it,FLAGS|Vx,1<<0|1<<1,0), /* ranges */ ITEM(3,35,NULL ,color_it,FLAGS|Ax,0, 'P'), /* palette */ }; #undef MWIDTH #define MWIDTH CHECKWIDTH+10*8+COMMWIDTH+8 struct MenuItem res_mi[] = { ITEM(0,05,&res_mi[1],res_it,FLAGS|Ax|VV,1<<1|1<<2|1<<3,'1'), /* normal */ ITEM(1,15,&res_mi[2],res_it,FLAGS|Ax|Vx,1<<0|1<<2|1<<3,'2'), /* 1/2 */ ITEM(2,25,&res_mi[3],res_it,FLAGS|Ax|Vx,1<<0|1<<1|1<<3,'3'), /* 1/3 */ ITEM(3,35,&res_mi[4],res_it,FLAGS|Ax|Vx,1<<0|1<<1|1<<2,'4'), /* 1/4 */ ITEM(4,45,&res_mi[5],res_it,FLAGS|Ax ,0 ,'F'), /* fill in */ ITEM(5,60,&res_mi[6],res_it,FLAGS|Ax|Vx|TG,1<<8,'H'), /* hi-res */ ITEM(6,70,&res_mi[7],res_it,FLAGS|Ax|Vx|TG,0 ,'I'), /* interlace */ ITEM(7,80,&res_mi[8],res_it,FLAGS|Ax|Vx|TG,0 ,'B'), /* borderless */ ITEM(8,90,NULL ,res_it,FLAGS|Ax|Vx|TG,1<<4,'/'), /* extra halfbrite */ }; #undef MWIDTH #define MWIDTH CHECKWIDTH+6*8+COMMWIDTH+8 struct MenuItem pri_mi[] = { ITEM(0,05,&pri_mi[1],pri_it,FLAGS|Ax|VV,1<<1,'0'), /* normal */ ITEM(1,15,NULL ,pri_it,FLAGS|Ax|Vx,1<<0,'-'), /* low */ }; /* * Functions submenu: */ #undef MWIDTH #define MWIDTH CHECKWIDTH+104 #undef MLEFT #define MLEFT DEFMLEFT - 8 struct MenuItem fun_mi[] = { ITEM(0,05,&fun_mi[1],fun_it,FLAGS|VV,0x1F- 1,0), /* Z^2 - C */ ITEM(1,15,&fun_mi[2],fun_it,FLAGS|Vx,0x1F- 2,0), /* z*c*(1-z) */ ITEM(2,25,&fun_mi[3],fun_it,FLAGS|Vx,0x1F- 4,0), /* z^3+z*(c-1)-c */ ITEM(3,35,&fun_mi[4],fun_it,FLAGS|Vx,0x1F- 8,0), /* i: User */ ITEM(4,45,NULL ,fun_it,FLAGS|Vx,0x1F-16,0), /* i: Z^2 - C */ }; /* * iplot submenu */ #undef MWIDTH #define MWIDTH CHECKWIDTH + (5*8) #undef MLEFT #define MLEFT DEFMLEFT struct MenuItem iplot_mi[] = { ITEM(0,05,&iplot_mi[1], plot_it, FLAGS|VV,1<<1,0), /* None */ ITEM(1,15,NULL ,(plot_it+1),FLAGS|Vx,1<<0,0), /* Z */ }; /* * eplot submenu */ struct MenuItem eplot_mi[] = { ITEM(0,05,&eplot_mi[1],(plot_it+1),FLAGS|VV,1<<1,0), /* Depth */ ITEM(1,15,NULL ,(plot_it+1),FLAGS|Vx,1<<0,0), /* Z */ }; /* * (C) menu */ #undef MLEFT #define MLEFT 0 #undef MWIDTH #define MWIDTH 15*8 struct MenuItem c_mi[] = { ITEM(0,00,NULL,c_it,FLAGS,0,0), /* About Mandel... */ }; /* * Project menu */ #undef MWIDTH #define MWIDTH 9*8+COMMWIDTH struct MenuItem project_mi[] = { SITEM(0,00,&project_mi[1],project_it,FLAGS ,0,0,new_mi), /* new */ ITEM(1,10,&project_mi[2],project_it,FLAGS|Ax,0,'O' ), /* open... */ ITEM(2,20,&project_mi[3],project_it,FLAGS|Ax,0,'S' ), /* save */ ITEM(3,30,&project_mi[4],project_it,FLAGS ,0,0 ), /* save as... */ ITEM(4,45,&project_mi[5],project_it,FLAGS ,0,0 ), /* stop */ ITEM(5,55,NULL ,project_it,FLAGS|Ax,0,'Q' ), /* quit */ }; /* * Options menu */ #undef MWIDTH #define MWIDTH 12*8+2 struct MenuItem opt_mi[] = { SITEM(0,00,&opt_mi[1],opts_it,FLAGS,0,0,color_mi), /* colors */ SITEM(1,10,&opt_mi[2],opts_it,FLAGS,0,0,res_mi ), /* resolution */ ITEM(2,20,&opt_mi[3],opts_it,FLAGS,0,0 ), /* parameters */ SITEM(3,30,NULL ,opts_it,FLAGS,0,0,pri_mi ), /* priority */ }; /* * Draw Menu */ #undef MWIDTH #define MWIDTH (7*8) #undef MLEFT #define MLEFT -MWIDTH+40 struct MenuItem draw_mi[] = { SITEM(0,00,&draw_mi[1],draw_it,FLAGS,0,0,fun_mi ), /* func */ SITEM(1,10,&draw_mi[2],draw_it,FLAGS,0,0,iplot_mi), /* iplot */ SITEM(2,20,NULL ,draw_it,FLAGS,0,0,eplot_mi), /* eplot */ }; /* * Batch Menu */ #undef MWIDTH #define MWIDTH (8*8) #undef MLEFT #define MLEFT -MWIDTH+43 struct MenuItem batch_mi[] = { ITEM(0,00,&batch_mi[1],batch_it,FLAGS, 0,0), /* file */ ITEM(1,10,&batch_mi[2],batch_it,(FLAGS)-EN,0,0), /* wait */ ITEM(2,20,&batch_mi[3],batch_it,(FLAGS)-EN,0,0), /* continue */ ITEM(3,30,NULL ,batch_it,(FLAGS)-EN,0,0), /* abort */ }; /* * Main MenuStrip structure */ struct Menu MandelMenu[] = { { &MandelMenu[1], 2,0,21,10, MENUENABLED, " \xA9", c_mi }, { &MandelMenu[2], 30,0,59,10, MENUENABLED, "Project", project_mi }, { &MandelMenu[3], 100,0,59,10, MENUENABLED, "Options", opt_mi }, { &MandelMenu[4], 170,0,37,10, MENUENABLED, "Draw", draw_mi }, { NULL, 220,0,43,10, MENUENABLED, "Batch", batch_mi }, };