Index: p/frams/Makefile-GDK
===================================================================
--- /cpp/frams/Makefile-GDK	(revision 287)
+++ 	(revision )
@@ -1,78 +1,0 @@
-#
-# Framsticks GDK makefile
-#
-
-include frams/Makefile-GDK-files
-
-GDK_TESTS=genoconv_test gdk_test geno_test genooper_test genooper_test_fTest neuro_test loader_test serial_test multiline_f0_test f0_variants_test full_props shapeconvert part_shapes neuro_layout_test geometry_apices_test geometry_info_test geometry_surface_test geometry_volume_test
-
-gdk_tests: $(GDK_TESTS)
-
-GDK_BUILD_CONFIG= -include frams/config/gdk_build_config.h
-CXXFLAGS= -I$(CURDIR) -std=gnu++11 -DLINUX $(GDK_BUILD_CONFIG) -Wno-parentheses -Wno-overloaded-virtual -Wno-format -g
-
-#############################################
-
-gdk_test: $(GDK_TEST_OBJS)
-	$(CXX) $(GDK_TEST_OBJS) $(LDFLAGS) -o $@
-
-genoconv_test: $(GENOCONV_TEST_OBJS)
-	$(CXX) $(GENOCONV_TEST_OBJS) $(LDFLAGS) -o $@
-
-geno_test: $(GENO_TEST_OBJS)
-	$(CXX) $(GENO_TEST_OBJS) $(LDFLAGS) -o $@
-
-genooper_test: $(GENOOPER_TEST_OBJS)
-	$(CXX) $(GENOOPER_TEST_OBJS) $(LDFLAGS) -o $@
-
-genooper_test_fTest: $(GENOOPER_TEST_FTEST_OBJS)
-	$(CXX) $(GENOOPER_TEST_FTEST_OBJS) $(LDFLAGS) -o $@
-
-neuro_test: $(NEURO_TEST_OBJS)
-	$(CXX) $(NEURO_TEST_OBJS) $(LDFLAGS) -o $@
-
-loader_test: $(LOADER_TEST_OBJS)
-	$(CXX) $(LOADER_TEST_OBJS) $(LDFLAGS) -o $@
-
-serial_test: $(SERIAL_TEST_OBJS)
-	$(CXX) $(SERIAL_TEST_OBJS) $(LDFLAGS) -o $@
-
-multiline_f0_test: $(MULTILINE_F0_OBJS)
-	$(CXX) $(MULTILINE_F0_OBJS) $(LDFLAGS) -o $@
-
-f0_variants_test: $(F0_VARIANTS_OBJS)
-	$(CXX) $(F0_VARIANTS_OBJS) $(LDFLAGS) -o $@
-
-full_props: $(FULL_PROPS_OBJS)
-	$(CXX) $(FULL_PROPS_OBJS) $(LDFLAGS) -o $@
-
-shapeconvert: $(SHAPECONVERT_OBJS)
-	$(CXX) $(SHAPECONVERT_OBJS) $(LDFLAGS) -o $@
-
-part_shapes: $(PART_SHAPES_OBJS)
-	$(CXX) $(PART_SHAPES_OBJS) $(LDFLAGS) -o $@
-
-neuro_layout_test: $(NEURO_LAYOUT_TEST_OBJS)
-	$(CXX) $(NEURO_LAYOUT_TEST_OBJS) $(LDFLAGS) -o $@
-
-geometry_apices_test: $(GEOMETRY_APICES_TEST_OBJS)
-	$(CXX) $(GEOMETRY_APICES_TEST_OBJS) $(LDFLAGS) -o $@
-
-geometry_info_test: $(GEOMETRY_INFO_TEST_OBJS)
-	$(CXX) $(GEOMETRY_INFO_TEST_OBJS) $(LDFLAGS) -o $@
-
-geometry_surface_test: $(GEOMETRY_SURFACE_TEST_OBJS)
-	$(CXX) $(GEOMETRY_SURFACE_TEST_OBJS) $(LDFLAGS) -o $@
-
-geometry_volume_test: $(GEOMETRY_VOLUME_TEST_OBJS)
-	$(CXX) $(GEOMETRY_VOLUME_TEST_OBJS) $(LDFLAGS) -o $@
-
-
-#############################################
-
-ALL_OBJS=$(GDK_TEST_OBJS) $(GENOCONV_TEST_OBJS) $(GENO_TEST_OBJS) $(NEURO_TEST_OBJS) $(LOADER_TEST_OBJS) $(SERIAL_TEST_OBJS) $(MULTILINE_F0_OBJS) $(F0_VARIANTS_OBJS) $(FULL_PROPS_OBJS) $(PART_SHAPES_OBJS) $(NEURO_LAYOUT_TEST_OBJS) $(GENOOPER_TEST_OBJS) $(GEOMETRY_APICES_TEST_OBJS) $(GEOMETRY_INFO_TEST_OBJS) $(GEOMETRY_SURFACE_TEST_OBJS) $(GEOMETRY_VOLUME_TEST_OBJS)
-
-include frams/Makefile-maintain
-
-full_clean: clean
-	rm -f $(GDK_TESTS)
Index: p/frams/Makefile-GDK-files
===================================================================
--- /cpp/frams/Makefile-GDK-files	(revision 287)
+++ 	(revision )
@@ -1,63 +1,0 @@
-#### modules
-
-# ALL_DIRS is later expanded by the shell, no spaces/newlines allowed, or it breaks
-ALL_DIRS={common,frams,frams/canvas,frams/config,frams/errmgr,frams/genetics,frams/genetics/f0,frams/genetics/f1,frams/genetics/f2,frams/genetics/f3,frams/genetics/f4,frams/genetics/f5,frams/genetics/f6,frams/genetics/f7,frams/genetics/f8,frams/genetics/f9,frams/genetics/fF,frams/genetics/fT,frams/model,frams/neuro,frams/neuro/impl,frams/param,frams/test,frams/util,frams/vm/classes,frams/virtfile,frams/_demos,frams/model/geometry,frams/_demos/geometry}
-
-GENMANF4=frams/genetics/f4/oper_f4.o
-GENMANF9=frams/genetics/f9/oper_f9.o
-GENMANFF=frams/genetics/fF/oper_fF.o
-GENMANFT=frams/genetics/fT/oper_fTest.o
-
-CONVF1=frams/genetics/f1/conv_f1.o
-CONVF4=frams/genetics/f4/conv_f4.o frams/genetics/f4/f4_general.o
-CONVF9=frams/genetics/f9/conv_f9.o
-CONVFF=frams/genetics/fF/conv_fF.o frams/genetics/fF/fF_genotype.o frams/genetics/fF/fF_chamber3d.o
-
-GENOCONV_GDK_OBJS=frams/genetics/defgenoconv.o frams/vm/classes/genoobj.o frams/model/autoname.o $(CONVF1) $(CONVF4) $(CONVF9) $(CONVFF)
-GENMAN_GDK_OBJS=$(GENMAN_COMMON_OBJS) $(GENMANF4) $(GENMANF9) $(GENMANFF) $(GENMANFT)
-
-GENMAN_COMMON_OBJS=frams/genetics/genman.o frams/param/mutableparam.o frams/param/mutparamlist.o frams/neuro/geneticneuroparam.o frams/neuro/neurolibparam.o
-
-GDK_OBJS=frams/util/list.o frams/util/advlist.o frams/param/param.o frams/util/sstring.o frams/util/sstringutils.o frams/util/3d.o frams/vm/classes/3dobject.o frams/model/model.o frams/model/modelparts.o frams/neuro/neurolibrary.o frams/genetics/geno.o frams/genetics/genoconv.o frams/util/extvalue.o frams/vm/classes/collectionobj.o frams/util/hashtable.o common/framsg.o common/stl-util.o common/nonstd_stdio.o frams/util/callbacks.o frams/param/syntparam.o frams/util/multirange.o frams/util/multimap.o frams/param/paramtabobj.o frams/errmgr/errmanager.o frams/param/paramobj.o frams/genetics/oper_fx.o common/nonstd_math.o frams/errmgr/stderrors.o common/Convert.o frams/util/rndutil.o
-
-GEOMETRY_OBJS=frams/model/geometry/meshbuilder.o frams/model/geometry/modelgeometryinfo.o frams/model/geometry/geometryutils.o
-
-#### gdk_tests
-
-GDK_TEST_OBJS= frams/_demos/gdk_test.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o  $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS)
-
-MULTILINE_F0_OBJS=frams/_demos/multiline_f0_test.o frams/virtfile/stringfile.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS)
-
-F0_VARIANTS_OBJS=frams/_demos/f0_variants_test.o frams/virtfile/stringfile.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o   $(GDK_OBJS) $(GENOCONV_GDK_OBJS)
-
-LOADER_TEST_OBJS=frams/_demos/genotypeloader.o frams/_demos/loader_test.o frams/virtfile/virtfile.o frams/param/multiparamload.o frams/virtfile/stdiofile-autoinit.o frams/virtfile/stdiofile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS)
-
-GENOCONV_TEST_OBJS= frams/_demos/genoconv_test.o frams/_demos/printconvmap.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o  $(GDK_OBJS) $(GENOCONV_GDK_OBJS)
-
-GENO_TEST_OBJS= frams/_demos/geno_test.o frams/virtfile/virtfile.o   $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS)
-
-GENOOPER_TEST_OBJS=frams/_demos/genooper_test.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS)
-
-GENOOPER_TEST_FTEST_OBJS=frams/_demos/genooper_test_fTest.o frams/virtfile/virtfile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS) $(GENMAN_FT)
-
-NEURO_TEST_OBJS= frams/_demos/neuro_test.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o \
-	frams/neuro/neuroimpl.o frams/neuro/neurofactory.o frams/neuro/impl/neuroimpl-simple.o frams/neuro/impl/neuroimpl-channels.o \
-	frams/neuro/impl/neuroimpl-fuzzy.o frams/neuro/impl/neuroimpl-fuzzy-f0.o  $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS)
-
-FULL_PROPS_OBJS= frams/_demos/full_props.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o  frams/virtfile/stdiofile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS)
-
-SHAPECONVERT_OBJS= frams/_demos/shapeconvert.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o  frams/virtfile/stdiofile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS)
-
-SERIAL_TEST_OBJS= frams/_demos/serial_test.o frams/virtfile/virtfile.o  $(GDK_OBJS) $(GENOCONV_GDK_OBJS)
-
-PART_SHAPES_OBJS= frams/_demos/part_shapes.o frams/virtfile/virtfile.o  $(GDK_OBJS) $(GENOCONV_GDK_OBJS)
-
-NEURO_LAYOUT_TEST_OBJS= frams/_demos/neuro_layout_test.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GENMAN_GDK_OBJS) frams/canvas/nn_layout_model.o frams/canvas/nn_simple_layout.o frams/canvas/nn_smart_layout.o
-
-GEOMETRY_INFO_TEST_OBJS=frams/_demos/geometry/info_test.o frams/_demos/geometry/geometrytestutils.o frams/_demos/genotypeloader.o frams/virtfile/virtfile.o frams/param/multiparamload.o frams/virtfile/stdiofile-autoinit.o frams/virtfile/stdiofile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GEOMETRY_OBJS)
-
-GEOMETRY_SURFACE_TEST_OBJS=frams/_demos/geometry/surface_test.o frams/_demos/geometry/geometrytestutils.o frams/_demos/genotypeloader.o frams/virtfile/virtfile.o frams/param/multiparamload.o frams/virtfile/stdiofile-autoinit.o frams/virtfile/stdiofile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GEOMETRY_OBJS)
-
-GEOMETRY_VOLUME_TEST_OBJS=frams/_demos/geometry/volume_test.o frams/_demos/geometry/geometrytestutils.o frams/_demos/genotypeloader.o frams/virtfile/virtfile.o frams/param/multiparamload.o frams/virtfile/stdiofile-autoinit.o frams/virtfile/stdiofile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GEOMETRY_OBJS)
-
-GEOMETRY_APICES_TEST_OBJS=frams/_demos/geometry/apices_test.o frams/_demos/geometry/geometrytestutils.o frams/_demos/genotypeloader.o frams/virtfile/virtfile.o frams/param/multiparamload.o frams/virtfile/stdiofile-autoinit.o frams/virtfile/stdiofile.o $(GDK_OBJS) $(GENOCONV_GDK_OBJS) $(GEOMETRY_OBJS)
Index: /cpp/frams/Makefile-SDK
===================================================================
--- /cpp/frams/Makefile-SDK	(revision 288)
+++ /cpp/frams/Makefile-SDK	(revision 288)
@@ -0,0 +1,78 @@
+#
+# Framsticks SDK makefile
+#
+
+include frams/Makefile-SDK-files
+
+SDK_TESTS=genoconv_test genomanipulation geno_test genooper_test genooper_test_fTest neuro_test loader_test serial_test multiline_f0_test f0_variants_test full_props shapeconvert part_shapes neuro_layout_test geometry_apices_test geometry_info_test geometry_surface_test geometry_volume_test
+
+sdk_tests: $(SDK_TESTS)
+
+SDK_BUILD_CONFIG= -include frams/config/sdk_build_config.h
+CXXFLAGS= -I$(CURDIR) -std=gnu++11 -DLINUX $(SDK_BUILD_CONFIG) -Wno-parentheses -Wno-overloaded-virtual -Wno-format -g
+
+#############################################
+
+genomanipulation: $(GENOMANIPULATION_OBJS)
+	$(CXX) $(GENOMANIPULATION_OBJS) $(LDFLAGS) -o $@
+
+genoconv_test: $(GENOCONV_TEST_OBJS)
+	$(CXX) $(GENOCONV_TEST_OBJS) $(LDFLAGS) -o $@
+
+geno_test: $(GENO_TEST_OBJS)
+	$(CXX) $(GENO_TEST_OBJS) $(LDFLAGS) -o $@
+
+genooper_test: $(GENOOPER_TEST_OBJS)
+	$(CXX) $(GENOOPER_TEST_OBJS) $(LDFLAGS) -o $@
+
+genooper_test_fTest: $(GENOOPER_TEST_FTEST_OBJS)
+	$(CXX) $(GENOOPER_TEST_FTEST_OBJS) $(LDFLAGS) -o $@
+
+neuro_test: $(NEURO_TEST_OBJS)
+	$(CXX) $(NEURO_TEST_OBJS) $(LDFLAGS) -o $@
+
+loader_test: $(LOADER_TEST_OBJS)
+	$(CXX) $(LOADER_TEST_OBJS) $(LDFLAGS) -o $@
+
+serial_test: $(SERIAL_TEST_OBJS)
+	$(CXX) $(SERIAL_TEST_OBJS) $(LDFLAGS) -o $@
+
+multiline_f0_test: $(MULTILINE_F0_OBJS)
+	$(CXX) $(MULTILINE_F0_OBJS) $(LDFLAGS) -o $@
+
+f0_variants_test: $(F0_VARIANTS_OBJS)
+	$(CXX) $(F0_VARIANTS_OBJS) $(LDFLAGS) -o $@
+
+full_props: $(FULL_PROPS_OBJS)
+	$(CXX) $(FULL_PROPS_OBJS) $(LDFLAGS) -o $@
+
+shapeconvert: $(SHAPECONVERT_OBJS)
+	$(CXX) $(SHAPECONVERT_OBJS) $(LDFLAGS) -o $@
+
+part_shapes: $(PART_SHAPES_OBJS)
+	$(CXX) $(PART_SHAPES_OBJS) $(LDFLAGS) -o $@
+
+neuro_layout_test: $(NEURO_LAYOUT_TEST_OBJS)
+	$(CXX) $(NEURO_LAYOUT_TEST_OBJS) $(LDFLAGS) -o $@
+
+geometry_apices_test: $(GEOMETRY_APICES_TEST_OBJS)
+	$(CXX) $(GEOMETRY_APICES_TEST_OBJS) $(LDFLAGS) -o $@
+
+geometry_info_test: $(GEOMETRY_INFO_TEST_OBJS)
+	$(CXX) $(GEOMETRY_INFO_TEST_OBJS) $(LDFLAGS) -o $@
+
+geometry_surface_test: $(GEOMETRY_SURFACE_TEST_OBJS)
+	$(CXX) $(GEOMETRY_SURFACE_TEST_OBJS) $(LDFLAGS) -o $@
+
+geometry_volume_test: $(GEOMETRY_VOLUME_TEST_OBJS)
+	$(CXX) $(GEOMETRY_VOLUME_TEST_OBJS) $(LDFLAGS) -o $@
+
+
+#############################################
+
+ALL_OBJS=$(GENOMANIPULATION_OBJS) $(GENOCONV_TEST_OBJS) $(GENO_TEST_OBJS) $(NEURO_TEST_OBJS) $(LOADER_TEST_OBJS) $(SERIAL_TEST_OBJS) $(MULTILINE_F0_OBJS) $(F0_VARIANTS_OBJS) $(FULL_PROPS_OBJS) $(PART_SHAPES_OBJS) $(NEURO_LAYOUT_TEST_OBJS) $(GENOOPER_TEST_OBJS) $(GEOMETRY_APICES_TEST_OBJS) $(GEOMETRY_INFO_TEST_OBJS) $(GEOMETRY_SURFACE_TEST_OBJS) $(GEOMETRY_VOLUME_TEST_OBJS)
+
+include frams/Makefile-maintain
+
+full_clean: clean
+	rm -f $(SDK_TESTS)
Index: /cpp/frams/Makefile-SDK-files
===================================================================
--- /cpp/frams/Makefile-SDK-files	(revision 288)
+++ /cpp/frams/Makefile-SDK-files	(revision 288)
@@ -0,0 +1,63 @@
+#### modules
+
+# ALL_DIRS is later expanded by the shell, no spaces/newlines allowed, or it breaks
+ALL_DIRS={common,frams,frams/canvas,frams/config,frams/errmgr,frams/genetics,frams/genetics/f0,frams/genetics/f1,frams/genetics/f2,frams/genetics/f3,frams/genetics/f4,frams/genetics/f5,frams/genetics/f6,frams/genetics/f7,frams/genetics/f8,frams/genetics/f9,frams/genetics/fF,frams/genetics/fT,frams/model,frams/neuro,frams/neuro/impl,frams/param,frams/test,frams/util,frams/vm/classes,frams/virtfile,frams/_demos,frams/model/geometry,frams/_demos/geometry}
+
+GENMANF4=frams/genetics/f4/oper_f4.o
+GENMANF9=frams/genetics/f9/oper_f9.o
+GENMANFF=frams/genetics/fF/oper_fF.o
+GENMANFT=frams/genetics/fT/oper_fTest.o
+
+CONVF1=frams/genetics/f1/conv_f1.o
+CONVF4=frams/genetics/f4/conv_f4.o frams/genetics/f4/f4_general.o
+CONVF9=frams/genetics/f9/conv_f9.o
+CONVFF=frams/genetics/fF/conv_fF.o frams/genetics/fF/fF_genotype.o frams/genetics/fF/fF_chamber3d.o
+
+GENOCONV_SDK_OBJS=frams/genetics/defgenoconv.o frams/vm/classes/genoobj.o frams/model/autoname.o $(CONVF1) $(CONVF4) $(CONVF9) $(CONVFF)
+GENMAN_SDK_OBJS=$(GENMAN_COMMON_OBJS) $(GENMANF4) $(GENMANF9) $(GENMANFF) $(GENMANFT)
+
+GENMAN_COMMON_OBJS=frams/genetics/genman.o frams/param/mutableparam.o frams/param/mutparamlist.o frams/neuro/geneticneuroparam.o frams/neuro/neurolibparam.o
+
+SDK_OBJS=frams/util/list.o frams/util/advlist.o frams/param/param.o frams/util/sstring.o frams/util/sstringutils.o frams/util/3d.o frams/vm/classes/3dobject.o frams/model/model.o frams/model/modelparts.o frams/neuro/neurolibrary.o frams/genetics/geno.o frams/genetics/genoconv.o frams/util/extvalue.o frams/vm/classes/collectionobj.o frams/util/hashtable.o common/framsg.o common/stl-util.o common/nonstd_stdio.o frams/util/callbacks.o frams/param/syntparam.o frams/util/multirange.o frams/util/multimap.o frams/param/paramtabobj.o frams/errmgr/errmanager.o frams/param/paramobj.o frams/genetics/oper_fx.o common/nonstd_math.o frams/errmgr/stderrors.o common/Convert.o frams/util/rndutil.o
+
+GEOMETRY_OBJS=frams/model/geometry/meshbuilder.o frams/model/geometry/modelgeometryinfo.o frams/model/geometry/geometryutils.o
+
+#### sdk_tests
+
+GENOMANIPULATION_OBJS= frams/_demos/genomanipulation.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o  $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GENMAN_SDK_OBJS)
+
+MULTILINE_F0_OBJS=frams/_demos/multiline_f0_test.o frams/virtfile/stringfile.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GENMAN_SDK_OBJS)
+
+F0_VARIANTS_OBJS=frams/_demos/f0_variants_test.o frams/virtfile/stringfile.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o   $(SDK_OBJS) $(GENOCONV_SDK_OBJS)
+
+LOADER_TEST_OBJS=frams/_demos/genotypeloader.o frams/_demos/loader_test.o frams/virtfile/virtfile.o frams/param/multiparamload.o frams/virtfile/stdiofile-autoinit.o frams/virtfile/stdiofile.o $(SDK_OBJS) $(GENOCONV_SDK_OBJS)
+
+GENOCONV_TEST_OBJS= frams/_demos/genoconv_test.o frams/_demos/printconvmap.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o  $(SDK_OBJS) $(GENOCONV_SDK_OBJS)
+
+GENO_TEST_OBJS= frams/_demos/geno_test.o frams/virtfile/virtfile.o   $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GENMAN_SDK_OBJS)
+
+GENOOPER_TEST_OBJS=frams/_demos/genooper_test.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GENMAN_SDK_OBJS)
+
+GENOOPER_TEST_FTEST_OBJS=frams/_demos/genooper_test_fTest.o frams/virtfile/virtfile.o $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GENMAN_SDK_OBJS) $(GENMAN_FT)
+
+NEURO_TEST_OBJS= frams/_demos/neuro_test.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o \
+	frams/neuro/neuroimpl.o frams/neuro/neurofactory.o frams/neuro/impl/neuroimpl-simple.o frams/neuro/impl/neuroimpl-channels.o \
+	frams/neuro/impl/neuroimpl-fuzzy.o frams/neuro/impl/neuroimpl-fuzzy-f0.o  $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GENMAN_SDK_OBJS)
+
+FULL_PROPS_OBJS= frams/_demos/full_props.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o  frams/virtfile/stdiofile.o $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GENMAN_SDK_OBJS)
+
+SHAPECONVERT_OBJS= frams/_demos/shapeconvert.o frams/errmgr/stdouterr.o frams/virtfile/virtfile.o  frams/virtfile/stdiofile.o $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GENMAN_SDK_OBJS)
+
+SERIAL_TEST_OBJS= frams/_demos/serial_test.o frams/virtfile/virtfile.o  $(SDK_OBJS) $(GENOCONV_SDK_OBJS)
+
+PART_SHAPES_OBJS= frams/_demos/part_shapes.o frams/virtfile/virtfile.o  $(SDK_OBJS) $(GENOCONV_SDK_OBJS)
+
+NEURO_LAYOUT_TEST_OBJS= frams/_demos/neuro_layout_test.o frams/virtfile/virtfile.o frams/errmgr/stdouterr.o $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GENMAN_SDK_OBJS) frams/canvas/nn_layout_model.o frams/canvas/nn_simple_layout.o frams/canvas/nn_smart_layout.o
+
+GEOMETRY_INFO_TEST_OBJS=frams/_demos/geometry/info_test.o frams/_demos/geometry/geometrytestutils.o frams/_demos/genotypeloader.o frams/virtfile/virtfile.o frams/param/multiparamload.o frams/virtfile/stdiofile-autoinit.o frams/virtfile/stdiofile.o $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GEOMETRY_OBJS)
+
+GEOMETRY_SURFACE_TEST_OBJS=frams/_demos/geometry/surface_test.o frams/_demos/geometry/geometrytestutils.o frams/_demos/genotypeloader.o frams/virtfile/virtfile.o frams/param/multiparamload.o frams/virtfile/stdiofile-autoinit.o frams/virtfile/stdiofile.o $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GEOMETRY_OBJS)
+
+GEOMETRY_VOLUME_TEST_OBJS=frams/_demos/geometry/volume_test.o frams/_demos/geometry/geometrytestutils.o frams/_demos/genotypeloader.o frams/virtfile/virtfile.o frams/param/multiparamload.o frams/virtfile/stdiofile-autoinit.o frams/virtfile/stdiofile.o $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GEOMETRY_OBJS)
+
+GEOMETRY_APICES_TEST_OBJS=frams/_demos/geometry/apices_test.o frams/_demos/geometry/geometrytestutils.o frams/_demos/genotypeloader.o frams/virtfile/virtfile.o frams/param/multiparamload.o frams/virtfile/stdiofile-autoinit.o frams/virtfile/stdiofile.o $(SDK_OBJS) $(GENOCONV_SDK_OBJS) $(GEOMETRY_OBJS)
Index: p/frams/_demos/gdk_test.cpp
===================================================================
--- /cpp/frams/_demos/gdk_test.cpp	(revision 287)
+++ 	(revision )
@@ -1,356 +1,0 @@
-// This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
-// See LICENSE.txt for details.
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <time.h>
-#include <frams/virtfile/stdiofile.h>
-
-#include <frams/model/model.h>
-#include <frams/genetics/preconfigured.h>
-#include <frams/errmgr/stdouterr.h>
-
-/**
- @file
- Sample code: Accessing model elements
-*/
-
-StdoutErrorHandler err; //redirect model-related errors to stdout
-PreconfiguredGenetics genetics;
-
-void printNiceBanner(const char* title)
-{
-printf("    ########################################\n"
-       "   ##                                      ##\n"
-       "  ##    %-32s    ##\n"
-       "   ##                                      ##\n"
-       "    ########################################\n",title);
-}
-void printProperties(Param &pi)
-{
-printf(" #        id                      type  name        group (%d properties)\n",pi.getPropCount());
-for (int i=0;i<pi.getPropCount();i++)
-	{
-	const char* type=pi.type(i);
-	if (*type=='p') continue;
-	printf("%2d. %8s = %-20s %-3s %-10s  %-10s\n",i,pi.id(i),(const char*)pi.get(i),pi.type(i),pi.name(i),pi.grname(pi.group(i)));
-	}
-}
-
-#define PRINT_PROPERTIES(p) {Param tmp_param(p); printProperties(tmp_param);}
-
-void changeOneProperty(Param &pi)
-{
-if (pi.getPropCount()<=0) return;
-int i=rand() % pi.getPropCount();
-double maxprop=1,minprop=0,def;
-pi.getMinMax(i,minprop,maxprop,def);
-printf("      Change property #%d to random value from range [%g..%g]\n",i,minprop,maxprop);
-printf("      Current value of '%s' (%s) is '%s'\n",pi.id(i),pi.name(i),(const char*)pi.get(i));
-char t[100];
-sprintf(t,"%g",minprop+(rnd01)*(maxprop-minprop));
-printf("      Setting new value... [ using ParamInterface::set() ]\n");
-pi.set(i,t);
-printf("      The value is now '%s'\n",(const char*)pi.get(i));
-}
-
-#define CHANGE_ONE_PROPERTY(p) {Param tmp_param(p); changeOneProperty(tmp_param);}
-
-void moreAboutPart(Part* p)
-{
-printf("Here is the full listing of properties as they are printed in f0\n"
-       " (please compare with f0 genotype).\n"
-       "Some properties have special meaning (eg. geometry and connections groups)\n"
-       "and should be handled with care, because they influence other elements of the model.\n\n"
-       " [this data is provided by Part::properties() ]\n");
-PRINT_PROPERTIES(p->properties());
-printf("\nHowever, there is a subset of properties which may be modified more freely.\n"
-       "Properties on this list are related only to this part and can be changed\n"
-       "without much consideration. They are guaranteed to be always valid; any inconsistencies\n"
-       "will be silently repaired.\n"
-       "\n [this data is provided by Part::extraProperties() ]\n");
-PRINT_PROPERTIES(p->extraProperties());
-printf("\nThis set of properties can vary from release to release,\n"
-       "but can be safely accessed by using extraProperties() call.\n"
-	   "This method accesses the full set of properies (even those\n"
-	   "which appear in future releases).\n"
-       "Now we will try to change some of properties:\n\n");
-p->getModel().open();
-CHANGE_ONE_PROPERTY(p->extraProperties());
-p->getModel().close();
-printf("\nLet's see f0... (check out part #%d !)\n\n%s\n", p->refno, (const char*)p->getModel().getF0Geno().getGene());
-}
-
-void playWithAbsolute(Joint *j)
-{
-printf("\nAbsolute Joints adapt to its Parts' positions.\n"
-       "We can move a Part, and it does not influence the second part, nor the Joint.\n"
-       "Let's move the first Part along y axis by -0.1...\n");
-j->getModel().open();
-j->part1->p.y-=0.1;
-j->getModel().close();
-printf("The Part's position is changed, but everything else stays intact:\n\n%s\n",
-       (const char*)j->getModel().getF0Geno().getGene());
-}
-
-void playWithDelta(Joint *j)
-{
-printf("\nDelta fields (dx,dy,dz) describe relative location of the second part.\n"
-       "This joint will change the second Part's positions to preserve delta distance.\n"
-       "Let's move the first Part (#%d) along y axis (+0.1) and change delta.z (dz) by 0.1.\n",j->part1->refno);
-j->getModel().open();
-j->part1->p.y+=0.1;
-j->d.z+=0.1;
-j->getModel().close();
-printf("Position of the second Part referenced by this joint (part #%d) is now changed:\n\n%s\n",
-       j->part2->refno, (const char*)j->getModel().getF0Geno().getGene());
-printf("If no delta fields are defined, they will be computed automatically.\n"
-       "You can always delete existing delta values by using Joint::resetDelta().\n"
-       "Now we will change the second Part's z position by -0.2 and call resetDelta()...\n");
-j->getModel().open();
-j->part2->p.z-=0.2;
-j->resetDelta();
-j->getModel().close();
-printf("As you can see, Joint's delta fields have altered:\n\n%s\n", (const char*)j->getModel().getF0Geno().getGene());
-}
-
-void switchDelta(Joint *j)
-{
-int option=! j->isDelta();
-printf("How would this joint look like with delta option %s?\n[ by calling Joint::useDelta(%d) ]\n",option?"enabled":"disabled",option);
-j->getModel().open();
-j->useDelta( ! j->isDelta() );
-j->getModel().close();
-printf("f0 is now:\n\n%s\n...so this is %s joint.\n",
-       (const char*)j->getModel().getF0Geno().getGene(), option?"a delta":"an absolute");
-
-}
-
-void moreAboutJoint(Joint* j)
-{
-printf("Similarly as with Part, the full list of properties comes first:\n\n");
-CHANGE_ONE_PROPERTY(j->properties());
-printf("\nActually, there are two kinds of Joints: delta and absolute.\n"
-       "For this object, Joint::isDelta() returns %d, so this is the %s Joint.\n",
-       j->isDelta(),j->isDelta()?"delta":"absolute");
-if (j->isDelta())
-	{
-	playWithDelta(j);
-	switchDelta(j);
-	playWithAbsolute(j);
-	}
-else
-	{
-	playWithAbsolute(j);
-	switchDelta(j);
-	playWithDelta(j);
-	}
-
-printf("Part references and delta fields are the 'core' properties of the Joint.\n"
-       "The other properties are available from Joint::extraProperties()\n"
-       "and at the moment are defined as follows:\n\n");
-PRINT_PROPERTIES(j->extraProperties());
-printf("\nThey can be changed just like Part's extra properties:\n");
-j->getModel().open();
-CHANGE_ONE_PROPERTY(j->extraProperties());
-j->getModel().close();
-printf("And after that we have this genotype:\n\n%s\n", (const char*)j->getModel().getF0Geno().getGene());
-}
-
-
-
-void moreAboutNeuro(Neuro* n)
-{
-printf("Basic features of Neuro object are similar to those of Part and Joint.\n"
-       "We can request a property list:\n\n");
-PRINT_PROPERTIES(n->properties());
-printf("\n...and extra properties (which are designed to be always valid and easy to change):\n\n");
-PRINT_PROPERTIES(n->extraProperties());
-printf("\nAs usual, we will change something:\n");
-n->getModel().open();
-CHANGE_ONE_PROPERTY(n->extraProperties());
-n->getModel().close();
-printf("Each neuron can have any number of inputs = weighted connections\n with other neurons.\n"
-       "According to Neuro::getInputCount(), this one has %d inputs.\n",n->getInputCount());
-printf("Standard API is provided for accessing those inputs (getInput(int)),\n"
-       "adding inputs (addInput(Neuro*)) and removing them (removeInput(int)).\n\n");
-
-printf("\nThe most unusual thing is 'item details' field (d).\n"
-       "It is something like separate object with its own set of properties.\n"
-       "Currently the value of 'd' is '%s'.\n",(const char*)n->getDetails());
-
-{
-NeuroClass* cl=n->getClass();
-if (!cl)
-	printf("It should contain the class name but the meaning of '%s' is unknown\n",(const char*)n->getDetails());
-else
-{
-
-printf("'%s' is the class name (NeuroItem::getClassName() == '%s') and means '%s'.\n",
-       (const char*)cl->getName(),(const char*)cl->getName(),(const char*)cl->getLongName());
-printf("Neuro::getClass() gives you information about basic characteristic\n"
-       "of the class, that can be analyzed automatically.\n");
-printf("For the current object we can learn that it supports ");
-if (cl->getPreferredInputs()<0) printf("any number of inputs");
-  else if (cl->getPreferredInputs()==0) printf("no inputs");
-  else printf("%d inputs",cl->getPreferredInputs());
-printf(" (getPreferredInputs()) ");
-printf(cl->getPreferredOutput()?"and provides meaningful output signal (getPreferredOutput()==1).\n":"and doesn't provide useful output signal (getPreferredOutput()==0).\n");
-
-SyntParam p=n->classProperties();
-if (p.getPropCount()>0)
-	{
-	printf("The class defines its own properties:\n\n [ data provided by Neuro::classProperties() ]\n");
-	printProperties(p);
-	printf("and they can be changed:\n");
-	n->getModel().open();
-	changeOneProperty(p);
-	p.update();
-	n->getModel().close();
-	printf("After that, 'item details' contains the new object: '%s'.\n",(const char*)n->getDetails());
-	}
-else
-	printf("(This class does not have its own properties\n"
-	       " - Neuro::classProperties().getPropCount()==0)\n");
-}
-}
-
-printf("The class of this object can be changed using Neuro::setClassName()\n"
-       "The following classes are available:\n"
-       " [ data provided by Neuro::getClassInfo()->getProperties() ]\n\n");
-printf(" #  class  description       properties\n");
-for (int i=0;i<n->getClassCount();i++)
-	{
-	NeuroClass* cl=n->getClass(i);
-	Param p=cl->getProperties();
-	printf("%2d.%6s  %-20s  %2d\n",i,(const char*)cl->getName(),(const char*)cl->getLongName(),p.getPropCount());
-	}
-int cl=rand() % n->getClassCount();
-printf("\nLet's change the NeuroItem's class to '%s'...\n",(const char*)n->getClassName(cl));
-n->getModel().open();
-n->setClass(n->getClass(cl));
-{
-SyntParam p=n->classProperties();
-if (p.getPropCount()>0)
-	{
-	printProperties(p);
-	changeOneProperty(p);
-	p.update();
-	}
-}
-
-if (n->getInputCount()>0)
-{
-printf("input info 0 = \"%s\"\n",(const char*)n->getInputInfo(0));
-printf("input info 0 abc = \"%s\"\n",(const char*)n->getInputInfo(0,"abc"));
-	n->setInputInfo(0,"test",44);
-	n->setInputInfo(0,"abc","yeah");
-}
-
-n->getModel().close();
-printf("The final object description will be then: '%s'\nAnd the full f0 genotype:\n\n%s\n",
-       (const char*)n->getDetails(), (const char*)n->getModel().getF0Geno().getGene());
-
-
-}
-
-void findingConverters()
-{
-GenoConverter *gc=Geno::getConverters().findConverters(0,'1');
-if (gc) printf("found converter accepting f1: \"%s\"\n",gc->name);
-SListTempl<GenoConverter*> found;
-Geno::getConverters().findConverters(&found,-1,'0');
-printf("found %d converter(s) producing f0\n",found.size());
-}
-
-int main(int argc,char*argv[])
-{
-srand(time(0));
-printNiceBanner("Welcome to Genotype manipulation test application!");
-
-findingConverters();
-
-SString gen(argc>1?argv[1]:"X[|G:1.23]");
-if (!strcmp(gen,"-"))
-	{
-	gen=0;
-	StdioFILEDontClose in(stdin);
-	loadSString(&in,gen);
-	}
-Geno g(gen);
-printf("\nSource genotype: '%s'\n",(const char*)g.getGene());
-printf("                  ( format %c %s)\n",
-       g.getFormat(), (const char*)g.getComment());
-
-Model m(g);//.getConverted('0'));
-
-if (!m.isValid())
-	{
-	printf("Cannot build Model from this genotype!\n");
-	return 2;	
-	}
-printf("Converted to f0:\n%s\n",(const char*)m.getF0Geno().getGene());
-
-printf("Model contains: %d part(s)\n"
-       "                %d joint(s)\n"
-       "                %d neuron(s)\n",m.getPartCount(),m.getJointCount(),m.getNeuroCount());
-
-printf("\nInvestigating details...\n");
-
-if (m.getPartCount()>0)
-	{
-	int p=rand()%m.getPartCount();
-	printNiceBanner("P A R T    O B J E C T");
-	printf("            (part # %d)\n",p);
-	moreAboutPart(m.getPart(p));
-	}
-
-if (m.getJointCount()>0)
-	{
-	int j=rand()%m.getJointCount();
-	printNiceBanner("J O I N T    O B J E C T");
-	printf("            (joint # %d)\n",j);
-	moreAboutJoint(m.getJoint(j));
-	}
-
-if (m.getNeuroCount()>0)
-	{
-	int n=rand()%m.getNeuroCount();
-	printNiceBanner("N E U R O    O B J E C T");
-	printf("            (neuro # %d)\n",n);
-	moreAboutNeuro(m.getNeuro(n));
-	}
-
-#ifdef MODEL_V1_COMPATIBLE
-printNiceBanner("Old Neuro/NeuroItem view");
-int nc=m.old_getNeuroCount();
-printf("Model::old_getNeuroCount() = %d\n",nc);
-for (int i=0;i<nc;i++)
-	{
-	Neuro *n=m.old_getNeuro(i);
-	printf("neuron #%d: p=%d, j=%d, force=%g, inertia=%g, sigmoid=%g\n",
-	       i,n->part_refno,n->joint_refno,
-	       n->force,n->inertia,n->sigmo);
-	int nicount=n->getItemCount();
-	printf("    %d items\n",nicount);
-	for (int j=0;j<nicount;j++)
-		{
-		NeuroItem *ni=n->getNeuroItem(j);
-		printf("        item #%d - '%s', conn=%d, weight=%g\n",
-		       j,(const char*)ni->getDetails(),ni->conn_refno,ni->weight);
-		}
-	}
-printf("end.\n");
-#endif
-
-printf("\n######### THE END ###########\n\n"
-       "Hints:\n"
-       "  1. You can redirect output: gdk_test >filename.txt\n"
-       "  2. Each run can yield different results, because some\n"
-       "     values are randomly generated.\n"
-       "  3. This application will use custom genotype passed as\n"
-       "     a commandline parameter: gdk_test XX\n"
-       "\n");
-return 0;
-}
Index: /cpp/frams/_demos/genomanipulation.cpp
===================================================================
--- /cpp/frams/_demos/genomanipulation.cpp	(revision 288)
+++ /cpp/frams/_demos/genomanipulation.cpp	(revision 288)
@@ -0,0 +1,356 @@
+// This file is a part of Framsticks SDK.  http://www.framsticks.com/
+// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// See LICENSE.txt for details.
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <time.h>
+#include <frams/virtfile/stdiofile.h>
+
+#include <frams/model/model.h>
+#include <frams/genetics/preconfigured.h>
+#include <frams/errmgr/stdouterr.h>
+
+/**
+ @file
+ Sample code: Accessing model elements
+*/
+
+StdoutErrorHandler err; //redirect model-related errors to stdout
+PreconfiguredGenetics genetics;
+
+void printNiceBanner(const char* title)
+{
+printf("    #############################################\n"
+       "   ##                                           ##\n"
+       "  ##    %-37s    ##\n"
+       "   ##                                           ##\n"
+       "    #############################################\n",title);
+}
+void printProperties(Param &pi)
+{
+printf(" #        id                      type  name        group (%d properties)\n",pi.getPropCount());
+for (int i=0;i<pi.getPropCount();i++)
+	{
+	const char* type=pi.type(i);
+	if (*type=='p') continue;
+	printf("%2d. %8s = %-20s %-3s %-10s  %-10s\n",i,pi.id(i),(const char*)pi.get(i),pi.type(i),pi.name(i),pi.grname(pi.group(i)));
+	}
+}
+
+#define PRINT_PROPERTIES(p) {Param tmp_param(p); printProperties(tmp_param);}
+
+void changeOneProperty(Param &pi)
+{
+if (pi.getPropCount()<=0) return;
+int i=rand() % pi.getPropCount();
+double maxprop=1,minprop=0,def;
+pi.getMinMax(i,minprop,maxprop,def);
+printf("      Change property #%d to random value from range [%g..%g]\n",i,minprop,maxprop);
+printf("      Current value of '%s' (%s) is '%s'\n",pi.id(i),pi.name(i),(const char*)pi.get(i));
+char t[100];
+sprintf(t,"%g",minprop+(rnd01)*(maxprop-minprop));
+printf("      Setting new value... [ using ParamInterface::set() ]\n");
+pi.set(i,t);
+printf("      The value is now '%s'\n",(const char*)pi.get(i));
+}
+
+#define CHANGE_ONE_PROPERTY(p) {Param tmp_param(p); changeOneProperty(tmp_param);}
+
+void moreAboutPart(Part* p)
+{
+printf("Here is the full listing of properties as they are printed in f0\n"
+       " (please compare with f0 genotype).\n"
+       "Some properties have special meaning (eg. geometry and connections groups)\n"
+       "and should be handled with care, because they influence other elements of the model.\n\n"
+       " [this data is provided by Part::properties() ]\n");
+PRINT_PROPERTIES(p->properties());
+printf("\nHowever, there is a subset of properties which may be modified more freely.\n"
+       "Properties on this list are related only to this part and can be changed\n"
+       "without much consideration. They are guaranteed to be always valid; any inconsistencies\n"
+       "will be silently repaired.\n"
+       "\n [this data is provided by Part::extraProperties() ]\n");
+PRINT_PROPERTIES(p->extraProperties());
+printf("\nThis set of properties can vary from release to release,\n"
+       "but can be safely accessed by using extraProperties() call.\n"
+	   "This method accesses the full set of properies (even those\n"
+	   "which appear in future releases).\n"
+       "Now we will try to change some of properties:\n\n");
+p->getModel().open();
+CHANGE_ONE_PROPERTY(p->extraProperties());
+p->getModel().close();
+printf("\nLet's see f0... (check out part #%d !)\n\n%s\n", p->refno, (const char*)p->getModel().getF0Geno().getGene());
+}
+
+void playWithAbsolute(Joint *j)
+{
+printf("\nAbsolute Joints adapt to its Parts' positions.\n"
+       "We can move a Part, and it does not influence the second part, nor the Joint.\n"
+       "Let's move the first Part along y axis by -0.1...\n");
+j->getModel().open();
+j->part1->p.y-=0.1;
+j->getModel().close();
+printf("The Part's position is changed, but everything else stays intact:\n\n%s\n",
+       (const char*)j->getModel().getF0Geno().getGene());
+}
+
+void playWithDelta(Joint *j)
+{
+printf("\nDelta fields (dx,dy,dz) describe relative location of the second part.\n"
+       "This joint will change the second Part's positions to preserve delta distance.\n"
+       "Let's move the first Part (#%d) along y axis (+0.1) and change delta.z (dz) by 0.1.\n",j->part1->refno);
+j->getModel().open();
+j->part1->p.y+=0.1;
+j->d.z+=0.1;
+j->getModel().close();
+printf("Position of the second Part referenced by this joint (part #%d) is now changed:\n\n%s\n",
+       j->part2->refno, (const char*)j->getModel().getF0Geno().getGene());
+printf("If no delta fields are defined, they will be computed automatically.\n"
+       "You can always delete existing delta values by using Joint::resetDelta().\n"
+       "Now we will change the second Part's z position by -0.2 and call resetDelta()...\n");
+j->getModel().open();
+j->part2->p.z-=0.2;
+j->resetDelta();
+j->getModel().close();
+printf("As you can see, Joint's delta fields have altered:\n\n%s\n", (const char*)j->getModel().getF0Geno().getGene());
+}
+
+void switchDelta(Joint *j)
+{
+int option=! j->isDelta();
+printf("How would this joint look like with delta option %s?\n[ by calling Joint::useDelta(%d) ]\n",option?"enabled":"disabled",option);
+j->getModel().open();
+j->useDelta( ! j->isDelta() );
+j->getModel().close();
+printf("f0 is now:\n\n%s\n...so this is %s joint.\n",
+       (const char*)j->getModel().getF0Geno().getGene(), option?"a delta":"an absolute");
+
+}
+
+void moreAboutJoint(Joint* j)
+{
+printf("Similarly as with Part, the full list of properties comes first:\n\n");
+CHANGE_ONE_PROPERTY(j->properties());
+printf("\nActually, there are two kinds of Joints: delta and absolute.\n"
+       "For this object, Joint::isDelta() returns %d, so this is the %s Joint.\n",
+       j->isDelta(),j->isDelta()?"delta":"absolute");
+if (j->isDelta())
+	{
+	playWithDelta(j);
+	switchDelta(j);
+	playWithAbsolute(j);
+	}
+else
+	{
+	playWithAbsolute(j);
+	switchDelta(j);
+	playWithDelta(j);
+	}
+
+printf("Part references and delta fields are the 'core' properties of the Joint.\n"
+       "The other properties are available from Joint::extraProperties()\n"
+       "and at the moment are defined as follows:\n\n");
+PRINT_PROPERTIES(j->extraProperties());
+printf("\nThey can be changed just like Part's extra properties:\n");
+j->getModel().open();
+CHANGE_ONE_PROPERTY(j->extraProperties());
+j->getModel().close();
+printf("And after that we have this genotype:\n\n%s\n", (const char*)j->getModel().getF0Geno().getGene());
+}
+
+
+
+void moreAboutNeuro(Neuro* n)
+{
+printf("Basic features of Neuro object are similar to those of Part and Joint.\n"
+       "We can request a property list:\n\n");
+PRINT_PROPERTIES(n->properties());
+printf("\n...and extra properties (which are designed to be always valid and easy to change):\n\n");
+PRINT_PROPERTIES(n->extraProperties());
+printf("\nAs usual, we will change something:\n");
+n->getModel().open();
+CHANGE_ONE_PROPERTY(n->extraProperties());
+n->getModel().close();
+printf("Each neuron can have any number of inputs = weighted connections\n with other neurons.\n"
+       "According to Neuro::getInputCount(), this one has %d inputs.\n",n->getInputCount());
+printf("Standard API is provided for accessing those inputs (getInput(int)),\n"
+       "adding inputs (addInput(Neuro*)) and removing them (removeInput(int)).\n\n");
+
+printf("\nThe most unusual thing is 'item details' field (d).\n"
+       "It is something like separate object with its own set of properties.\n"
+       "Currently the value of 'd' is '%s'.\n",(const char*)n->getDetails());
+
+{
+NeuroClass* cl=n->getClass();
+if (!cl)
+	printf("It should contain the class name but the meaning of '%s' is unknown\n",(const char*)n->getDetails());
+else
+{
+
+printf("'%s' is the class name (NeuroItem::getClassName() == '%s') and means '%s'.\n",
+       (const char*)cl->getName(),(const char*)cl->getName(),(const char*)cl->getLongName());
+printf("Neuro::getClass() gives you information about basic characteristic\n"
+       "of the class, that can be analyzed automatically.\n");
+printf("For the current object we can learn that it supports ");
+if (cl->getPreferredInputs()<0) printf("any number of inputs");
+  else if (cl->getPreferredInputs()==0) printf("no inputs");
+  else printf("%d inputs",cl->getPreferredInputs());
+printf(" (getPreferredInputs()) ");
+printf(cl->getPreferredOutput()?"and provides meaningful output signal (getPreferredOutput()==1).\n":"and doesn't provide useful output signal (getPreferredOutput()==0).\n");
+
+SyntParam p=n->classProperties();
+if (p.getPropCount()>0)
+	{
+	printf("The class defines its own properties:\n\n [ data provided by Neuro::classProperties() ]\n");
+	printProperties(p);
+	printf("and they can be changed:\n");
+	n->getModel().open();
+	changeOneProperty(p);
+	p.update();
+	n->getModel().close();
+	printf("After that, 'item details' contains the new object: '%s'.\n",(const char*)n->getDetails());
+	}
+else
+	printf("(This class does not have its own properties\n"
+	       " - Neuro::classProperties().getPropCount()==0)\n");
+}
+}
+
+printf("The class of this object can be changed using Neuro::setClassName()\n"
+       "The following classes are available:\n"
+       " [ data provided by Neuro::getClassInfo()->getProperties() ]\n\n");
+printf(" #  class  description       properties\n");
+for (int i=0;i<n->getClassCount();i++)
+	{
+	NeuroClass* cl=n->getClass(i);
+	Param p=cl->getProperties();
+	printf("%2d.%6s  %-20s  %2d\n",i,(const char*)cl->getName(),(const char*)cl->getLongName(),p.getPropCount());
+	}
+int cl=rand() % n->getClassCount();
+printf("\nLet's change the NeuroItem's class to '%s'...\n",(const char*)n->getClassName(cl));
+n->getModel().open();
+n->setClass(n->getClass(cl));
+{
+SyntParam p=n->classProperties();
+if (p.getPropCount()>0)
+	{
+	printProperties(p);
+	changeOneProperty(p);
+	p.update();
+	}
+}
+
+if (n->getInputCount()>0)
+{
+printf("input info 0 = \"%s\"\n",(const char*)n->getInputInfo(0));
+printf("input info 0 abc = \"%s\"\n",(const char*)n->getInputInfo(0,"abc"));
+	n->setInputInfo(0,"test",44);
+	n->setInputInfo(0,"abc","yeah");
+}
+
+n->getModel().close();
+printf("The final object description will be then: '%s'\nAnd the full f0 genotype:\n\n%s\n",
+       (const char*)n->getDetails(), (const char*)n->getModel().getF0Geno().getGene());
+
+
+}
+
+void findingConverters()
+{
+GenoConverter *gc=Geno::getConverters().findConverters(0,'1');
+if (gc) printf("found converter accepting f1: \"%s\"\n",gc->name);
+SListTempl<GenoConverter*> found;
+Geno::getConverters().findConverters(&found,-1,'0');
+printf("found %d converter(s) producing f0\n",found.size());
+}
+
+int main(int argc,char*argv[])
+{
+srand(time(0));
+printNiceBanner("Welcome to Genotype Manipulation App!");
+
+findingConverters();
+
+SString gen(argc>1?argv[1]:"X[|G:1.23]");
+if (!strcmp(gen,"-"))
+	{
+	gen=0;
+	StdioFILEDontClose in(stdin);
+	loadSString(&in,gen);
+	}
+Geno g(gen);
+printf("\nSource genotype: '%s'\n",(const char*)g.getGene());
+printf("                  ( format %c %s)\n",
+       g.getFormat(), (const char*)g.getComment());
+
+Model m(g);//.getConverted('0'));
+
+if (!m.isValid())
+	{
+	printf("Cannot build Model from this genotype!\n");
+	return 2;	
+	}
+printf("Converted to f0:\n%s\n",(const char*)m.getF0Geno().getGene());
+
+printf("Model contains: %d part(s)\n"
+       "                %d joint(s)\n"
+       "                %d neuron(s)\n",m.getPartCount(),m.getJointCount(),m.getNeuroCount());
+
+printf("\nInvestigating details...\n");
+
+if (m.getPartCount()>0)
+	{
+	int p=rand()%m.getPartCount();
+	printNiceBanner("P A R T    O B J E C T");
+	printf("            (part # %d)\n",p);
+	moreAboutPart(m.getPart(p));
+	}
+
+if (m.getJointCount()>0)
+	{
+	int j=rand()%m.getJointCount();
+	printNiceBanner("J O I N T    O B J E C T");
+	printf("            (joint # %d)\n",j);
+	moreAboutJoint(m.getJoint(j));
+	}
+
+if (m.getNeuroCount()>0)
+	{
+	int n=rand()%m.getNeuroCount();
+	printNiceBanner("N E U R O    O B J E C T");
+	printf("            (neuro # %d)\n",n);
+	moreAboutNeuro(m.getNeuro(n));
+	}
+
+#ifdef MODEL_V1_COMPATIBLE
+printNiceBanner("Old Neuro/NeuroItem view");
+int nc=m.old_getNeuroCount();
+printf("Model::old_getNeuroCount() = %d\n",nc);
+for (int i=0;i<nc;i++)
+	{
+	Neuro *n=m.old_getNeuro(i);
+	printf("neuron #%d: p=%d, j=%d, force=%g, inertia=%g, sigmoid=%g\n",
+	       i,n->part_refno,n->joint_refno,
+	       n->force,n->inertia,n->sigmo);
+	int nicount=n->getItemCount();
+	printf("    %d items\n",nicount);
+	for (int j=0;j<nicount;j++)
+		{
+		NeuroItem *ni=n->getNeuroItem(j);
+		printf("        item #%d - '%s', conn=%d, weight=%g\n",
+		       j,(const char*)ni->getDetails(),ni->conn_refno,ni->weight);
+		}
+	}
+printf("end.\n");
+#endif
+
+printf("\n######### THE END ###########\n\n"
+       "Hints:\n"
+       "  1. You can redirect output: genomanipulation >filename.txt\n"
+       "  2. Each run can yield different results, because some\n"
+       "     values are randomly generated.\n"
+       "  3. This application will use custom genotype passed as\n"
+       "     a commandline parameter: genomanipulation XX\n"
+       "\n");
+return 0;
+}
Index: /cpp/frams/_demos/neuro_test.cpp
===================================================================
--- /cpp/frams/_demos/neuro_test.cpp	(revision 287)
+++ /cpp/frams/_demos/neuro_test.cpp	(revision 288)
@@ -16,5 +16,5 @@
 */
 
-#ifndef GDK_WITHOUT_FRAMS
+#ifndef SDK_WITHOUT_FRAMS
 #include <frams/mech/creatmechobj.h>
 int CreatMechObject::modeltags_id=0;
Index: p/frams/config/f0-GDK.def
===================================================================
--- /cpp/frams/config/f0-GDK.def	(revision 287)
+++ 	(revision )
@@ -1,202 +1,0 @@
-CLASS(Model,f0_model,m)
-GROUP(Properties)
-GROUP(Visual)
-PROP(se,0,1024,startenergy,f,,,,startenergy)
-PROP(Vstyle,1,0,vis_style,s,0,-1,,vis_style)
-ENDCLASS
-
-CLASS(Part,f0_part,p)
-GROUP(Geometry)
-GROUP(Other properties)
-GROUP(Visual)
-PROP(x,0,1024,position.x,f,,,,p.x)
-PROP(y,0,1024,position.y,f,,,,p.y)
-PROP(z,0,1024,position.z,f,,,,p.z)
-XPROP(m,1,0,mass,f,0.1,999.0,1.0,mass)
-PROP(sh,1,0,shape,d,0,3,0,shape)
-PROP(s,1,0,size,f,0.1,10.0,1.0,size)
-PROP(sx,1,0,scale.x,f,0.001,1000.0,1.0,scale.x)
-PROP(sy,1,0,scale.y,f,0.001,1000.0,1.0,scale.y)
-PROP(sz,1,0,scale.z,f,0.001,1000.0,1.0,scale.z)
-PROP(h,1,0,hollow,f,0,1,0,hollow)
-XPROP(dn,1,0,density,f,0.2,5.0,1.0,density)
-XPROP(fr,1,0,friction,f,0.0,4.0,0.4,friction)
-XPROP(ing,1,0,ingestion,f,0.0,1.0,0.25,ingest)
-XPROP(as,1,0,assimilation,f,0.0,1.0,0.25,assim)
-PROP(rx,0,0,rot.x,f,,,,rot.x)
-PROP(ry,0,1024,rot.y,f,,,,rot.y)
-PROP(rz,0,1024,rot.z,f,,,,rot.z)
-PROP(i,1,0,`info',s,,,,info)
-PROP(Vstyle,2,0,vis_style,s,0,-1,part,vis_style)
-XPROP(vs,2,0,visual thickness,f,0.05,0.7,0.2,vsize)
-XPROP(vr,2,0,red component,f,0.0,1.0,0.5,vcolor.x)
-XPROP(vg,2,1024,green component,f,0.0,1.0,0.5,vcolor.y)
-XPROP(vb,2,1024,blue component,f,0.0,1.0,0.5,vcolor.z)
-ENDCLASS
-
-CLASS(Joint,f0_joint,j)
-GROUP(Connections)
-GROUP(Geometry)
-GROUP(Other properties)
-GROUP(Visual)
-PROP(p1,0,1024,`part1 ref#',d,-1,999999,-1,p1_refno)
-PROP(p2,0,1024,`part2 ref#',d,-1,999999,-1,p2_refno)
-PROP(rx,1,0,rotation.x,f,,,,rot.x)
-PROP(ry,1,1024,rotation.y,f,,,,rot.y)
-PROP(rz,1,1024,rotation.z,f,,,,rot.z)
-PROP(dx,1,0,delta.x,f,-2,2,0,d.x)
-PROP(dy,1,1024,delta.y,f,-2,2,0,d.y)
-PROP(dz,1,1024,delta.z,f,-2,2,0,d.z)
-PROP(sh,1,0,shape,d,0,1,0,shape)
-XPROP(stif,2,0,stiffness,f,0.0,1.0,1.0,stif)
-XPROP(rotstif,2,0,rotation stiffness,f,0.0,1.0,1.0,rotstif)
-PROP(stam,2,0,stamina,f,0.0,1.0,0.25,stamina)
-PROP(i,2,0,`info',s,,,,info)
-PROP(Vstyle,3,0,vis_style,s,0,-1,joint,vis_style)
-XPROP(vr,3,0,red component,f,0.0,1.0,0.5,vcolor.x)
-XPROP(vg,3,1024,green component,f,0.0,1.0,0.5,vcolor.y)
-XPROP(vb,3,1024,blue component,f,0.0,1.0,0.5,vcolor.z)
-ENDCLASS
-
-CLASS(Joint,f0_nodeltajoint,j,NOXML)
-GROUP(Connections)
-GROUP(Geometry)
-GROUP(Other properties)
-GROUP(Visual)
-PROP(p1,0,1024,`part1 ref#',d,-1,999999,-1,p1_refno)
-PROP(p2,0,1024,`part2 ref#',d,-1,999999,-1,p2_refno)
-PROP(sh,1,0,shape,d,0,1,0,shape)
-XPROP(stif,2,0,stiffness,f,0.0,1.0,1.0,stif)
-XPROP(rotstif,2,0,rotation stiffness,f,0.0,1.0,1.0,rotstif)
-PROP(stam,2,0,stamina,f,0.0,1.0,0.25,stamina)
-PROP(i,2,0,`info',s,,,,info)
-PROP(Vstyle,3,0,vis_style,s,0,-1,joint,vis_style)
-XPROP(vr,3,0,red component,f,0.0,1.0,0.5,vcolor.x)
-XPROP(vg,3,1024,green component,f,0.0,1.0,0.5,vcolor.y)
-XPROP(vb,3,1024,blue component,f,0.0,1.0,0.5,vcolor.z)
-ENDCLASS
-
-CLASS(Neuro,f0_neuro,n)
-GROUP(Connections)
-GROUP(Other)
-GROUP(Visual)
-PROP(p,0,0,`part ref#',d,-1,999999,-1,part_refno)
-PROP(j,0,0,`joint ref#',d,-1,999999,-1,joint_refno)
-PROP(d,1,0,item details,s,,,N,details,GETSET)
-PROP(i,1,0,`info',s,,,,info)
-PROP(Vstyle,2,0,vis_style,s,0,-1,neuro,vis_style)
-PROP(getInputCount,0,1+2,`input count',d,,,,inputCount,GETONLY)
-PROP(getInputNeuroDef,0,1+2,`get input neuron',p oNeuroDef(d),,,,p_getInputNeuroDef,PROCEDURE)
-PROP(getInputNeuroIndex,0,1+2,`get input neuron index',p d(d),,,,p_getInputNeuroIndex,PROCEDURE)
-PROP(getInputWeight,0,1+2,`get input weight',p f(d),,,,p_getInputWeight,PROCEDURE)
-PROP(classObject,0,1+2,`neuron class',o NeuroClass,,,,classObject,GETONLY)
-ENDCLASS
-
-CLASS(NeuroConn,f0_neuroconn,c)
-GROUP(Connection)
-GROUP(Other)
-PROP(n1,0,1024,`this neuro ref#',d,-1,999999,-1,n1_refno)
-PROP(n2,0,1024,`connected neuro ref#',d,-1,999999,-1,n2_refno)
-PROP(w,0,1024,weight,f,-999999,999999,1.0,weight)
-PROP(i,1,0,`info',s,,,,info)
-ENDCLASS
-
-NEUROCLASS(StdNeuron,N,Neuron,`Standard neuron',-1,1,0)
-VISUALHINTS(DontShowClass)
-NEUROPROP(in,1,0,Inertia,f,0.0,1.0,0.8,inertia)
-NEUROPROP(fo,1,0,Force,f,0.0,999.0,0.04,force)
-NEUROPROP(si,1,0,Sigmoid,f,-99999.0,99999.0,2.0,sigmo)
-NEUROPROP(s,2,0,State,f,-1.0,1.0,0.0,newstate)
-ENDNEUROCLASS
-
-NEUROCLASS(StdUNeuron,Nu,`Unipolar neuron [EXPERIMENTAL!]',`Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.\nHaving 0 as one of the saturation states should help in \"gate circuits\", where input signal is passed through or blocked depending on the other singal.',-1,1,0)
-NEUROPROP(in,1,0,Inertia,f,0.0,1.0,0.8,inertia)
-NEUROPROP(fo,1,0,Force,f,0.0,999.0,0.04,force)
-NEUROPROP(si,1,0,Sigmoid,f,-99999.0,99999.0,2.0,sigmo)
-NEUROPROP(s,2,0,State,f,-1.0,1.0,0.0,newstate)
-ENDNEUROCLASS
-
-NEUROCLASS(Gyro,G,Gyroscope,`Equilibrium sensor.\n0=the stick is horizontal\n+1/-1=the stick is vertical',0,1,2)
-VISUALHINTS(ReceptorClass)
-SYMBOL(`8,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,12,43,24,48,24,48,19,38,19,38,24,43,24,43,54,48,54,48,64,43,69,38,64,38,54,43,54,5,63,69,58,74,48,79,38,79,28,74,23,69,1,43,79,43,74,1,23,69,26,66,1,63,69,60,66,1,55,76,53,73,1,31,75,33,72')
-ENDNEUROCLASS
-
-NEUROCLASS(Touch,T,Touch,`Touch sensor.\n-1=no contact\n0=just touching\n>0=pressing, value depends on the force applied',0,1,1)
-VISUALHINTS(ReceptorClass)
-SYMBOL(`2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50')
-NEUROPROP(r,1,0,Range,f,0.0,1.0,1.0,range)
-ENDNEUROCLASS
-
-NEUROCLASS(Smell,S,Smell,`Smell sensor. Aggregated \"smell of energy\" experienced from all energy objects (creatures and food pieces).\nClose objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)',0,1,1)
-VISUALHINTS(ReceptorClass)
-SYMBOL(`5,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,3,10,40,15,45,15,55,10,60,5,20,30,25,35,30,45,30,55,25,65,20,70,4,15,35,20,40,22,50,20,60,15,65,5,75,50,50,50,45,45,40,50,45,55,50,50')
-ENDNEUROCLASS
-
-NEUROCLASS(Const,*,Constant,Constant value,0,1,0)
-VISUALHINTS(Invisible)
-SYMBOL(`4,4,26,27,26,73,73,73,73,27,26,27,1,73,50,100,50,1,56,68,46,68,2,41,47,51,32,51,68')
-ENDNEUROCLASS
-
-NEUROCLASS(BendMuscle,|,Bend muscle,,1,0,2)
-VISUALHINTS(DontShowClass+EffectorClass+V1BendMuscle+AtFirstPart)
-SYMBOL(`6,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,3,65,56,49,29,57,24,72,50,4,68,53,70,53,70,55,68,55,68,53,5,50,21,60,15,70,14,79,15,87,20,81,10,1,86,20,77,21')
-NEUROPROP(p,0,0,power,f,0.01,1.0,0.25,power)
-NEUROPROP(r,0,0,bending range,f,0.0,1.0,1.0,bendrange)
-ENDNEUROCLASS
-
-NEUROCLASS(RotMuscle,@,Rotation muscle,,1,0,2)
-VISUALHINTS(DontShowClass+EffectorClass+V1RotMuscle+AtFirstPart)
-SYMBOL(`5,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,1,69,10,77,17,10,59,15,57,17,57,22,60,26,69,27,78,26,82,21,82,16,79,12,69,10,80,6,3,65,50,65,20,75,20,75,50')
-NEUROPROP(p,0,0,power,f,0.01,1.0,1.0,power)
-ENDNEUROCLASS
-
-NEUROCLASS(Diff,D,Differentiate,Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights,-1,1,0)
-SYMBOL(`3,3,25,0,25,100,75,50,25,0,1,75,50,100,50,3,44,42,51,57,36,57,44,42')
-ENDNEUROCLASS
-
-NEUROCLASS(FuzzyNeuro,Fuzzy,Fuzzy system [EXPERIMENTAL!],Refer to publications to learn more about this neuron.,-1,1,0)
-SYMBOL(`5,2,30,65,37,37,44,65,3,37,65,44,37,51,37,58,65,2,51,65,58,37,65,65,6,100,50,70,50,70,25,25,10,25,90,70,75,70,50,1,70,65,25,65')
-NEUROPROP(ns,0,0,number of fuzzy sets,d,1,,,fuzzySetsNr)
-NEUROPROP(nr,0,0,number of rules,d,1,,,rulesNr)
-NEUROPROP(fs,0,0,fuzzy sets,s,0,-1,0,fuzzySetString)
-NEUROPROP(fr,0,0,fuzzy rules,s,0,-1,0,fuzzyRulesString)
-ENDNEUROCLASS
-
-NEUROCLASS(Sticky,Sti,Sticky [EXPERIMENTAL!],,1,0,1)
-VISUALHINTS(EffectorClass)
-ENDNEUROCLASS
-
-NEUROCLASS(LinearMuscle,LMu,Linear muscle [EXPERIMENTAL!],,1,0,2)
-VISUALHINTS(EffectorClass)
-NEUROPROP(p,0,0,power,f,0.01,1.0,1.0,power)
-ENDNEUROCLASS
-
-NEUROCLASS(WaterDetect,Water,Water detector,`Output signal:\n0=on or above water surface\n1=under water (deeper than 1)\n0..1=in the transient area just below water surface',0,1,1)
-VISUALHINTS(ReceptorClass)
-ENDNEUROCLASS
-
-NEUROCLASS(Energy,Energy,Energy level,`The current energy level divided by the initial energy level.\nUsually falls from initial 1.0 down to 0.0 and then the creature dies. It can rise above 1.0 if enough food is ingested',0,1,0)
-VISUALHINTS(ReceptorClass)
-ENDNEUROCLASS
-
-NEUROCLASS(Channelize,Ch,Channelize,`Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.',-1,1,0)
-SYMBOL(`10,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,1,30,80,55,50,1,30,20,55,50,1,30,35,55,50,1,30,45,55,50,1,30,55,55,50,1,61,53,65,47,1,30,65,55,50')
-ENDNEUROCLASS
-
-NEUROCLASS(ChMux,ChMux,Channel multiplexer,`Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)',2,1,0)
-SYMBOL(`7,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,3,30,67,45,67,45,50,50,50,1,35,70,39,64,2,30,33,53,33,53,48')
-ENDNEUROCLASS
-
-NEUROCLASS(ChSel,ChSel,Channel selector,`Outputs a single channel (selected by the \"ch\" parameter) from multichannel input',1,1,0)
-SYMBOL(`6,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,1,30,50,50,50,1,35,53,39,47')
-NEUROPROP(ch,0,0,channel,d,,,,ch)
-ENDNEUROCLASS
-
-NEUROCLASS(Random,Rnd,Random noise,`Generates random noise (subsequent random values in the range of -1..+1)',0,1,0)
-ENDNEUROCLASS
-
-NEUROCLASS(Sinus,Sin,Sinus generator,`Output frequency = f0+input',1,1,0)
-SYMBOL(`3,12,75,50,71,37,62,28,50,25,37,28,28,37,25,50,28,62,37,71,50,75,62,71,71,62,75,50,1,75,50,100,50,5,35,50,40,35,45,35,55,65,60,65,65,50')
-NEUROPROP(f0,0,0,base frequency,f,-1.0,1.0,0.06283185307,f0)
-NEUROPROP(t,0,0,time,f,0,6.283185307,0,t)
-ENDNEUROCLASS
Index: /cpp/frams/config/f0-SDK.def
===================================================================
--- /cpp/frams/config/f0-SDK.def	(revision 288)
+++ /cpp/frams/config/f0-SDK.def	(revision 288)
@@ -0,0 +1,202 @@
+CLASS(Model,f0_model,m)
+GROUP(Properties)
+GROUP(Visual)
+PROP(se,0,1024,startenergy,f,,,,startenergy)
+PROP(Vstyle,1,0,vis_style,s,0,-1,,vis_style)
+ENDCLASS
+
+CLASS(Part,f0_part,p)
+GROUP(Geometry)
+GROUP(Other properties)
+GROUP(Visual)
+PROP(x,0,1024,position.x,f,,,,p.x)
+PROP(y,0,1024,position.y,f,,,,p.y)
+PROP(z,0,1024,position.z,f,,,,p.z)
+XPROP(m,1,0,mass,f,0.1,999.0,1.0,mass)
+PROP(sh,1,0,shape,d,0,3,0,shape)
+PROP(s,1,0,size,f,0.1,10.0,1.0,size)
+PROP(sx,1,0,scale.x,f,0.001,1000.0,1.0,scale.x)
+PROP(sy,1,0,scale.y,f,0.001,1000.0,1.0,scale.y)
+PROP(sz,1,0,scale.z,f,0.001,1000.0,1.0,scale.z)
+PROP(h,1,0,hollow,f,0,1,0,hollow)
+XPROP(dn,1,0,density,f,0.2,5.0,1.0,density)
+XPROP(fr,1,0,friction,f,0.0,4.0,0.4,friction)
+XPROP(ing,1,0,ingestion,f,0.0,1.0,0.25,ingest)
+XPROP(as,1,0,assimilation,f,0.0,1.0,0.25,assim)
+PROP(rx,0,0,rot.x,f,,,,rot.x)
+PROP(ry,0,1024,rot.y,f,,,,rot.y)
+PROP(rz,0,1024,rot.z,f,,,,rot.z)
+PROP(i,1,0,`info',s,,,,info)
+PROP(Vstyle,2,0,vis_style,s,0,-1,part,vis_style)
+XPROP(vs,2,0,visual thickness,f,0.05,0.7,0.2,vsize)
+XPROP(vr,2,0,red component,f,0.0,1.0,0.5,vcolor.x)
+XPROP(vg,2,1024,green component,f,0.0,1.0,0.5,vcolor.y)
+XPROP(vb,2,1024,blue component,f,0.0,1.0,0.5,vcolor.z)
+ENDCLASS
+
+CLASS(Joint,f0_joint,j)
+GROUP(Connections)
+GROUP(Geometry)
+GROUP(Other properties)
+GROUP(Visual)
+PROP(p1,0,1024,`part1 ref#',d,-1,999999,-1,p1_refno)
+PROP(p2,0,1024,`part2 ref#',d,-1,999999,-1,p2_refno)
+PROP(rx,1,0,rotation.x,f,,,,rot.x)
+PROP(ry,1,1024,rotation.y,f,,,,rot.y)
+PROP(rz,1,1024,rotation.z,f,,,,rot.z)
+PROP(dx,1,0,delta.x,f,-2,2,0,d.x)
+PROP(dy,1,1024,delta.y,f,-2,2,0,d.y)
+PROP(dz,1,1024,delta.z,f,-2,2,0,d.z)
+PROP(sh,1,0,shape,d,0,1,0,shape)
+XPROP(stif,2,0,stiffness,f,0.0,1.0,1.0,stif)
+XPROP(rotstif,2,0,rotation stiffness,f,0.0,1.0,1.0,rotstif)
+PROP(stam,2,0,stamina,f,0.0,1.0,0.25,stamina)
+PROP(i,2,0,`info',s,,,,info)
+PROP(Vstyle,3,0,vis_style,s,0,-1,joint,vis_style)
+XPROP(vr,3,0,red component,f,0.0,1.0,0.5,vcolor.x)
+XPROP(vg,3,1024,green component,f,0.0,1.0,0.5,vcolor.y)
+XPROP(vb,3,1024,blue component,f,0.0,1.0,0.5,vcolor.z)
+ENDCLASS
+
+CLASS(Joint,f0_nodeltajoint,j,NOXML)
+GROUP(Connections)
+GROUP(Geometry)
+GROUP(Other properties)
+GROUP(Visual)
+PROP(p1,0,1024,`part1 ref#',d,-1,999999,-1,p1_refno)
+PROP(p2,0,1024,`part2 ref#',d,-1,999999,-1,p2_refno)
+PROP(sh,1,0,shape,d,0,1,0,shape)
+XPROP(stif,2,0,stiffness,f,0.0,1.0,1.0,stif)
+XPROP(rotstif,2,0,rotation stiffness,f,0.0,1.0,1.0,rotstif)
+PROP(stam,2,0,stamina,f,0.0,1.0,0.25,stamina)
+PROP(i,2,0,`info',s,,,,info)
+PROP(Vstyle,3,0,vis_style,s,0,-1,joint,vis_style)
+XPROP(vr,3,0,red component,f,0.0,1.0,0.5,vcolor.x)
+XPROP(vg,3,1024,green component,f,0.0,1.0,0.5,vcolor.y)
+XPROP(vb,3,1024,blue component,f,0.0,1.0,0.5,vcolor.z)
+ENDCLASS
+
+CLASS(Neuro,f0_neuro,n)
+GROUP(Connections)
+GROUP(Other)
+GROUP(Visual)
+PROP(p,0,0,`part ref#',d,-1,999999,-1,part_refno)
+PROP(j,0,0,`joint ref#',d,-1,999999,-1,joint_refno)
+PROP(d,1,0,item details,s,,,N,details,GETSET)
+PROP(i,1,0,`info',s,,,,info)
+PROP(Vstyle,2,0,vis_style,s,0,-1,neuro,vis_style)
+PROP(getInputCount,0,1+2,`input count',d,,,,inputCount,GETONLY)
+PROP(getInputNeuroDef,0,1+2,`get input neuron',p oNeuroDef(d),,,,p_getInputNeuroDef,PROCEDURE)
+PROP(getInputNeuroIndex,0,1+2,`get input neuron index',p d(d),,,,p_getInputNeuroIndex,PROCEDURE)
+PROP(getInputWeight,0,1+2,`get input weight',p f(d),,,,p_getInputWeight,PROCEDURE)
+PROP(classObject,0,1+2,`neuron class',o NeuroClass,,,,classObject,GETONLY)
+ENDCLASS
+
+CLASS(NeuroConn,f0_neuroconn,c)
+GROUP(Connection)
+GROUP(Other)
+PROP(n1,0,1024,`this neuro ref#',d,-1,999999,-1,n1_refno)
+PROP(n2,0,1024,`connected neuro ref#',d,-1,999999,-1,n2_refno)
+PROP(w,0,1024,weight,f,-999999,999999,1.0,weight)
+PROP(i,1,0,`info',s,,,,info)
+ENDCLASS
+
+NEUROCLASS(StdNeuron,N,Neuron,`Standard neuron',-1,1,0)
+VISUALHINTS(DontShowClass)
+NEUROPROP(in,1,0,Inertia,f,0.0,1.0,0.8,inertia)
+NEUROPROP(fo,1,0,Force,f,0.0,999.0,0.04,force)
+NEUROPROP(si,1,0,Sigmoid,f,-99999.0,99999.0,2.0,sigmo)
+NEUROPROP(s,2,0,State,f,-1.0,1.0,0.0,newstate)
+ENDNEUROCLASS
+
+NEUROCLASS(StdUNeuron,Nu,`Unipolar neuron [EXPERIMENTAL!]',`Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.\nHaving 0 as one of the saturation states should help in \"gate circuits\", where input signal is passed through or blocked depending on the other singal.',-1,1,0)
+NEUROPROP(in,1,0,Inertia,f,0.0,1.0,0.8,inertia)
+NEUROPROP(fo,1,0,Force,f,0.0,999.0,0.04,force)
+NEUROPROP(si,1,0,Sigmoid,f,-99999.0,99999.0,2.0,sigmo)
+NEUROPROP(s,2,0,State,f,-1.0,1.0,0.0,newstate)
+ENDNEUROCLASS
+
+NEUROCLASS(Gyro,G,Gyroscope,`Equilibrium sensor.\n0=the stick is horizontal\n+1/-1=the stick is vertical',0,1,2)
+VISUALHINTS(ReceptorClass)
+SYMBOL(`8,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,12,43,24,48,24,48,19,38,19,38,24,43,24,43,54,48,54,48,64,43,69,38,64,38,54,43,54,5,63,69,58,74,48,79,38,79,28,74,23,69,1,43,79,43,74,1,23,69,26,66,1,63,69,60,66,1,55,76,53,73,1,31,75,33,72')
+ENDNEUROCLASS
+
+NEUROCLASS(Touch,T,Touch,`Touch sensor.\n-1=no contact\n0=just touching\n>0=pressing, value depends on the force applied',0,1,1)
+VISUALHINTS(ReceptorClass)
+SYMBOL(`2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50')
+NEUROPROP(r,1,0,Range,f,0.0,1.0,1.0,range)
+ENDNEUROCLASS
+
+NEUROCLASS(Smell,S,Smell,`Smell sensor. Aggregated \"smell of energy\" experienced from all energy objects (creatures and food pieces).\nClose objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)',0,1,1)
+VISUALHINTS(ReceptorClass)
+SYMBOL(`5,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,3,10,40,15,45,15,55,10,60,5,20,30,25,35,30,45,30,55,25,65,20,70,4,15,35,20,40,22,50,20,60,15,65,5,75,50,50,50,45,45,40,50,45,55,50,50')
+ENDNEUROCLASS
+
+NEUROCLASS(Const,*,Constant,Constant value,0,1,0)
+VISUALHINTS(Invisible)
+SYMBOL(`4,4,26,27,26,73,73,73,73,27,26,27,1,73,50,100,50,1,56,68,46,68,2,41,47,51,32,51,68')
+ENDNEUROCLASS
+
+NEUROCLASS(BendMuscle,|,Bend muscle,,1,0,2)
+VISUALHINTS(DontShowClass+EffectorClass+V1BendMuscle+AtFirstPart)
+SYMBOL(`6,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,3,65,56,49,29,57,24,72,50,4,68,53,70,53,70,55,68,55,68,53,5,50,21,60,15,70,14,79,15,87,20,81,10,1,86,20,77,21')
+NEUROPROP(p,0,0,power,f,0.01,1.0,0.25,power)
+NEUROPROP(r,0,0,bending range,f,0.0,1.0,1.0,bendrange)
+ENDNEUROCLASS
+
+NEUROCLASS(RotMuscle,@,Rotation muscle,,1,0,2)
+VISUALHINTS(DontShowClass+EffectorClass+V1RotMuscle+AtFirstPart)
+SYMBOL(`5,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,1,69,10,77,17,10,59,15,57,17,57,22,60,26,69,27,78,26,82,21,82,16,79,12,69,10,80,6,3,65,50,65,20,75,20,75,50')
+NEUROPROP(p,0,0,power,f,0.01,1.0,1.0,power)
+ENDNEUROCLASS
+
+NEUROCLASS(Diff,D,Differentiate,Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights,-1,1,0)
+SYMBOL(`3,3,25,0,25,100,75,50,25,0,1,75,50,100,50,3,44,42,51,57,36,57,44,42')
+ENDNEUROCLASS
+
+NEUROCLASS(FuzzyNeuro,Fuzzy,Fuzzy system [EXPERIMENTAL!],Refer to publications to learn more about this neuron.,-1,1,0)
+SYMBOL(`5,2,30,65,37,37,44,65,3,37,65,44,37,51,37,58,65,2,51,65,58,37,65,65,6,100,50,70,50,70,25,25,10,25,90,70,75,70,50,1,70,65,25,65')
+NEUROPROP(ns,0,0,number of fuzzy sets,d,1,,,fuzzySetsNr)
+NEUROPROP(nr,0,0,number of rules,d,1,,,rulesNr)
+NEUROPROP(fs,0,0,fuzzy sets,s,0,-1,0,fuzzySetString)
+NEUROPROP(fr,0,0,fuzzy rules,s,0,-1,0,fuzzyRulesString)
+ENDNEUROCLASS
+
+NEUROCLASS(Sticky,Sti,Sticky [EXPERIMENTAL!],,1,0,1)
+VISUALHINTS(EffectorClass)
+ENDNEUROCLASS
+
+NEUROCLASS(LinearMuscle,LMu,Linear muscle [EXPERIMENTAL!],,1,0,2)
+VISUALHINTS(EffectorClass)
+NEUROPROP(p,0,0,power,f,0.01,1.0,1.0,power)
+ENDNEUROCLASS
+
+NEUROCLASS(WaterDetect,Water,Water detector,`Output signal:\n0=on or above water surface\n1=under water (deeper than 1)\n0..1=in the transient area just below water surface',0,1,1)
+VISUALHINTS(ReceptorClass)
+ENDNEUROCLASS
+
+NEUROCLASS(Energy,Energy,Energy level,`The current energy level divided by the initial energy level.\nUsually falls from initial 1.0 down to 0.0 and then the creature dies. It can rise above 1.0 if enough food is ingested',0,1,0)
+VISUALHINTS(ReceptorClass)
+ENDNEUROCLASS
+
+NEUROCLASS(Channelize,Ch,Channelize,`Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.',-1,1,0)
+SYMBOL(`10,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,1,30,80,55,50,1,30,20,55,50,1,30,35,55,50,1,30,45,55,50,1,30,55,55,50,1,61,53,65,47,1,30,65,55,50')
+ENDNEUROCLASS
+
+NEUROCLASS(ChMux,ChMux,Channel multiplexer,`Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)',2,1,0)
+SYMBOL(`7,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,3,30,67,45,67,45,50,50,50,1,35,70,39,64,2,30,33,53,33,53,48')
+ENDNEUROCLASS
+
+NEUROCLASS(ChSel,ChSel,Channel selector,`Outputs a single channel (selected by the \"ch\" parameter) from multichannel input',1,1,0)
+SYMBOL(`6,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,1,30,50,50,50,1,35,53,39,47')
+NEUROPROP(ch,0,0,channel,d,,,,ch)
+ENDNEUROCLASS
+
+NEUROCLASS(Random,Rnd,Random noise,`Generates random noise (subsequent random values in the range of -1..+1)',0,1,0)
+ENDNEUROCLASS
+
+NEUROCLASS(Sinus,Sin,Sinus generator,`Output frequency = f0+input',1,1,0)
+SYMBOL(`3,12,75,50,71,37,62,28,50,25,37,28,28,37,25,50,28,62,37,71,50,75,62,71,71,62,75,50,1,75,50,100,50,5,35,50,40,35,45,35,55,65,60,65,65,50')
+NEUROPROP(f0,0,0,base frequency,f,-1.0,1.0,0.06283185307,f0)
+NEUROPROP(t,0,0,time,f,0,6.283185307,0,t)
+ENDNEUROCLASS
Index: p/frams/config/gdk_build_config.h
===================================================================
--- /cpp/frams/config/gdk_build_config.h	(revision 287)
+++ 	(revision )
@@ -1,23 +1,0 @@
-// This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
-// See LICENSE.txt for details.
-
-#ifndef _GDK_BUILD_CONFIG_H_
-#define _GDK_BUILD_CONFIG_H_
-
-#include "version.h"
-
-#define NOCREATUREOBJECT
-#define EASYMAPDEBUG
-#define GDK_WITHOUT_FRAMS
-#define NO_BARRIER
-#define NO_VMACHINE
-
-#define NEURO_IMPL_FILES "neuroimplfiles-GDK.h"
-#define NEURO_CLS_FACTORY "neurocls-f0-GDK-factory.h"
-#define NEURO_CLS_LIBRARY "neurocls-f0-GDK-library.h"
-#define F0_DEFASSIGN_FILE "defassign-f0-GDK.h"
-#define F0_CLASSES_FILE "f0-GDK-classes.h"
-#define GEN_CONFIG_FILE "gen-config-GDK.h"
-
-#endif
Index: /cpp/frams/config/sdk_build_config.h
===================================================================
--- /cpp/frams/config/sdk_build_config.h	(revision 288)
+++ /cpp/frams/config/sdk_build_config.h	(revision 288)
@@ -0,0 +1,23 @@
+// This file is a part of Framsticks SDK.  http://www.framsticks.com/
+// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// See LICENSE.txt for details.
+
+#ifndef _SDK_BUILD_CONFIG_H_
+#define _SDK_BUILD_CONFIG_H_
+
+#include "version.h"
+
+#define NOCREATUREOBJECT
+#define EASYMAPDEBUG
+#define SDK_WITHOUT_FRAMS
+#define NO_BARRIER
+#define NO_VMACHINE
+
+#define NEURO_IMPL_FILES "neuroimplfiles-SDK.h"
+#define NEURO_CLS_FACTORY "neurocls-f0-SDK-factory.h"
+#define NEURO_CLS_LIBRARY "neurocls-f0-SDK-library.h"
+#define F0_DEFASSIGN_FILE "defassign-f0-SDK.h"
+#define F0_CLASSES_FILE "f0-SDK-classes.h"
+#define GEN_CONFIG_FILE "gen-config-SDK.h"
+
+#endif
Index: p/frams/genetics/gen-config-GDK.h
===================================================================
--- /cpp/frams/genetics/gen-config-GDK.h	(revision 287)
+++ 	(revision )
@@ -1,32 +1,0 @@
-// This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
-// See LICENSE.txt for details.
-
-
-/**
- gen-config.h
-
- USE_GENCONV_xxx - configure converters
- USE_GENMAN_xxx - configure genman operators
-
- */
-
-#define USE_GENCONV_f10
-//#define USE_GENCONV_f21
-//#define USE_GENCONV_f30
-#define USE_GENCONV_f40
-//#define USE_GENCONV_f41_TEST
-//#define USE_GENCONV_f50
-#define USE_GENCONV_f90
-#define USE_GENCONV_fF0
-
-//#define USE_GENMAN_f0
-//#define USE_GENMAN_f1
-//#define USE_GENMAN_f2
-//#define USE_GENMAN_f3
-#define USE_GENMAN_f4
-//#define USE_GENMAN_f5
-#define USE_GENMAN_f9
-#define USE_GENMAN_fF
-#define USE_GENMAN_fT
-
Index: /cpp/frams/genetics/gen-config-SDK.h
===================================================================
--- /cpp/frams/genetics/gen-config-SDK.h	(revision 288)
+++ /cpp/frams/genetics/gen-config-SDK.h	(revision 288)
@@ -0,0 +1,32 @@
+// This file is a part of Framsticks SDK.  http://www.framsticks.com/
+// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// See LICENSE.txt for details.
+
+
+/**
+ gen-config.h
+
+ USE_GENCONV_xxx - configure converters
+ USE_GENMAN_xxx - configure genman operators
+
+ */
+
+#define USE_GENCONV_f10
+//#define USE_GENCONV_f21
+//#define USE_GENCONV_f30
+#define USE_GENCONV_f40
+//#define USE_GENCONV_f41_TEST
+//#define USE_GENCONV_f50
+#define USE_GENCONV_f90
+#define USE_GENCONV_fF0
+
+//#define USE_GENMAN_f0
+//#define USE_GENMAN_f1
+//#define USE_GENMAN_f2
+//#define USE_GENMAN_f3
+#define USE_GENMAN_f4
+//#define USE_GENMAN_f5
+#define USE_GENMAN_f9
+#define USE_GENMAN_fF
+#define USE_GENMAN_fT
+
Index: p/frams/model/defassign-f0-GDK.h
===================================================================
--- /cpp/frams/model/defassign-f0-GDK.h	(revision 287)
+++ 	(revision )
@@ -1,176 +1,0 @@
-// This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
-// See LICENSE.txt for details.
-
-
-
-
-
-void Part::defassign()
-{
-mass=1.0;
-shape=0;
-size=1.0;
-scale.x=1.0;
-scale.y=1.0;
-scale.z=1.0;
-hollow=0;
-density=1.0;
-friction=0.4;
-ingest=0.25;
-assim=0.25;
-vis_style="part";
-vsize=0.2;
-vcolor.x=0.5;
-vcolor.y=0.5;
-vcolor.z=0.5;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-void Joint::defassign()
-{
-p1_refno=-1;
-p2_refno=-1;
-d.x=0;
-d.y=0;
-d.z=0;
-shape=0;
-stif=1.0;
-rotstif=1.0;
-stamina=0.25;
-vis_style="joint";
-vcolor.x=0.5;
-vcolor.y=0.5;
-vcolor.z=0.5;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-void Neuro::defassign()
-{
-part_refno=-1;
-joint_refno=-1;
-
-vis_style="neuro";
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-void NeuroConn::defassign()
-{
-n1_refno=-1;
-n2_refno=-1;
-weight=1.0;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Index: /cpp/frams/model/defassign-f0-SDK.h
===================================================================
--- /cpp/frams/model/defassign-f0-SDK.h	(revision 288)
+++ /cpp/frams/model/defassign-f0-SDK.h	(revision 288)
@@ -0,0 +1,176 @@
+// This file is a part of Framsticks SDK.  http://www.framsticks.com/
+// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// See LICENSE.txt for details.
+
+
+
+
+
+void Part::defassign()
+{
+mass=1.0;
+shape=0;
+size=1.0;
+scale.x=1.0;
+scale.y=1.0;
+scale.z=1.0;
+hollow=0;
+density=1.0;
+friction=0.4;
+ingest=0.25;
+assim=0.25;
+vis_style="part";
+vsize=0.2;
+vcolor.x=0.5;
+vcolor.y=0.5;
+vcolor.z=0.5;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+void Joint::defassign()
+{
+p1_refno=-1;
+p2_refno=-1;
+d.x=0;
+d.y=0;
+d.z=0;
+shape=0;
+stif=1.0;
+rotstif=1.0;
+stamina=0.25;
+vis_style="joint";
+vcolor.x=0.5;
+vcolor.y=0.5;
+vcolor.z=0.5;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+void Neuro::defassign()
+{
+part_refno=-1;
+joint_refno=-1;
+
+vis_style="neuro";
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+void NeuroConn::defassign()
+{
+n1_refno=-1;
+n2_refno=-1;
+weight=1.0;
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: p/frams/model/f0-GDK-classes.h
===================================================================
--- /cpp/frams/model/f0-GDK-classes.h	(revision 287)
+++ 	(revision )
@@ -1,205 +1,0 @@
-// This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
-// See LICENSE.txt for details.
-
-
-#define FIELDSTRUCT Model
-ParamEntry f0_model_paramtab[]=
-{
- {"Properties",2,2,"m" },
- {"Visual",},
- {"se",0,1024,"startenergy","f",FIELD(startenergy),},
- {"Vstyle",1,0,"vis_style","s 0 -1 ",FIELD(vis_style),},
- {0,0,0,}
-};
-ParamEntry f0_model_xtra_paramtab[]=
-{
- {"Extra properties",1,0,"m"},
- {0,0,0,}
-};
-#undef FIELDSTRUCT
-
-
-#define FIELDSTRUCT Part
-ParamEntry f0_part_paramtab[]=
-{
- {"Geometry",3,23,"p" },
- {"Other properties",},
- {"Visual",},
- {"x",0,1024,"position.x","f",FIELD(p.x),},
- {"y",0,1024,"position.y","f",FIELD(p.y),},
- {"z",0,1024,"position.z","f",FIELD(p.z),},
- {"m",1,0,"mass","f 0.1 999.0 1.0",FIELD(mass),},
- {"sh",1,0,"shape","d 0 3 0",FIELD(shape),},
- {"s",1,0,"size","f 0.1 10.0 1.0",FIELD(size),},
- {"sx",1,0,"scale.x","f 0.001 1000.0 1.0",FIELD(scale.x),},
- {"sy",1,0,"scale.y","f 0.001 1000.0 1.0",FIELD(scale.y),},
- {"sz",1,0,"scale.z","f 0.001 1000.0 1.0",FIELD(scale.z),},
- {"h",1,0,"hollow","f 0 1 0",FIELD(hollow),},
- {"dn",1,0,"density","f 0.2 5.0 1.0",FIELD(density),},
- {"fr",1,0,"friction","f 0.0 4.0 0.4",FIELD(friction),},
- {"ing",1,0,"ingestion","f 0.0 1.0 0.25",FIELD(ingest),},
- {"as",1,0,"assimilation","f 0.0 1.0 0.25",FIELD(assim),},
- {"rx",0,0,"rot.x","f",FIELD(rot.x),},
- {"ry",0,1024,"rot.y","f",FIELD(rot.y),},
- {"rz",0,1024,"rot.z","f",FIELD(rot.z),},
- {"i",1,0,"info","s",FIELD(info),},
- {"Vstyle",2,0,"vis_style","s 0 -1 part",FIELD(vis_style),},
- {"vs",2,0,"visual thickness","f 0.05 0.7 0.2",FIELD(vsize),},
- {"vr",2,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
- {"vg",2,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
- {"vb",2,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
- {0,0,0,}
-};
-ParamEntry f0_part_xtra_paramtab[]=
-{
- {"Extra properties",1,9,"p"},
- {"m",0,0,"mass","f 0.1 999.0 1.0",FIELD(mass),},
- {"dn",0,0,"density","f 0.2 5.0 1.0",FIELD(density),},
- {"fr",0,0,"friction","f 0.0 4.0 0.4",FIELD(friction),},
- {"ing",0,0,"ingestion","f 0.0 1.0 0.25",FIELD(ingest),},
- {"as",0,0,"assimilation","f 0.0 1.0 0.25",FIELD(assim),},
- {"vs",0,0,"visual thickness","f 0.05 0.7 0.2",FIELD(vsize),},
- {"vr",0,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
- {"vg",0,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
- {"vb",0,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
- {0,0,0,}
-};
-#undef FIELDSTRUCT
-
-
-#define FIELDSTRUCT Joint
-ParamEntry f0_joint_paramtab[]=
-{
- {"Connections",4,17,"j" },
- {"Geometry",},
- {"Other properties",},
- {"Visual",},
- {"p1",0,1024,"part1 ref#","d -1 999999 -1",FIELD(p1_refno),},
- {"p2",0,1024,"part2 ref#","d -1 999999 -1",FIELD(p2_refno),},
- {"rx",1,0,"rotation.x","f",FIELD(rot.x),},
- {"ry",1,1024,"rotation.y","f",FIELD(rot.y),},
- {"rz",1,1024,"rotation.z","f",FIELD(rot.z),},
- {"dx",1,0,"delta.x","f -2 2 0",FIELD(d.x),},
- {"dy",1,1024,"delta.y","f -2 2 0",FIELD(d.y),},
- {"dz",1,1024,"delta.z","f -2 2 0",FIELD(d.z),},
- {"sh",1,0,"shape","d 0 1 0",FIELD(shape),},
- {"stif",2,0,"stiffness","f 0.0 1.0 1.0",FIELD(stif),},
- {"rotstif",2,0,"rotation stiffness","f 0.0 1.0 1.0",FIELD(rotstif),},
- {"stam",2,0,"stamina","f 0.0 1.0 0.25",FIELD(stamina),},
- {"i",2,0,"info","s",FIELD(info),},
- {"Vstyle",3,0,"vis_style","s 0 -1 joint",FIELD(vis_style),},
- {"vr",3,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
- {"vg",3,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
- {"vb",3,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
- {0,0,0,}
-};
-ParamEntry f0_joint_xtra_paramtab[]=
-{
- {"Extra properties",1,5,"j"},
- {"stif",0,0,"stiffness","f 0.0 1.0 1.0",FIELD(stif),},
- {"rotstif",0,0,"rotation stiffness","f 0.0 1.0 1.0",FIELD(rotstif),},
- {"vr",0,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
- {"vg",0,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
- {"vb",0,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
- {0,0,0,}
-};
-#undef FIELDSTRUCT
-
-
-#define FIELDSTRUCT Joint
-ParamEntry f0_nodeltajoint_paramtab[]=
-{
- {"Connections",4,11,"j" },
- {"Geometry",},
- {"Other properties",},
- {"Visual",},
- {"p1",0,1024,"part1 ref#","d -1 999999 -1",FIELD(p1_refno),},
- {"p2",0,1024,"part2 ref#","d -1 999999 -1",FIELD(p2_refno),},
- {"sh",1,0,"shape","d 0 1 0",FIELD(shape),},
- {"stif",2,0,"stiffness","f 0.0 1.0 1.0",FIELD(stif),},
- {"rotstif",2,0,"rotation stiffness","f 0.0 1.0 1.0",FIELD(rotstif),},
- {"stam",2,0,"stamina","f 0.0 1.0 0.25",FIELD(stamina),},
- {"i",2,0,"info","s",FIELD(info),},
- {"Vstyle",3,0,"vis_style","s 0 -1 joint",FIELD(vis_style),},
- {"vr",3,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
- {"vg",3,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
- {"vb",3,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
- {0,0,0,}
-};
-ParamEntry f0_nodeltajoint_xtra_paramtab[]=
-{
- {"Extra properties",1,5,"j"},
- {"stif",0,0,"stiffness","f 0.0 1.0 1.0",FIELD(stif),},
- {"rotstif",0,0,"rotation stiffness","f 0.0 1.0 1.0",FIELD(rotstif),},
- {"vr",0,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
- {"vg",0,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
- {"vb",0,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
- {0,0,0,}
-};
-#undef FIELDSTRUCT
-
-
-#define FIELDSTRUCT Neuro
-ParamEntry f0_neuro_paramtab[]=
-{
- {"Connections",3,10,"n" },
- {"Other",},
- {"Visual",},
- {"p",0,0,"part ref#","d -1 999999 -1",FIELD(part_refno),},
- {"j",0,0,"joint ref#","d -1 999999 -1",FIELD(joint_refno),},
- {"d",1,0,"item details","s",GETSET(details),},
- {"i",1,0,"info","s",FIELD(info),},
- {"Vstyle",2,0,"vis_style","s 0 -1 neuro",FIELD(vis_style),},
- {"getInputCount",0,1+2,"input count","d",GETONLY(inputCount),},
- {"getInputNeuroDef",0,1+2,"get input neuron","p oNeuroDef(d)",PROCEDURE(p_getInputNeuroDef),},
- {"getInputNeuroIndex",0,1+2,"get input neuron index","p d(d)",PROCEDURE(p_getInputNeuroIndex),},
- {"getInputWeight",0,1+2,"get input weight","p f(d)",PROCEDURE(p_getInputWeight),},
- {"classObject",0,1+2,"neuron class","o NeuroClass",GETONLY(classObject),},
- {0,0,0,}
-};
-ParamEntry f0_neuro_xtra_paramtab[]=
-{
- {"Extra properties",1,0,"n"},
- {0,0,0,}
-};
-#undef FIELDSTRUCT
-
-
-#define FIELDSTRUCT NeuroConn
-ParamEntry f0_neuroconn_paramtab[]=
-{
- {"Connection",2,4,"c" },
- {"Other",},
- {"n1",0,1024,"this neuro ref#","d -1 999999 -1",FIELD(n1_refno),},
- {"n2",0,1024,"connected neuro ref#","d -1 999999 -1",FIELD(n2_refno),},
- {"w",0,1024,"weight","f -999999 999999 1.0",FIELD(weight),},
- {"i",1,0,"info","s",FIELD(info),},
- {0,0,0,}
-};
-ParamEntry f0_neuroconn_xtra_paramtab[]=
-{
- {"Extra properties",1,0,"c"},
- {0,0,0,}
-};
-#undef FIELDSTRUCT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Index: /cpp/frams/model/f0-SDK-classes.h
===================================================================
--- /cpp/frams/model/f0-SDK-classes.h	(revision 288)
+++ /cpp/frams/model/f0-SDK-classes.h	(revision 288)
@@ -0,0 +1,205 @@
+// This file is a part of Framsticks SDK.  http://www.framsticks.com/
+// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// See LICENSE.txt for details.
+
+
+#define FIELDSTRUCT Model
+ParamEntry f0_model_paramtab[]=
+{
+ {"Properties",2,2,"m" },
+ {"Visual",},
+ {"se",0,1024,"startenergy","f",FIELD(startenergy),},
+ {"Vstyle",1,0,"vis_style","s 0 -1 ",FIELD(vis_style),},
+ {0,0,0,}
+};
+ParamEntry f0_model_xtra_paramtab[]=
+{
+ {"Extra properties",1,0,"m"},
+ {0,0,0,}
+};
+#undef FIELDSTRUCT
+
+
+#define FIELDSTRUCT Part
+ParamEntry f0_part_paramtab[]=
+{
+ {"Geometry",3,23,"p" },
+ {"Other properties",},
+ {"Visual",},
+ {"x",0,1024,"position.x","f",FIELD(p.x),},
+ {"y",0,1024,"position.y","f",FIELD(p.y),},
+ {"z",0,1024,"position.z","f",FIELD(p.z),},
+ {"m",1,0,"mass","f 0.1 999.0 1.0",FIELD(mass),},
+ {"sh",1,0,"shape","d 0 3 0",FIELD(shape),},
+ {"s",1,0,"size","f 0.1 10.0 1.0",FIELD(size),},
+ {"sx",1,0,"scale.x","f 0.001 1000.0 1.0",FIELD(scale.x),},
+ {"sy",1,0,"scale.y","f 0.001 1000.0 1.0",FIELD(scale.y),},
+ {"sz",1,0,"scale.z","f 0.001 1000.0 1.0",FIELD(scale.z),},
+ {"h",1,0,"hollow","f 0 1 0",FIELD(hollow),},
+ {"dn",1,0,"density","f 0.2 5.0 1.0",FIELD(density),},
+ {"fr",1,0,"friction","f 0.0 4.0 0.4",FIELD(friction),},
+ {"ing",1,0,"ingestion","f 0.0 1.0 0.25",FIELD(ingest),},
+ {"as",1,0,"assimilation","f 0.0 1.0 0.25",FIELD(assim),},
+ {"rx",0,0,"rot.x","f",FIELD(rot.x),},
+ {"ry",0,1024,"rot.y","f",FIELD(rot.y),},
+ {"rz",0,1024,"rot.z","f",FIELD(rot.z),},
+ {"i",1,0,"info","s",FIELD(info),},
+ {"Vstyle",2,0,"vis_style","s 0 -1 part",FIELD(vis_style),},
+ {"vs",2,0,"visual thickness","f 0.05 0.7 0.2",FIELD(vsize),},
+ {"vr",2,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",2,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",2,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
+ {0,0,0,}
+};
+ParamEntry f0_part_xtra_paramtab[]=
+{
+ {"Extra properties",1,9,"p"},
+ {"m",0,0,"mass","f 0.1 999.0 1.0",FIELD(mass),},
+ {"dn",0,0,"density","f 0.2 5.0 1.0",FIELD(density),},
+ {"fr",0,0,"friction","f 0.0 4.0 0.4",FIELD(friction),},
+ {"ing",0,0,"ingestion","f 0.0 1.0 0.25",FIELD(ingest),},
+ {"as",0,0,"assimilation","f 0.0 1.0 0.25",FIELD(assim),},
+ {"vs",0,0,"visual thickness","f 0.05 0.7 0.2",FIELD(vsize),},
+ {"vr",0,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",0,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",0,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
+ {0,0,0,}
+};
+#undef FIELDSTRUCT
+
+
+#define FIELDSTRUCT Joint
+ParamEntry f0_joint_paramtab[]=
+{
+ {"Connections",4,17,"j" },
+ {"Geometry",},
+ {"Other properties",},
+ {"Visual",},
+ {"p1",0,1024,"part1 ref#","d -1 999999 -1",FIELD(p1_refno),},
+ {"p2",0,1024,"part2 ref#","d -1 999999 -1",FIELD(p2_refno),},
+ {"rx",1,0,"rotation.x","f",FIELD(rot.x),},
+ {"ry",1,1024,"rotation.y","f",FIELD(rot.y),},
+ {"rz",1,1024,"rotation.z","f",FIELD(rot.z),},
+ {"dx",1,0,"delta.x","f -2 2 0",FIELD(d.x),},
+ {"dy",1,1024,"delta.y","f -2 2 0",FIELD(d.y),},
+ {"dz",1,1024,"delta.z","f -2 2 0",FIELD(d.z),},
+ {"sh",1,0,"shape","d 0 1 0",FIELD(shape),},
+ {"stif",2,0,"stiffness","f 0.0 1.0 1.0",FIELD(stif),},
+ {"rotstif",2,0,"rotation stiffness","f 0.0 1.0 1.0",FIELD(rotstif),},
+ {"stam",2,0,"stamina","f 0.0 1.0 0.25",FIELD(stamina),},
+ {"i",2,0,"info","s",FIELD(info),},
+ {"Vstyle",3,0,"vis_style","s 0 -1 joint",FIELD(vis_style),},
+ {"vr",3,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",3,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",3,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
+ {0,0,0,}
+};
+ParamEntry f0_joint_xtra_paramtab[]=
+{
+ {"Extra properties",1,5,"j"},
+ {"stif",0,0,"stiffness","f 0.0 1.0 1.0",FIELD(stif),},
+ {"rotstif",0,0,"rotation stiffness","f 0.0 1.0 1.0",FIELD(rotstif),},
+ {"vr",0,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",0,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",0,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
+ {0,0,0,}
+};
+#undef FIELDSTRUCT
+
+
+#define FIELDSTRUCT Joint
+ParamEntry f0_nodeltajoint_paramtab[]=
+{
+ {"Connections",4,11,"j" },
+ {"Geometry",},
+ {"Other properties",},
+ {"Visual",},
+ {"p1",0,1024,"part1 ref#","d -1 999999 -1",FIELD(p1_refno),},
+ {"p2",0,1024,"part2 ref#","d -1 999999 -1",FIELD(p2_refno),},
+ {"sh",1,0,"shape","d 0 1 0",FIELD(shape),},
+ {"stif",2,0,"stiffness","f 0.0 1.0 1.0",FIELD(stif),},
+ {"rotstif",2,0,"rotation stiffness","f 0.0 1.0 1.0",FIELD(rotstif),},
+ {"stam",2,0,"stamina","f 0.0 1.0 0.25",FIELD(stamina),},
+ {"i",2,0,"info","s",FIELD(info),},
+ {"Vstyle",3,0,"vis_style","s 0 -1 joint",FIELD(vis_style),},
+ {"vr",3,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",3,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",3,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
+ {0,0,0,}
+};
+ParamEntry f0_nodeltajoint_xtra_paramtab[]=
+{
+ {"Extra properties",1,5,"j"},
+ {"stif",0,0,"stiffness","f 0.0 1.0 1.0",FIELD(stif),},
+ {"rotstif",0,0,"rotation stiffness","f 0.0 1.0 1.0",FIELD(rotstif),},
+ {"vr",0,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
+ {"vg",0,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
+ {"vb",0,1024,"blue component","f 0.0 1.0 0.5",FIELD(vcolor.z),},
+ {0,0,0,}
+};
+#undef FIELDSTRUCT
+
+
+#define FIELDSTRUCT Neuro
+ParamEntry f0_neuro_paramtab[]=
+{
+ {"Connections",3,10,"n" },
+ {"Other",},
+ {"Visual",},
+ {"p",0,0,"part ref#","d -1 999999 -1",FIELD(part_refno),},
+ {"j",0,0,"joint ref#","d -1 999999 -1",FIELD(joint_refno),},
+ {"d",1,0,"item details","s",GETSET(details),},
+ {"i",1,0,"info","s",FIELD(info),},
+ {"Vstyle",2,0,"vis_style","s 0 -1 neuro",FIELD(vis_style),},
+ {"getInputCount",0,1+2,"input count","d",GETONLY(inputCount),},
+ {"getInputNeuroDef",0,1+2,"get input neuron","p oNeuroDef(d)",PROCEDURE(p_getInputNeuroDef),},
+ {"getInputNeuroIndex",0,1+2,"get input neuron index","p d(d)",PROCEDURE(p_getInputNeuroIndex),},
+ {"getInputWeight",0,1+2,"get input weight","p f(d)",PROCEDURE(p_getInputWeight),},
+ {"classObject",0,1+2,"neuron class","o NeuroClass",GETONLY(classObject),},
+ {0,0,0,}
+};
+ParamEntry f0_neuro_xtra_paramtab[]=
+{
+ {"Extra properties",1,0,"n"},
+ {0,0,0,}
+};
+#undef FIELDSTRUCT
+
+
+#define FIELDSTRUCT NeuroConn
+ParamEntry f0_neuroconn_paramtab[]=
+{
+ {"Connection",2,4,"c" },
+ {"Other",},
+ {"n1",0,1024,"this neuro ref#","d -1 999999 -1",FIELD(n1_refno),},
+ {"n2",0,1024,"connected neuro ref#","d -1 999999 -1",FIELD(n2_refno),},
+ {"w",0,1024,"weight","f -999999 999999 1.0",FIELD(weight),},
+ {"i",1,0,"info","s",FIELD(info),},
+ {0,0,0,}
+};
+ParamEntry f0_neuroconn_xtra_paramtab[]=
+{
+ {"Extra properties",1,0,"c"},
+ {0,0,0,}
+};
+#undef FIELDSTRUCT
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: /cpp/frams/model/modelparts.cpp
===================================================================
--- /cpp/frams/model/modelparts.cpp	(revision 287)
+++ /cpp/frams/model/modelparts.cpp	(revision 288)
@@ -25,5 +25,5 @@
 #include F0_DEFASSIGN_FILE
 
-#ifndef GDK_WITHOUT_FRAMS
+#ifndef SDK_WITHOUT_FRAMS
 #include <frams/neuro/neuroclsobject.h>
 #endif
@@ -539,5 +539,5 @@
 void Neuro::get_classObject(PARAMGETARGS)
 {
-#ifndef GDK_WITHOUT_FRAMS
+#ifndef SDK_WITHOUT_FRAMS
 NeuroClassExt::makeStaticObject(ret,getClass());
 #endif
Index: p/frams/neuro/impl/neuroimpl-body-gdk.h
===================================================================
--- /cpp/frams/neuro/impl/neuroimpl-body-gdk.h	(revision 287)
+++ 	(revision )
@@ -1,95 +1,0 @@
-// This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
-// See LICENSE.txt for details.
-
-#ifndef _NEUROIMPLBODY_H_
-#define _NEUROIMPLBODY_H_
-
-#include <frams/neuro/neuroimpl.h>
-
-class NI_Gyro: public NeuroImpl
-{
-public:
-NeuroImpl* makeNew(){return new NI_Gyro();} // for NeuroFactory
-int lateinit() {if (!neuro->joint) return 0; simorder=0; return 1;}
-void go() {setState(0);}
-};
-
-extern ParamEntry NI_Touch_tab[];
-class NI_Touch: public NeuroImpl
-{
-public:
-double range;
-NeuroImpl* makeNew(){return new NI_Touch();} // for NeuroFactory
-int lateinit() {if (!neuro->part) return 0; simorder=0; return 1;}
-void go() {setState(0);}
-NI_Touch():range(1) {paramentries=NI_Touch_tab;}
-};
-
-class NI_Smell: public NeuroImpl
-{
-public:
-NeuroImpl* makeNew(){return new NI_Smell();} // for NeuroFactory
-void go() {setState(0);}
-int lateinit() {if (!neuro->part) return 0; simorder=0; return 1;}
-};
-
-extern ParamEntry NI_BendMuscle_tab[];
-class NI_BendMuscle: public NeuroImpl
-{
-public:
-double power,bendrange;
-NeuroImpl* makeNew(){return new NI_BendMuscle();} // for NeuroFactory
-NI_BendMuscle() {paramentries=NI_BendMuscle_tab;}
-int lateinit() {if (!neuro->joint) return 0; simorder=2; return 1;}
-void go() {}
-};
-
-extern ParamEntry NI_RotMuscle_tab[];
-class NI_RotMuscle: public NeuroImpl
-{
-public:
-double power;
-NeuroImpl* makeNew(){return new NI_RotMuscle();} // for NeuroFactory
-NI_RotMuscle() {paramentries=NI_RotMuscle_tab;}
-int lateinit() {if (!neuro->joint) return 0; simorder=2; return 1;}
-void go() {}
-};
-
-extern ParamEntry NI_LinearMuscle_tab[];
-class NI_LinearMuscle: public NeuroImpl
-{
-public:
-double power;
-NeuroImpl* makeNew(){return new NI_RotMuscle();} // for NeuroFactory
-NI_LinearMuscle() {paramentries=NI_RotMuscle_tab;}
-int lateinit() {if (!neuro->joint) return 0; simorder=2; return 1;}
-void go() {}
-};
-
-class NI_Sticky: public NeuroImpl
-{
-public:
-double power;
-NeuroImpl* makeNew(){return new NI_Sticky();} // for NeuroFactory
-int lateinit() {if (!neuro->part) return 0; simorder=0; return 1;}
-void go() {}
-};
-
-class NI_WaterDetect: public NeuroImpl
-{
-public:
-NeuroImpl* makeNew(){return new NI_WaterDetect();} // for NeuroFactory
-int lateinit() {if (!neuro->part) return 0; simorder=0; return 1;}
-void go() {setState(0);}
-};
-
-class NI_Energy: public NeuroImpl
-{
-public:
-NeuroImpl* makeNew(){return new NI_Energy();} // for NeuroFactory
-void go() {setState(0);}
-};
-
-#endif
-
Index: /cpp/frams/neuro/impl/neuroimpl-body-sdk.h
===================================================================
--- /cpp/frams/neuro/impl/neuroimpl-body-sdk.h	(revision 288)
+++ /cpp/frams/neuro/impl/neuroimpl-body-sdk.h	(revision 288)
@@ -0,0 +1,95 @@
+// This file is a part of Framsticks SDK.  http://www.framsticks.com/
+// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// See LICENSE.txt for details.
+
+#ifndef _NEUROIMPLBODY_H_
+#define _NEUROIMPLBODY_H_
+
+#include <frams/neuro/neuroimpl.h>
+
+class NI_Gyro: public NeuroImpl
+{
+public:
+NeuroImpl* makeNew(){return new NI_Gyro();} // for NeuroFactory
+int lateinit() {if (!neuro->joint) return 0; simorder=0; return 1;}
+void go() {setState(0);}
+};
+
+extern ParamEntry NI_Touch_tab[];
+class NI_Touch: public NeuroImpl
+{
+public:
+double range;
+NeuroImpl* makeNew(){return new NI_Touch();} // for NeuroFactory
+int lateinit() {if (!neuro->part) return 0; simorder=0; return 1;}
+void go() {setState(0);}
+NI_Touch():range(1) {paramentries=NI_Touch_tab;}
+};
+
+class NI_Smell: public NeuroImpl
+{
+public:
+NeuroImpl* makeNew(){return new NI_Smell();} // for NeuroFactory
+void go() {setState(0);}
+int lateinit() {if (!neuro->part) return 0; simorder=0; return 1;}
+};
+
+extern ParamEntry NI_BendMuscle_tab[];
+class NI_BendMuscle: public NeuroImpl
+{
+public:
+double power,bendrange;
+NeuroImpl* makeNew(){return new NI_BendMuscle();} // for NeuroFactory
+NI_BendMuscle() {paramentries=NI_BendMuscle_tab;}
+int lateinit() {if (!neuro->joint) return 0; simorder=2; return 1;}
+void go() {}
+};
+
+extern ParamEntry NI_RotMuscle_tab[];
+class NI_RotMuscle: public NeuroImpl
+{
+public:
+double power;
+NeuroImpl* makeNew(){return new NI_RotMuscle();} // for NeuroFactory
+NI_RotMuscle() {paramentries=NI_RotMuscle_tab;}
+int lateinit() {if (!neuro->joint) return 0; simorder=2; return 1;}
+void go() {}
+};
+
+extern ParamEntry NI_LinearMuscle_tab[];
+class NI_LinearMuscle: public NeuroImpl
+{
+public:
+double power;
+NeuroImpl* makeNew(){return new NI_RotMuscle();} // for NeuroFactory
+NI_LinearMuscle() {paramentries=NI_RotMuscle_tab;}
+int lateinit() {if (!neuro->joint) return 0; simorder=2; return 1;}
+void go() {}
+};
+
+class NI_Sticky: public NeuroImpl
+{
+public:
+double power;
+NeuroImpl* makeNew(){return new NI_Sticky();} // for NeuroFactory
+int lateinit() {if (!neuro->part) return 0; simorder=0; return 1;}
+void go() {}
+};
+
+class NI_WaterDetect: public NeuroImpl
+{
+public:
+NeuroImpl* makeNew(){return new NI_WaterDetect();} // for NeuroFactory
+int lateinit() {if (!neuro->part) return 0; simorder=0; return 1;}
+void go() {setState(0);}
+};
+
+class NI_Energy: public NeuroImpl
+{
+public:
+NeuroImpl* makeNew(){return new NI_Energy();} // for NeuroFactory
+void go() {setState(0);}
+};
+
+#endif
+
Index: p/frams/neuro/neurocls-f0-GDK-factory.h
===================================================================
--- /cpp/frams/neuro/neurocls-f0-GDK-factory.h	(revision 287)
+++ 	(revision )
@@ -1,168 +1,0 @@
-// This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
-// See LICENSE.txt for details.
-
-
-// do not edit - generated automatically from "f0.def"
-// (to be included in "neurofactory.cpp")
-
-
-
-
-
-
-#define FIELDSTRUCT NI_StdNeuron 
-ParamEntry NI_StdNeuron_tab []={
-{"Neuron",1, 4 ,"N",},
-{"in",1,0,"Inertia","f 0.0 1.0 0.8",FIELD(inertia),},
-{"fo",1,0,"Force","f 0.0 999.0 0.04",FIELD(force),},
-{"si",1,0,"Sigmoid","f -99999.0 99999.0 2.0",FIELD(sigmo),},
-{"s",2,0,"State","f -1.0 1.0 0.0",FIELD(newstate),},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_StdUNeuron 
-ParamEntry NI_StdUNeuron_tab []={
-{"Unipolar neuron [EXPERIMENTAL!]",1, 4 ,"Nu",},
-{"in",1,0,"Inertia","f 0.0 1.0 0.8",FIELD(inertia),},
-{"fo",1,0,"Force","f 0.0 999.0 0.04",FIELD(force),},
-{"si",1,0,"Sigmoid","f -99999.0 99999.0 2.0",FIELD(sigmo),},
-{"s",2,0,"State","f -1.0 1.0 0.0",FIELD(newstate),},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_Gyro 
-ParamEntry NI_Gyro_tab []={
-{"Gyroscope",1, 0 ,"G",},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_Touch 
-ParamEntry NI_Touch_tab []={
-{"Touch",1, 1 ,"T",},
-{"r",1,0,"Range","f 0.0 1.0 1.0",FIELD(range),},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_Smell 
-ParamEntry NI_Smell_tab []={
-{"Smell",1, 0 ,"S",},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_Const 
-ParamEntry NI_Const_tab []={
-{"Constant",1, 0 ,"*",},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_BendMuscle 
-ParamEntry NI_BendMuscle_tab []={
-{"Bend muscle",1, 2 ,"|",},
-{"p",0,0,"power","f 0.01 1.0 0.25",FIELD(power),},
-{"r",0,0,"bending range","f 0.0 1.0 1.0",FIELD(bendrange),},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_RotMuscle 
-ParamEntry NI_RotMuscle_tab []={
-{"Rotation muscle",1, 1 ,"@",},
-{"p",0,0,"power","f 0.01 1.0 1.0",FIELD(power),},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_Diff 
-ParamEntry NI_Diff_tab []={
-{"Differentiate",1, 0 ,"D",},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_FuzzyNeuro 
-ParamEntry NI_FuzzyNeuro_tab []={
-{"Fuzzy system [EXPERIMENTAL!]",1, 4 ,"Fuzzy",},
-{"ns",0,0,"number of fuzzy sets","d 1  ",FIELD(fuzzySetsNr),},
-{"nr",0,0,"number of rules","d 1  ",FIELD(rulesNr),},
-{"fs",0,0,"fuzzy sets","s 0 -1 0",FIELD(fuzzySetString),},
-{"fr",0,0,"fuzzy rules","s 0 -1 0",FIELD(fuzzyRulesString),},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_Sticky 
-ParamEntry NI_Sticky_tab []={
-{"Sticky [EXPERIMENTAL!]",1, 0 ,"Sti",},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_LinearMuscle 
-ParamEntry NI_LinearMuscle_tab []={
-{"Linear muscle [EXPERIMENTAL!]",1, 1 ,"LMu",},
-{"p",0,0,"power","f 0.01 1.0 1.0",FIELD(power),},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_WaterDetect 
-ParamEntry NI_WaterDetect_tab []={
-{"Water detector",1, 0 ,"Water",},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_Energy 
-ParamEntry NI_Energy_tab []={
-{"Energy level",1, 0 ,"Energy",},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_Channelize 
-ParamEntry NI_Channelize_tab []={
-{"Channelize",1, 0 ,"Ch",},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_ChMux 
-ParamEntry NI_ChMux_tab []={
-{"Channel multiplexer",1, 0 ,"ChMux",},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_ChSel 
-ParamEntry NI_ChSel_tab []={
-{"Channel selector",1, 1 ,"ChSel",},
-{"ch",0,0,"channel","d   ",FIELD(ch),},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_Random 
-ParamEntry NI_Random_tab []={
-{"Random noise",1, 0 ,"Rnd",},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_Sinus 
-ParamEntry NI_Sinus_tab []={
-{"Sinus generator",1, 2 ,"Sin",},
-{"f0",0,0,"base frequency","f -1.0 1.0 0.06283185307",FIELD(f0),},
-{"t",0,0,"time","f 0 6.283185307 0",FIELD(t),},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define SETIMPLEMENTATION \
-setImplementation("N",new NI_StdNeuron); \
-setImplementation("Nu",new NI_StdUNeuron); \
-setImplementation("G",new NI_Gyro); \
-setImplementation("T",new NI_Touch); \
-setImplementation("S",new NI_Smell); \
-setImplementation("*",new NI_Const); \
-setImplementation("|",new NI_BendMuscle); \
-setImplementation("@",new NI_RotMuscle); \
-setImplementation("D",new NI_Diff); \
-setImplementation("Fuzzy",new NI_FuzzyNeuro); \
-setImplementation("Sti",new NI_Sticky); \
-setImplementation("LMu",new NI_LinearMuscle); \
-setImplementation("Water",new NI_WaterDetect); \
-setImplementation("Energy",new NI_Energy); \
-setImplementation("Ch",new NI_Channelize); \
-setImplementation("ChMux",new NI_ChMux); \
-setImplementation("ChSel",new NI_ChSel); \
-setImplementation("Rnd",new NI_Random); \
-setImplementation("Sin",new NI_Sinus); \
-
Index: p/frams/neuro/neurocls-f0-GDK-library.h
===================================================================
--- /cpp/frams/neuro/neurocls-f0-GDK-library.h	(revision 287)
+++ 	(revision )
@@ -1,188 +1,0 @@
-// This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
-// See LICENSE.txt for details.
-
-
-// do not edit - generated automatically from "f0.def"
-// (to be included in "neurolibrary.cpp")
-
-
-
-
-
-
-     
-static ParamEntry NI_StdNeuron_tab[]={
-{"Neuron",1, 4 ,"N",},
-
-{"in",1,0,"Inertia","f 0.0 1.0 0.8",},
-{"fo",1,0,"Force","f 0.0 999.0 0.04",},
-{"si",1,0,"Sigmoid","f -99999.0 99999.0 2.0",},
-{"s",2,0,"State","f -1.0 1.0 0.0",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_StdNeuron_tab,"Standard neuron",-1,1,0, NULL,false, 2));
-
-     
-static ParamEntry NI_StdUNeuron_tab[]={
-{"Unipolar neuron [EXPERIMENTAL!]",1, 4 ,"Nu",},
-{"in",1,0,"Inertia","f 0.0 1.0 0.8",},
-{"fo",1,0,"Force","f 0.0 999.0 0.04",},
-{"si",1,0,"Sigmoid","f -99999.0 99999.0 2.0",},
-{"s",2,0,"State","f -1.0 1.0 0.0",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_StdUNeuron_tab,"Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.\nHaving 0 as one of the saturation states should help in \"gate circuits\", where input signal is passed through or blocked depending on the other singal.",-1,1,0, NULL,false, 0));
-
-     static int Gyro_xy[]={83,8,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,12,43,24,48,24,48,19,38,19,38,24,43,24,43,54,48,54,48,64,43,69,38,64,38,54,43,54,5,63,69,58,74,48,79,38,79,28,74,23,69,1,43,79,43,74,1,23,69,26,66,1,63,69,60,66,1,55,76,53,73,1,31,75,33,72};   
-static ParamEntry NI_Gyro_tab[]={
-{"Gyroscope",1, 0 ,"G",},
-
-
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_Gyro_tab,"Equilibrium sensor.\n0=the stick is horizontal\n+1/-1=the stick is vertical",0,1,2, Gyro_xy,false, 32));
-
-     static int Touch_xy[]={43,2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50};   
-static ParamEntry NI_Touch_tab[]={
-{"Touch",1, 1 ,"T",},
-
-
-{"r",1,0,"Range","f 0.0 1.0 1.0",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_Touch_tab,"Touch sensor.\n-1=no contact\n0=just touching\n>0=pressing, value depends on the force applied",0,1,1, Touch_xy,false, 32));
-
-     static int Smell_xy[]={64,5,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,3,10,40,15,45,15,55,10,60,5,20,30,25,35,30,45,30,55,25,65,20,70,4,15,35,20,40,22,50,20,60,15,65,5,75,50,50,50,45,45,40,50,45,55,50,50};   
-static ParamEntry NI_Smell_tab[]={
-{"Smell",1, 0 ,"S",},
-
-
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_Smell_tab,"Smell sensor. Aggregated \"smell of energy\" experienced from all energy objects (creatures and food pieces).\nClose objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)",0,1,1, Smell_xy,false, 32));
-
-     static int Const_xy[]={29,4,4,26,27,26,73,73,73,73,27,26,27,1,73,50,100,50,1,56,68,46,68,2,41,47,51,32,51,68};   
-static ParamEntry NI_Const_tab[]={
-{"Constant",1, 0 ,"*",},
-
-
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_Const_tab,"Constant value",0,1,0, Const_xy,false, 1));
-
-     static int BendMuscle_xy[]={63,6,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,3,65,56,49,29,57,24,72,50,4,68,53,70,53,70,55,68,55,68,53,5,50,21,60,15,70,14,79,15,87,20,81,10,1,86,20,77,21};   
-static ParamEntry NI_BendMuscle_tab[]={
-{"Bend muscle",1, 2 ,"|",},
-
-
-{"p",0,0,"power","f 0.01 1.0 0.25",},
-{"r",0,0,"bending range","f 0.0 1.0 1.0",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_BendMuscle_tab,"",1,0,2, BendMuscle_xy,false, 2+16+64+4));
-
-     static int RotMuscle_xy[]={62,5,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,1,69,10,77,17,10,59,15,57,17,57,22,60,26,69,27,78,26,82,21,82,16,79,12,69,10,80,6,3,65,50,65,20,75,20,75,50};   
-static ParamEntry NI_RotMuscle_tab[]={
-{"Rotation muscle",1, 1 ,"@",},
-
-
-{"p",0,0,"power","f 0.01 1.0 1.0",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_RotMuscle_tab,"",1,0,2, RotMuscle_xy,false, 2+16+128+4));
-
-     static int Diff_xy[]={24,3,3,25,0,25,100,75,50,25,0,1,75,50,100,50,3,44,42,51,57,36,57,44,42};   
-static ParamEntry NI_Diff_tab[]={
-{"Differentiate",1, 0 ,"D",},
-
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_Diff_tab,"Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights",-1,1,0, Diff_xy,false, 0));
-
-     static int FuzzyNeuro_xy[]={44,5,2,30,65,37,37,44,65,3,37,65,44,37,51,37,58,65,2,51,65,58,37,65,65,6,100,50,70,50,70,25,25,10,25,90,70,75,70,50,1,70,65,25,65};   
-static ParamEntry NI_FuzzyNeuro_tab[]={
-{"Fuzzy system [EXPERIMENTAL!]",1, 4 ,"Fuzzy",},
-
-{"ns",0,0,"number of fuzzy sets","d 1  ",},
-{"nr",0,0,"number of rules","d 1  ",},
-{"fs",0,0,"fuzzy sets","s 0 -1 0",},
-{"fr",0,0,"fuzzy rules","s 0 -1 0",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_FuzzyNeuro_tab,"Refer to publications to learn more about this neuron.",-1,1,0, FuzzyNeuro_xy,false, 0));
-
-     
-static ParamEntry NI_Sticky_tab[]={
-{"Sticky [EXPERIMENTAL!]",1, 0 ,"Sti",},
-
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_Sticky_tab,"",1,0,1, NULL,false, 16));
-
-     
-static ParamEntry NI_LinearMuscle_tab[]={
-{"Linear muscle [EXPERIMENTAL!]",1, 1 ,"LMu",},
-
-{"p",0,0,"power","f 0.01 1.0 1.0",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_LinearMuscle_tab,"",1,0,2, NULL,false, 16));
-
-     
-static ParamEntry NI_WaterDetect_tab[]={
-{"Water detector",1, 0 ,"Water",},
-
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_WaterDetect_tab,"Output signal:\n0=on or above water surface\n1=under water (deeper than 1)\n0..1=in the transient area just below water surface",0,1,1, NULL,false, 32));
-
-     
-static ParamEntry NI_Energy_tab[]={
-{"Energy level",1, 0 ,"Energy",},
-
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_Energy_tab,"The current energy level divided by the initial energy level.\nUsually falls from initial 1.0 down to 0.0 and then the creature dies. It can rise above 1.0 if enough food is ingested",0,1,0, NULL,false, 32));
-
-     static int Channelize_xy[]={57,10,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,1,30,80,55,50,1,30,20,55,50,1,30,35,55,50,1,30,45,55,50,1,30,55,55,50,1,61,53,65,47,1,30,65,55,50};   
-static ParamEntry NI_Channelize_tab[]={
-{"Channelize",1, 0 ,"Ch",},
-
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_Channelize_tab,"Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.",-1,1,0, Channelize_xy,false, 0));
-
-     static int ChMux_xy[]={52,7,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,3,30,67,45,67,45,50,50,50,1,35,70,39,64,2,30,33,53,33,53,48};   
-static ParamEntry NI_ChMux_tab[]={
-{"Channel multiplexer",1, 0 ,"ChMux",},
-
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_ChMux_tab,"Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)",2,1,0, ChMux_xy,false, 0));
-
-     static int ChSel_xy[]={41,6,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,1,30,50,50,50,1,35,53,39,47};   
-static ParamEntry NI_ChSel_tab[]={
-{"Channel selector",1, 1 ,"ChSel",},
-
-{"ch",0,0,"channel","d   ",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_ChSel_tab,"Outputs a single channel (selected by the \"ch\" parameter) from multichannel input",1,1,0, ChSel_xy,false, 0));
-
-     
-static ParamEntry NI_Random_tab[]={
-{"Random noise",1, 0 ,"Rnd",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_Random_tab,"Generates random noise (subsequent random values in the range of -1..+1)",0,1,0, NULL,false, 0));
-
-     static int Sinus_xy[]={46,3,12,75,50,71,37,62,28,50,25,37,28,28,37,25,50,28,62,37,71,50,75,62,71,71,62,75,50,1,75,50,100,50,5,35,50,40,35,45,35,55,65,60,65,65,50};   
-static ParamEntry NI_Sinus_tab[]={
-{"Sinus generator",1, 2 ,"Sin",},
-
-{"f0",0,0,"base frequency","f -1.0 1.0 0.06283185307",},
-{"t",0,0,"time","f 0 6.283185307 0",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_Sinus_tab,"Output frequency = f0+input",1,1,0, Sinus_xy,false, 0));
Index: /cpp/frams/neuro/neurocls-f0-SDK-factory.h
===================================================================
--- /cpp/frams/neuro/neurocls-f0-SDK-factory.h	(revision 288)
+++ /cpp/frams/neuro/neurocls-f0-SDK-factory.h	(revision 288)
@@ -0,0 +1,168 @@
+// This file is a part of Framsticks SDK.  http://www.framsticks.com/
+// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// See LICENSE.txt for details.
+
+
+// do not edit - generated automatically from "f0.def"
+// (to be included in "neurofactory.cpp")
+
+
+
+
+
+
+#define FIELDSTRUCT NI_StdNeuron 
+ParamEntry NI_StdNeuron_tab []={
+{"Neuron",1, 4 ,"N",},
+{"in",1,0,"Inertia","f 0.0 1.0 0.8",FIELD(inertia),},
+{"fo",1,0,"Force","f 0.0 999.0 0.04",FIELD(force),},
+{"si",1,0,"Sigmoid","f -99999.0 99999.0 2.0",FIELD(sigmo),},
+{"s",2,0,"State","f -1.0 1.0 0.0",FIELD(newstate),},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_StdUNeuron 
+ParamEntry NI_StdUNeuron_tab []={
+{"Unipolar neuron [EXPERIMENTAL!]",1, 4 ,"Nu",},
+{"in",1,0,"Inertia","f 0.0 1.0 0.8",FIELD(inertia),},
+{"fo",1,0,"Force","f 0.0 999.0 0.04",FIELD(force),},
+{"si",1,0,"Sigmoid","f -99999.0 99999.0 2.0",FIELD(sigmo),},
+{"s",2,0,"State","f -1.0 1.0 0.0",FIELD(newstate),},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_Gyro 
+ParamEntry NI_Gyro_tab []={
+{"Gyroscope",1, 0 ,"G",},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_Touch 
+ParamEntry NI_Touch_tab []={
+{"Touch",1, 1 ,"T",},
+{"r",1,0,"Range","f 0.0 1.0 1.0",FIELD(range),},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_Smell 
+ParamEntry NI_Smell_tab []={
+{"Smell",1, 0 ,"S",},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_Const 
+ParamEntry NI_Const_tab []={
+{"Constant",1, 0 ,"*",},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_BendMuscle 
+ParamEntry NI_BendMuscle_tab []={
+{"Bend muscle",1, 2 ,"|",},
+{"p",0,0,"power","f 0.01 1.0 0.25",FIELD(power),},
+{"r",0,0,"bending range","f 0.0 1.0 1.0",FIELD(bendrange),},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_RotMuscle 
+ParamEntry NI_RotMuscle_tab []={
+{"Rotation muscle",1, 1 ,"@",},
+{"p",0,0,"power","f 0.01 1.0 1.0",FIELD(power),},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_Diff 
+ParamEntry NI_Diff_tab []={
+{"Differentiate",1, 0 ,"D",},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_FuzzyNeuro 
+ParamEntry NI_FuzzyNeuro_tab []={
+{"Fuzzy system [EXPERIMENTAL!]",1, 4 ,"Fuzzy",},
+{"ns",0,0,"number of fuzzy sets","d 1  ",FIELD(fuzzySetsNr),},
+{"nr",0,0,"number of rules","d 1  ",FIELD(rulesNr),},
+{"fs",0,0,"fuzzy sets","s 0 -1 0",FIELD(fuzzySetString),},
+{"fr",0,0,"fuzzy rules","s 0 -1 0",FIELD(fuzzyRulesString),},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_Sticky 
+ParamEntry NI_Sticky_tab []={
+{"Sticky [EXPERIMENTAL!]",1, 0 ,"Sti",},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_LinearMuscle 
+ParamEntry NI_LinearMuscle_tab []={
+{"Linear muscle [EXPERIMENTAL!]",1, 1 ,"LMu",},
+{"p",0,0,"power","f 0.01 1.0 1.0",FIELD(power),},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_WaterDetect 
+ParamEntry NI_WaterDetect_tab []={
+{"Water detector",1, 0 ,"Water",},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_Energy 
+ParamEntry NI_Energy_tab []={
+{"Energy level",1, 0 ,"Energy",},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_Channelize 
+ParamEntry NI_Channelize_tab []={
+{"Channelize",1, 0 ,"Ch",},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_ChMux 
+ParamEntry NI_ChMux_tab []={
+{"Channel multiplexer",1, 0 ,"ChMux",},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_ChSel 
+ParamEntry NI_ChSel_tab []={
+{"Channel selector",1, 1 ,"ChSel",},
+{"ch",0,0,"channel","d   ",FIELD(ch),},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_Random 
+ParamEntry NI_Random_tab []={
+{"Random noise",1, 0 ,"Rnd",},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_Sinus 
+ParamEntry NI_Sinus_tab []={
+{"Sinus generator",1, 2 ,"Sin",},
+{"f0",0,0,"base frequency","f -1.0 1.0 0.06283185307",FIELD(f0),},
+{"t",0,0,"time","f 0 6.283185307 0",FIELD(t),},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define SETIMPLEMENTATION \
+setImplementation("N",new NI_StdNeuron); \
+setImplementation("Nu",new NI_StdUNeuron); \
+setImplementation("G",new NI_Gyro); \
+setImplementation("T",new NI_Touch); \
+setImplementation("S",new NI_Smell); \
+setImplementation("*",new NI_Const); \
+setImplementation("|",new NI_BendMuscle); \
+setImplementation("@",new NI_RotMuscle); \
+setImplementation("D",new NI_Diff); \
+setImplementation("Fuzzy",new NI_FuzzyNeuro); \
+setImplementation("Sti",new NI_Sticky); \
+setImplementation("LMu",new NI_LinearMuscle); \
+setImplementation("Water",new NI_WaterDetect); \
+setImplementation("Energy",new NI_Energy); \
+setImplementation("Ch",new NI_Channelize); \
+setImplementation("ChMux",new NI_ChMux); \
+setImplementation("ChSel",new NI_ChSel); \
+setImplementation("Rnd",new NI_Random); \
+setImplementation("Sin",new NI_Sinus); \
+
Index: /cpp/frams/neuro/neurocls-f0-SDK-library.h
===================================================================
--- /cpp/frams/neuro/neurocls-f0-SDK-library.h	(revision 288)
+++ /cpp/frams/neuro/neurocls-f0-SDK-library.h	(revision 288)
@@ -0,0 +1,188 @@
+// This file is a part of Framsticks SDK.  http://www.framsticks.com/
+// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// See LICENSE.txt for details.
+
+
+// do not edit - generated automatically from "f0.def"
+// (to be included in "neurolibrary.cpp")
+
+
+
+
+
+
+     
+static ParamEntry NI_StdNeuron_tab[]={
+{"Neuron",1, 4 ,"N",},
+
+{"in",1,0,"Inertia","f 0.0 1.0 0.8",},
+{"fo",1,0,"Force","f 0.0 999.0 0.04",},
+{"si",1,0,"Sigmoid","f -99999.0 99999.0 2.0",},
+{"s",2,0,"State","f -1.0 1.0 0.0",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_StdNeuron_tab,"Standard neuron",-1,1,0, NULL,false, 2));
+
+     
+static ParamEntry NI_StdUNeuron_tab[]={
+{"Unipolar neuron [EXPERIMENTAL!]",1, 4 ,"Nu",},
+{"in",1,0,"Inertia","f 0.0 1.0 0.8",},
+{"fo",1,0,"Force","f 0.0 999.0 0.04",},
+{"si",1,0,"Sigmoid","f -99999.0 99999.0 2.0",},
+{"s",2,0,"State","f -1.0 1.0 0.0",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_StdUNeuron_tab,"Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.\nHaving 0 as one of the saturation states should help in \"gate circuits\", where input signal is passed through or blocked depending on the other singal.",-1,1,0, NULL,false, 0));
+
+     static int Gyro_xy[]={83,8,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,12,43,24,48,24,48,19,38,19,38,24,43,24,43,54,48,54,48,64,43,69,38,64,38,54,43,54,5,63,69,58,74,48,79,38,79,28,74,23,69,1,43,79,43,74,1,23,69,26,66,1,63,69,60,66,1,55,76,53,73,1,31,75,33,72};   
+static ParamEntry NI_Gyro_tab[]={
+{"Gyroscope",1, 0 ,"G",},
+
+
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_Gyro_tab,"Equilibrium sensor.\n0=the stick is horizontal\n+1/-1=the stick is vertical",0,1,2, Gyro_xy,false, 32));
+
+     static int Touch_xy[]={43,2,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,11,75,50,65,50,60,55,55,45,50,55,45,45,40,50,35,50,30,45,25,50,30,55,35,50};   
+static ParamEntry NI_Touch_tab[]={
+{"Touch",1, 1 ,"T",},
+
+
+{"r",1,0,"Range","f 0.0 1.0 1.0",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_Touch_tab,"Touch sensor.\n-1=no contact\n0=just touching\n>0=pressing, value depends on the force applied",0,1,1, Touch_xy,false, 32));
+
+     static int Smell_xy[]={64,5,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,3,10,40,15,45,15,55,10,60,5,20,30,25,35,30,45,30,55,25,65,20,70,4,15,35,20,40,22,50,20,60,15,65,5,75,50,50,50,45,45,40,50,45,55,50,50};   
+static ParamEntry NI_Smell_tab[]={
+{"Smell",1, 0 ,"S",},
+
+
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_Smell_tab,"Smell sensor. Aggregated \"smell of energy\" experienced from all energy objects (creatures and food pieces).\nClose objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)",0,1,1, Smell_xy,false, 32));
+
+     static int Const_xy[]={29,4,4,26,27,26,73,73,73,73,27,26,27,1,73,50,100,50,1,56,68,46,68,2,41,47,51,32,51,68};   
+static ParamEntry NI_Const_tab[]={
+{"Constant",1, 0 ,"*",},
+
+
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_Const_tab,"Constant value",0,1,0, Const_xy,false, 1));
+
+     static int BendMuscle_xy[]={63,6,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,3,65,56,49,29,57,24,72,50,4,68,53,70,53,70,55,68,55,68,53,5,50,21,60,15,70,14,79,15,87,20,81,10,1,86,20,77,21};   
+static ParamEntry NI_BendMuscle_tab[]={
+{"Bend muscle",1, 2 ,"|",},
+
+
+{"p",0,0,"power","f 0.01 1.0 0.25",},
+{"r",0,0,"bending range","f 0.0 1.0 1.0",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_BendMuscle_tab,"",1,0,2, BendMuscle_xy,false, 2+16+64+4));
+
+     static int RotMuscle_xy[]={62,5,5,25,40,35,40,45,50,35,60,25,60,25,40,4,65,85,65,50,75,50,75,85,65,85,1,69,10,77,17,10,59,15,57,17,57,22,60,26,69,27,78,26,82,21,82,16,79,12,69,10,80,6,3,65,50,65,20,75,20,75,50};   
+static ParamEntry NI_RotMuscle_tab[]={
+{"Rotation muscle",1, 1 ,"@",},
+
+
+{"p",0,0,"power","f 0.01 1.0 1.0",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_RotMuscle_tab,"",1,0,2, RotMuscle_xy,false, 2+16+128+4));
+
+     static int Diff_xy[]={24,3,3,25,0,25,100,75,50,25,0,1,75,50,100,50,3,44,42,51,57,36,57,44,42};   
+static ParamEntry NI_Diff_tab[]={
+{"Differentiate",1, 0 ,"D",},
+
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_Diff_tab,"Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights",-1,1,0, Diff_xy,false, 0));
+
+     static int FuzzyNeuro_xy[]={44,5,2,30,65,37,37,44,65,3,37,65,44,37,51,37,58,65,2,51,65,58,37,65,65,6,100,50,70,50,70,25,25,10,25,90,70,75,70,50,1,70,65,25,65};   
+static ParamEntry NI_FuzzyNeuro_tab[]={
+{"Fuzzy system [EXPERIMENTAL!]",1, 4 ,"Fuzzy",},
+
+{"ns",0,0,"number of fuzzy sets","d 1  ",},
+{"nr",0,0,"number of rules","d 1  ",},
+{"fs",0,0,"fuzzy sets","s 0 -1 0",},
+{"fr",0,0,"fuzzy rules","s 0 -1 0",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_FuzzyNeuro_tab,"Refer to publications to learn more about this neuron.",-1,1,0, FuzzyNeuro_xy,false, 0));
+
+     
+static ParamEntry NI_Sticky_tab[]={
+{"Sticky [EXPERIMENTAL!]",1, 0 ,"Sti",},
+
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_Sticky_tab,"",1,0,1, NULL,false, 16));
+
+     
+static ParamEntry NI_LinearMuscle_tab[]={
+{"Linear muscle [EXPERIMENTAL!]",1, 1 ,"LMu",},
+
+{"p",0,0,"power","f 0.01 1.0 1.0",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_LinearMuscle_tab,"",1,0,2, NULL,false, 16));
+
+     
+static ParamEntry NI_WaterDetect_tab[]={
+{"Water detector",1, 0 ,"Water",},
+
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_WaterDetect_tab,"Output signal:\n0=on or above water surface\n1=under water (deeper than 1)\n0..1=in the transient area just below water surface",0,1,1, NULL,false, 32));
+
+     
+static ParamEntry NI_Energy_tab[]={
+{"Energy level",1, 0 ,"Energy",},
+
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_Energy_tab,"The current energy level divided by the initial energy level.\nUsually falls from initial 1.0 down to 0.0 and then the creature dies. It can rise above 1.0 if enough food is ingested",0,1,0, NULL,false, 32));
+
+     static int Channelize_xy[]={57,10,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,1,30,80,55,50,1,30,20,55,50,1,30,35,55,50,1,30,45,55,50,1,30,55,55,50,1,61,53,65,47,1,30,65,55,50};   
+static ParamEntry NI_Channelize_tab[]={
+{"Channelize",1, 0 ,"Ch",},
+
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_Channelize_tab,"Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.",-1,1,0, Channelize_xy,false, 0));
+
+     static int ChMux_xy[]={52,7,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,3,30,67,45,67,45,50,50,50,1,35,70,39,64,2,30,33,53,33,53,48};   
+static ParamEntry NI_ChMux_tab[]={
+{"Channel multiplexer",1, 0 ,"ChMux",},
+
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_ChMux_tab,"Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)",2,1,0, ChMux_xy,false, 0));
+
+     static int ChSel_xy[]={41,6,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,1,30,50,50,50,1,35,53,39,47};   
+static ParamEntry NI_ChSel_tab[]={
+{"Channel selector",1, 1 ,"ChSel",},
+
+{"ch",0,0,"channel","d   ",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_ChSel_tab,"Outputs a single channel (selected by the \"ch\" parameter) from multichannel input",1,1,0, ChSel_xy,false, 0));
+
+     
+static ParamEntry NI_Random_tab[]={
+{"Random noise",1, 0 ,"Rnd",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_Random_tab,"Generates random noise (subsequent random values in the range of -1..+1)",0,1,0, NULL,false, 0));
+
+     static int Sinus_xy[]={46,3,12,75,50,71,37,62,28,50,25,37,28,28,37,25,50,28,62,37,71,50,75,62,71,71,62,75,50,1,75,50,100,50,5,35,50,40,35,45,35,55,65,60,65,65,50};   
+static ParamEntry NI_Sinus_tab[]={
+{"Sinus generator",1, 2 ,"Sin",},
+
+{"f0",0,0,"base frequency","f -1.0 1.0 0.06283185307",},
+{"t",0,0,"time","f 0 6.283185307 0",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_Sinus_tab,"Output frequency = f0+input",1,1,0, Sinus_xy,false, 0));
Index: /cpp/frams/neuro/neuroimpl.cpp
===================================================================
--- /cpp/frams/neuro/neuroimpl.cpp	(revision 287)
+++ /cpp/frams/neuro/neuroimpl.cpp	(revision 288)
@@ -7,5 +7,5 @@
 #include <frams/util/rndutil.h>
 #include <common/nonstd_math.h>
-#ifndef GDK_WITHOUT_FRAMS
+#ifndef SDK_WITHOUT_FRAMS
 #include <frams/simul/creature.h>
 #include <frams/mech/creatmechobj.h>
@@ -463,5 +463,5 @@
 Creature* NeuroImpl::getCreature()
 {
-#ifndef GDK_WITHOUT_FRAMS
+#ifndef SDK_WITHOUT_FRAMS
 CreatMechObject *cmo=(CreatMechObject *)neuro->owner->userdata[CreatMechObject::modeltags_id];
 return cmo->creature;
@@ -473,5 +473,5 @@
 void NeuroImpl::get_creature(ExtValue *ret)
 {
-#ifndef GDK_WITHOUT_FRAMS
+#ifndef SDK_WITHOUT_FRAMS
 ret->setObject(ExtObject(&creature_param,getCreature()));
 #endif
@@ -480,5 +480,5 @@
 void NeuroImpl::get_part(ExtValue *ret)
 {
-#ifndef GDK_WITHOUT_FRAMS
+#ifndef SDK_WITHOUT_FRAMS
 Part *pa;
 if (pa=neuro->getPart())
@@ -491,5 +491,5 @@
 void NeuroImpl::get_joint(ExtValue *ret)
 {
-#ifndef GDK_WITHOUT_FRAMS
+#ifndef SDK_WITHOUT_FRAMS
 Joint *jo;
 if (jo=neuro->getJoint())
@@ -502,5 +502,5 @@
 bool NeuroImpl::getPosition(Pt3D &pos)
 {
-#ifndef GDK_WITHOUT_FRAMS
+#ifndef SDK_WITHOUT_FRAMS
 Part *pa; Joint *jo;
 if (pa=neuro->getPart())
@@ -548,5 +548,5 @@
 void NeuroImpl::get_classObject(ExtValue *ret)
 {
-#ifndef GDK_WITHOUT_FRAMS
+#ifndef SDK_WITHOUT_FRAMS
 NeuroClassExt::makeStaticObject(ret,neuroclass);
 #endif
Index: p/frams/neuro/neuroimplfiles-GDK.h
===================================================================
--- /cpp/frams/neuro/neuroimplfiles-GDK.h	(revision 287)
+++ 	(revision )
@@ -1,16 +1,0 @@
-// This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
-// See LICENSE.txt for details.
-
-#include "impl/neuroimpl-simple.h"
-#include "impl/neuroimpl-channels.h"
-#include "impl/neuroimpl-fuzzy.h"
-#ifdef GDK_WITHOUT_FRAMS
-#include "impl/neuroimpl-body-gdk.h"
-#else
-#include "impl/neuroimpl-test.h"
-#include "impl/neuroimpl-body.h"
-#include "impl/neuroimpl-vectoreye.h"
-#include "impl/neuroimpl-vmot.hpp"
-#endif
-
Index: /cpp/frams/neuro/neuroimplfiles-SDK.h
===================================================================
--- /cpp/frams/neuro/neuroimplfiles-SDK.h	(revision 288)
+++ /cpp/frams/neuro/neuroimplfiles-SDK.h	(revision 288)
@@ -0,0 +1,16 @@
+// This file is a part of Framsticks SDK.  http://www.framsticks.com/
+// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// See LICENSE.txt for details.
+
+#include "impl/neuroimpl-simple.h"
+#include "impl/neuroimpl-channels.h"
+#include "impl/neuroimpl-fuzzy.h"
+#ifdef SDK_WITHOUT_FRAMS
+#include "impl/neuroimpl-body-sdk.h"
+#else
+#include "impl/neuroimpl-test.h"
+#include "impl/neuroimpl-body.h"
+#include "impl/neuroimpl-vectoreye.h"
+#include "impl/neuroimpl-vmot.hpp"
+#endif
+
Index: /cpp/frams/param/syntparam.h
===================================================================
--- /cpp/frams/param/syntparam.h	(revision 287)
+++ /cpp/frams/param/syntparam.h	(revision 288)
@@ -15,5 +15,5 @@
     on Models and Genotypes).
 
-    See also: gdktest.cpp
+    See also: genomanipulation.cpp
  */
 class SyntParam: public Param
