// // time: Wed Apr 9 15:48:14 1997 // // version: 3.1.1 (format), 3.1.4 (DX Beta) // // // MODULE main // CATEGORY Macros // // comment: This example demonstrates the use of the Switch and Route modules. The Switch allows you to choose whether to show the colored output of RubberSheet, or whether to show the isosurface. The data is the electron density of a water molecule. The Route module allows you to choose whether or not to Export the field before it is rendered. This allows you to avoid having Export run every time the network is run. // comment: // comment: The MapToPlane module is used to create a plane cutting through the data. The plane is colored using the AutoColor module, and then passed to the RubberSheet module. The other possible path passes the data to the Isosurface module, then to the ShowPositions module, which puts a single pixel at each position. The Switch module allows you to choose which of these to show; in either case a box is added using the ShowBox module. // comment: // comment: First choose "Execute on Change" in the Execute menu. Then open the control panel using "Open all Control Panels" in the Windows menu. Experiment with changing which object is shown, and whether or not the field is exported. You can also use the direct interactors in the View menu of the image window. // comment: // comment: This example uses a "dots" rendering approximation if you rotate the object while in execute-on-change mode. You can find this option under "Rendering Options" in the "Options" menu of the Image window. // page assignment: choice order=5, windowed=0, showing=0 // page assignment: image order=6, windowed=0, showing=0 // page assignment: import order=2, windowed=0, showing=1 // page assignment: iso order=4, windowed=0, showing=0 // page assignment: rubbersheet order=3, windowed=0, showing=0 // workspace: width = 445, height = 419 // layout: snap = 0, width = 50, height = 50, align = UL // macro main( ) -> ( ) { // // node Import[1]: x = 98, y = 73, inputs = 6, label = Import // input[1]: defaulting = 0, visible = 1, type = 32, value = "watermolecule" // page group: import // main_Import_1_out_1 = Import( main_Import_1_in_1, main_Import_1_in_2, main_Import_1_in_3, main_Import_1_in_4, main_Import_1_in_5, main_Import_1_in_6 ) [instance: 1, cache: 1]; // // node Transmitter[1]: x = 131, y = 348, inputs = 1, label = data // page group: import // data = main_Import_1_out_1; // // node Receiver[2]: x = 54, y = 17, inputs = 1, label = data // page group: rubbersheet // main_Receiver_2_out_1[cache: 0] = data; // // node MapToPlane[1]: x = 38, y = 98, inputs = 3, label = MapToPlane // input[2]: defaulting = 0, visible = 1, type = 8, value = [1 .21 -1] // input[3]: defaulting = 0, visible = 1, type = 8, value = [0, 1, 1] // page group: rubbersheet // main_MapToPlane_1_out_1 = MapToPlane( main_Receiver_2_out_1, main_MapToPlane_1_in_2, main_MapToPlane_1_in_3 ) [instance: 1, cache: 1]; // // node AutoColor[1]: x = 20, y = 184, inputs = 10, label = AutoColor // page group: rubbersheet // main_AutoColor_1_out_1, main_AutoColor_1_out_2 = AutoColor( main_MapToPlane_1_out_1, main_AutoColor_1_in_2, main_AutoColor_1_in_3, main_AutoColor_1_in_4, main_AutoColor_1_in_5, main_AutoColor_1_in_6, main_AutoColor_1_in_7, main_AutoColor_1_in_8, main_AutoColor_1_in_9, main_AutoColor_1_in_10 ) [instance: 1, cache: 1]; // // node Selector[1]: x = 15, y = 93, inputs = 7, label = Selector // input[1]: defaulting = 0, visible = 0, type = 32, value = "Selector_1" // input[2]: defaulting = 0, visible = 0, type = 32, value = "isosurface" // input[3]: defaulting = 0, visible = 0, type = 29, value = 2 // input[4]: defaulting = 1, visible = 1, type = 16777248, value = { "colored rubbersheet" "isosurface" } // input[5]: defaulting = 1, visible = 0, type = 16777245, value = { 1 2 } // input[6]: defaulting = 1, visible = 0, type = 3, value = 0 // output[1]: visible = 1, type = 29, value = 2 // output[2]: visible = 1, type = 32, value = "isosurface" // page group: choice // // // node Caption[1]: x = 61, y = 286, inputs = 9, label = Caption // page group: choice // main_Caption_1_out_1 = Caption( main_Selector_1_out_2, main_Caption_1_in_2, main_Caption_1_in_3, main_Caption_1_in_4, main_Caption_1_in_5, main_Caption_1_in_6, main_Caption_1_in_7, main_Caption_1_in_8, main_Caption_1_in_9 ) [instance: 1, cache: 1]; // // node Transmitter[5]: x = 35, y = 456, inputs = 1, label = choice_caption // page group: choice // choice_caption = main_Caption_1_out_1; // // node Receiver[8]: x = 34, y = 367, inputs = 1, label = choice_caption // page group: image // main_Receiver_8_out_1[cache: 0] = choice_caption; // // node RubberSheet[1]: x = 38, y = 260, inputs = 4, label = RubberSheet // page group: rubbersheet // main_RubberSheet_1_out_1 = RubberSheet( main_AutoColor_1_out_1, main_RubberSheet_1_in_2, main_RubberSheet_1_in_3, main_RubberSheet_1_in_4 ) [instance: 1, cache: 1]; // // node Transmitter[2]: x = 81, y = 367, inputs = 1, label = rubbersheet // page group: rubbersheet // rubbersheet = main_RubberSheet_1_out_1; // // node Receiver[4]: x = 121, y = 87, inputs = 1, label = rubbersheet // page group: choice // main_Receiver_4_out_1[cache: 0] = rubbersheet; // // node Receiver[3]: x = 68, y = 49, inputs = 1, label = data // page group: iso // main_Receiver_3_out_1[cache: 0] = data; // // node Isosurface[1]: x = 85, y = 157, inputs = 6, label = Isosurface // page group: iso // main_Isosurface_1_out_1 = Isosurface( main_Receiver_3_out_1, main_Isosurface_1_in_2, main_Isosurface_1_in_3, main_Isosurface_1_in_4, main_Isosurface_1_in_5, main_Isosurface_1_in_6 ) [instance: 1, cache: 1]; // // node ShowPositions[1]: x = 58, y = 260, inputs = 2, label = ShowPositions // page group: iso // main_ShowPositions_1_out_1 = ShowPositions( main_Isosurface_1_out_1, main_ShowPositions_1_in_2 ) [instance: 1, cache: 1]; // // node Transmitter[3]: x = 66, y = 354, inputs = 1, label = iso_positions // page group: iso // iso_positions = main_ShowPositions_1_out_1; // // node Receiver[6]: x = 237, y = 92, inputs = 1, label = iso_positions // page group: choice // main_Receiver_6_out_1[cache: 0] = iso_positions; // // node Switch[1]: x = 157, y = 245, inputs = 3, label = Switch // page group: choice // main_Switch_1_out_1 = Switch( main_Selector_1_out_1, main_Receiver_4_out_1, main_Receiver_6_out_1 ) [instance: 1, cache: 1]; // // node Transmitter[4]: x = 191, y = 460, inputs = 1, label = realization // page group: choice // realization = main_Switch_1_out_1; // // node Receiver[7]: x = 155, y = 365, inputs = 1, label = realization // page group: image // main_Receiver_7_out_1[cache: 0] = realization; // // node ShowBox[1]: x = 213, y = 211, inputs = 1, label = ShowBox // page group: import // main_ShowBox_1_out_1, main_ShowBox_1_out_2 = ShowBox( main_Import_1_out_1 ) [instance: 1, cache: 1]; // // node Transmitter[6]: x = 237, y = 357, inputs = 1, label = box // page group: import // box = main_ShowBox_1_out_1; // // node Receiver[9]: x = 259, y = 375, inputs = 1, label = box // page group: image // main_Receiver_9_out_1[cache: 0] = box; // // node Collect[1]: x = 143, y = 536, inputs = 3, label = Collect // page group: image // main_Collect_1_out_1 = Collect( main_Receiver_8_out_1, main_Receiver_7_out_1, main_Receiver_9_out_1 ) [instance: 1, cache: 1]; // // node Reset[1]: x = 33, y = 636, inputs = 6, label = Reset // input[1]: defaulting = 0, visible = 0, type = 32, value = "main_Reset_1_out_1" // input[2]: defaulting = 0, visible = 0, type = 29, value = 0 // input[3]: defaulting = 0, visible = 0, type = 3, value = 0 // input[4]: defaulting = 1, visible = 0, type = 29, value = 1 // input[5]: defaulting = 1, visible = 0, type = 29, value = 0 // output[1]: visible = 1, type = 29, value = 0 // page group: image // toggle : 0 // // // node Route[1]: x = 153, y = 694, inputs = 2, outputs = 2, label = Route // page group: image // main_Route_1_out_1, main_Route_1_out_2 = Route( main_Reset_1_out_1, main_Collect_1_out_1 ) [instance: 1, cache: 1]; // // node Export[1]: x = 78, y = 790, inputs = 3, label = Export // input[2]: defaulting = 0, visible = 1, type = 32, value = "exported_field" // page group: image // Export( main_Route_1_out_1, main_Export_1_in_2, main_Export_1_in_3 ) [instance: 1, cache: 1]; // // node Image[2]: x = 285, y = 786, inputs = 48, label = Image // input[1]: defaulting = 0, visible = 0, type = 67108863, value = "Image_2" // input[4]: defaulting = 0, visible = 0, type = 1, value = 1 // input[5]: defaulting = 0, visible = 0, type = 8, value = [0.95 -0.05 -1.04665] // input[6]: defaulting = 0, visible = 0, type = 8, value = [-3.57535 3.56653 16.4251] // input[7]: defaulting = 0, visible = 0, type = 5, value = 9.86433 // input[8]: defaulting = 0, visible = 0, type = 1, value = 640 // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.75 // input[10]: defaulting = 0, visible = 0, type = 8, value = [0.0237873 0.98017 -0.196727] // input[11]: defaulting = 1, visible = 0, type = 5, value = 30.0 // input[12]: defaulting = 0, visible = 0, type = 1, value = 0 // input[14]: defaulting = 0, visible = 0, type = 1, value = 1 // input[15]: defaulting = 1, visible = 0, type = 32, value = "none" // input[16]: defaulting = 1, visible = 0, type = 32, value = "none" // input[17]: defaulting = 1, visible = 0, type = 1, value = 1 // input[18]: defaulting = 1, visible = 0, type = 1, value = 1 // input[19]: defaulting = 0, visible = 0, type = 3, value = 0 // input[29]: defaulting = 1, visible = 0, type = 3, value = 0 // page group: image // depth: value = 24 // window: position = (0.4016,0.0908), size = 0.5109x0.5117 // internal caching: 1 // main_Image_2_out_1, main_Image_2_out_2, main_Image_2_out_3 = Image( main_Image_2_in_1, main_Collect_1_out_1, main_Image_2_in_3, main_Image_2_in_4, main_Image_2_in_5, main_Image_2_in_6, main_Image_2_in_7, main_Image_2_in_8, main_Image_2_in_9, main_Image_2_in_10, main_Image_2_in_11, main_Image_2_in_12, main_Image_2_in_13, main_Image_2_in_14, main_Image_2_in_15, main_Image_2_in_16, main_Image_2_in_17, main_Image_2_in_18, main_Image_2_in_19, main_Image_2_in_20, main_Image_2_in_21, main_Image_2_in_22, main_Image_2_in_23, main_Image_2_in_24, main_Image_2_in_25, main_Image_2_in_26, main_Image_2_in_27, main_Image_2_in_28, main_Image_2_in_29, main_Image_2_in_30, main_Image_2_in_31, main_Image_2_in_32, main_Image_2_in_33, main_Image_2_in_34, main_Image_2_in_35, main_Image_2_in_36, main_Image_2_in_37, main_Image_2_in_38, main_Image_2_in_39, main_Image_2_in_40, main_Image_2_in_41, main_Image_2_in_42, main_Image_2_in_43, main_Image_2_in_44, main_Image_2_in_45, main_Image_2_in_46, main_Image_2_in_47, main_Image_2_in_48 ) [instance: 2, cache: 1]; // // decorator Annotate pos=(132,43) size=453x44 style(Label), value = // annotation user_begin: 86 // annotation user: This page takes a maptoplane of the data, colors it, and deforms // annotation user: it using RubberSheet. // annotation user_end: // page group: rubbersheet // // decorator Annotate pos=(140,62) size=475x44 style(Label), value = // annotation user_begin: 96 // annotation user: This page constructs an isosurface of the data, then shows just the // annotation user: positions of the isosurface. // annotation user_end: // page group: iso // // decorator Annotate pos=(245,119) size=200x28 style(Label), value = // annotation user_begin: 27 // annotation user: This page imports the data. // annotation user_end: // page group: import // // decorator Annotate pos=(245,285) size=375x44 style(Label), value = // annotation user_begin: 97 // annotation user: This page allows the user to choose whether to view // annotation user: the rubbersheet or the isosurface positions. // annotation user_end: // page group: choice // // decorator Annotate pos=(44,283) size=470x60 style(Label), value = // annotation user_begin: 194 // annotation user: This page displays the chosen realization along with a caption and // annotation user: the bounding box of the data. A reset interactor allows the user to // annotation user: choose whether or not to Export the field before rendering. // annotation user_end: // page group: image // network: end of macro body CacheScene("Image_2", main_Image_2_out_1, main_Image_2_out_2); } main_Import_1_in_1 = "watermolecule"; main_Import_1_in_2 = NULL; main_Import_1_in_3 = NULL; main_Import_1_in_4 = NULL; main_Import_1_in_5 = NULL; main_Import_1_in_6 = NULL; main_Import_1_out_1 = NULL; main_Transmitter_1_out_1 = NULL; main_Receiver_2_out_1 = NULL; main_MapToPlane_1_in_2 = [1 .21 -1]; main_MapToPlane_1_in_3 = [0, 1, 1]; main_MapToPlane_1_out_1 = NULL; main_AutoColor_1_in_2 = NULL; main_AutoColor_1_in_3 = NULL; main_AutoColor_1_in_4 = NULL; main_AutoColor_1_in_5 = NULL; main_AutoColor_1_in_6 = NULL; main_AutoColor_1_in_7 = NULL; main_AutoColor_1_in_8 = NULL; main_AutoColor_1_in_9 = NULL; main_AutoColor_1_in_10 = NULL; main_AutoColor_1_out_1 = NULL; main_Selector_1_in_1 = "Selector_1"; main_Selector_1_in_2 = "isosurface" ; main_Selector_1_in_3 = 2 ; main_Selector_1_in_4 = NULL; main_Selector_1_in_5 = NULL; main_Selector_1_in_6 = NULL; main_Selector_1_in_7 = NULL; main_Selector_1_out_1 = 2 ; main_Selector_1_out_2 = "isosurface" ; main_Caption_1_in_2 = NULL; main_Caption_1_in_3 = NULL; main_Caption_1_in_4 = NULL; main_Caption_1_in_5 = NULL; main_Caption_1_in_6 = NULL; main_Caption_1_in_7 = NULL; main_Caption_1_in_8 = NULL; main_Caption_1_in_9 = NULL; main_Caption_1_out_1 = NULL; main_Transmitter_5_out_1 = NULL; main_Receiver_8_out_1 = NULL; main_RubberSheet_1_in_2 = NULL; main_RubberSheet_1_in_3 = NULL; main_RubberSheet_1_in_4 = NULL; main_RubberSheet_1_out_1 = NULL; main_Transmitter_2_out_1 = NULL; main_Receiver_4_out_1 = NULL; main_Receiver_3_out_1 = NULL; main_Isosurface_1_in_2 = NULL; main_Isosurface_1_in_3 = NULL; main_Isosurface_1_in_4 = NULL; main_Isosurface_1_in_5 = NULL; main_Isosurface_1_in_6 = NULL; main_Isosurface_1_out_1 = NULL; main_ShowPositions_1_in_2 = NULL; main_ShowPositions_1_out_1 = NULL; main_Transmitter_3_out_1 = NULL; main_Receiver_6_out_1 = NULL; main_Switch_1_out_1 = NULL; main_Transmitter_4_out_1 = NULL; main_Receiver_7_out_1 = NULL; main_ShowBox_1_out_1 = NULL; main_Transmitter_6_out_1 = NULL; main_Receiver_9_out_1 = NULL; main_Collect_1_out_1 = NULL; main_Reset_1_in_1 = "main_Reset_1_out_1"; main_Reset_1_in_2 = 0; main_Reset_1_in_3 = 0; main_Reset_1_in_4 = NULL; main_Reset_1_in_5 = NULL; main_Reset_1_in_6 = NULL; main_Reset_1_out_1 = 0; main_Route_1_out_1 = NULL; main_Export_1_in_2 = "exported_field"; main_Export_1_in_3 = NULL; macro Image( id, object, where, useVector, to, from, width, resolution, aspect, up, viewAngle, perspective, options, buttonState = 1, buttonUpApprox = "none", buttonDownApprox = "none", buttonUpDensity = 1, buttonDownDensity = 1, renderMode = 0, defaultCamera, reset, backgroundColor, throttle, RECenable = 0, RECfile, RECformat, RECresolution, RECaspect, AAenable = 0, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, interactionMode, title, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels) -> ( object, camera, where) { ImageMessage( id, backgroundColor, throttle, RECenable, RECfile, RECformat, RECresolution, RECaspect, AAenable, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels, interactionMode, title, renderMode, buttonUpApprox, buttonDownApprox, buttonUpDensity, buttonDownDensity) [instance: 1, cache: 1]; autoCamera = AutoCamera( object, "front", object, resolution, aspect, [0,1,0], perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; realCamera = Camera( to, from, width, resolution, aspect, up, perspective, viewAngle, backgroundColor) [instance: 1, cache: 1]; coloredDefaultCamera = UpdateCamera(defaultCamera, background=backgroundColor) [instance: 1, cache: 1]; nullDefaultCamera = Inquire(defaultCamera, "is null + 1") [instance: 1, cache: 1]; resetCamera = Switch( nullDefaultCamera, coloredDefaultCamera, autoCamera) [instance: 1, cache: 1]; resetNull = Inquire( reset, "is null + 1") [instance: 2, cache: 1]; reset = Switch( resetNull, reset, 0) [instance: 2, cache: 1]; whichCamera = Compute( "($0 != 0 || $1 == 0) ? 1 : 2", reset, useVector) [instance: 1, cache: 1]; camera = Switch( whichCamera, resetCamera, realCamera) [instance: 3, cache: 1]; AAobject = AutoAxes( object, camera, AAlabels, AAticks, AAcorners, AAframe, AAadjust, AAcursor, AAgrid, AAcolors, AAannotation, AAlabelscale, AAfont, AAxTickLocs, AAyTickLocs, AAzTickLocs, AAxTickLabels, AAyTickLabels, AAzTickLabels) [instance: 1, cache: 1]; switchAAenable = Compute("$0+1", AAenable) [instance: 2, cache: 1]; object = Switch( switchAAenable, object, AAobject) [instance:4, cache: 1]; SWapproximation_options = Switch( buttonState, buttonUpApprox, buttonDownApprox) [instance: 5, cache: 1]; SWdensity_options = Switch( buttonState, buttonUpDensity, buttonDownDensity) [instance: 6, cache: 1]; HWapproximation_options = Format( "%s,%s", buttonDownApprox, buttonUpApprox) [instance: 1, cache: 1]; HWdensity_options = Format( "%d,%d", buttonDownDensity, buttonUpDensity) [instance: 2, cache: 1]; switchRenderMode = Compute( "$0+1", renderMode) [instance: 3, cache: 1]; approximation_options = Switch( switchRenderMode, SWapproximation_options, HWapproximation_options) [instance: 7, cache: 1]; density_options = Switch( switchRenderMode, SWdensity_options, HWdensity_options) [instance: 8, cache: 1]; renderModeString = Switch( switchRenderMode, "software", "hardware")[instance: 9, cache: 1]; object_tag = Inquire( object, "object tag")[instance: 3, cache: 1]; annoted_object = Options( object, "send boxes", 0, "cache", 1, "object tag", object_tag, "ddcamera", whichCamera, "rendering approximation", approximation_options, "render every", density_options, "button state", buttonState, "rendering mode", renderModeString) [instance: 1, cache: 1]; RECresNull = Inquire( RECresolution, "is null + 1") [instance: 4, cache: 1]; ImageResolution = Inquire( camera, "camera resolution") [instance: 5, cache: 1]; RECresolution = Switch( RECresNull, RECresolution, ImageResolution) [instance: 10, cache: 1]; RECaspectNull = Inquire( RECaspect, "is null + 1") [instance: 6, cache: 1]; ImageAspect = Inquire( camera, "camera aspect") [instance: 7, cache: 1]; RECaspect = Switch( RECaspectNull, RECaspect, ImageAspect) [instance: 11, cache: 1]; switchRECenable = Compute( "$0 == 0 ? 1 : (($2 == $3) && ($4 == $5)) ? ($1 == 1 ? 2 : 3) : 4", RECenable, switchRenderMode, RECresolution, ImageResolution, RECaspect, ImageAspect) [instance: 4, cache: 1]; NoRECobject, RECNoRerenderObject, RECNoRerHW, RECRerenderObject = Route(switchRECenable, annoted_object); Display( NoRECobject, camera, where, throttle) [instance: 1, cache: 1]; image = Render( RECNoRerenderObject, camera) [instance: 1, cache: 1]; Display( image, NULL, where, throttle) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 1, cache: 1]; rec_where = Display( RECNoRerHW, camera, where, throttle) [instance: 1, cache: 0]; rec_image = ReadImageWindow( rec_where) [instance: 1, cache: 1]; WriteImage( rec_image, RECfile, RECformat) [instance: 1, cache: 1]; RECupdateCamera = UpdateCamera( camera, resolution=RECresolution, aspect=RECaspect) [instance: 2, cache: 1]; Display( RECRerenderObject, camera, where, throttle) [instance: 1, cache: 1]; RECRerenderObject = ScaleScreen( RECRerenderObject, NULL, RECresolution, camera) [instance: 1, cache: 1]; image = Render( RECRerenderObject, RECupdateCamera) [instance: 2, cache: 1]; WriteImage( image, RECfile, RECformat) [instance: 2, cache: 1]; } main_Image_2_in_1 = "Image_2"; main_Image_2_in_3 = "X24,,"; main_Image_2_in_4 = 1; main_Image_2_in_5 = [0.95 -0.05 -1.04665]; main_Image_2_in_6 = [-3.57535 3.56653 16.4251]; main_Image_2_in_7 = 9.86433; main_Image_2_in_8 = 640; main_Image_2_in_9 = 0.75; main_Image_2_in_10 = [0.0237873 0.98017 -0.196727]; main_Image_2_in_11 = NULL; main_Image_2_in_12 = 0; main_Image_2_in_13 = NULL; main_Image_2_in_14 = 1; main_Image_2_in_15 = NULL; main_Image_2_in_16 = NULL; main_Image_2_in_17 = NULL; main_Image_2_in_18 = NULL; main_Image_2_in_19 = 0; main_Image_2_in_20 = NULL; main_Image_2_in_21 = NULL; main_Image_2_in_22 = NULL; main_Image_2_in_23 = NULL; main_Image_2_in_25 = NULL; main_Image_2_in_26 = NULL; main_Image_2_in_27 = NULL; main_Image_2_in_28 = NULL; main_Image_2_in_29 = NULL; main_Image_2_in_30 = NULL; main_Image_2_in_31 = NULL; main_Image_2_in_32 = NULL; main_Image_2_in_33 = NULL; main_Image_2_in_34 = NULL; main_Image_2_in_35 = NULL; main_Image_2_in_36 = NULL; main_Image_2_in_37 = NULL; main_Image_2_in_38 = NULL; main_Image_2_in_39 = NULL; main_Image_2_in_40 = NULL; main_Image_2_in_41 = NULL; main_Image_2_in_42 = NULL; main_Image_2_in_43 = NULL; main_Image_2_in_44 = NULL; main_Image_2_in_45 = NULL; main_Image_2_in_46 = NULL; main_Image_2_in_47 = NULL; main_Image_2_in_48 = NULL; Executive("product version 3 1 4"); $sync main();