www.pudn.com > Tierazon-v29.zip > TierazonView.cpp


// TierazonView.cpp : implementation of the CTierazonView class 
// 
 
#include "stdafx.h" 
#include "Tierazon.h" 
 
#include "TierazonDoc.h" 
#include "TierazonView.h" 
#include "gradient.h" 
#include "fparams.h" 
#include  
#include "external.h" 
#include "xysize.h" 
#include "resource.h" 
#include "orient.h" 
#include "convolut.h" 
#include "movie.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CTierazonView 
 
IMPLEMENT_DYNCREATE(CTierazonView, CScrollView) 
 
BEGIN_MESSAGE_MAP(CTierazonView, CScrollView) 
	ON_WM_CONTEXTMENU() 
	//{{AFX_MSG_MAP(CTierazonView) 
  ON_MESSAGE(WM_USER_CANCELMOVIE, CancelMovie) 
	ON_COMMAND(ID_SAVE_DIB, OnSaveDib) 
	ON_COMMAND(ID_WINDOW_SIZEDESKTOP, OnWindowSizedesktop) 
	ON_WM_LBUTTONDOWN() 
	ON_WM_MOUSEMOVE() 
	ON_COMMAND(ID_IMAGE_SIZE, OnImageSize) 
	ON_COMMAND(ID_VIEW_ZOOM, OnViewZoom) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_ZOOM, OnUpdateViewZoom) 
	ON_COMMAND(ID_VIEW_NEW, OnViewNew) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_NEW, OnUpdateViewNew) 
	ON_COMMAND(ID_FILE_SAVECOLORS, OnFileSavecolors) 
	ON_COMMAND(ID_FILE_SAVEPARAMETERS, OnFileSaveparameters) 
	ON_COMMAND(ID_FILE_LOADCOLORS, OnFileLoadcolors) 
	ON_COMMAND(ID_FILE_LOADPARAMETERS, OnFileLoadparameters) 
	ON_COMMAND(ID_VIEW_JULIA, OnViewJulia) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_JULIA, OnUpdateViewJulia) 
	ON_COMMAND(ID_IMAGE_PARAMS, OnImageParams) 
	ON_COMMAND(ID_DRAW_ABORT, OnDrawAbort) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_ABORT, OnUpdateDrawAbort) 
	ON_COMMAND(ID_SHIFT_START, OnShiftStart) 
	ON_UPDATE_COMMAND_UI(ID_SHIFT_START, OnUpdateShiftStart) 
	ON_COMMAND(ID_IMAGE_COLORPARAMETERS, OnImageColorparameters) 
	ON_UPDATE_COMMAND_UI(ID_IMAGE_COLORPARAMETERS, OnUpdateImageColorparameters) 
	ON_COMMAND(ID_IMAGE_ASPECTRATIO, OnImageAspectratio) 
	ON_UPDATE_COMMAND_UI(ID_IMAGE_ASPECTRATIO, OnUpdateImageAspectratio) 
	ON_COMMAND(ID_IMAGE_CLEAR, OnImageClear) 
	ON_COMMAND(ID_VIEW_MANDEL, OnViewMandel) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_MANDEL, OnUpdateViewMandel) 
	ON_COMMAND(ID_DRAW_1, OnDraw1) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_1, OnUpdateDraw1) 
	ON_COMMAND(ID_DRAW_INSIDEOUT, OnDrawInsideout) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_INSIDEOUT, OnUpdateDrawInsideout) 
	ON_COMMAND(ID_DRAW_2, OnDraw2) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_2, OnUpdateDraw2) 
	ON_COMMAND(ID_DRAW_3, OnDraw3) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_3, OnUpdateDraw3) 
	ON_COMMAND(ID_DRAW_4, OnDraw4) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_4, OnUpdateDraw4) 
	ON_COMMAND(ID_DRAW_5, OnDraw5) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_5, OnUpdateDraw5) 
	ON_COMMAND(ID_DRAW_6, OnDraw6) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_6, OnUpdateDraw6) 
	ON_COMMAND(ID_DRAW_7, OnDraw7) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_7, OnUpdateDraw7) 
	ON_COMMAND(ID_DRAW_8, OnDraw8) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_8, OnUpdateDraw8) 
	ON_COMMAND(ID_DRAW_9, OnDraw9) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_9, OnUpdateDraw9) 
	ON_COMMAND(ID_DRAW_10, OnDraw10) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_10, OnUpdateDraw10) 
	ON_COMMAND(ID_DRAW_11, OnDraw11) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_11, OnUpdateDraw11) 
	ON_COMMAND(ID_DRAW_12, OnDraw12) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_12, OnUpdateDraw12) 
	ON_COMMAND(ID_DRAW_13, OnDraw13) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_13, OnUpdateDraw13) 
	ON_COMMAND(ID_DRAW_14, OnDraw14) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_14, OnUpdateDraw14) 
	ON_COMMAND(ID_DRAW_15, OnDraw15) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_15, OnUpdateDraw15) 
	ON_COMMAND(ID_DRAW_16, OnDraw16) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_16, OnUpdateDraw16) 
	ON_COMMAND(ID_DRAW_17, OnDraw17) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_17, OnUpdateDraw17) 
	ON_COMMAND(ID_DRAW_18, OnDraw18) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_18, OnUpdateDraw18) 
	ON_COMMAND(ID_DRAW_19, OnDraw19) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_19, OnUpdateDraw19) 
	ON_COMMAND(ID_DRAW_20, OnDraw20) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_20, OnUpdateDraw20) 
	ON_COMMAND(ID_DRAW_21, OnDraw21) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_21, OnUpdateDraw21) 
	ON_COMMAND(ID_DRAW_22, OnDraw22) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_22, OnUpdateDraw22) 
	ON_COMMAND(ID_DRAW_23, OnDraw23) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_23, OnUpdateDraw23) 
	ON_COMMAND(ID_DRAW_24, OnDraw24) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_24, OnUpdateDraw24) 
	ON_COMMAND(ID_DRAW_25, OnDraw25) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_25, OnUpdateDraw25) 
	ON_COMMAND(ID_DRAW_26, OnDraw26) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_26, OnUpdateDraw26) 
	ON_COMMAND(ID_DRAW_27, OnDraw27) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_27, OnUpdateDraw27) 
	ON_COMMAND(ID_DRAW_28, OnDraw28) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_28, OnUpdateDraw28) 
	ON_COMMAND(ID_DRAW_29, OnDraw29) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_29, OnUpdateDraw29) 
	ON_COMMAND(ID_DRAW_30, OnDraw30) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_30, OnUpdateDraw30) 
	ON_COMMAND(ID_DRAW_31, OnDraw31) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_31, OnUpdateDraw31) 
	ON_COMMAND(ID_DRAW_32, OnDraw32) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_32, OnUpdateDraw32) 
	ON_COMMAND(ID_DRAW_33, OnDraw33) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_33, OnUpdateDraw33) 
	ON_COMMAND(ID_DRAW_34, OnDraw34) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_34, OnUpdateDraw34) 
	ON_COMMAND(ID_DRAW_35, OnDraw35) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_35, OnUpdateDraw35) 
	ON_COMMAND(ID_FILTER_0, OnFilter0) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_0, OnUpdateFilter0) 
	ON_COMMAND(ID_FILTER_01, OnFilter01) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_01, OnUpdateFilter01) 
	ON_COMMAND(ID_FILTER_02, OnFilter02) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_02, OnUpdateFilter02) 
	ON_COMMAND(ID_FILTER_03, OnFilter03) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_03, OnUpdateFilter03) 
	ON_COMMAND(ID_FILTER_04, OnFilter04) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_04, OnUpdateFilter04) 
	ON_COMMAND(ID_FILTER_05, OnFilter05) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_05, OnUpdateFilter05) 
	ON_COMMAND(ID_FILTER_06, OnFilter06) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_06, OnUpdateFilter06) 
	ON_COMMAND(ID_FILTER_07, OnFilter07) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_07, OnUpdateFilter07) 
	ON_COMMAND(ID_FILTER_08, OnFilter08) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_08, OnUpdateFilter08) 
	ON_COMMAND(ID_FILTER_09, OnFilter09) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_09, OnUpdateFilter09) 
	ON_COMMAND(ID_FILTER_10, OnFilter10) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_10, OnUpdateFilter10) 
	ON_COMMAND(ID_FILTER_11, OnFilter11) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_11, OnUpdateFilter11) 
	ON_COMMAND(ID_FILTER_12, OnFilter12) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_12, OnUpdateFilter12) 
	ON_COMMAND(ID_FILTER_13, OnFilter13) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_13, OnUpdateFilter13) 
	ON_COMMAND(ID_FILTER_14, OnFilter14) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_14, OnUpdateFilter14) 
	ON_COMMAND(ID_FILTER_15, OnFilter15) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_15, OnUpdateFilter15) 
	ON_COMMAND(ID_FILTER_16, OnFilter16) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_16, OnUpdateFilter16) 
	ON_COMMAND(ID_FILTER_17, OnFilter17) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_17, OnUpdateFilter17) 
	ON_COMMAND(ID_FILTER_18, OnFilter18) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_18, OnUpdateFilter18) 
	ON_COMMAND(ID_FILTER_19, OnFilter19) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_19, OnUpdateFilter19) 
	ON_COMMAND(ID_FILTER_20, OnFilter20) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_20, OnUpdateFilter20) 
	ON_COMMAND(ID_FILTER_21, OnFilter21) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_21, OnUpdateFilter21) 
	ON_COMMAND(ID_FILTER_22, OnFilter22) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_22, OnUpdateFilter22) 
	ON_COMMAND(ID_FILTER_23, OnFilter23) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_23, OnUpdateFilter23) 
	ON_COMMAND(ID_FILTER_24, OnFilter24) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_24, OnUpdateFilter24) 
	ON_COMMAND(ID_FILTER_25, OnFilter25) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_25, OnUpdateFilter25) 
	ON_COMMAND(ID_FILTER_26, OnFilter26) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_26, OnUpdateFilter26) 
	ON_COMMAND(ID_VIEW_ZEROINIT, OnViewZeroinit) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_ZEROINIT, OnUpdateViewZeroinit) 
	ON_COMMAND(ID_VIEW_ORIENT, OnViewOrient) 
	ON_COMMAND(ID_IMAGE_AVERAGE, OnImageAverage) 
	ON_UPDATE_COMMAND_UI(ID_IMAGE_AVERAGE, OnUpdateImageAverage) 
	ON_COMMAND(ID_IMAGE_BLUR, OnImageBlur) 
	ON_UPDATE_COMMAND_UI(ID_IMAGE_BLUR, OnUpdateImageBlur) 
	ON_COMMAND(ID_IMAGE_EDGEDETECTION, OnImageEdgedetection) 
	ON_UPDATE_COMMAND_UI(ID_IMAGE_EDGEDETECTION, OnUpdateImageEdgedetection) 
	ON_COMMAND(ID_IMAGE_EMBOSS, OnImageEmboss) 
	ON_UPDATE_COMMAND_UI(ID_IMAGE_EMBOSS, OnUpdateImageEmboss) 
	ON_COMMAND(ID_IMAGE_SHARPEN, OnImageSharpen) 
	ON_UPDATE_COMMAND_UI(ID_IMAGE_SHARPEN, OnUpdateImageSharpen) 
	ON_COMMAND(ID_CONVOLUTION_DIALOG, OnConvolutionDialog) 
	ON_UPDATE_COMMAND_UI(ID_CONVOLUTION_DIALOG, OnUpdateConvolutionDialog) 
	ON_COMMAND(ID_CONVOLUTION_TRACECONTOUR, OnConvolutionTracecontour) 
	ON_UPDATE_COMMAND_UI(ID_CONVOLUTION_TRACECONTOUR, OnUpdateConvolutionTracecontour) 
	ON_COMMAND(ID_FILTER_CONVOLUTION_APPLY, OnFilterConvolutionApply) 
	ON_COMMAND(ID_FILTER_CONVOLUTION_AUTO, OnFilterConvolutionAuto) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_CONVOLUTION_AUTO, OnUpdateFilterConvolutionAuto) 
	ON_COMMAND(ID_FILTER_CONVOLUTION_STOP, OnFilterConvolutionStop) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_CONVOLUTION_STOP, OnUpdateFilterConvolutionStop) 
	ON_COMMAND(ID_FILTER_CONVOLUTION_UNDO, OnFilterConvolutionUndo) 
	ON_COMMAND(ID_CONVOLVE_ANTIALIAS, OnConvolveAntialias) 
	ON_COMMAND(ID_CONVOLVE_REDUCE, OnConvolveReduce) 
	ON_COMMAND(ID_VIEW_RESET, OnViewReset) 
	ON_COMMAND(ID_VIEW_DRAW, OnViewDraw) 
	ON_COMMAND(ID_COLOR_BGR, OnColorBgr) 
	ON_UPDATE_COMMAND_UI(ID_COLOR_BGR, OnUpdateColorBgr) 
	ON_COMMAND(ID_COLOR_BRG, OnColorBrg) 
	ON_UPDATE_COMMAND_UI(ID_COLOR_BRG, OnUpdateColorBrg) 
	ON_COMMAND(ID_COLOR_GBR, OnColorGbr) 
	ON_UPDATE_COMMAND_UI(ID_COLOR_GBR, OnUpdateColorGbr) 
	ON_COMMAND(ID_COLOR_GRB, OnColorGrb) 
	ON_UPDATE_COMMAND_UI(ID_COLOR_GRB, OnUpdateColorGrb) 
	ON_COMMAND(ID_COLOR_RBG, OnColorRbg) 
	ON_UPDATE_COMMAND_UI(ID_COLOR_RBG, OnUpdateColorRbg) 
	ON_COMMAND(ID_COLOR_RGB, OnColorRgb) 
	ON_UPDATE_COMMAND_UI(ID_COLOR_RGB, OnUpdateColorRgb) 
	ON_COMMAND(ID_COLOR_SEPARATE, OnColorSeparate) 
	ON_UPDATE_COMMAND_UI(ID_COLOR_SEPARATE, OnUpdateColorSeparate) 
	ON_COMMAND(ID_OPTIONS_1, OnOptions1) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_1, OnUpdateOptions1) 
	ON_COMMAND(ID_OPTIONS_2, OnOptions2) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_2, OnUpdateOptions2) 
	ON_COMMAND(ID_OPTIONS_3, OnOptions3) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_3, OnUpdateOptions3) 
	ON_COMMAND(ID_OPTIONS_4, OnOptions4) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_4, OnUpdateOptions4) 
	ON_COMMAND(ID_OPTIONS_5, OnOptions5) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_5, OnUpdateOptions5) 
	ON_COMMAND(ID_OPTIONS_6, OnOptions6) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_6, OnUpdateOptions6) 
	ON_COMMAND(ID_OPTIONS_7, OnOptions7) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_7, OnUpdateOptions7) 
	ON_COMMAND(ID_OPTIONS_8, OnOptions8) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_8, OnUpdateOptions8) 
	ON_COMMAND(ID_OPTIONS_9, OnOptions9) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_9, OnUpdateOptions9) 
	ON_COMMAND(ID_OPTIONS_10, OnOptions10) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_10, OnUpdateOptions10) 
	ON_COMMAND(ID_FILTER_28, OnFilter28) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_28, OnUpdateFilter28) 
	ON_COMMAND(ID_DRAW_36, OnDraw36) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_36, OnUpdateDraw36) 
	ON_COMMAND(ID_DRAW_37, OnDraw37) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_37, OnUpdateDraw37) 
	ON_COMMAND(ID_DRAW_38, OnDraw38) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_38, OnUpdateDraw38) 
	ON_COMMAND(ID_DRAW_39, OnDraw39) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_39, OnUpdateDraw39) 
	ON_COMMAND(ID_DRAW_40, OnDraw40) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_40, OnUpdateDraw40) 
	ON_COMMAND(ID_DRAW_41, OnDraw41) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_41, OnUpdateDraw41) 
	ON_COMMAND(ID_DRAW_42, OnDraw42) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_42, OnUpdateDraw42) 
	ON_COMMAND(ID_DRAW_43, OnDraw43) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_43, OnUpdateDraw43) 
	ON_COMMAND(ID_DRAW_44, OnDraw44) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_44, OnUpdateDraw44) 
	ON_COMMAND(ID_DRAW_45, OnDraw45) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_45, OnUpdateDraw45) 
	ON_COMMAND(ID_DRAW_46, OnDraw46) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_46, OnUpdateDraw46) 
	ON_COMMAND(ID_DRAW_47, OnDraw47) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_47, OnUpdateDraw47) 
	ON_COMMAND(ID_DRAW_48, OnDraw48) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_48, OnUpdateDraw48) 
	ON_COMMAND(ID_DRAW_49, OnDraw49) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_49, OnUpdateDraw49) 
	ON_COMMAND(ID_DRAW_50, OnDraw50) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_50, OnUpdateDraw50) 
	ON_COMMAND(ID_DRAW_51, OnDraw51) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_51, OnUpdateDraw51) 
	ON_COMMAND(ID_FILTER_29, OnFilter29) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_29, OnUpdateFilter29) 
	ON_COMMAND(ID_FILTER_30, OnFilter30) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_30, OnUpdateFilter30) 
	ON_COMMAND(ID_FILTER_31, OnFilter31) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_31, OnUpdateFilter31) 
	ON_COMMAND(ID_FILTER_32, OnFilter32) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_32, OnUpdateFilter32) 
	ON_COMMAND(ID_FILTER_33, OnFilter33) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_33, OnUpdateFilter33) 
	ON_COMMAND(ID_FILTER_27, OnFilter27) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_27, OnUpdateFilter27) 
	ON_COMMAND(ID_FILTER_34, OnFilter34) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_34, OnUpdateFilter34) 
	ON_COMMAND(ID_FILTER_35, OnFilter35) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_35, OnUpdateFilter35) 
	ON_COMMAND(ID_FILTER_36, OnFilter36) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_36, OnUpdateFilter36) 
	ON_COMMAND(ID_FILTER_37, OnFilter37) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_37, OnUpdateFilter37) 
	ON_COMMAND(ID_FILTER_38, OnFilter38) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_38, OnUpdateFilter38) 
	ON_COMMAND(ID_DRAW_52, OnDraw52) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_52, OnUpdateDraw52) 
	ON_COMMAND(ID_DRAW_53, OnDraw53) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_53, OnUpdateDraw53) 
	ON_COMMAND(ID_DRAW_54, OnDraw54) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_54, OnUpdateDraw54) 
	ON_COMMAND(ID_DRAW_55, OnDraw55) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_55, OnUpdateDraw55) 
	ON_COMMAND(ID_DRAW_56, OnDraw56) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_56, OnUpdateDraw56) 
	ON_COMMAND(ID_DRAW_57, OnDraw57) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_57, OnUpdateDraw57) 
	ON_COMMAND(ID_DRAW_58, OnDraw58) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_58, OnUpdateDraw58) 
	ON_COMMAND(ID_DRAW_59, OnDraw59) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_59, OnUpdateDraw59) 
	ON_COMMAND(ID_DRAW_60, OnDraw60) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_60, OnUpdateDraw60) 
	ON_COMMAND(ID_COLOUR_0, OnColour0) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_0, OnUpdateColour0) 
	ON_COMMAND(ID_COLOUR_01, OnColour01) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_01, OnUpdateColour01) 
	ON_COMMAND(ID_COLOUR_02, OnColour02) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_02, OnUpdateColour02) 
	ON_COMMAND(ID_COLOUR_03, OnColour03) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_03, OnUpdateColour03) 
	ON_COMMAND(ID_COLOUR_04, OnColour04) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_04, OnUpdateColour04) 
	ON_COMMAND(ID_COLOUR_05, OnColour05) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_05, OnUpdateColour05) 
	ON_COMMAND(ID_COLOUR_06, OnColour06) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_06, OnUpdateColour06) 
	ON_COMMAND(ID_COLOUR_07, OnColour07) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_07, OnUpdateColour07) 
	ON_COMMAND(ID_COLOUR_10, OnColour10) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_10, OnUpdateColour10) 
	ON_COMMAND(ID_COLOUR_11, OnColour11) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_11, OnUpdateColour11) 
	ON_COMMAND(ID_COLOUR_12, OnColour12) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_12, OnUpdateColour12) 
	ON_COMMAND(ID_COLOUR_13, OnColour13) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_13, OnUpdateColour13) 
	ON_COMMAND(ID_COLOUR_14, OnColour14) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_14, OnUpdateColour14) 
	ON_COMMAND(ID_COLOUR_15, OnColour15) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_15, OnUpdateColour15) 
	ON_COMMAND(ID_COLOUR_19, OnColour19) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_19, OnUpdateColour19) 
	ON_COMMAND(ID_COLOUR_20, OnColour20) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_20, OnUpdateColour20) 
	ON_COMMAND(ID_COLOUR_21, OnColour21) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_21, OnUpdateColour21) 
	ON_COMMAND(ID_COLOUR_22, OnColour22) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_22, OnUpdateColour22) 
	ON_COMMAND(ID_COLOUR_23, OnColour23) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_23, OnUpdateColour23) 
	ON_COMMAND(ID_COLOUR_24, OnColour24) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_24, OnUpdateColour24) 
	ON_COMMAND(ID_COLOUR_25, OnColour25) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_25, OnUpdateColour25) 
	ON_COMMAND(ID_COLOUR_26, OnColour26) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_26, OnUpdateColour26) 
	ON_COMMAND(ID_COLOUR_27, OnColour27) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_27, OnUpdateColour27) 
	ON_COMMAND(ID_COLOUR_28, OnColour28) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_28, OnUpdateColour28) 
	ON_COMMAND(ID_COLOUR_29, OnColour29) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_29, OnUpdateColour29) 
	ON_COMMAND(ID_COLOUR_30, OnColour30) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_30, OnUpdateColour30) 
	ON_COMMAND(ID_COLOUR_31, OnColour31) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_31, OnUpdateColour31) 
	ON_COMMAND(ID_COLOUR_32, OnColour32) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_32, OnUpdateColour32) 
	ON_COMMAND(ID_COLOUR_33, OnColour33) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_33, OnUpdateColour33) 
	ON_COMMAND(ID_COLOUR_34, OnColour34) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_34, OnUpdateColour34) 
	ON_COMMAND(ID_COLOUR_35, OnColour35) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_35, OnUpdateColour35) 
	ON_COMMAND(ID_COLOUR_36, OnColour36) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_36, OnUpdateColour36) 
	ON_COMMAND(ID_COLOUR_37, OnColour37) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_37, OnUpdateColour37) 
	ON_COMMAND(ID_COLOUR_38, OnColour38) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_38, OnUpdateColour38) 
	ON_COMMAND(ID_COLOUR_39, OnColour39) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_39, OnUpdateColour39) 
	ON_COMMAND(ID_COLOUR_8, OnColour8) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_8, OnUpdateColour8) 
	ON_COMMAND(ID_COLOUR_9, OnColour9) 
	ON_UPDATE_COMMAND_UI(ID_COLOUR_9, OnUpdateColour9) 
	ON_COMMAND(ID_DIMENSION_VARIANT, OnDimensionVariant) 
	ON_UPDATE_COMMAND_UI(ID_DIMENSION_VARIANT, OnUpdateDimensionVariant) 
	ON_COMMAND(ID_COLOR_GRAYSCALE, OnColorGrayscale) 
	ON_UPDATE_COMMAND_UI(ID_COLOR_GRAYSCALE, OnUpdateColorGrayscale) 
	ON_COMMAND(ID_COLOR_INVERT, OnColorInvert) 
	ON_UPDATE_COMMAND_UI(ID_COLOR_INVERT, OnUpdateColorInvert) 
	ON_COMMAND(ID_DRAW_61, OnDraw61) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_61, OnUpdateDraw61) 
	ON_COMMAND(ID_DRAW_62, OnDraw62) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_62, OnUpdateDraw62) 
	ON_COMMAND(ID_DRAW_63, OnDraw63) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_63, OnUpdateDraw63) 
	ON_COMMAND(ID_DRAW_64, OnDraw64) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_64, OnUpdateDraw64) 
	ON_COMMAND(ID_DRAW_65, OnDraw65) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_65, OnUpdateDraw65) 
	ON_COMMAND(ID_DRAW_66, OnDraw66) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_66, OnUpdateDraw66) 
	ON_COMMAND(ID_DRAW_67, OnDraw67) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_67, OnUpdateDraw67) 
	ON_COMMAND(ID_DRAW_68, OnDraw68) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_68, OnUpdateDraw68) 
	ON_COMMAND(ID_DRAW_69, OnDraw69) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_69, OnUpdateDraw69) 
	ON_COMMAND(ID_DRAW_70, OnDraw70) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_70, OnUpdateDraw70) 
	ON_COMMAND(ID_DRAW_71, OnDraw71) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_71, OnUpdateDraw71) 
	ON_COMMAND(ID_DRAW_72, OnDraw72) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_72, OnUpdateDraw72) 
	ON_COMMAND(ID_DRAW_73, OnDraw73) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_73, OnUpdateDraw73) 
	ON_COMMAND(ID_DRAW_74, OnDraw74) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_74, OnUpdateDraw74) 
	ON_COMMAND(ID_DRAW_75, OnDraw75) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_75, OnUpdateDraw75) 
	ON_COMMAND(ID_DRAW_76, OnDraw76) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_76, OnUpdateDraw76) 
	ON_COMMAND(ID_DRAW_77, OnDraw77) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_77, OnUpdateDraw77) 
	ON_COMMAND(ID_DRAW_78, OnDraw78) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_78, OnUpdateDraw78) 
	ON_COMMAND(ID_DRAW_79, OnDraw79) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_79, OnUpdateDraw79) 
	ON_COMMAND(ID_DRAW_80, OnDraw80) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_80, OnUpdateDraw80) 
	ON_COMMAND(ID_DRAW_81, OnDraw81) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_81, OnUpdateDraw81) 
	ON_COMMAND(ID_DRAW_82, OnDraw82) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_82, OnUpdateDraw82) 
	ON_COMMAND(ID_DRAW_83, OnDraw83) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_83, OnUpdateDraw83) 
	ON_COMMAND(ID_DRAW_84, OnDraw84) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_84, OnUpdateDraw84) 
	ON_COMMAND(ID_DRAW_85, OnDraw85) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_85, OnUpdateDraw85) 
	ON_COMMAND(ID_DRAW_86, OnDraw86) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_86, OnUpdateDraw86) 
	ON_COMMAND(ID_DRAW_87, OnDraw87) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_87, OnUpdateDraw87) 
	ON_COMMAND(ID_DRAW_88, OnDraw88) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_88, OnUpdateDraw88) 
	ON_COMMAND(ID_DRAW_89, OnDraw89) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_89, OnUpdateDraw89) 
	ON_COMMAND(ID_DRAW_90, OnDraw90) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_90, OnUpdateDraw90) 
	ON_COMMAND(ID_DRAW_91, OnDraw91) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_91, OnUpdateDraw91) 
	ON_COMMAND(ID_DRAW_92, OnDraw92) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_92, OnUpdateDraw92) 
	ON_COMMAND(ID_DRAW_93, OnDraw93) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_93, OnUpdateDraw93) 
	ON_COMMAND(ID_DRAW_94, OnDraw94) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_94, OnUpdateDraw94) 
	ON_COMMAND(ID_DRAW_95, OnDraw95) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_95, OnUpdateDraw95) 
	ON_COMMAND(ID_DRAW_96, OnDraw96) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_96, OnUpdateDraw96) 
	ON_COMMAND(ID_DRAW_97, OnDraw97) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_97, OnUpdateDraw97) 
	ON_COMMAND(ID_DRAW_98, OnDraw98) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_98, OnUpdateDraw98) 
	ON_COMMAND(ID_DRAW_99, OnDraw99) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_99, OnUpdateDraw99) 
	ON_COMMAND(ID_DRAW_100, OnDraw100) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_100, OnUpdateDraw100) 
	ON_COMMAND(ID_DRAW_101, OnDraw101) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_101, OnUpdateDraw101) 
	ON_COMMAND(ID_DRAW_UNIQUE, OnDrawUnique) 
	ON_COMMAND(ID_FILTER_39, OnFilter39) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_39, OnUpdateFilter39) 
	ON_COMMAND(ID_FILTER_40, OnFilter40) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_40, OnUpdateFilter40) 
	ON_COMMAND(ID_FILTER_41, OnFilter41) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_41, OnUpdateFilter41) 
	ON_COMMAND(ID_FILTER_42, OnFilter42) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_42, OnUpdateFilter42) 
	ON_COMMAND(ID_FILTER_43, OnFilter43) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_43, OnUpdateFilter43) 
	ON_COMMAND(ID_FRACTALS_MOVIE, OnFractalsMovie) 
	ON_COMMAND(ID_FRACTAL_STARTGENERATINGAMOVIE, OnFractalStartgeneratingamovie) 
	ON_UPDATE_COMMAND_UI(ID_FRACTAL_STARTGENERATINGAMOVIE, OnUpdateFractalStartgeneratingamovie) 
	ON_UPDATE_COMMAND_UI(ID_FRACTALS_MOVIE, OnUpdateFractalsMovie) 
	ON_COMMAND(ID_FRACTAL_VIDEOPLAYER, OnFractalVideoplayer) 
	ON_COMMAND(ID_CONVOLVE_AUTO_ANTIALIAS, OnConvolveAutoAntialias) 
	ON_UPDATE_COMMAND_UI(ID_CONVOLVE_AUTO_ANTIALIAS, OnUpdateConvolveAutoAntialias) 
	ON_COMMAND(ID_VIEW_JULIAVIDEO, OnViewJuliavideo) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_JULIAVIDEO, OnUpdateViewJuliavideo) 
	ON_COMMAND(ID_VIEW_ORIENTATIONVIDEO, OnViewOrientationvideo) 
	ON_UPDATE_COMMAND_UI(ID_VIEW_ORIENTATIONVIDEO, OnUpdateViewOrientationvideo) 
	ON_COMMAND(ID_DRAW_102, OnDraw102) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_102, OnUpdateDraw102) 
	ON_COMMAND(ID_DRAW_103, OnDraw103) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_103, OnUpdateDraw103) 
	ON_COMMAND(ID_DRAW_104, OnDraw104) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_104, OnUpdateDraw104) 
	ON_COMMAND(ID_FILTER_44, OnFilter44) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_44, OnUpdateFilter44) 
	ON_COMMAND(ID_FILTER_45, OnFilter45) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_45, OnUpdateFilter45) 
	ON_COMMAND(ID_FILTER_46, OnFilter46) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_46, OnUpdateFilter46) 
	ON_COMMAND(ID_FILTER_47, OnFilter47) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_47, OnUpdateFilter47) 
	ON_COMMAND(ID_DRAW_105, OnDraw105) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_105, OnUpdateDraw105) 
	ON_COMMAND(ID_DRAW_106, OnDraw106) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_106, OnUpdateDraw106) 
	ON_COMMAND(ID_DRAW_107, OnDraw107) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_107, OnUpdateDraw107) 
	ON_COMMAND(ID_DRAW_108, OnDraw108) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_108, OnUpdateDraw108) 
	ON_COMMAND(ID_DRAW_109, OnDraw109) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_109, OnUpdateDraw109) 
	ON_COMMAND(ID_DRAW_110, OnDraw110) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_110, OnUpdateDraw110) 
	ON_COMMAND(ID_DRAW_111, OnDraw111) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_111, OnUpdateDraw111) 
	ON_COMMAND(ID_DRAW_112, OnDraw112) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_112, OnUpdateDraw112) 
	ON_COMMAND(ID_DRAW_113, OnDraw113) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_113, OnUpdateDraw113) 
	ON_COMMAND(ID_DRAW_114, OnDraw114) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_114, OnUpdateDraw114) 
	ON_COMMAND(ID_DRAW_115, OnDraw115) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_115, OnUpdateDraw115) 
	ON_COMMAND(ID_DRAW_116, OnDraw116) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_116, OnUpdateDraw116) 
	ON_COMMAND(ID_DRAW_117, OnDraw117) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_117, OnUpdateDraw117) 
	ON_COMMAND(ID_FILTER_48, OnFilter48) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_48, OnUpdateFilter48) 
	ON_COMMAND(ID_FILTER_49, OnFilter49) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_49, OnUpdateFilter49) 
	ON_COMMAND(ID_OPTIONS_11, OnOptions11) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_11, OnUpdateOptions11) 
	ON_COMMAND(ID_OPTIONS_12, OnOptions12) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_12, OnUpdateOptions12) 
	ON_COMMAND(ID_OPTIONS_13, OnOptions13) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_13, OnUpdateOptions13) 
	ON_COMMAND(ID_OPTIONS_14, OnOptions14) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_14, OnUpdateOptions14) 
	ON_COMMAND(ID_OPTIONS_15, OnOptions15) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_15, OnUpdateOptions15) 
	ON_COMMAND(ID_OPTIONS_16, OnOptions16) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_16, OnUpdateOptions16) 
	ON_COMMAND(ID_OPTIONS_17, OnOptions17) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_17, OnUpdateOptions17) 
	ON_COMMAND(ID_OPTIONS_18, OnOptions18) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_18, OnUpdateOptions18) 
	ON_COMMAND(ID_OPTIONS_19, OnOptions19) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_19, OnUpdateOptions19) 
	ON_COMMAND(ID_OPTIONS_20, OnOptions20) 
	ON_UPDATE_COMMAND_UI(ID_OPTIONS_20, OnUpdateOptions20) 
	ON_COMMAND(ID_DRAW_UNDO, OnDrawUndo) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_UNDO, OnUpdateDrawUndo) 
	ON_COMMAND(ID_FILTER_50, OnFilter50) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_50, OnUpdateFilter50) 
	ON_COMMAND(ID_LOAD_DLL, OnLoadDll) 
	ON_COMMAND(ID_FILTER_51, OnFilter51) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_51, OnUpdateFilter51) 
	ON_COMMAND(ID_FILTER_52, OnFilter52) 
	ON_UPDATE_COMMAND_UI(ID_FILTER_52, OnUpdateFilter52) 
	ON_COMMAND(ID_COLOR_REGULAR, OnColorRegular) 
	ON_UPDATE_COMMAND_UI(ID_COLOR_REGULAR, OnUpdateColorRegular) 
	ON_COMMAND(ID_COLOR_LIGHT, OnColorLight) 
	ON_UPDATE_COMMAND_UI(ID_COLOR_LIGHT, OnUpdateColorLight) 
	ON_COMMAND(ID_DRAW_118, OnDraw118) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_118, OnUpdateDraw118) 
	ON_COMMAND(ID_DRAW_120, OnDraw120) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_120, OnUpdateDraw120) 
	ON_COMMAND(ID_DRAW_121, OnDraw121) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_121, OnUpdateDraw121) 
	ON_COMMAND(ID_DRAW_122, OnDraw122) 
	ON_UPDATE_COMMAND_UI(ID_DRAW_122, OnUpdateDraw122) 
	//}}AFX_MSG_MAP 
	// Standard printing commands 
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview) 
 
	// non-modal dialogs 
	ON_MESSAGE(WM_DLGGRADIENT, OnApply_GradView) 
	ON_MESSAGE(WM_DLGSHIFT, OnApply_ShiftView) 
 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CTierazonView construction/destruction 
 
CTierazonView::CTierazonView() 
{ 
	m_pGradView			= new CGradient(this); 
	m_pConvolutView = new CConvolut(this); 
	m_pMovieView    = new CMovie(this); 
 
	bMovieView			= FALSE;	 
	bFirstView			= TRUE; 
	frames					= 100; 
	frame						= 0; 
	AVIFileName			= ""; 
	bLockStart			= FALSE; 
	bLockFinish			= FALSE; 
	bStartMovie			= FALSE; 
 
	bFitToPage = FALSE; 
	bStretchToFit = FALSE; 
	lOffCenter = 0; 
	PrtScale = 1.0; // Print Scaling, (1= 1:1 Resolution, 2 = 2:1, etc.) 
	CrtScale = 1.0; // CrtScaling Scaling, (1= 1:1 Resolution, 2 = 2:1, etc.) 
 
	nImageSize = 0; 
	dim.cx = global_width; 
	dim.cy = global_height; 
	dim_save.cx = 0; 
	dim_save.cy = 0; 
 
	//nRedStart = 0; 
	//nGrnStart = 40; 
	//nBluStart = 30; 
 
	nRedStart = 143; 
	nGrnStart = 58; 
	nBluStart = 27; 
 
	nColorOrder = 4; 
	nColorMethod = 0; 
	nColorMode = 0; 
	nColorMethodSave = 0; 
	nFilterSave = 0; 
	nDistortionSave = 0; 
	nFDOptionSave = 0; 
 
	min = 0; 
	max = 64; 
 
	uTimer1 = NULL; 
 
	nRed = 2; 
	nGrn = 2; 
	nBlu = 2; 
 
	bRed = NULL; 
	bGrn = NULL; 
	bBlu = NULL; 
 
	bRedStart = TRUE; 
	bGrnStart = TRUE; 
	bBluStart = TRUE; 
 
	bAutoAntialias			= FALSE; 
	bAutoAntialias_Init	= FALSE; 
	nUsingBuffers				= TRUE; 
	bGenesisMode				= TRUE; 
 
	bEdgeDetect		= FALSE; 
	bEmboss				= FALSE; 
	bSharpen			= FALSE; 
	bBlur					= FALSE; 
	bAverage			= FALSE; 
	bReduceSize		= FALSE; 
 
	Convo_Title   = ""; 
	nMatrix = 0; 
	m_pConvolutView->bConvoluteContinuous = FALSE; 
	bTraceContour = FALSE; 
 
	iIter_Data = NULL; 
	rIter_Data = NULL; 
	gIter_Data = NULL; 
	bIter_Data = NULL; 
 
	pXTemp = NULL;	// pointer to x temp array 
	pYTemp = NULL;  // pointer to y temp array 
 
	rjData = NULL; 
	gjData = NULL; 
	bjData = NULL; 
 
	pXSave = NULL; 
	pYSave = NULL; 
	 
	bDraw	= FALSE; 
	bLaunch = FALSE; 
	bAbort = FALSE; 
	bGradient	= FALSE; 
 
	ActiveTitle = ""; 
 
	CRMIN  	= -2; //-2.0;			//		// left 
	CIMIN  	= -2; //-1.33333;	//    // top 
	CRMAX  	=  2; // 1.0;			//	  // right 
	CIMAX  	=  2; // 1.33333;	//	  // bottom 
 
	dMagnification = 1; 
	dMagnification_Start  = 1; 
	dMagnification_Finish = 1; 
 
	dMIN		= 1e-11; 
		 
	CRMID = CRMID_Start = CRMID_Finish = ((CRMAX - CRMIN) / 2.0) + CRMIN; 
  CIMID	= CIMID_Start = CIMID_Finish = ((CIMAX - CIMIN) / 2.0) + CIMIN; 
 
	CRMID_MovieStart	= 0; 
	CRMID_MovieFinish = 0; 
 
	CIMID_MovieStart	= 0; 
	CIMID_MovieFinish = 0; 
 
	dMovieMagnifStart  = 0; 
	dMovieMagnifFinish = 0; 
	dwMovieRate = 6;           // Frames per Second 
 
	bOrientationVideoMode		= FALSE; 
	bJuliaVideoMode					= FALSE; 
 
 	CRMIN_JUL = -1.5; 
	CIMIN_JUL = -1.5; 
	CRMAX_JUL =  1.5; 
  CIMAX_JUL =  1.5; 
 
	CRMIN_NEW = 0; 
	CIMIN_NEW = 0; 
	CRMAX_NEW = 0; 
  CIMAX_NEW = 0; 
 
	CRMIN_OLD = 0; 
	CIMIN_OLD = 0; 
	CRMAX_OLD = 0; 
  CIMAX_OLD = 0; 
 
	NMAX = 128; 
	NMAX_Save = 0; 
	dBailout = 4; 
 
	dLower   = 0; 
	dUpper	 = 256; 
 
	jul 		 = 0; 
	jul_save = 1; 
 
  mHSize  = AfxGetApp ()->LoadStandardCursor (IDC_UPARROW); 
  mHCross = AfxGetApp ()->LoadStandardCursor (IDC_CROSS); 
	mWait   = AfxGetApp ()->LoadStandardCursor (IDC_WAIT); 
 
	bTracker				= FALSE; 
	bStretchToFit		= FALSE; 
	bInvertFractal	= FALSE; 
   
	nDistortion = 1; 
	nFilter = 0; 
	bInitialized = FALSE;		 
	bZeroInit = FALSE; 
	bColorize = TRUE; 
	bColorInvert = FALSE; 
	bGrayScale = FALSE; 
 
	dStrands	= .08; 
	dBiomorph = 0; 
	dBay100		= 1; 
	dBay1000	= 1; 
 
	nFormulaType = 0; 
 
	nFDOption = 0; 
	bDimensionVariant = 0; 
 
	cOrient.set_real(1); 
	cOrient.set_imag(0); 
 
  // Formulae Parser Variables 
  u_real = 0; 
  v_real = 0; 
  w_real = 0; 
  z_real = 0; 
 
  u_imag = 0; 
  v_imag = 0; 
  w_imag = 0; 
  z_imag = 0; 
   
  strFormulae = "z*z+c"; 
 
	// DLL initialization 
	szTemp = "rsx_fv25.dll"; 
	Load_DLL(); 
 
	nDistortion_sav = nDistortion; 
	nFilter_sav = nFilter; 
	nColorMethod_sav = nColorMethod; 
	nFDOption_sav = nFDOption; 
} 
 
CTierazonView::~CTierazonView() 
{ 
	delete m_pGradView; 
	delete m_pConvolutView; 
	delete m_pMovieView; 
 
	if (bRed) 
		delete bRed; 
	if (bGrn) 
		delete bGrn; 
	if (bBlu) 
		delete bBlu; 
 
	if (iIter_Data) 
		delete iIter_Data; 
	if (rIter_Data) 
		delete rIter_Data; 
	if (gIter_Data) 
		delete gIter_Data; 
	if (bIter_Data) 
		delete bIter_Data; 
 
	if (rjData) 
		delete rjData; 
	if (gjData) 
		delete gjData; 
	if (bjData) 
		delete bjData; 
 
	if (pXSave) 
		delete pXSave; 
	if (pYSave) 
		delete pYSave; 
 
	if (pXTemp) 
		delete pXTemp; 
	if (pYTemp) 
		delete pYTemp; 
 
  FreeLibrary(hLib); 
} 
 
BOOL CTierazonView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	mClassName = AfxRegisterWndClass 
		(CS_HREDRAW | CS_VREDRAW,					// Class styles 
		0,																// No cursor 
		(HBRUSH)::GetStockObject(WHITE_BRUSH),		// Set White background brush 
		0);																// No Icon 
 
	cs.lpszClass = mClassName; 
 
	return CScrollView::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CTierazonView drawing 
 
void CTierazonView::OnDraw(CDC* pDC) 
{ 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
	CSize size; 
	size = pDoc->m_dib.GetSize();	 
	 
	int cxDIB = size.cx; 
	int cyDIB = size.cy; 
 
	CRect rcDIB; 
	rcDIB.top = rcDIB.left = 0; 
	rcDIB.right = cxDIB; 
	rcDIB.bottom = cyDIB; 
 
	CRect rcDest; 
 
	GetClientRect(rrect); 
	screen.cx = rrect.Width(); 
	screen.cy = rrect.Height(); 
 
	if (m_pMovieView->GetSafeHwnd() && !bDraw) 
	{ 
		bLockStart	= m_pMovieView->m_LockStart; 
		bLockFinish	= m_pMovieView->m_LockFinish; 
	} 
 
	if (pDoc->m_dib.m_hDrawDib) 
	{ 
		//Set the output and DIB rectangle sizes to be 
		//equal to the bitmap size. 
 
		size = pDoc->m_dib.GetSize();	 
	 
		int cxDIB = size.cx; 
		int cyDIB = size.cy; 
 
		DIBRect.left = DIBRect.top = 0; 
		DIBRect.right = size.cx; 
		DIBRect.bottom = size.cy;     
		outputRect = DIBRect; 
				 
		GetClientRect(clientRect); // device coords 
		nXpix = clientRect.right; 
		nYpix = clientRect.bottom; 
 
		if (bStretchToFit) 
		{ 
			outputRect.top = outputRect.left = 0; 
			outputRect.right	= nXpix; 
			outputRect.bottom = nYpix; 
		} 
		else 
		{			 
			// Calculate the coordinates to center the object 
			if (nXpix > ((double) DIBRect.right * CrtScale)) 
				Orig_X = (int) ((double) nXpix/2 -  
									((double) DIBRect.right * CrtScale)/2); 
			else 
				Orig_X = 0; 
			if (nYpix > ((double) DIBRect.bottom * CrtScale)) 
				Orig_Y = (int) ((double) nYpix/2 -  
									((double) DIBRect.bottom * CrtScale)/2); 
			else 
				Orig_Y = 0; 
 
			outputRect.left  	= Orig_X; 
  		outputRect.top   	= Orig_Y; 
    	outputRect.right 	= (int) ((double) Orig_X + 
    											((double) DIBRect.right * CrtScale)); 
    	outputRect.bottom	= (int) ((double) Orig_Y + 
     											((double) DIBRect.bottom * CrtScale));				 
		} 
 
		SetScrollSizes(MM_TEXT,  
			CSize(outputRect.right - outputRect.left,  
				outputRect.bottom - outputRect.top));		 
 
		GetClientRect(rrect); 
		screen.cx = rrect.Width(); 
		screen.cy = rrect.Height(); 
		 
		if (DIBRect.right > 640 || DIBRect.bottom > 480) 
		{ 
			//CWaitCursor cursor;	// this will automatically display a wait cursor		 
			if (pDoc->m_dib.m_hDrawDib) 
				pDoc->m_dib.Draw(pDC, screen, bStretchToFit, PrtScale, lOffCenter); 
			else 
				AfxMessageBox("m_dib.hDrawDib Error"); 
		} 
		else 
		{ 
			if (pDoc->m_dib.m_hDrawDib) 
				pDoc->m_dib.Draw(pDC, screen, bStretchToFit, PrtScale, lOffCenter); 
			else 
				AfxMessageBox("m_dib.hDrawDib Error"); 
		} 
 
	/////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
		if (!bDraw && bGenesisMode && bTracker) 
		{  		 
			spt = GetScrollPosition(); 
 
			rb_width = rubberBand.right - rubberBand.left; 
			rb_height = rubberBand.bottom - rubberBand.top; 
			 
			// Redraw the tracking rectangle 
			// Transform to display coordinates 
	 		 
			rb_center_x = ((rubberBand.right - rubberBand.left) / 2) 
												+ rubberBand.left; 
			rb_center_y = ((rubberBand.bottom - rubberBand.top) / 2) 
												+ rubberBand.top; 
 
			// calculate the average width & height 
	    rb_avg = (((rubberBand.right - rubberBand.left) + 
									 (rubberBand.bottom - rubberBand.top)) / 2); 
			rb_avg -= 6; 
			 
			dim_avg = (dim.cx + dim.cy) / 2; 
 
			// Calculate transformed points			 
	 		rubberBand.left = pDoc->m_tracker.m_rect.left = rb_center_x -  
	 			(int) (((double) rb_avg * ((double) dim.cx / (double) dim_avg)) / 2); 
	 			 
	 		rubberBand.right = pDoc->m_tracker.m_rect.right = rb_center_x +  
	 			(int) (((double) rb_avg * ((double) dim.cx / (double) dim_avg)) / 2); 
 
	 		rubberBand.top = pDoc->m_tracker.m_rect.top = rb_center_y -  
	 			(int) (((double) rb_avg * ((double) dim.cy / (double) dim_avg)) / 2); 
 
	 		rubberBand.bottom = pDoc->m_tracker.m_rect.bottom = rb_center_y +  
	 			(int) (((double) rb_avg * ((double) dim.cy / (double) dim_avg)) / 2); 
 
			pDoc->m_tracker.m_rect = rubberBand; 
 
			// Draw new Tracking Rectangle. 
			if (rb_avg > 4) 
				pDoc->m_tracker.Draw(pDC); 
			else 
				pDoc->m_tracker.m_rect.SetRectEmpty();	 
		} 
 
	/////////////////////////////////////////////////////////////////////////////////////////////////////// 
 
		if (!bDraw && uTimer1 == NULL) 
		{ 
			GetParent()->SetWindowText(pDoc->GetTitle() + " - " +  ActiveTitle); 
			if (bTracker && !bStretchToFit && !bDraw) 
			{ 
				bTracker = FALSE; 
				pDoc->m_tracker.GetTrueRect(rubberBand); 
				pDoc->m_tracker.Draw(pDC); 
			 
				rb_left 	 	= (double) rubberBand.left 	/ CrtScale; 
				rb_top  		= (double) rubberBand.top  	/ CrtScale; 
				rb_right  	= (double) rubberBand.right 	/ CrtScale; 
				rb_bottom 	= (double) rubberBand.bottom / CrtScale; 
 
				rubberBand.left 	 = (int) rb_left		+ spt.x; 
				rubberBand.top  	 = (int) rb_top			+ spt.y; 
				rubberBand.right 	 = (int) rb_right		+ spt.x; 
				rubberBand.bottom  = (int) rb_bottom  + spt.y; 
																 
				// Scale the Screen coordinates 
				sxmin =  
					((double ) rubberBand.left / CrtScale -  
					(double ) Orig_X) / ((double ) (dim.cx+1));  
					//(double ) Orig_X) / ((double ) (dim.cx + 1));  
				sxmax = 
					((double ) rubberBand.right / CrtScale - 
					(double ) Orig_X) / ((double ) (dim.cx+1)); 
					//(double ) Orig_X) / ((double ) (dim.cx + 1)); 
				symin =  
					((double ) rubberBand.bottom / CrtScale -  
		 			(double ) Orig_Y) / ((double ) (dim.cy+1)); 
		 			//(double ) Orig_Y) / ((double ) (dim.cy + 1));		 
				symax =  
   	 			((double ) rubberBand.top / CrtScale -  
    			(double ) Orig_Y) / ((double ) (dim.cy+1)); 
    			//(double ) Orig_Y) / ((double ) (dim.cy + 1)); 
 
				x_size = CRMAX - CRMIN; 
				y_size = CIMAX - CIMIN; 
 
				// Get new fractal coordinates 
				CRMIN_NEW = x_size * sxmin + CRMIN; 
				CRMAX_NEW = x_size * sxmax + CRMIN; 
 
 				CIMIN_NEW = CIMAX - y_size * symin; 
				CIMAX_NEW = CIMAX - y_size * symax; 
 
				CRMID_OLD = CRMID; 
				CIMID_OLD = CIMID; 
		 
				CRMID = ((CRMAX_NEW - CRMIN_NEW) / 2.0) + CRMIN_NEW; 
				CIMID	= ((CIMAX_NEW - CIMIN_NEW) / 2.0) + CIMIN_NEW; 
 
				if (!bLockStart)	 
				{ 
					CRMID_Start = ((CRMAX_NEW - CRMIN_NEW) / 2.0) + CRMIN_NEW; 
	    		CIMID_Start	= ((CIMAX_NEW - CIMIN_NEW) / 2.0) + CIMIN_NEW; 
				} 
		 
				if (!bLockFinish)	 
				{ 
					CRMID_Finish = ((CRMAX_NEW - CRMIN_NEW) / 2.0) + CRMIN_NEW; 
		  		CIMID_Finish = ((CIMAX_NEW - CIMIN_NEW) / 2.0) + CIMIN_NEW; 
				} 
 
				// Calculate the Magnification (2 / average of width & length) 
 				dMag_new = ((fabs(CRMAX_NEW - CRMIN_NEW) / 2)  
 										+ (fabs(CIMAX_NEW - CIMIN_NEW) / 2)) / 2; 
				if (dMag_new)  
					dMag_new = (1 / dMag_new) * 2; 
 
				if (!bLockStart) 
					dMagnification_Start = dMagnification;		 
			 
				if (!bLockFinish) 
					dMagnification_Finish = dMagnification;		 
 			   				 
				if (!pDC->IsPrinting())   // if not printer DC 
					sprintf(cstr,  
						"Center_R=%f, Center_I=%f, L=%f, T=%f, R=%f, B=%f, Mn=%f", 
							CRMID, CIMID, CRMIN_NEW, CIMAX_NEW, CRMAX_NEW, CIMIN_NEW, dMag_new); 
 
				// Draw an X inside the Rubber Band 
				CPen penBlackDash(PS_DOT, 0, (COLORREF) 0); 
				CPen *ppenDefault = pDC->SelectObject(&penBlackDash); 
 
				pDC->MoveTo(rubberBand.left, rubberBand.top); 
				pDC->LineTo(rubberBand.right, rubberBand.bottom); 
				pDC->MoveTo(rubberBand.right, rubberBand.top); 
				pDC->LineTo(rubberBand.left, rubberBand.bottom); 
		   
				pDC->SelectObject(ppenDefault);		 
			}	 
			else 
			{								 
				// Calculate the Magnification (2 / average of width & length) 
 				//dMagnification = ((fabs(CRMAX - CRMIN) / 2)  
 				//						+ (fabs(CIMAX - CIMIN) / 2)) / 2; 
				//if (dMagnification)  
				//	dMagnification = (1 / dMagnification) * 2; 
 
				sprintf(cstr,  
					"Center_R=%f, Center_I=%f, L=%f, T=%f, R=%f, B=%f, M=%f", 
						CRMID, CIMID, CRMIN, CIMAX, CRMAX, CIMIN, dMagnification);		 
			} 
			 
			Status_Bar(cstr); 
 
			if (m_pGradView->GetSafeHwnd() != 0) 
			{ 
				m_pGradView->SetDlgItemInt(IDC_START_RED, nRedStart); 
				m_pGradView->SetDlgItemInt(IDC_START_GREEN, nGrnStart); 
				m_pGradView->SetDlgItemInt(IDC_START_BLUE, nBluStart); 
 
				m_pGradView->SetDlgItemInt(IDC_INC_RED, nRed); 
				m_pGradView->SetDlgItemInt(IDC_INC_GREEN, nGrn); 
				m_pGradView->SetDlgItemInt(IDC_INC_BLUE, nBlu); 
 
			} 
		} 
 
		if (m_pMovieView->GetSafeHwnd()) 
			UpdateMovieData();	 
	}			 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CTierazonView printing 
 
BOOL CTierazonView::OnPreparePrinting(CPrintInfo* pInfo) 
{ 
	// default preparation 
	return DoPreparePrinting(pInfo); 
} 
 
void CTierazonView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add extra initialization before printing 
} 
 
void CTierazonView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add cleanup after printing 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CTierazonView diagnostics 
 
#ifdef _DEBUG 
void CTierazonView::AssertValid() const 
{ 
	CScrollView::AssertValid(); 
} 
 
void CTierazonView::Dump(CDumpContext& dc) const 
{ 
	CScrollView::Dump(dc); 
} 
 
CTierazonDoc* CTierazonView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTierazonDoc))); 
	return (CTierazonDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CTierazonView message handlers 
 
void CTierazonView::OnContextMenu(CWnd*, CPoint point) 
{ 
	// CG: This block was added by the Pop-up Menu component
	{
		if (point.x == -1 && point.y == -1){
			//keystroke invocation
			CRect rect;
			GetClientRect(rect);
			ClientToScreen(rect);

			point = rect.TopLeft();
			point.Offset(5, 5);
		}

		CMenu menu;
		VERIFY(menu.LoadMenu(CG_IDR_POPUP_TIERAZON_VIEW));

		CMenu* pPopup = menu.GetSubMenu(0);
		ASSERT(pPopup != NULL);
		CWnd* pWndPopupOwner = this;

		while (pWndPopupOwner->GetStyle() & WS_CHILD)
			pWndPopupOwner = pWndPopupOwner->GetParent();

		pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
			pWndPopupOwner);
	} 
} 
 
void CTierazonView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)  
{ 
	if (bActivate) 
	{ 
		// Realize my palette if necessary 
		CDC* pDC = GetDC(); 
 
		UINT nColorsRealized =  
			DrawDibRealize(GetDocument()->m_dib.m_hDrawDib, pDC->GetSafeHdc(), FALSE); 
 
		ReleaseDC(pDC); 
 
		if (nColorsRealized > 0) 
			Invalidate(TRUE); 
	} 
	 
	CScrollView::OnActivateView(bActivate, pActivateView, pDeactiveView); 
} 
 
void CTierazonView::OnInitialUpdate()  
{ 
	CScrollView::OnInitialUpdate(); 
	 
	CTierazonDoc* pDoc = GetDocument(); 
 
	if (bNewView && bZoomingMode) 
	{ 
    if ( ! outFile.Open( szTempFileName, CFile::modeRead )) 
    { 
      bZoomingMode = FALSE; 
      AfxMessageBox ( "Error, Opening File:" + szTempFileName ); 
			outFile.Close(); 
			return; 
    } 
    else 
    { 
			//bNewView = FALSE; 
			// Read the parameters from the ASCII file 
			Loadparameters(); 
 
			// Look for the two common sizes 
			if ((nImageSize == 0 && dim.cx == 160 && dim.cy == 120)) 
			{ 
				// Do Nothing 
			} 
			else 
			if ((nImageSize == 1 && dim.cx == 256 && dim.cy == 256)) 
			{ 
				// Do Nothing 
			} 
			else 
				nImageSize = 10; // Set to custom size 
 
			// Create a new DIB 
			if (!pDoc->m_dib.CreateDIB((DWORD) dim.cx, (DWORD) dim.cy))	// Create a bitmap 
			{ 
				AfxMessageBox("Error Creating DIB"); 
			} 
 
			//if (nMatrix) 
			//{ 
			//	if (!pDoc->m_dib.CreateDIB_Temp((DWORD) dim.cx, (DWORD) dim.cy))	// Create a bitmap 
			//	{ 
			//		AfxMessageBox("Error Creating DIB_Temp"); 
			//		return; 
			//	} 
			//} 
 
			GetParentFrame()->SetWindowPos(NULL, 0, 0, dim.cx+40, dim.cy+60, 
				SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_SHOWWINDOW | SWP_DRAWFRAME); 
 
			/////////////////////////////////// 
			//AfxMessageBox("Step 1"); 
			bDraw = TRUE; 
			bLaunch = FALSE; 
		} 
		outFile.Close(); 
 
		//if (bAutoTile) 
	    //AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_WINDOW_TILE_HORZ); 
	} 
 
	else if (pDoc->doc_PathName == "") 
	{ 
		// Initial size of new bitmap 
		pDoc->m_sizeDoc.cx = global_width; 
		pDoc->m_sizeDoc.cy = global_height; 
 
		dim = pDoc->m_sizeDoc; 
 
		if (!pDoc->m_dib.CreateDIB((DWORD) dim.cx, (DWORD) dim.cy))	// Create a bitmap 
		{ 
			AfxMessageBox("Error Creating DIB"); 
		} 
		 
		//if (nMatrix) 
		//{ 
		//	if (!pDoc->m_dib.CreateDIB_Temp((DWORD) dim.cx, (DWORD) dim.cy))	// Create a bitmap 
		//	{ 
		//		AfxMessageBox("Error Creating DIB_Temp"); 
		//		return; 
		//	} 
		//} 
 
		dim = pDoc->GetDocSize(); 
 
    if (outFile.Open( szInkFileName, CFile::modeRead ))	 
		{ 
			bNewView = FALSE; 
			Loadparameters(); 
			outFile.Close(); 
 
			szTemp = szTempFileName; 
			szTemp.GetBufferSetLength(szTempFileName.GetLength()-3); 
			szTemp += "bmp"; 
			 
			//if (!pDoc->OnOpenDocument(szTemp)) 
			if (TRUE) 
			{ 
				bDraw = TRUE; 
				bLaunch = FALSE; 
			} 
			else 
			{ 
		    //OnWindowSizedesktop(); 
				dim = pDoc->GetDocSize(); 
				bInitialized = FALSE; 
			} 
		} 
		else 
		{ 
			//////////////////////////////////////////////////////////// 
			 
			// Open the default color file 
			if ( ! outFile.Open( szColorFileName, CFile::modeRead )) 
			{ 
				// Create the initial color file 
				szTemp = "Jungle.clr"; 
 
				// File "Save As" Routine 
 
				if ( ! outFile.Open( szTemp,  
     							CFile::modeWrite | CFile::modeCreate)) 
				{ 
					AfxMessageBox ( "Error, Creating File:" + szTemp ); 
					return; 
				}	 
 
				szColorFileName = outFile.GetFilePath(); 
 
				// Write the Colours out to an ASCII file 
			 
				// Write nRedStart 
				sprintf(cstr,"%d", nRedStart); 
				szTemp = cstr; 
				outFile.WriteString(szTemp + '\n');			 
 
				// Write nGrnStart 
				sprintf(cstr,"%d", nGrnStart); 
				szTemp = cstr; 
				outFile.WriteString(szTemp + '\n');			 
 
				// Write nBluStart 
				sprintf(cstr,"%d", nBluStart); 
				szTemp = cstr; 
				outFile.WriteString(szTemp + '\n');			 
 
				// Write nRed 
				sprintf(cstr,"%d", nRed); 
				szTemp = cstr; 
				outFile.WriteString(szTemp + '\n');			 
 
				// Write nGrn 
				sprintf(cstr,"%d", nGrn); 
				szTemp = cstr; 
				outFile.WriteString(szTemp + '\n');			 
 
				// Write nBlu 
				sprintf(cstr,"%d", nBlu); 
				szTemp = cstr; 
				outFile.WriteString(szTemp + '\n');			 
		 
				outFile.Close(); 
 
				AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_DRAW_1);		 
			 
				GetParentFrame()->SetWindowPos(NULL, 0, 0, dim.cx+40, dim.cy+60, 
					SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_SHOWWINDOW | SWP_DRAWFRAME); 
				 
				SetScrollSizes(MM_TEXT, GetDocument()->GetDocSize());	 
 
				Invalidate();		 
				return; 
			} 
 
			// Read nRedStart 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nRedStart); 
 
			// Read nGrnStart 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nGrnStart); 
 
			// Read nBluStart 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nBluStart); 
 
			// Read nRed 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nRed); 
 
			// Read nGrn 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nGrn); 
 
			// Read nBlu 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nBlu); 
 
			outFile.Close(); 
			 
			//////////////////////////////////////////////////////////			 
			SetScrollSizes(MM_TEXT, GetDocument()->GetDocSize());	 
 
			AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_DRAW_1);		 
			//OnViewBackground(); 
			//AfxGetMainWnd()->PostMessage(WM_COMMAND, ID_PALETTE_SCALED);		 
			 
		} 
 
		GetParentFrame()->SetWindowPos(NULL, 0, 0, dim.cx+40, dim.cy+60, 
			SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_SHOWWINDOW | SWP_DRAWFRAME); 
 
		//outFile.Close(); 
 
		//if (!(nImageSize == 1 && dim.cx == 256 && dim.cy == 256)) 
		//	nImageSize = 10; // Set to custom size 
 
		// Look for the two common sizes 
		if ((nImageSize == 0 && dim.cx == 160 && dim.cy == 120)) 
		{ 
			// Do Nothing 
		} 
		else 
		if ((nImageSize == 1 && dim.cx == 256 && dim.cy == 256)) 
		{ 
			// Do Nothing 
		} 
		else 
			nImageSize = 10; // Set to custom size 
		 
	} 
	else 
	{ 
		// Get the size of the bitmap 
		dim = pDoc->m_sizeDoc; 
 
		// Opening Bitmap from file 
    OnWindowSizedesktop(); 
 
		// Open the equivalent parameters file, if one exists 
		CString szTemp; 
 
		szTemp = pDoc->doc_PathName; 
		szTemp = szTemp.GetBufferSetLength(szTemp.GetLength()-3); 
		szTemp += "zar"; 
     
		if ( outFile.Open( szTemp, CFile::modeRead )) 
    { 
			// Read the parameters from the ASCII file 
			Loadparameters();			 
			outFile.Close(); 
 
			//bDraw = TRUE; 
			//bLaunch = FALSE; // Redraw to initialize the temp buffers. 
			bInitialized = FALSE;		 
		} 
	} 
 
	SetScrollSizes(MM_TEXT, GetDocument()->GetDocSize());	 
	bZoomingMode = FALSE; 
 
  Invalidate();		 
 
} 
 
void CTierazonView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)  
{ 
  switch (lHint) 
	{ 
		case ID_APPLICATION_IDLE: 
			if (!bDraw && uTimer1) 
				Shift_Step();	 
			else 
				DrawPattern(); 
			break; 
 
    default: 
      break; 
  }			 
} 
 
void CTierazonView::OnWindowSizedesktop()  
{ 
	int ccx, ccy; 
 
	CRect rParentArea; 
	GetActiveWindow()->GetWindowRect(rParentArea); 
 
 	ccx = rParentArea.right - rParentArea.left - 20; 
 	ccy = rParentArea.bottom - rParentArea.top - 45; 
 
	//char cstr[81]; 
	//wsprintf(cstr,"top=%d, left=%d, ccx=%d,  ccy=%d", 
	//	rParentArea.top, rParentArea.left, ccx, ccy); 
	//AfxMessageBox(cstr);	 
 
	if (dim.cx + 40 > ccx) 
		ccx = ccx - 100; 
	else 
		ccx = dim.cx; 
 
	if (dim.cy + 60 > ccy) 
		ccy = ccy - 150; 
	else 
		ccy = dim.cy; 
 
	GetParentFrame()->SetWindowPos(NULL, 0, 0, ccx+40, ccy+60, 
		SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER | SWP_SHOWWINDOW | SWP_DRAWFRAME); 
		//SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER);	 
	 
	GetParentFrame()->PostMessage(WM_SIZE); 
 
} 
 
void CTierazonView::Window_Pane(int nStat) 
{ 
  //////////////////////////////////////////////////////////////////// 
  // Output something to the Window Caption Bar 
	// 
	char cstr[81]; 
	wsprintf(cstr, "%d",nStat); 
	GetParent()->SetWindowText(cstr); 
} 
 
void CTierazonView::Status_Bar(char* bar_txt) 
{ 
  //////////////////////////////////////////////////////////////////// 
  // Output something to the status bar 
	// 
 	CStatusBar* pStatus = (CStatusBar*) 
   	AfxGetApp()->m_pMainWnd->GetDlgItem(AFX_IDW_STATUS_BAR); 
  if (pStatus)  
  { 
  	pStatus->SetPaneText(0, bar_txt); 
  } 
} 
 
void CTierazonView::OnLButtonDown(UINT nFlags, CPoint point)  
{ 
	// Get Pointer to Document 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
   
	//rubberBand.left = point.x; 
  //rubberBand.top  = point.y; 
   
	// If clicked inside, drag or resize it. Otherwise create a  
	// rubber band rectangle 
	BOOL bResult = pDoc->m_tracker.HitTest(point) != CRectTracker::hitNothing; 
 
	// Tracker rectangle changed so update views. 
  if (bResult) 
		pDoc->m_tracker.Track(this, point, TRUE); 
	else 
		 pDoc->m_tracker.TrackRubberBand(this, point, TRUE); 
 
	// pDoc->SetModifiedFlag(); 
 
	pDoc->m_tracker.GetTrueRect(rubberBand); 
 
	if (rubberBand.right - rubberBand.left > 10 &&  
			rubberBand.bottom - rubberBand.top > 10) 
  { 
		if (CrtScale == 1)  
			bTracker = TRUE; 
		else 
			bTracker = FALSE; 
  } 
   
	pDoc->UpdateAllViews(NULL);   
 
	if (rsave.left		< Orig_X || 
			rsave.right		> Orig_X + dim.cx || 
			rsave.bottom	> Orig_Y + dim.cy || 
			rsave.top			< Orig_Y) 
		Invalidate(TRUE);  	 
	else 
		Invalidate(FALSE);  	 
 
	rsave.left		= rubberBand.left; 
	rsave.right		= rubberBand.right; 
	rsave.bottom	= rubberBand.bottom; 
	rsave.top			= rubberBand.top; 
		 
	//bBDown = TRUE; 
	//bTracker = TRUE; 
	 
	CScrollView::OnLButtonDown(nFlags, point); 
} 
 
void CTierazonView::OnMouseMove(UINT nFlags, CPoint point)  
{ 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
   
	// If moving inside the rectangle, drag or resize it. Otherwise 
	// show a Cross-hair Cursor 
	BOOL bResult = pDoc->m_tracker.HitTest(point) != CRectTracker::hitNothing; 
 
	// Tracker rectangle changed so update views. 
  if (bResult) 
		::SetCursor(mHSize); 
	else 
		::SetCursor(mHCross); 
	 
	CScrollView::OnMouseMove(nFlags, point); 
} 
 
void CTierazonView::OnImageSize()  
{ 
	CTierazonDoc* pDoc = GetDocument(); 
	XYSize px; 
	dim = pDoc->m_sizeDoc; 
 
	px.m_ImageSize = nImageSize; 
	px.m_X_Custom = dim.cx; 
	px.m_Y_Custom = dim.cy; 
	if (px.DoModal() == IDOK) 
	{		 
		nImageSize = px.m_ImageSize; 
		bInitialized = FALSE; 
		 
	  switch (nImageSize) 
  	{ 
  		case 0: 
  			dim.cx = 160; 
  			dim.cy = 120; 
  			break; 
  		case 1: 
  			dim.cx = 256; 
  			dim.cy = 256; 
  			break; 
  		case 2: 
	 			dim.cx = 320; 
  			dim.cy = 240; 
  			break; 
  		case 3: 
  			dim.cx = 640; 
  			dim.cy = 480; 
  			break; 
  		case 4: 
  			dim.cx = 800; 
  			dim.cy = 600; 
  			break; 
  		case 5: 
  			dim.cx = 1024;    // 
  			dim.cy =  768;    // 
  			break; 
  		case 6: 
  			dim.cx = 1280;    //  640*2 
  			dim.cy =  960;    //	480*2 
  			break; 
  		case 7: 
  			dim.cx = 1600;    //  800*2 
  			dim.cy = 1200;    //	600*2 
  			break; 
  		case 8: 
  			dim.cx = 2560;    //  640*4 
  			dim.cy = 1920;    //  480*4 
	  		break; 
  		case 9: 
				dim.cx = 3564; 
				dim.cy = 2784; 
  			break; 
 
	  	case 10: 
  			//	dim.cx = 3072;    // This size gets a creation error 
  		 	//	dim.cy = 2304;    //  
 
				// Get custom sizes 
				dim.cx = px.m_X_Custom & 0x7FFC; // Make even bitmap sizes 
				dim.cy = px.m_Y_Custom & 0x7FFC; 
					 
				break; 
 
  		default: 
  			AfxMessageBox("Shouldn't Get Here - OnImageSize"); 
				return; 
  	} 
		 
		global_width = dim.cx; 
		global_height = dim.cy; 
 
		pDoc->m_sizeDoc	= dim; 
 
		// Create a new DIB 
		if (!pDoc->m_dib.CreateDIB((DWORD) dim.cx, (DWORD) dim.cy))	// Create a bitmap 
		{ 
			AfxMessageBox("Error Creating DIB"); 
		} 
 
		//if (nMatrix) 
		//{ 
		//	if (!pDoc->m_dib.CreateDIB_Temp((DWORD) dim.cx, (DWORD) dim.cy))	// Create a bitmap 
		//	{ 
		//		AfxMessageBox("Error Creating DIB_Temp"); 
		//		return; 
		//	} 
		//} 
 
		OnWindowSizedesktop(); 
 
    //if (nDistortion == (-1)) 
  		//OnViewBackground(); 
 
		if (m_pMovieView->GetSafeHwnd()) 
		{ 
			m_pMovieView->DestroyWindow();	// Close the movie window to prevent crashing due to new size 
			OnFractalsMovie();							// reopen it 
		} 
 
    if (nDistortion >= 0) 
    { 
      bDraw = TRUE; 
		  bLaunch = FALSE; 
    } 
	} 
} 
 
void CTierazonView::OnViewZoom()  
{ 
	// Get Pointer to Document 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
  pDoc->m_tracker.m_rect.SetRectEmpty();	 
		 
	if (CRMIN_NEW < CRMAX_NEW && 
			CIMIN_NEW < CIMAX_NEW) 
	{		 
		bZoomingMode = TRUE; 
 
		CRMIN_OLD = CRMIN; 
		CIMIN_OLD = CIMIN; 
		CRMAX_OLD = CRMAX; 
		CIMAX_OLD = CIMAX; 
			 
		CRMIN = CRMIN_NEW; 
		CIMIN = CIMIN_NEW; 
		CRMAX = CRMAX_NEW; 
		CIMAX = CIMAX_NEW; 
		 
		CRMIN_JUL = CRMIN_NEW; 
		CIMIN_JUL = CIMIN_NEW; 
		CRMAX_JUL = CRMAX_NEW; 
		CIMAX_JUL = CIMAX_NEW; 
 
		CRMIN_NEW = 0; 
		CIMIN_NEW = 0; 
		CRMAX_NEW = 0; 
		CIMAX_NEW = 0; 
 
		////////////////////////////////////////// 
		if (bNewView) 
		{ 
			// Create new view and return			 
			ViewNew(); 
			OnEditUndofractalselection(); 
			return; 
		}	 
		else 
		{ 
			if (jul == 0 || jul_save == 1) 
			{ 
				rx_ratio = (double) dim.cx/(double) (dim.cy); 
				ry_ratio = (double) dim.cy/(double) (dim.cx); 
 
				rx_ratio = rx_ratio + (1-rx_ratio)/2; 
				ry_ratio = ry_ratio + (1-ry_ratio)/2; 
 
				// Calculate the Magnification (2 / average of width & length) 
 				dMagnification = ((fabs((CRMAX - CRMIN)/rx_ratio) / 2)  
 							+ (fabs((CIMAX - CIMIN)/ry_ratio) / 2)) / 2; 
				if (dMagnification)  
					dMagnification = (1 / dMagnification) * 2; 
 
			}			 
			//OnViewBackground(); 
			bDraw = TRUE;			 
			bLaunch = FALSE; 
		} 
 	}	 
} 
 
void CTierazonView::OnUpdateViewZoom(CCmdUI* pCmdUI)  
{ 
	if (CRMIN_NEW < CRMAX_NEW && 
			CIMIN_NEW < CIMAX_NEW) 
	{		 
		pCmdUI->Enable(TRUE);	 
	}	 
	else 
		pCmdUI->Enable(FALSE);	 
} 
 
void CTierazonView::OnViewNew()  
{ 
	bNewView ^= 1; 
} 
 
void CTierazonView::OnUpdateViewNew(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck(bNewView);	 
} 
 
void CTierazonView::ViewNew()  
{	 
  if (!outFile.Open( szTempFileName,  
     		CFile::modeWrite | CFile::modeCreate)) 
  { 
    AfxMessageBox ( "Error, Opening File:" + szTempFileName ); 
		outFile.Close(); 
		return; 
	}	 
	else 
	{ 
		// Write the parameters out to an ASCII file 
		Saveparameters();                                     
	} 
	outFile.Close(); 
 
	// Close the Gradient window to avoid confusion if one is open 
	if (m_pGradView->GetSafeHwnd()) 
		m_pGradView->DestroyWindow();	 
	 
	// Close the movie window to avoid confusion if one is open 
	if (m_pMovieView->GetSafeHwnd()) 
		m_pMovieView->DestroyWindow();	 
 
	GetParent()->SendMessage(WM_COMMAND, ID_FILE_NEW);	 
 
} 
 
void CTierazonView::OnSaveDib()  
{ 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
	// Save Parameters File 
	szTemp = 
	pDoc->doc_PathName.GetBufferSetLength(pDoc->doc_PathName.GetLength()-3); 
	szTemp = szTemp + "zar"; 
 
	// Write the parameters out to an ASCII file 
	if (!outFile.Open( szTemp,  
     		CFile::modeWrite | CFile::modeCreate)) 
  { 
    AfxMessageBox ( "Error, Opening File:" + szTemp ); 
		return; 
	}	 
	else 
	{ 
		// Write the parameters out to an ASCII file 
		Saveparameters();                                     
	} 
	outFile.Close(); 
 
} 
 
void CTierazonView::OnFileSavecolors()  
{ 
  szTemp = "Jungle.clr"; 
 
	// File "Save As" Routine 
 
	CFileDialog dlg 
	    (FALSE, 
	   	"clr", 
	   	szTemp,           
	    OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
	    "Tierazon Colors (*.clr)|*.clr|All Files (*.*)|*.*||"); 
 
  if (dlg.DoModal() == IDOK) 
  { 
  	szTemp = dlg.GetPathName();               
    if ( ! outFile.Open( szTemp,  
     							CFile::modeWrite | CFile::modeCreate)) 
    { 
      AfxMessageBox ( "Error, Opening File:" + szTemp ); 
			return; 
		}	 
		else 
		{ 
			// Write the parameters out to an ASCII file 
			 
			// Write nRedStart 
			sprintf(cstr,"%d", nRedStart); 
			szTemp = cstr; 
			outFile.WriteString(szTemp + '\n');			 
 
			// Write nGrnStart 
			sprintf(cstr,"%d", nGrnStart); 
			szTemp = cstr; 
			outFile.WriteString(szTemp + '\n');			 
 
			// Write nBluStart 
			sprintf(cstr,"%d", nBluStart); 
			szTemp = cstr; 
			outFile.WriteString(szTemp + '\n');			 
 
			// Write nRed 
			sprintf(cstr,"%d", nRed); 
			szTemp = cstr; 
			outFile.WriteString(szTemp + '\n');			 
 
			// Write nGrn 
			sprintf(cstr,"%d", nGrn); 
			szTemp = cstr; 
			outFile.WriteString(szTemp + '\n');			 
 
			// Write nBlu 
			sprintf(cstr,"%d", nBlu); 
			szTemp = cstr; 
			outFile.WriteString(szTemp + '\n');			 
		 
		} 
		outFile.Close(); 
	}	 
} 
 
void CTierazonView::OnFileSaveparameters()  
{ 
  szTemp = "Tiaraz.zar"; 
 
	// File "Save As" Routine 
 
	CFileDialog dlg 
	    (FALSE, 
	   	"zar", 
	   	szTemp,           
	    OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
	    "Fractal Parameters (*.zar)|*.zar|All Files (*.*)|*.*||"); 
 
  if (dlg.DoModal() == IDOK) 
  { 
  	szTemp = dlg.GetPathName();               
    if ( ! outFile.Open( szTemp,  
     							CFile::modeWrite | CFile::modeCreate)) 
    { 
      AfxMessageBox ( "Error, Opening File:" + szTemp ); 
			return; 
		}	 
		else 
		{ 
			// Write the parameters out to an ASCII file 
			Saveparameters();                                     
		} 
		outFile.Close(); 
	} 
} 
 
void CTierazonView::Saveparameters()  
{ 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
	global_width	= dim.cx; 
	global_height = dim.cy; 
	 
	// Write the parameters out to an ASCII file 
 
	outFile.WriteString(ActiveTitle + '\n');			 
 
	// Write the fractal type 
	sprintf(cstr,"%d", nDistortion); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	// Write the 'jul' variable 
	sprintf(cstr,"%d", jul); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
			 
	// Write the 'jul_save' variable 
	sprintf(cstr,"%d", jul_save); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
						 
	// Write the maximum iterations 
	sprintf(cstr,"%d", NMAX);			// max iterations 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
			 
	// Write the nRedStart Variable 
	sprintf(cstr,"%d", nRedStart); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
			 
	// Write the nGrnStart Variable 
	sprintf(cstr,"%d", nGrnStart); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
			 
	// Write the nBluStart Variable 
	sprintf(cstr,"%d", nBluStart); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
			 
	// Write the nRed Variable 
	sprintf(cstr,"%d", nRed); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
			 
	// Write the nGrn Variable 
	sprintf(cstr,"%d", nGrn); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
			 
	// Write the nBluStart Variable 
	sprintf(cstr,"%d", nBlu); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
			 
	sprintf(cstr,"%f", (double) dBailout);		//  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", CRMIN);		// x left 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", CIMIN);    // y top 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", CRMAX);    // x right 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", CIMAX);    // y bottom 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", CRMIN_JUL);		// x left 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", CIMIN_JUL);    // y top 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", CRMAX_JUL);    // x right 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", CIMAX_JUL);    // y bottom 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", CRMID);    // 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", CIMID);    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", cx);    // 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", cy);    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	//////////////////////////////////// 
	sprintf(cstr,"%f", dBay100);	//  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%f", dBay1000);	//  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
	 
	sprintf(cstr,"%f", (double) dBiomorph);	//  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%f", dStrands);		//  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	// Write the bInvertFractal BOOL variable 
	sprintf(cstr,"%d", bInvertFractal); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
  // Write bZeroInit BOOL Variable 
	sprintf(cstr,"%d", bZeroInit); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');   
 
	sprintf(cstr,"%.16Lg", dMIN);		// dMIN 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	// Write the nFilter Variable 
	sprintf(cstr,"%d", nFilter); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
			 
	// Write the nColorOrder Variable 
	sprintf(cstr,"%d", nColorOrder); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
			 
  //////////////////////////////////////// 
  // Watermark variables 
	sprintf(cstr,"%.16Lg", dLower);    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", dUpper);    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
  //////////////////////////////////////// 
  // Orientation variables 
	sprintf(cstr,"%.16Lg", cOrient.real());    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", cOrient.imag());    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	// Write the bNewView BOOL variable 
	sprintf(cstr,"%d", bNewView); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	// Write the bColorize BOOL variable 
	sprintf(cstr,"%d", bColorize); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	// Write the nFDOption variable 
	sprintf(cstr,"%d", nFDOption); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	// Write the nColorMethod variable 
	sprintf(cstr,"%d", nColorMethod); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	// Write the bDimensionVariant variable 
	sprintf(cstr,"%d", bDimensionVariant); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	// Write the bGrayScale variable 
	sprintf(cstr,"%d", bGrayScale); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
  //////////////////////////////////////// 
  // Parser Variables 
	sprintf(cstr,"%.16Lg", u_real);    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", u_imag);    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", v_real);    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", v_imag);    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", w_real);    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	sprintf(cstr,"%.16Lg", w_imag);    //  
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	outFile.WriteString(strFormulae + '\n');			 
 
	// Write the nFormulaType variable 
	sprintf(cstr,"%d", nFormulaType); 
	szTemp = cstr; 
	outFile.WriteString(szTemp + '\n');			 
 
	 
} 
 
void CTierazonView::OnFileLoadcolors()  
{ 
	CString szTemp; 
 
	// File "Load From Parameters" Routine 
 
	CFileDialog dlg 
	    (TRUE, 
	   	"*.clr", 
	   	szTemp,           
	     OFN_HIDEREADONLY, 
	    "Color Parameters (*.clr)|*.clr|All Files (*.*)|*.*||"); 
 
  if (dlg.DoModal() == IDOK) 
  { 
  	szTemp = dlg.GetPathName();               
 
    if ( ! outFile.Open( szTemp, CFile::modeRead )) 
    { 
      AfxMessageBox ( "Error, Opening File:" + szTemp ); 
			return; 
    } 
    else 
    { 
			// Read the parameters from the ASCII file 
 
			// Read nRedStart 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nRedStart); 
 
			// Read nGrnStart 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nGrnStart); 
 
			// Read nBluStart 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nBluStart); 
 
			// Read nRed 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nRed); 
		 
			// Read nGrn 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nGrn); 
		 
			// Read nBlu 
			outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
			sscanf (cstr, "%d", &nBlu); 
				 
		} 
		outFile.Close(); 
 
		//PostMessage(WM_DLGGRADIENT, ID_APPLY); 
 
		bDraw = TRUE; 
		bLaunch = FALSE; 
		//bColorChange = TRUE; 
 
		if (m_pGradView->GetSafeHwnd() != 0) 
		{		 
			m_pGradView->SetDlgItemInt(IDC_START_RED, nRedStart); 
			m_pGradView->SetDlgItemInt(IDC_START_GREEN, nGrnStart); 
			m_pGradView->SetDlgItemInt(IDC_START_BLUE, nBluStart); 
 
			m_pGradView->SetDlgItemInt(IDC_INC_RED, nRed); 
			m_pGradView->SetDlgItemInt(IDC_INC_GREEN, nGrn); 
			m_pGradView->SetDlgItemInt(IDC_INC_BLUE, nBlu); 
 
			m_pGradView->ScrollBarInit(); 
 
			if (bForward) 
				m_pGradView->SetDlgItemText(IDC_STATUS, "Forward"); 
			else 
				m_pGradView->SetDlgItemText(IDC_STATUS, "Reverse"); 
 
			m_pGradView->UpdateData(TRUE); 
			m_pGradView->ScrollBarInit(); 
 
		} 
	}	 
} 
 
void CTierazonView::OnFileLoadparameters()  
{ 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
	CString szTemp; 
 
	// File "Load From Parameters" Routine 
 
	CFileDialog dlg 
	    (TRUE, 
	   	"*.zar", 
	   	szTemp,           
	     OFN_HIDEREADONLY, 
	    "Fractal Parameters (*.zar)|*.zar|All Files (*.*)|*.*||"); 
 
  if (dlg.DoModal() == IDOK) 
  { 
  	szTemp = dlg.GetPathName();               
 
    if ( ! outFile.Open( szTemp, CFile::modeRead )) 
    { 
      AfxMessageBox ( "Error, Opening File:" + szTemp ); 
			return; 
    } 
    else 
    { 
			// Read the parameters from the ASCII file 
			Loadparameters(); 
			if (!(nImageSize == 1 && dim.cx == 256 && dim.cy == 256)) 
				nImageSize = 10; // Set to custom size 
		} 
		outFile.Close(); 
 
		szTemp.GetBufferSetLength(szTemp.GetLength()-3); 
		szTemp += "bmp"; 
		 
		pDoc->doc_PathName = szTemp; 
		pDoc->SetTitle(szTemp); 
		pDoc->SetPathName(szTemp); 
 
		if (nDistortion) 
		{ 
			//sprintf(cstr,"CRMID=%f,CIMID=%f",CRMID,CIMID); 
			//szTemp = cstr; 
			//AfxMessageBox(ActiveTitle + ": " + szTemp); 
 
			bDraw = TRUE; 
			bLaunch = FALSE; 
			bInitialized = FALSE; 
		}	 
	} 
} 
 
void CTierazonView::Loadparameters()  
{ 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	 
	// Read the parameters from the ASCII file 
 
	if (outFile.ReadString ( ctitle, (sizeof(cstr)-1)) == NULL) 
	{ 
		AfxMessageBox("Error Reading from Parameter File:" + szTemp); 
    return; 
  } 
      	 
	ActiveTitle = ctitle; 
	pDoc->doc_PathName = ActiveTitle; 
 
	// Search for the Line Feed loacation  
	int iLFLoc = ActiveTitle.ReverseFind('\n'); 
	// Replace the Line Feed character with NULL for viewing 
	if (iLFLoc >= 0)  
	ActiveTitle.GetBufferSetLength(ActiveTitle.GetLength()-1);  
 
	// Read the 'fractal type 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nDistortion); 
			 
	// Read the 'jul' variable 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &jul); 
 
	// Read the 'jul_save' variable 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &jul_save); 
 
	// Read maximum iterations 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &NMAX);     // max iterations 
			 
	// Read nRedStart 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nRedStart);    
 
	// Read nGrnStart 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nGrnStart);    
 
	// Read nBluStart 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nBluStart);    
 
	// Read nRed 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nRed);    
 
	// Read nGrn 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nGrn);    
 
	// Read nBlu 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nBlu);    
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  dBailout = (int) atof(cstr);			 
 
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  CRMIN = atof(cstr);							// x left 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  CIMIN = atof(cstr);							// y top 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  CRMAX = atof(cstr);							// x right 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  CIMAX = atof(cstr);							// y bottom 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  CRMIN_JUL = atof(cstr);							// x left 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  CIMIN_JUL = atof(cstr);							// y top 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  CRMAX_JUL = atof(cstr);							// x right 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  CIMAX_JUL = atof(cstr);							// y bottom 
   
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  CRMID = atof(cstr);							// 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  CIMID = atof(cstr);							// 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  cx = atof(cstr);							// 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  cy = atof(cstr);							// 
 
	if (jul == 1) 
	{ 
		CRMID_JUL = ((CRMAX_JUL - CRMIN_JUL) / 2.0) + CRMIN_JUL; 
    CIMID_JUL	= ((CIMAX_JUL - CIMIN_JUL) / 2.0) + CIMIN_JUL; 
 
    if (bJuliaMode) 
    { 
			CRMIN_JUL  	= -2.0;	//	-2.0;		// left 
			CIMIN_JUL  	= -2.0;	//	-1.2;   // top 
			CRMAX_JUL  	=  2.0;	//	1.0;    // right 
			CIMAX_JUL  	=  2.0;	//	1.2;    // bottom 
			bJuliaMode = FALSE; 
		}	 
	} 
 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  dBay100 = atof(cstr);			 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  dBay1000 = atof(cstr);			 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  dBiomorph = (int) atof(cstr);			 
 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  dStrands = atof(cstr); 
 
	// Read bInvertFractal BOOL variable 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &bInvertFractal); 
 
	// Read bZeroInit BOOL Variable 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &bZeroInit); 
			 
	// Read the dMIN variable 
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  dMIN = atof(cstr);							// x left 
 
	if (dMIN == 0) 
		dMIN = 1e-11; 
 
	// Read nFilter 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nFilter);    
	 
	// Read nColorOrder 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nColorOrder);    
	 
	pDoc->m_sizeDoc = dim; 
 
  /////////////////////////////////// 
  // Watermark Variables 
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  dLower = atof(cstr);	 
 
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  dUpper = atof(cstr);	 
  	 
  /////////////////////////////////// 
  // Orientation Variables 
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  cOrient.set_real(atof(cstr));	 
 
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  cOrient.set_imag(atof(cstr));	 
  		 
	//if (jul != 1) 
	if (jul == 0 || jul_save == 1) 
	{ 
	  rx_ratio = (double) dim.cx/(double) (dim.cy); 
	  ry_ratio = (double) dim.cy/(double) (dim.cx); 
 
	  rx_ratio = rx_ratio + (1-rx_ratio)/2; 
	  ry_ratio = ry_ratio + (1-ry_ratio)/2; 
 
	  // Calculate the Magnification (2 / average of width & length) 
 	  dMagnification = ((fabs((CRMAX - CRMIN)/rx_ratio) / 2)  
 							+ (fabs((CIMAX - CIMIN)/ry_ratio) / 2)) / 2; 
	  if (dMagnification)  
		  dMagnification = (1 / dMagnification) * 2; 
 
	} 
 
	if (jul == 1 && jul_save == 0) 
	{ 
		CRMID = 0; 
		CIMID = 0; 
	} 
 
	// Read bNewView BOOL Variable 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &bNewView); 
			 
	// Read bColorize BOOL Variable 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &bColorize); 
	if (bColorize != 0 && bColorize != 1) 
		bColorize = 0; 
			 
	// Read the nFDOption Variable 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nFDOption); 
			 
	// Read the nColorMethod Variable 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nColorMethod); 
			 
	// Read the bDimensionVariant Variable 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &bDimensionVariant); 
	if (bDimensionVariant != 0 && bDimensionVariant != 1) 
		bDimensionVariant = 0; 
			 
	// Read the bGrayScale Variable 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &bGrayScale); 
	if (bGrayScale != 0 && bGrayScale != 1) 
		bGrayScale = 0; 
 
  /////////////////////////////////// 
  // Parser Variables 
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  u_real = atof(cstr);	 
 
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  u_imag = atof(cstr);	 
   
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  v_real = atof(cstr);	 
 
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  v_imag = atof(cstr);	 
   
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  w_real = atof(cstr);	 
 
	outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
  w_imag = atof(cstr);	 
 
  uu.set_real(u_real); 
  uu.set_imag(u_imag); 
 
  vv.set_real(v_real); 
  vv.set_imag(v_imag); 
 
  ww.set_real(w_real); 
  ww.set_imag(w_imag);   
 
	if (outFile.ReadString ( cstr, (sizeof(cstr)-1)) == NULL) 
	{ 
		//AfxMessageBox("Error Reading from Parameter File:" + szTemp); 
    //return; 
    wsprintf(cstr,"z*z+c"); 
  } 
      	 
	strFormulae = cstr; 
 
	// Search for the Line Feed loacation  
	iLFLoc = strFormulae.ReverseFind('\n'); 
	// Replace the Line Feed character with NULL for viewing 
	if (iLFLoc >= 0)  
	  strFormulae.GetBufferSetLength(strFormulae.GetLength()-1);    
 
  int i_try = 0;       
  ParsedExpr = ParseExpression( strFormulae, i_try ); 
 
	// Read the nFormuleType Variable 
  outFile.ReadString ( cstr, (sizeof(cstr)-1)); 
	sscanf (cstr, "%d", &nFormulaType); 
	if (nFormulaType != 0 && nFormulaType != 1) 
		nFormulaType = 0; 
   
	///////////////////////////////////////// 
 
			 
} 
 
void CTierazonView::OnEditUndofractalselection()  
{ 
	if (CRMIN_OLD < CRMAX_OLD && 
			CIMIN_OLD < CIMAX_OLD) 
	{		 
		CRMIN = CRMIN_OLD; 
		CIMIN = CIMIN_OLD; 
		CRMAX = CRMAX_OLD; 
		CIMAX = CIMAX_OLD; 
		 
		CRMID = CRMID_OLD; 
		CIMID = CIMID_OLD; 
		 
		CRMIN_JUL = CRMIN_OLD; 
		CIMIN_JUL = CIMIN_OLD; 
		CRMAX_JUL = CRMAX_OLD; 
		CIMAX_JUL = CIMAX_OLD; 
 
		// Get Pointer to Document 
		CTierazonDoc* pDoc = GetDocument(); 
		ASSERT_VALID(pDoc); 
 
		CRMIN_NEW = 0; 
		CIMIN_NEW = 0; 
		CRMAX_NEW = 0; 
		CIMAX_NEW = 0; 
 
		pDoc->m_tracker.m_rect.SetRectEmpty();	 
		 
		//bDraw = TRUE; 
		//bLaunch = FALSE; 
	} 
} 
	 
void CTierazonView::OnViewJulia()  
{ 
	int jul_t1 = jul; 
	int jul_save_t1 = jul_save; 
 
	jul = 1; 
	jul_save = 0; 
 
	dMagnification = 1; 
	CRMID_OLD = 0; 
	CIMID_OLD = 0; 
 
	bZoomingMode = TRUE; 
 
	////////////////////////////////////////// 
	if (bNewView) 
	{ 
		// Create new view and return			 
		bJuliaMode = TRUE; 
 
		CRMIN_OLD = CRMIN; 
		CIMIN_OLD = CIMIN; 
		CRMAX_OLD = CRMAX; 
		CIMAX_OLD = CIMAX; 
			 
		CRMIN  	= -1.0;	//		// left 
		CIMIN  	= -1.0;	//    // top 
		CRMAX  	=  1.0;	//	  // right 
		CIMAX  	=  1.0;	//	  // bottom 
		 
		//CRMIN = CRMIN_NEW; 
		//CIMIN = CIMIN_NEW; 
		//CRMAX = CRMAX_NEW; 
		//CIMAX = CIMAX_NEW; 
 
		//CRMIN = CRMIN_JUL;  
  	//CIMIN = CIMIN_JUL; 
  	//CRMAX = CRMAX_JUL; 
  	//CIMAX = CIMAX_JUL; 
 
		CRMIN_JUL = CRMIN_NEW; 
		CIMIN_JUL = CIMIN_NEW; 
		CRMAX_JUL = CRMAX_NEW; 
		CIMAX_JUL = CIMAX_NEW; 
 
		CRMIN_NEW = 0; 
		CIMIN_NEW = 0; 
		CRMAX_NEW = 0; 
		CIMAX_NEW = 0; 
 
		ViewNew(); 
		 
		bZoomingMode = FALSE; 
		bJuliaMode = FALSE; 
 
		OnEditUndofractalselection();		// ?? 
 
		jul = jul_t1; 
		jul_save = jul_save_t1; 
 
		//dMagnification = 1; 
 
		//CRMID_JUL = CRMID; 
		//CIMID_JUL = CIMID; 
	 
		//CRMID = 0; 
		//CIMID = 0; 
		 
		return; 
	}	 
	//else 
	//	OnViewBackground(); 
	 
	////////////////////////////////////////// 
		 
	CRMIN  	= -1.0;	//		// left 
	CIMIN  	= -1.0;	//    // top 
	CRMAX  	=  1.0;	//	  // right 
	CIMAX  	=  1.0;	//	  // bottom 
 
	CRMIN_JUL  	= -1.5;	//		// left 
	CIMIN_JUL  	= -1.5;	//    // top 
	CRMAX_JUL  	=  1.5;	//	  // right 
	CIMAX_JUL  	=  1.5;	//	  // bottom 
 
	dMagnification = 1; 
	 
	CRMID_JUL = CRMID; 
	CIMID_JUL = CIMID; 
	 
	CRMID = 0; 
	CIMID = 0; 
 
	//nSaveDistortion = nDistortion; 
 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
	pDoc->m_tracker.m_rect.SetRectEmpty();	 
 
	bDraw = TRUE; 
	bLaunch = FALSE; 
} 
 
void CTierazonView::OnUpdateViewJulia(CCmdUI* pCmdUI)  
{ 
	if (CRMIN_NEW < CRMAX_NEW && 
			CIMIN_NEW < CIMAX_NEW) 
	{		 
		if (jul == 0) 
			pCmdUI->Enable(TRUE); 
		else 
			pCmdUI->Enable(FALSE); 
	} 
	else 
	{ 
		pCmdUI->Enable(FALSE); 
	} 
 
	if (jul == 1) 
		pCmdUI->SetCheck(TRUE); 
	else 
		pCmdUI->SetCheck(FALSE); 
} 
 
void CTierazonView::OnImageParams()  
{ 
  CFParams fparam; 
	//fparam.m_Top 				= (double) CIMAX; 
	//fparam.m_Bottom 		= (double) CIMIN; 
	//fparam.m_Left   		= (double) CRMIN; 
	//fparam.m_Right   		= (double) CRMAX; 
 
	fparam.m_Magnification = dMagnification; 
	fparam.m_X_Mid = CRMID; 
	fparam.m_Y_Mid = CIMID; 
 
	fparam.m_Iterations	=	NMAX; 
	//fparam.m_dMIN				=	dMIN; 
	fparam.m_Bailout    = (double) dBailout; 
 
	fparam.m_Upper  = dUpper; 
	fparam.m_Lower  = dLower; 
 
	fparam.m_BayFact1 = (double) dBay100; 
	fparam.m_BayFact2 = (double) dBay1000; 
 
	fparam.m_Strands = dStrands; 
 
	if (jul == 1) 
	{ 
		fparam.m_Julia_X = cx; 
		fparam.m_Julia_Y = cy; 
	} 
	else 
	{ 
		fparam.m_Julia_X = 0; 
		fparam.m_Julia_Y = 0; 
	} 
 
	if (fparam.DoModal() == IDOK) 
	{ 
		//CIMAX = fparam.m_Top; 
		//CIMIN = fparam.m_Bottom; 
		//CRMIN = fparam.m_Left; 
		//CRMAX = fparam.m_Right; 
 
		dMagnification = fparam.m_Magnification; 
		CRMID = fparam.m_X_Mid; 
		CIMID = fparam.m_Y_Mid; 
 
		//CIMAX_JUL = fparam.m_Top; 
		//CIMIN_JUL = fparam.m_Bottom; 
		//CRMIN_JUL = fparam.m_Left; 
		//CRMAX_JUL = fparam.m_Right; 
				 
		NMAX  = fparam.m_Iterations; 
		//dMIN  = fparam.m_dMIN; 
		dBailout = (int) fparam.m_Bailout; 
 
		dUpper = fparam.m_Upper; 
		dLower = fparam.m_Lower;	 
		 
		//cn.set_real(rorder_r); 
		//cn.set_imag(rorder_i); 
 
		dBay100  = fparam.m_BayFact1; 
		dBay1000 = fparam.m_BayFact2; 
		//nFF      = fparam.m_FilterFactor; 
		dStrands = fparam.m_Strands; 
 
		if (jul == 1) 
		{ 
			cx = fparam.m_Julia_X; 
			cy = fparam.m_Julia_Y; 
		} 
		else 
		{ 
			if (fparam.m_Julia_X || fparam.m_Julia_Y) 
			{ 
				CRMID = cx = fparam.m_Julia_X; 
				CIMID = cy = fparam.m_Julia_Y; 
 
				CRMIN_NEW = cx - 1;	//	-2.0;		// left 
				CIMIN_NEW = cy - 1;	//	-1.2;   // top 
				CRMAX_NEW = cx + 1;	//	1.0;    // right 
				CIMAX_NEW = cy + 1;	//	1.2;    // bottom 
				 
				//jul = 1; 
				//jul_save = 0; 
 
				OnViewJulia(); 
 
				return; 
			} 
			else 
			{	 
				cx = 0; 
				cy = 0; 
			} 
			 
		} 
 
		bDraw = TRUE; 
		bLaunch = FALSE; 
		bInitialized = FALSE; 
	}	 
} 
 
void CTierazonView::OnDrawAbort()  
{ 
	bAbort = TRUE; 
} 
 
void CTierazonView::OnUpdateDrawAbort(CCmdUI* pCmdUI)  
{ 
	pCmdUI->Enable(bDraw);	 
} 
 
long CTierazonView::OnApply_ShiftView(UINT wParam, LONG lParam) 
{ 
	if (dim.cx > 640 || dim.cy > 480) 
		return 0L; 
	 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
	if (wParam == ID_SHIFTCLOSE) 
	{ 
		bGradient = FALSE; 
		m_pGradView->DestroyWindow(); 
	}	 
	else 
	{		 
		nRed =  
			m_pGradView->GetDlgItemInt(IDC_INC_RED); 
		nGrn =  
			m_pGradView->GetDlgItemInt(IDC_INC_GREEN); 
		nBlu =  
			m_pGradView->GetDlgItemInt(IDC_INC_BLUE); 
 
		nRedStart =  
			m_pGradView->GetDlgItemInt(IDC_START_RED); 
		nGrnStart =  
			m_pGradView->GetDlgItemInt(IDC_START_GREEN); 
		nBluStart =  
			m_pGradView->GetDlgItemInt(IDC_START_BLUE); 
 
		if (wParam == ID_SHIFTREVERSE && bForward == TRUE) 
		{			 
			bRedStart ^= TRUE; 
			bGrnStart ^= TRUE; 
			bBluStart ^= TRUE; 
 
			for (i=0; iSetDlgItemText(IDC_STATUS, "Forward"); 
		else 
			m_pGradView->SetDlgItemText(IDC_STATUS, "Reverse"); 
 
		UpdateData(TRUE); 
 
		if ( wParam == ID_SHIFTFORWARD || wParam == ID_SHIFTREVERSE ) 
			Shift_Step(); 
		else 
			Apply_Color(); 
	} 
	return 0L; 
} 
 
void CTierazonView::Apply_Color()  
{ 
	if (dim.cx > 640 || dim.cy > 480) 
		return; 
	 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc);			 
 
//	if (nFilter) 
//	{ 
//		bLaunch = FALSE; 
//		bDraw   = TRUE;	 
//	} 
//	else 
	{ 
		if (!pDoc->m_dib.ApplyDibColors(nRed, nGrn, nBlu, nRedStart,  
																nGrnStart, nBluStart, 
																iIter_Data, rIter_Data, gIter_Data, bIter_Data, 
																nColorOrder, nColorMode)) 
			AfxMessageBox("Color shift error"); 
	} 
 
	if (m_pGradView->GetSafeHwnd() != 0) 
	{		 
		m_pGradView->SetDlgItemInt(IDC_START_RED, nRedStart); 
		m_pGradView->SetDlgItemInt(IDC_START_GREEN, nGrnStart); 
		m_pGradView->SetDlgItemInt(IDC_START_BLUE, nBluStart); 
		m_pGradView->UpdateData(TRUE); 
		m_pGradView->ScrollBarInit(); 
	} 
 
	Invalidate(FALSE); 
} 
 
void CTierazonView::Shift_Step()  
{ 
	if (dim.cx > 640 || dim.cy > 480) 
		return; 
	 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
	// Apply color shift algorithm 
	 
	if (bRedStart) 
	{ 
		if (nRedStart + nRed <= 255) 
		{			 
			nRedStart	+= nRed; 
		} 
		else 
		{						 
			nRedStart	-= nRed; 
			bRedStart = FALSE; 
		} 
	} 
	else 
	{ 
		if (nRedStart - nRed >= 0) 
		{			 
			nRedStart -= nRed; 
		} 
		else 
		{			 
			nRedStart += nRed; 
			bRedStart = TRUE; 
		}			 
	} 
		 
	if (bGrnStart) 
	{ 
		if (nGrnStart + nGrn <= 255) 
		{			 
			nGrnStart	+= nGrn; 
		} 
		else 
		{			 
			nGrnStart	-= nGrn; 
			bGrnStart = FALSE; 
		} 
	} 
	else 
	{ 
		if (nGrnStart - nGrn >= 0) 
		{			 
			nGrnStart -= nGrn; 
		} 
		else 
		{			 
			nGrnStart += nGrn; 
			bGrnStart = TRUE; 
		}			 
	} 
 
	if (bBluStart) 
	{ 
		if (nBluStart + nBlu <= 255) 
		{			 
			nBluStart	+= nBlu; 
		} 
		else 
		{			 
			nBluStart	-= nBlu; 
			bBluStart = FALSE; 
		} 
	} 
	else 
	{ 
		if (nBluStart - nBlu >= 0) 
		{			 
			nBluStart -= nBlu; 
		} 
		else 
		{			 
			nBluStart += nBlu; 
			bBluStart = TRUE; 
		}			 
	} 
			 
	if (!pDoc->m_dib.ApplyDibColors(nRed, nGrn, nBlu, nRedStart,  
														nGrnStart, nBluStart, 
														iIter_Data, rIter_Data, gIter_Data, bIter_Data, 
														nColorOrder, nColorMode)) 
		AfxMessageBox("Color shift error"); 
 
	if (m_pGradView->GetSafeHwnd() != 0) 
	{		 
		m_pGradView->SetDlgItemInt(IDC_START_RED, nRedStart); 
		m_pGradView->SetDlgItemInt(IDC_START_GREEN, nGrnStart); 
		m_pGradView->SetDlgItemInt(IDC_START_BLUE, nBluStart); 
		m_pGradView->UpdateData(TRUE);	 
		m_pGradView->ScrollBarInit(); 
	} 
 
	Invalidate(FALSE); 
} 
 
 
void CTierazonView::OnShiftStart()  
{ 
	if (dim.cx > 640 || dim.cy > 480) 
		return; 
 
	if (!bDraw && uTimer1 == NULL) 
	{ 
		uTimer1 = 1; 
		bGlobalDraw = TRUE; 
		m_pGradView->m_Cycle_Button.SetState(TRUE); 
	} 
	else 
	{ 
		uTimer1 = 0; 
		if (!bDraw) 
			bGlobalDraw = FALSE; 
 
		if (m_pGradView->GetSafeHwnd() != 0) 
		{		 
			m_pGradView->m_Cycle_Button.SetState(FALSE); 
			m_pGradView->SetDlgItemInt(IDC_START_RED, nRedStart); 
			m_pGradView->SetDlgItemInt(IDC_START_GREEN, nGrnStart); 
			m_pGradView->SetDlgItemInt(IDC_START_BLUE, nBluStart); 
 
			if (bForward) 
				m_pGradView->SetDlgItemText(IDC_STATUS, "Forward"); 
			else 
				m_pGradView->SetDlgItemText(IDC_STATUS, "Reverse"); 
 
			m_pGradView->UpdateData(TRUE); 
			m_pGradView->ScrollBarInit(); 
		} 
	}	 
} 
 
void CTierazonView::OnUpdateShiftStart(CCmdUI* pCmdUI)  
{ 
	if (uTimer1 == NULL) 
		pCmdUI->SetCheck(FALSE); 
	else 
		pCmdUI->SetCheck(TRUE);	 
 
	pCmdUI->Enable(bInitialized); 
} 
 
void CTierazonView::OnImageColorparameters()  
{ 
	if (m_pGradView->GetSafeHwnd() == 0) 
	{ 
		// Create the non-modal dialog 
		bGradient = TRUE; 
 
		m_pGradView->Create(); 
 
		// m_pGradView->SetWindowText(ActiveTitle); 
		m_pGradView->SetDlgItemInt(IDC_START_RED, nRedStart); 
		m_pGradView->SetDlgItemInt(IDC_START_GREEN, nGrnStart); 
		m_pGradView->SetDlgItemInt(IDC_START_BLUE, nBluStart); 
 
		m_pGradView->SetDlgItemInt(IDC_INC_RED, nRed); 
		m_pGradView->SetDlgItemInt(IDC_INC_GREEN, nGrn); 
		m_pGradView->SetDlgItemInt(IDC_INC_BLUE, nBlu); 
 
		//m_pGradView->SetDlgItemInt(IDC_MIN, min); 
		//m_pGradView->SetDlgItemInt(IDC_MAX, max); 
 
		m_pGradView->ScrollBarInit(); 
				 
		if (bForward) 
			m_pGradView->SetDlgItemText(IDC_STATUS, "Forward"); 
		else 
			m_pGradView->SetDlgItemText(IDC_STATUS, "Reverse"); 
	}	 
	else 
	{ 
		bGradient = FALSE; 
		m_pGradView->DestroyWindow(); 
	}		 
} 
 
void CTierazonView::OnUpdateImageColorparameters(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck(bGradient);	 
	pCmdUI->Enable(bInitialized); 
} 
 
long CTierazonView::OnApply_GradView(UINT wParam, LONG lParam) 
{ 
	if (dim.cx > 640 || dim.cy > 480) 
		return 0L; 
	 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
	if (wParam == ID_DLGCLOSE) 
	{ 
		bGradient = FALSE; 
		m_pGradView->DestroyWindow(); 
	}	 
	else 
	{		 
		m_pGradView->UpdateData(TRUE); 
 
		nRedStart = m_pGradView->GetDlgItemInt(IDC_START_RED); 
		nGrnStart = m_pGradView->GetDlgItemInt(IDC_START_GREEN); 
		nBluStart = m_pGradView->GetDlgItemInt(IDC_START_BLUE); 
 
		nRed  = m_pGradView->GetDlgItemInt(IDC_INC_RED); 
		nGrn  = m_pGradView->GetDlgItemInt(IDC_INC_GREEN); 
		nBlu  = m_pGradView->GetDlgItemInt(IDC_INC_BLUE); 
 
		//min	  = m_pGradView->GetDlgItemInt(IDC_MIN); 
		//max 	= m_pGradView->GetDlgItemInt(IDC_MAX); 
		 
		if (bForward) 
			m_pGradView->SetDlgItemText(IDC_STATUS, "Forward"); 
		else 
			m_pGradView->SetDlgItemText(IDC_STATUS, "Reverse"); 
 
		if (!pDoc->m_dib.ApplyDibColors(nRed, nGrn, nBlu, nRedStart,  
																nGrnStart, nBluStart, 
																iIter_Data, rIter_Data, gIter_Data, bIter_Data, 
																nColorOrder, nColorMode)) 
			AfxMessageBox("Color shift error"); 
 
		Invalidate(FALSE); 
	} 
	return 0L; 
} 
 
void CTierazonView::OnImageAspectratio()  
{ 
	bGenesisMode ^= TRUE;	 
} 
 
void CTierazonView::OnUpdateImageAspectratio(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck(bGenesisMode);	 
} 
 
void CTierazonView::OnImageClear()  
{ 
	Clearselection(TRUE);	 
} 
 
void CTierazonView::Clearselection(BOOL bValid) 
{ 
	// Get Pointer to Document 
	CTierazonDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
 
	CRMIN_NEW = 0; 
	CIMIN_NEW = 0; 
	CRMAX_NEW = 0; 
	CIMAX_NEW = 0; 
 
	CRMID = ((CRMAX - CRMIN) / 2.0) + CRMIN; 
	CIMID	= ((CIMAX - CIMIN) / 2.0) + CIMIN; 
 
	if (!bLockStart)	 
	{ 
		CRMID_Start = ((CRMAX - CRMIN) / 2.0) + CRMIN; 
		CIMID_Start	= ((CIMAX - CIMIN) / 2.0) + CIMIN; 
	} 
	 
	if (!bLockFinish)	 
	{ 
		CRMID_Finish = ((CRMAX - CRMIN) / 2.0) + CRMIN; 
		CIMID_Finish = ((CIMAX - CIMIN) / 2.0) + CIMIN; 
	} 
 
	pDoc->m_tracker.m_rect.SetRectEmpty();	 
	bTracker = FALSE; 
	 
	if (!bDraw) Invalidate(bValid); 
} 
 
void CTierazonView::OnViewZeroinit()  
{ 
	bZeroInit ^= 1;	 
} 
 
void CTierazonView::OnUpdateViewZeroinit(CCmdUI* pCmdUI)  
{ 
	pCmdUI->SetCheck(bZeroInit);	 
} 
 
void CTierazonView::OnViewOrient()  
{ 
	COrient co; 
 
	co.m_Real = cOrient.real(); 
	co.m_Imag = cOrient.imag(); 
 
	if (co.DoModal() == IDOK) 
	{ 
		cOrient.set_real(co.m_Real); 
		cOrient.set_imag(co.m_Imag); 
		bZeroInit = TRUE; 
 
		bDraw = TRUE; 
		bLaunch = FALSE; 
	}	 
} 
 
void CTierazonView::OnDrawUndo()  
{ 
	nDistortion		= nDistortion_sav; 
	nFilter				= nFilter_sav; 
	nColorMethod	= nColorMethod_sav; 
	nFDOption			= nFDOption_sav; 
	bDraw = TRUE; 
	bLaunch = FALSE; 
} 
 
void CTierazonView::OnUpdateDrawUndo(CCmdUI* pCmdUI)  
{ 
	if (nDistortion_sav == 0) 
		pCmdUI->Enable(FALSE); 
	else 
		pCmdUI->Enable(TRUE); 
} 
 
void CTierazonView::SaveForUndo() 
{ 
	nDistortion_sav		= nDistortion; 
	nFilter_sav				= nFilter; 
	nColorMethod_sav	= nColorMethod; 
	nFDOption_sav			= nFDOption; 
} 
 
void CTierazonView::OnLoadDll()  
{ 
	// DLL initialization 
 
	CFileDialog dlg 
	    (TRUE, 
	   	"*.dll", 
	   	szTemp,           
	     OFN_HIDEREADONLY, 
	    "Fractal DLL Files (*.dll)|*.dll|All Files (*.*)|*.*||"); 
 
  if (dlg.DoModal() == IDOK) 
  	szTemp = dlg.GetPathName();               
	{	 
		Load_DLL(); 
	}		 
} 
 
void CTierazonView::Load_DLL() 
{ 
  FreeLibrary(hLib); 
  hLib = LoadLibrary(szTemp); 
  if (!hLib)  
	{ 
		DWORD err = GetLastError(); 
    wsprintf(buf, "Cannot load dll fails err=0x%lX = %ld", err, err); 
		AfxMessageBox(buf); 
        return; 
  } 
 
  lpfnFormulae = (DLLFUNC) GetProcAddress(hLib, "_formulae"); 
  if (!lpfnFormulae)  
	{ 
		wsprintf(buf, "Error: GetProcAddress(_formulae)"); 
		AfxMessageBox(buf); 
		return; 
  } 
 
  lpfnColorUpdate = (DLLCOLOR) GetProcAddress(hLib, "_color_update"); 
  if (!lpfnColorUpdate)  
	{ 
		wsprintf(buf, "Error: GetProcAddress(_color_update)"); 
		AfxMessageBox(buf); 
		return; 
  } 
 
  lpfnInitialize = (DLLINIT) GetProcAddress(hLib, "_initialize"); 
  if (!lpfnFormulae)  
	{ 
		wsprintf(buf, "Error: GetProcAddress(_initialize)"); 
		AfxMessageBox(buf); 
		return; 
  } 
 
  lpfnFilter = (DLLFILTER) GetProcAddress(hLib, "_filter"); 
  if (!lpfnFilter)  
	{ 
		wsprintf(buf, "Error: GetProcAddress(_filter)"); 
		AfxMessageBox(buf); 
		return; 
  } 
 
  lpfnComplete = (DLLCOMPLETE) GetProcAddress(hLib, "_filter_complete"); 
  if (!lpfnComplete)  
	{ 
		wsprintf(buf, "Error: GetProcAddress(_filter_complete)"); 
		AfxMessageBox(buf); 
		return; 
  } 
} 
 
void CTierazonView::OnColorRegular()  
{ 
	nColorMode = 0;	 
	bDraw = TRUE; 
	bLaunch = FALSE; 
} 
 
void CTierazonView::OnUpdateColorRegular(CCmdUI* pCmdUI)  
{ 
	if (nColorMode == 0) 
		pCmdUI->SetCheck(TRUE); 
	else 
		pCmdUI->SetCheck(FALSE); 
} 
 
void CTierazonView::OnColorLight()  
{ 
	nColorMode = I_SEE_DA_LIGHT;	 
	bDraw = TRUE; 
	bLaunch = FALSE; 
} 
 
void CTierazonView::OnUpdateColorLight(CCmdUI* pCmdUI)  
{ 
	if (nColorMode == I_SEE_DA_LIGHT) 
		pCmdUI->SetCheck(TRUE); 
	else 
		pCmdUI->SetCheck(FALSE); 
}