Index: cpp/gdk/3d.cpp
===================================================================
--- cpp/gdk/3d.cpp	(revision 45)
+++ cpp/gdk/3d.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include <math.h>
Index: cpp/gdk/3d.h
===================================================================
--- cpp/gdk/3d.h	(revision 45)
+++ cpp/gdk/3d.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _3D_H_
Index: cpp/gdk/advlist.cpp
===================================================================
--- cpp/gdk/advlist.cpp	(revision 45)
+++ cpp/gdk/advlist.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include <stdlib.h>
Index: cpp/gdk/advlist.h
===================================================================
--- cpp/gdk/advlist.h	(revision 45)
+++ cpp/gdk/advlist.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _ADVLIST_H_
Index: cpp/gdk/callbacks.cpp
===================================================================
--- cpp/gdk/callbacks.cpp	(revision 45)
+++ cpp/gdk/callbacks.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "callbacks.h"
Index: cpp/gdk/callbacks.h
===================================================================
--- cpp/gdk/callbacks.h	(revision 45)
+++ cpp/gdk/callbacks.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _CALLBACKS_H_
Index: cpp/gdk/conv_f1.cpp
===================================================================
--- cpp/gdk/conv_f1.cpp	(revision 45)
+++ cpp/gdk/conv_f1.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "conv_f1.h"
@@ -48,6 +48,6 @@
 void addOrRememberInput(int n1,int n2,float w)
 		{
-		if (!addInput(n1,n2,w,false))
-			connections+=Connection(n1,n2,w);
+		//if (!addInput(n1,n2,w,false))
+		connections+=Connection(n1,n2,w);
 		}
 bool addInput(int n1,int n2,float w,bool final)
@@ -270,17 +270,4 @@
 }
 
-// remove leading & trailing whitespaces
-static void trim(SString& s)
-{
-const char*b=(const char*)s;
-const char*e=b+s.len();
-while((b<e)&&(*b<=' ')) b++;
-while((b<e)&&(e[-1]<=' ')) e--;
-if ((e-b)==s.len()) return;
-char* t=s.directWrite();
-if (t!=b) memmove(t,b,e-b);
-s.endWrite(e-b);
-}
-
 const char* Builder::growNeuro(const char* t, F1Props& props,int &hasmuscles)
 {
@@ -346,5 +333,5 @@
 				haveclass=1;
 				SString clsname(begin,t-begin);
-				trim(clsname);
+				clsname=trim(clsname);
 				last_f1_neuro->setClassName(clsname);
 				NeuroClass *cls=last_f1_neuro->getClass();
Index: cpp/gdk/conv_f1.h
===================================================================
--- cpp/gdk/conv_f1.h	(revision 45)
+++ cpp/gdk/conv_f1.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _CONV_F1_H
@@ -64,8 +64,7 @@
 GenoConv_F1()
 	{
-	name="f1 converter";
+	name="Recursive encoding";
 	in_format='1';
 	mapsupport=1;
-	info="Original Framsticks genotype format";
 	}
 SString convert(SString &i,MultiMap *map);
Index: cpp/gdk/convtest.cpp
===================================================================
--- cpp/gdk/convtest.cpp	(revision 45)
+++ cpp/gdk/convtest.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include <ctype.h>
Index: cpp/gdk/defassign-f0_joint.h
===================================================================
--- cpp/gdk/defassign-f0_joint.h	(revision 45)
+++ cpp/gdk/defassign-f0_joint.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 
Index: cpp/gdk/defassign-f0_neuro.h
===================================================================
--- cpp/gdk/defassign-f0_neuro.h	(revision 45)
+++ cpp/gdk/defassign-f0_neuro.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 
Index: cpp/gdk/defassign-f0_neuroconn.h
===================================================================
--- cpp/gdk/defassign-f0_neuroconn.h	(revision 45)
+++ cpp/gdk/defassign-f0_neuroconn.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 
Index: cpp/gdk/defassign-f0_part.h
===================================================================
--- cpp/gdk/defassign-f0_part.h	(revision 45)
+++ cpp/gdk/defassign-f0_part.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 
Index: cpp/gdk/defgenoconv.cpp
===================================================================
--- cpp/gdk/defgenoconv.cpp	(revision 45)
+++ cpp/gdk/defgenoconv.cpp	(revision 64)
@@ -1,6 +1,2 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
-
 #include "defgenoconv.h"
 
@@ -32,5 +28,5 @@
 #endif
 #ifdef USE_GENCONV_F81
-#include "conv_f8.h"
+#include "conv_f8tof1.h"
 #endif
 
@@ -62,5 +58,7 @@
 #endif
 #ifdef USE_GENCONV_F81
-addConverter(new GenoConv_F81);
+GenoConv_F8ToF1 *gc81=new GenoConv_F8ToF1();
+GenoConv_F8ToF1::staticpar=gc81->par; //a trick so that the simulator can see this parama
+addConverter(gc81);
 #endif
 
Index: cpp/gdk/defgenoconv.h
===================================================================
--- cpp/gdk/defgenoconv.h	(revision 45)
+++ cpp/gdk/defgenoconv.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _DEFGENOCONV_H_
Index: cpp/gdk/errmanager.cpp
===================================================================
--- cpp/gdk/errmanager.cpp	(revision 45)
+++ cpp/gdk/errmanager.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "errmanager.h"
@@ -90,4 +90,5 @@
 {
 if (w>maxlevel) maxlevel=w;
+if (w>=FMLV_INFO) infocount++;
 if (w>=FMLV_WARN) warncount++;
 if (w>=FMLV_ERROR) errcount++;
Index: cpp/gdk/errmanager.h
===================================================================
--- cpp/gdk/errmanager.h	(revision 45)
+++ cpp/gdk/errmanager.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _ERRMANAGER_H_
@@ -64,10 +64,10 @@
 {
   protected:
-int maxlevel,errcount,warncount,storlevel,storcount;
+int maxlevel,errcount,warncount,storlevel,storcount,infocount;
 SString msgs;
 
   public:
 
-void reset() {maxlevel=FMLV_INFO-1; errcount=warncount=storcount=0; msgs=0;}
+void reset() {maxlevel=FMLV_INFO-1; errcount=warncount=storcount=infocount=0; msgs=0;}
 
 enum Options2
@@ -76,4 +76,5 @@
 int getErrorCount()       {return errcount;}
 int getWarningCount()     {return warncount;}
+int getInfoCount()        {return infocount;}
 int getStoredCount()      {return storcount;}
 int getErrorLevel()       {return maxlevel;}
Index: cpp/gdk/extvalue.cpp
===================================================================
--- cpp/gdk/extvalue.cpp	(revision 45)
+++ cpp/gdk/extvalue.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "extvalue.h"
@@ -20,5 +20,6 @@
 	SString tmp("<");
 	tmp+=p->getName();
-	sprintf(tmp.directAppend(30)," object at %p>",object);
+	sprintf(tmp.directAppend(30)," object at %p>",
+		(object?object:paraminterface));
 	tmp.endAppend();
 	return tmp;
@@ -36,4 +37,5 @@
 	case TDouble: setd(src.ddata()); break;
 	case TObj: seto(src.odata()); break;
+	case TInvalid: type=TInvalid; break;
 	}
 }
@@ -284,4 +286,6 @@
 	case TObj:
 		return odata().toString();
+	case TInvalid:
+		return SString("undefined");
 	default:
 		return SString("null");
Index: cpp/gdk/extvalue.h
===================================================================
--- cpp/gdk/extvalue.h	(revision 45)
+++ cpp/gdk/extvalue.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _EXTVALUE_H_
@@ -13,5 +13,5 @@
 
 enum ExtPType
-{TUnknown=0,TInt,TDouble,TString,TObj};
+{TUnknown=0,TInt,TDouble,TString,TObj,TInvalid};
 
 /**
@@ -114,4 +114,5 @@
 	:type(TUnknown) {set(src);}
 void setEmpty();
+void setInvalid() {setEmpty();type=TInvalid;}
 ExtPType getType() {return type;}
 void *getObjectTarget(const char* classname) {return (type==TObj)?getObject().getTarget(classname):0;}
Index: cpp/gdk/f0-modeldef.m4
===================================================================
--- cpp/gdk/f0-modeldef.m4	(revision 45)
+++ cpp/gdk/f0-modeldef.m4	(revision 64)
@@ -6,5 +6,5 @@
 define(`AtSecondPart',`8')
 define(`InTheMiddle',`12')
-define(`MuscleClass',`16')
+define(`EffectorClass',`16')
 define(`ReceptorClass',`32')
 define(`V1BendMuscle',`64')
Index: cpp/gdk/f0.def
===================================================================
--- cpp/gdk/f0.def	(revision 45)
+++ cpp/gdk/f0.def	(revision 64)
@@ -66,4 +66,5 @@
 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
 
@@ -100,4 +101,5 @@
 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
 
@@ -109,9 +111,9 @@
 NEUROCLASS(Const,*,Constant,Constant value,0,1,0)
 VISUALHINTS(Invisible)
-SYMBOL(`3,6,100,50,90,50,90,40,70,40,70,60,90,60,90,50,1,85,50,75,50,1,80,45,80,55')
+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+MuscleClass+V1BendMuscle+AtFirstPart)
+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)
@@ -120,5 +122,5 @@
 
 NEUROCLASS(RotMuscle,@,Rotation muscle,,1,0,2)
-VISUALHINTS(DontShowClass+MuscleClass+V1RotMuscle+AtFirstPart)
+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)
@@ -126,7 +128,8 @@
 
 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 about this neuron,-1,1,0)
+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)
@@ -136,10 +139,29 @@
 ENDNEUROCLASS
 
+NEUROCLASS(VectorEye,VEye,Vector Eye [EXPERIMENTAL!],Refer to publications to learn more about this neuron.,1,1,1)
+SYMBOL(`11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24')
+NEUROPROP(tx,0,0,target.x,f,,,,target.x)
+NEUROPROP(ty,0,0,target.y,f,,,,target.y)
+NEUROPROP(tz,0,0,target.z,f,,,,target.z)
+NEUROPROP(ts,0,0,target shape,s,0,-1,0,targetShape)
+NEUROPROP(p,0,0,perspective,f,0.1,10.0,1.0,perspz)
+NEUROPROP(s,0,0,scale,f,0.1,100.0,1.0,perspscale)
+NEUROPROP(h,0,0,show hidden lines,d,0,1,0,showhidden)
+NEUROPROP(o,0,0,`output lines count (each line needs four channels)',d,0,99,0,outputcount)
+NEUROPROP(d,0,0,debug,d,0,1,0,showdebug)
+ENDNEUROCLASS
+
+NEUROCLASS(VisualMotorNeuron,VMotor,Visual-Motor Cortex [EXPERIMENTAL!],`Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron.',-1,1,0)
+NEUROPROP(noIF,0,0,number of basic features,d,,,,noIF)
+NEUROPROP(noDim,0,0,number of degrees of freedom,d,,,,noDim)
+NEUROPROP(params,0,0,parameters,s,,,,params)
+ENDNEUROCLASS 
+
 NEUROCLASS(Sticky,Sti,Sticky [EXPERIMENTAL!],,1,0,1)
-VISUALHINTS(ReceptorClass)
+VISUALHINTS(EffectorClass)
 ENDNEUROCLASS
 
 NEUROCLASS(LinearMuscle,LMu,Linear muscle [EXPERIMENTAL!],,1,0,2)
-VISUALHINTS(MuscleClass)
+VISUALHINTS(EffectorClass)
 NEUROPROP(p,0,0,power,f,0.01,1.0,1.0,power)
 ENDNEUROCLASS
@@ -154,10 +176,13 @@
 
 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
@@ -171,2 +196,3 @@
 NEUROPROP(t,0,0,time,f,0,6.283185307,0,t)
 ENDNEUROCLASS
+
Index: cpp/gdk/f0classes.h
===================================================================
--- cpp/gdk/f0classes.h	(revision 45)
+++ cpp/gdk/f0classes.h	(revision 64)
@@ -1,6 +1,2 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
-
 
 #define FIELDSTRUCT Part
@@ -100,5 +96,5 @@
 ParamEntry f0_neuro_paramtab[]=
 {
- {"Connections",3,9,"n" },
+ {"Connections",3,10,"n" },
  {"Other",},
  {"Visual",},
@@ -112,4 +108,5 @@
  {"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,}
 };
@@ -159,2 +156,5 @@
 
 
+
+
+
Index: cpp/gdk/f0def.xml
===================================================================
--- cpp/gdk/f0def.xml	(revision 45)
+++ cpp/gdk/f0def.xml	(revision 64)
@@ -57,4 +57,5 @@
   <PROP ID="getInputNeuroIndex" NAME="get input neuron index" GROUP="0" FLAGS="1+2" TYPE="p d(d)" />
   <PROP ID="getInputWeight" NAME="get input weight" GROUP="0" FLAGS="1+2" TYPE="p f(d)" />
+  <PROP ID="classObject" NAME="neuron class" GROUP="0" FLAGS="1+2" TYPE="o NeuroClass" />
  </CLASS>
 
@@ -91,4 +92,5 @@
 
 
+  <NEUROPROP ID="r" NAME="Range" TYPE="f" MIN="0.0" MAX="1.0" DEF="1.0" />
  </NEUROCLASS>
 
@@ -98,5 +100,5 @@
  </NEUROCLASS>
 
- <NEUROCLASS ID="*" NAME="Constant" DESCRIPTION="Constant value" INPUTS="0" OUTPUT="1" LOCATION="0"  VISUALHINTS="1"  SYMBOL="3,6,100,50,90,50,90,40,70,40,70,60,90,60,90,50,1,85,50,75,50,1,80,45,80,55"  >
+ <NEUROCLASS ID="*" NAME="Constant" DESCRIPTION="Constant value" INPUTS="0" OUTPUT="1" LOCATION="0"  VISUALHINTS="1"  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"  >
 
 
@@ -116,8 +118,9 @@
  </NEUROCLASS>
 
- <NEUROCLASS ID="D" NAME="Differentiate" DESCRIPTION="Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights" INPUTS="-1" OUTPUT="1" LOCATION="0"  >
+ <NEUROCLASS ID="D" NAME="Differentiate" DESCRIPTION="Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights" INPUTS="-1" OUTPUT="1" LOCATION="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"  >
+
  </NEUROCLASS>
 
- <NEUROCLASS ID="Fuzzy" NAME="Fuzzy system [EXPERIMENTAL!]" DESCRIPTION="Refer to publications to learn about this neuron" INPUTS="-1" OUTPUT="1" LOCATION="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"  >
+ <NEUROCLASS ID="Fuzzy" NAME="Fuzzy system [EXPERIMENTAL!]" DESCRIPTION="Refer to publications to learn more about this neuron." INPUTS="-1" OUTPUT="1" LOCATION="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 ID="ns" NAME="number of fuzzy sets" TYPE="d" MIN="1" MAX="" DEF="" />
@@ -127,5 +130,24 @@
  </NEUROCLASS>
 
- <NEUROCLASS ID="Sti" NAME="Sticky [EXPERIMENTAL!]" DESCRIPTION="" INPUTS="1" OUTPUT="0" LOCATION="1"  VISUALHINTS="32"  >
+ <NEUROCLASS ID="VEye" NAME="Vector Eye [EXPERIMENTAL!]" DESCRIPTION="Refer to publications to learn more about this neuron." INPUTS="1" OUTPUT="1" LOCATION="1"  SYMBOL="11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24"  >
+
+  <NEUROPROP ID="tx" NAME="target.x" TYPE="f" MIN="" MAX="" DEF="" />
+  <NEUROPROP ID="ty" NAME="target.y" TYPE="f" MIN="" MAX="" DEF="" />
+  <NEUROPROP ID="tz" NAME="target.z" TYPE="f" MIN="" MAX="" DEF="" />
+  <NEUROPROP ID="ts" NAME="target shape" TYPE="s" MIN="0" MAX="-1" DEF="0" />
+  <NEUROPROP ID="p" NAME="perspective" TYPE="f" MIN="0.1" MAX="10.0" DEF="1.0" />
+  <NEUROPROP ID="s" NAME="scale" TYPE="f" MIN="0.1" MAX="100.0" DEF="1.0" />
+  <NEUROPROP ID="h" NAME="show hidden lines" TYPE="d" MIN="0" MAX="1" DEF="0" />
+  <NEUROPROP ID="o" NAME="output lines count (each line needs four channels)" TYPE="d" MIN="0" MAX="99" DEF="0" />
+  <NEUROPROP ID="d" NAME="debug" TYPE="d" MIN="0" MAX="1" DEF="0" />
+ </NEUROCLASS>
+
+ <NEUROCLASS ID="VMotor" NAME="Visual-Motor Cortex [EXPERIMENTAL!]" DESCRIPTION="Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron." INPUTS="-1" OUTPUT="1" LOCATION="0"  >
+  <NEUROPROP ID="noIF" NAME="number of basic features" TYPE="d" MIN="" MAX="" DEF="" />
+  <NEUROPROP ID="noDim" NAME="number of degrees of freedom" TYPE="d" MIN="" MAX="" DEF="" />
+  <NEUROPROP ID="params" NAME="parameters" TYPE="s" MIN="" MAX="" DEF="" />
+ </NEUROCLASS> 
+
+ <NEUROCLASS ID="Sti" NAME="Sticky [EXPERIMENTAL!]" DESCRIPTION="" INPUTS="1" OUTPUT="0" LOCATION="1"  VISUALHINTS="16"  >
 
  </NEUROCLASS>
@@ -144,11 +166,14 @@
  </NEUROCLASS>
 
- <NEUROCLASS ID="Ch" NAME="Channelize" DESCRIPTION="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." INPUTS="-1" OUTPUT="1" LOCATION="0"  >
+ <NEUROCLASS ID="Ch" NAME="Channelize" DESCRIPTION="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." INPUTS="-1" OUTPUT="1" LOCATION="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"  >
+
  </NEUROCLASS>
 
- <NEUROCLASS ID="ChMux" NAME="Channel multiplexer" DESCRIPTION="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)" INPUTS="2" OUTPUT="1" LOCATION="0"  >
+ <NEUROCLASS ID="ChMux" NAME="Channel multiplexer" DESCRIPTION="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)" INPUTS="2" OUTPUT="1" LOCATION="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"  >
+
  </NEUROCLASS>
 
- <NEUROCLASS ID="ChSel" NAME="Channel selector" DESCRIPTION="Outputs a single channel (selected by the \"ch\" parameter) from multichannel input" INPUTS="1" OUTPUT="1" LOCATION="0"  >
+ <NEUROCLASS ID="ChSel" NAME="Channel selector" DESCRIPTION="Outputs a single channel (selected by the \"ch\" parameter) from multichannel input" INPUTS="1" OUTPUT="1" LOCATION="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 ID="ch" NAME="channel" TYPE="d" MIN="" MAX="" DEF="" />
  </NEUROCLASS>
@@ -163,3 +188,4 @@
  </NEUROCLASS>
 
+
 </F0CLASSES>
Index: cpp/gdk/f0defxml.m4
===================================================================
--- cpp/gdk/f0defxml.m4	(revision 45)
+++ cpp/gdk/f0defxml.m4	(revision 64)
@@ -6,5 +6,5 @@
 define(`AtSecondPart',`8')
 define(`InTheMiddle',`12')
-define(`MuscleClass',`16')
+define(`EffectorClass',`16')
 define(`ReceptorClass',`32')
 define(`V1BendMuscle',`64')
Index: cpp/gdk/framsg.cpp
===================================================================
--- cpp/gdk/framsg.cpp	(revision 45)
+++ cpp/gdk/framsg.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "nonstd.h"
Index: cpp/gdk/framsg.h
===================================================================
--- cpp/gdk/framsg.h	(revision 45)
+++ cpp/gdk/framsg.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _FRAMSG_H_
Index: cpp/gdk/gdktest.cpp
===================================================================
--- cpp/gdk/gdktest.cpp	(revision 45)
+++ cpp/gdk/gdktest.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include <stdlib.h>
@@ -249,8 +249,19 @@
 }
 
+void findingConverters()
+{
+GenoConverter *gc=gcm.findConverters(0,'1');
+if (gc) printf("found converter accepting f1: \"%s\"\n",gc->name);
+SListTempl<GenoConverter*> found;
+gcm.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 GDK test application!");
+
+findingConverters();
 
 //Geno g(argc>1?argv[1]:"X[|G:1.23]");
Index: cpp/gdk/gen-config.h
===================================================================
--- cpp/gdk/gen-config.h	(revision 45)
+++ cpp/gdk/gen-config.h	(revision 64)
@@ -1,8 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library. See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
-// This file is a part of Framsticks GDK library. See LICENSE.TXT for details.
-// Refer to http://www.frams.alife.pl/ for further information.
 
 /**
Index: cpp/gdk/geno.cpp
===================================================================
--- cpp/gdk/geno.cpp	(revision 45)
+++ cpp/gdk/geno.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "geno.h"
@@ -173,5 +173,8 @@
 	else
 		out+="/*";
-	out+=format;
+	if (format==0)
+		out+="invalid";
+	else
+		out+=format;
 	if (multiline)
 		out+="\n";
Index: cpp/gdk/geno.h
===================================================================
--- cpp/gdk/geno.h	(revision 45)
+++ cpp/gdk/geno.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _GENO_H_
Index: cpp/gdk/genoconv.cpp
===================================================================
--- cpp/gdk/genoconv.cpp	(revision 45)
+++ cpp/gdk/genoconv.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "nonstd.h"
@@ -49,4 +49,5 @@
 tab[0].flags=ile;
 tab[0].name="gkparam:";
+gcnames.clear();
 for (i=0,pe=tab+1;gk=(GenoConverter *)gcm->converters(i);pe++,i++)
 	{
@@ -54,5 +55,12 @@
 	pe->group=0;
 	pe->flags=0;
-	pe->name=gk->name;
+	std::string descr="f";
+	descr+=gk->in_format;
+	descr+=" -> f";
+	descr+=gk->out_format;
+	descr+=" : ";
+	descr+=gk->name;
+	gcnames.push_back(descr);
+	pe->name=descr.c_str();
 	pe->type="d 0 1";
 	pe->help=gk->info;
@@ -96,4 +104,20 @@
 converters-=gc;
 param.updatetab();
+}
+
+GenoConverter *GenoConvManager::findConverters(SListTempl<GenoConverter*>* result,char in,char out,int enabled,char* name)
+{
+GenoConverter *gk,*retval=0;
+int i=0;
+for (;gk=(GenoConverter*)converters(i);i++)
+	{
+	if ((in!=-1)&&(in!=gk->in_format)) continue;
+	if ((out!=-1)&&(out!=gk->out_format)) continue;
+	if ((enabled!=-1)&&(enabled!=gk->enabled)) continue;
+	if ((name)&&(strcmp(name,gk->name))) continue;
+	if (!retval) {retval=gk; if (!result) break;}
+	if (result) result->append(gk);
+	}
+return retval;
 }
 
Index: cpp/gdk/genoconv.h
===================================================================
--- cpp/gdk/genoconv.h	(revision 45)
+++ cpp/gdk/genoconv.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _GENCONV_H_
@@ -11,4 +11,7 @@
 #include "sstring.h"
 
+#include <string>
+#include <vector>
+
 
 class GenoConvManager;
@@ -17,4 +20,5 @@
 {
 GenoConvManager *gcm;
+std::vector<std::string> gcnames;
 void freetab();
 public:
@@ -89,4 +93,8 @@
 char *getPath(char in,char out,char *path,int maxlen,int *mapavailable=0);
 char *getFormatPath(char in,char out,char *path,int maxlen,int *mapavailable=0);
+/// returns the list of converters meeting the specified criteria
+/// pass result=0 if you only need one result (by return value)
+/// default criteria values mean "don't care", pass anything else to narrow your search
+GenoConverter *findConverters(SListTempl<GenoConverter*>* result=0,char in=-1,char out=-1,int enabled=-1,char* name=0);
 };
 
Index: cpp/gdk/genotest.cpp
===================================================================
--- cpp/gdk/genotest.cpp	(revision 45)
+++ cpp/gdk/genotest.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "geno.h"
Index: cpp/gdk/genotypeloader.cpp
===================================================================
--- cpp/gdk/genotypeloader.cpp	(revision 45)
+++ cpp/gdk/genotypeloader.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "genotypeloader.h"
Index: cpp/gdk/genotypeloader.h
===================================================================
--- cpp/gdk/genotypeloader.h	(revision 45)
+++ cpp/gdk/genotypeloader.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _GENOTYPELOADER_H_
Index: cpp/gdk/list.cpp
===================================================================
--- cpp/gdk/list.cpp	(revision 45)
+++ cpp/gdk/list.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include <stdlib.h>
Index: cpp/gdk/list.h
===================================================================
--- cpp/gdk/list.h	(revision 45)
+++ cpp/gdk/list.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _LIST_H_
Index: cpp/gdk/loadertest.cpp
===================================================================
--- cpp/gdk/loadertest.cpp	(revision 45)
+++ cpp/gdk/loadertest.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "genotypeloader.h"
Index: cpp/gdk/model.cpp
===================================================================
--- cpp/gdk/model.cpp	(revision 45)
+++ cpp/gdk/model.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "nonstd.h"
@@ -960,9 +960,18 @@
 			}
 			}
-		if (final) if (j->d()>getMaxJoint().d.x)
+		if (final)
+			{
+			if (j->d()>getMaxJoint().d.x)
 			{
 			ret=0;
 			FMprintf("Model","internalCheck",FMLV_ERROR,"delta too big in joint #%d (%s)",
 				 i,(const char*)geno.getName());
+			}
+			else if (j->d()<getMinJoint().d.x)
+			{
+			ret=0;
+			FMprintf("Model","internalCheck",FMLV_ERROR,"delta too small in joint #%d (%s)",
+				 i,(const char*)geno.getName());
+			}
 			}
 		}
@@ -1259,11 +1268,11 @@
 class MaxNeuro: public Neuro {public: MaxNeuro() {Param par(f0_neuro_paramtab,this);par.setMax();}};
 
-const Part& Model::getMinPart() {static MinPart part; return part;}
-const Part& Model::getMaxPart() {static MaxPart part; return part;}
-const Part& Model::getDefPart() {static Part part; return part;}
-const Joint& Model::getMinJoint() {static MinJoint joint; return joint;}
-const Joint& Model::getMaxJoint() {static MaxJoint joint; return joint;}
-const Joint& Model::getDefJoint() {static Joint joint; return joint;}
-const Neuro& Model::getMinNeuro() {static MinNeuro neuro; return neuro;}
-const Neuro& Model::getMaxNeuro() {static MaxNeuro neuro; return neuro;}
-const Neuro& Model::getDefNeuro() {static Neuro neuro; return neuro;}
+Part& Model::getMinPart() {static MinPart part; return part;}
+Part& Model::getMaxPart() {static MaxPart part; return part;}
+Part& Model::getDefPart() {static Part part; return part;}
+Joint& Model::getMinJoint() {static MinJoint joint; return joint;}
+Joint& Model::getMaxJoint() {static MaxJoint joint; return joint;}
+Joint& Model::getDefJoint() {static Joint joint; return joint;}
+Neuro& Model::getMinNeuro() {static MinNeuro neuro; return neuro;}
+Neuro& Model::getMaxNeuro() {static MaxNeuro neuro; return neuro;}
+Neuro& Model::getDefNeuro() {static Neuro neuro; return neuro;}
Index: cpp/gdk/model.def
===================================================================
--- cpp/gdk/model.def	(revision 45)
+++ cpp/gdk/model.def	(revision 64)
@@ -93,4 +93,5 @@
 
 
+prop:id=r,name="Range",type="f 0.0 1.0 1.0"
 
 
@@ -129,9 +130,28 @@
 
 
+neuro: id=VEye,name="Vector Eye [EXPERIMENTAL!]",info="",inputs=1,output=1,location=1  ,symbol="11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24" 
+
+prop:id=tx,name="target.x",type="f   "
+prop:id=ty,name="target.y",type="f   "
+prop:id=tz,name="target.z",type="f   "
+prop:id=ts,name="target shape",type="s 0 -1 0"
+prop:id=p,name="perspective",type="f 0.1 10.0 1.0"
+prop:id=s,name="scale",type="f 0.1 100.0 1.0"
+prop:id=h,name="show hidden lines",type="d 0 1 0"
+prop:id=o,name="output lines count (each line needs four channels)",type="d 0 99 0"
+prop:id=d,name="debug",type="d 0 1 0"
+
+
+neuro: id=VMotor,name="Visual-Motor Cortex [EXPERIMENTAL!]",info="Must be connected to the VEye and properly set up.",inputs=-1,output=1,location=0 
+prop:id=noIF,name="number of basic features",type="d   "
+prop:id=noDim,name="number of degrees of freedom",type="d   "
+prop:id=params,name="parameters",type="s   "
+ 
+
 neuro: id=Sti,name="Sticky [EXPERIMENTAL!]",info="",inputs=1,output=0,location=1  ,vhints=32 
 
 
 
-neuro: id=LMu,name="Linear muscle [EXPERIMENTAL!]",info="",inputs=1,output=0,location=2  ,vhints=16 
+neuro: id=LMu,name="Length muscle [EXPERIMENTAL!]",info="",inputs=1,output=0,location=2  ,vhints=16 
 
 prop:id=p,name="power",type="f 0.01 1.0 1.0"
Index: cpp/gdk/model.h
===================================================================
--- cpp/gdk/model.h	(revision 45)
+++ cpp/gdk/model.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _MODEL_H_
@@ -408,13 +408,13 @@
 ///////////////////////////
 
-static const Part& getMinPart();
-static const Part& getMaxPart();
-static const Part& getDefPart();
-static const Joint& getMinJoint();
-static const Joint& getMaxJoint();
-static const Joint& getDefJoint();
-static const Neuro& getMinNeuro();
-static const Neuro& getMaxNeuro();
-static const Neuro& getDefNeuro();
+static Part& getMinPart();
+static Part& getMaxPart();
+static Part& getDefPart();
+static Joint& getMinJoint();
+static Joint& getMaxJoint();
+static Joint& getDefJoint();
+static Neuro& getMinNeuro();
+static Neuro& getMaxNeuro();
+static Neuro& getDefNeuro();
 };
 
Index: cpp/gdk/modelparts.cpp
===================================================================
--- cpp/gdk/modelparts.cpp	(revision 45)
+++ cpp/gdk/modelparts.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include <stdlib.h>
@@ -21,4 +21,6 @@
 #include "multirange.h"
 #include "extvalue.h"
+
+#include "neuroclsobject.h"
 
 template<>
@@ -524,4 +526,9 @@
 }
 
+void Neuro::get_classObject(PARAMGETARGS)
+{
+NeuroClassExt::makeStaticObject(ret,getClass());
+}
+
 /////// old items
 #ifdef MODEL_V1_COMPATIBLE
Index: cpp/gdk/modelparts.h
===================================================================
--- cpp/gdk/modelparts.h	(revision 45)
+++ cpp/gdk/modelparts.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _MODELPARTS_H_
@@ -241,10 +241,10 @@
 	/** draw the neuron at the second part when attached to joint (default is in the middle) */
    AtSecondPart=8,
-	/** use muscle colour for this neuro unit */
-   MuscleClass=16,
+	/** use effector colour for this neuro unit */
+   EffectorClass=16,
 	/** use receptor colour for this neuro unit */
    ReceptorClass=32,
    V1BendMuscle=64,
-   V1RotMuscle=128
+   V1RotMuscle=128,
  };
 
@@ -349,4 +349,5 @@
 PARAMPROCDEF(p_getInputNeuroIndex);
 PARAMPROCDEF(p_getInputWeight);
+PARAMGETDEF(classObject);
 #undef STATRICKCLASS
 
Index: cpp/gdk/multimap.cpp
===================================================================
--- cpp/gdk/multimap.cpp	(revision 45)
+++ cpp/gdk/multimap.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "multimap.h"
Index: cpp/gdk/multimap.h
===================================================================
--- cpp/gdk/multimap.h	(revision 45)
+++ cpp/gdk/multimap.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _MULTIMAP_H_
Index: cpp/gdk/multiparamload.cpp
===================================================================
--- cpp/gdk/multiparamload.cpp	(revision 45)
+++ cpp/gdk/multiparamload.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "multiparamload.h"
@@ -105,5 +105,5 @@
 		{
 		lastclass->load(file);
-		if (maybeBreak(AfterObject))
+		if ((status!=Finished) && maybeBreak(AfterObject))
 			break;
 		continue;
@@ -144,5 +144,5 @@
 			continue;
 			}
-		else if (maybeBreak(OnComment))
+		else if ((status!=Finished) && maybeBreak(OnComment))
 			{
 			lastcomment=t+1;
Index: cpp/gdk/multiparamload.h
===================================================================
--- cpp/gdk/multiparamload.h	(revision 45)
+++ cpp/gdk/multiparamload.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _MULTIPARAMLOAD_H_
Index: cpp/gdk/multirange.cpp
===================================================================
--- cpp/gdk/multirange.cpp	(revision 45)
+++ cpp/gdk/multirange.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "multirange.h"
Index: cpp/gdk/multirange.h
===================================================================
--- cpp/gdk/multirange.h	(revision 45)
+++ cpp/gdk/multirange.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _MULTIRANGE_H_
Index: cpp/gdk/neuroclasses.h
===================================================================
--- cpp/gdk/neuroclasses.h	(revision 45)
+++ cpp/gdk/neuroclasses.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 CLASS(StdNeuron,"N","Neuron",`"Standard Framsticks Neuron, compatible with 1.0"',-1,1,0,0,0)
Index: cpp/gdk/neurocls-factory.h
===================================================================
--- cpp/gdk/neurocls-factory.h	(revision 45)
+++ cpp/gdk/neurocls-factory.h	(revision 64)
@@ -1,6 +1,2 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
-
 
 // do not edit - generated automatically from "f0.def"
@@ -39,5 +35,6 @@
 #define FIELDSTRUCT NI_Touch 
 ParamEntry NI_Touch_tab []={
-{"Touch",1, 0 ,"T",},
+{"Touch",1, 1 ,"T",},
+{"r",1,0,"Range","f 0.0 1.0 1.0",FIELD(range),},
  {0,0,0,},};
 #undef FIELDSTRUCT
@@ -85,4 +82,28 @@
  {0,0,0,},};
 #undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_VectorEye 
+ParamEntry NI_VectorEye_tab []={
+{"Vector Eye [EXPERIMENTAL!]",1, 9 ,"VEye",},
+{"tx",0,0,"target.x","f   ",FIELD(target.x),},
+{"ty",0,0,"target.y","f   ",FIELD(target.y),},
+{"tz",0,0,"target.z","f   ",FIELD(target.z),},
+{"ts",0,0,"target shape","s 0 -1 0",FIELD(targetShape),},
+{"p",0,0,"perspective","f 0.1 10.0 1.0",FIELD(perspz),},
+{"s",0,0,"scale","f 0.1 100.0 1.0",FIELD(perspscale),},
+{"h",0,0,"show hidden lines","d 0 1 0",FIELD(showhidden),},
+{"o",0,0,"output lines count (each line needs four channels)","d 0 99 0",FIELD(outputcount),},
+{"d",0,0,"debug","d 0 1 0",FIELD(showdebug),},
+ {0,0,0,},};
+#undef FIELDSTRUCT
+
+#define FIELDSTRUCT NI_VisualMotorNeuron 
+ParamEntry NI_VisualMotorNeuron_tab []={
+{"Visual-Motor Cortex [EXPERIMENTAL!]",1, 3 ,"VMotor",},
+{"noIF",0,0,"number of basic features","d   ",FIELD(noIF),},
+{"noDim",0,0,"number of degrees of freedom","d   ",FIELD(noDim),},
+{"params",0,0,"parameters","s   ",FIELD(params),},
+ {0,0,0,},};
+#undef FIELDSTRUCT 
 
 #define FIELDSTRUCT NI_Sticky 
@@ -144,4 +165,5 @@
 #undef FIELDSTRUCT
 
+
 #define SETIMPLEMENTATION \
 setImplementation("N",new NI_StdNeuron); \
@@ -155,4 +177,6 @@
 setImplementation("D",new NI_Diff); \
 setImplementation("Fuzzy",new NI_FuzzyNeuro); \
+setImplementation("VEye",new NI_VectorEye); \
+setImplementation("VMotor",new NI_VisualMotorNeuron); \
 setImplementation("Sti",new NI_Sticky); \
 setImplementation("LMu",new NI_LinearMuscle); \
Index: cpp/gdk/neurocls-library.h
===================================================================
--- cpp/gdk/neurocls-library.h	(revision 45)
+++ cpp/gdk/neurocls-library.h	(revision 64)
@@ -1,6 +1,2 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
-
 
 // do not edit - generated automatically from "f0.def"
@@ -45,7 +41,8 @@
      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, 0 ,"T",},
-
-
+{"Touch",1, 1 ,"T",},
+
+
+{"r",1,0,"Range","f 0.0 1.0 1.0",},
  
 {0,0,0,},};
@@ -61,5 +58,5 @@
 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,0,32));
 
-     static int Const_xy[]={26,3,6,100,50,90,50,90,40,70,40,70,60,90,60,90,50,1,85,50,75,50,1,80,45,80,55};   
+     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 ,"*",},
@@ -91,10 +88,11 @@
 addClass(new NeuroClass(NI_RotMuscle_tab,"",1,0,2, RotMuscle_xy,0,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, 0,0));
+
+ 
+{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,0,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};   
@@ -108,5 +106,32 @@
  
 {0,0,0,},};
-addClass(new NeuroClass(NI_FuzzyNeuro_tab,"Refer to publications to learn about this neuron",-1,1,0, FuzzyNeuro_xy,0,0));
+addClass(new NeuroClass(NI_FuzzyNeuro_tab,"Refer to publications to learn more about this neuron.",-1,1,0, FuzzyNeuro_xy,0,0));
+
+     static int VectorEye_xy[]={122,11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24};   
+static ParamEntry NI_VectorEye_tab[]={
+{"Vector Eye [EXPERIMENTAL!]",1, 9 ,"VEye",},
+
+{"tx",0,0,"target.x","f   ",},
+{"ty",0,0,"target.y","f   ",},
+{"tz",0,0,"target.z","f   ",},
+{"ts",0,0,"target shape","s 0 -1 0",},
+{"p",0,0,"perspective","f 0.1 10.0 1.0",},
+{"s",0,0,"scale","f 0.1 100.0 1.0",},
+{"h",0,0,"show hidden lines","d 0 1 0",},
+{"o",0,0,"output lines count (each line needs four channels)","d 0 99 0",},
+{"d",0,0,"debug","d 0 1 0",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_VectorEye_tab,"Refer to publications to learn more about this neuron.",1,1,1, VectorEye_xy,0,0));
+
+     
+static ParamEntry NI_VisualMotorNeuron_tab[]={
+{"Visual-Motor Cortex [EXPERIMENTAL!]",1, 3 ,"VMotor",},
+{"noIF",0,0,"number of basic features","d   ",},
+{"noDim",0,0,"number of degrees of freedom","d   ",},
+{"params",0,0,"parameters","s   ",},
+ 
+{0,0,0,},};
+addClass(new NeuroClass(NI_VisualMotorNeuron_tab,"Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron.",-1,1,0, 0,0)); 
 
      
@@ -116,5 +141,5 @@
  
 {0,0,0,},};
-addClass(new NeuroClass(NI_Sticky_tab,"",1,0,1, 0,32));
+addClass(new NeuroClass(NI_Sticky_tab,"",1,0,1, 0,16));
 
      
@@ -143,25 +168,28 @@
 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, 0,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, 0,0));
-
-     
+
+ 
+{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,0,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, 0,0));
-
-     
+
+ 
+{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,0,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, 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,0,0));
 
      
@@ -181,2 +209,3 @@
 {0,0,0,},};
 addClass(new NeuroClass(NI_Sinus_tab,"Output frequency = f0+input",1,1,0, Sinus_xy,0,0));
+
Index: cpp/gdk/neurocls-library.m4
===================================================================
--- cpp/gdk/neurocls-library.m4	(revision 45)
+++ cpp/gdk/neurocls-library.m4	(revision 64)
@@ -15,5 +15,5 @@
 define(`AtSecondPart',`8')
 define(`InTheMiddle',`12')
-define(`MuscleClass',`16')
+define(`EffectorClass',`16')
 define(`ReceptorClass',`32')
 define(`V1BendMuscle',`64')
Index: cpp/gdk/neurofactory.cpp
===================================================================
--- cpp/gdk/neurofactory.cpp	(revision 45)
+++ cpp/gdk/neurofactory.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "neurofactory.h"
@@ -17,5 +17,7 @@
 NeuroImpl* ni=(NeuroImpl*)nc->impl;
 if (!ni) return 0;
-return ni->makeNew();
+ni=ni->makeNew();
+if (ni) ni->neuroclass=nc;
+return ni;
 }
 
Index: cpp/gdk/neurofactory.h
===================================================================
--- cpp/gdk/neurofactory.h	(revision 45)
+++ cpp/gdk/neurofactory.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _NEUROFACTORY_H_
Index: cpp/gdk/neuroimpl-body-gdk.h
===================================================================
--- cpp/gdk/neuroimpl-body-gdk.h	(revision 45)
+++ cpp/gdk/neuroimpl-body-gdk.h	(revision 64)
@@ -1,9 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
-
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _NEUROIMPLBODY_H_
Index: cpp/gdk/neuroimpl-channels.cpp
===================================================================
--- cpp/gdk/neuroimpl-channels.cpp	(revision 45)
+++ cpp/gdk/neuroimpl-channels.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "neuroimpl-channels.h"
Index: cpp/gdk/neuroimpl-channels.h
===================================================================
--- cpp/gdk/neuroimpl-channels.h	(revision 45)
+++ cpp/gdk/neuroimpl-channels.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _NEUROIMPLCHANNELS_H
Index: cpp/gdk/neuroimpl-fuzzy-f0.cpp
===================================================================
--- cpp/gdk/neuroimpl-fuzzy-f0.cpp	(revision 45)
+++ cpp/gdk/neuroimpl-fuzzy-f0.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 /// this is a module included into neuroimpl-fuzzy
Index: cpp/gdk/neuroimpl-fuzzy-f0.h
===================================================================
--- cpp/gdk/neuroimpl-fuzzy-f0.h	(revision 45)
+++ cpp/gdk/neuroimpl-fuzzy-f0.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 /// this is a modul included into neuroimpl-fuzzy
Index: cpp/gdk/neuroimpl-fuzzy.cpp
===================================================================
--- cpp/gdk/neuroimpl-fuzzy.cpp	(revision 45)
+++ cpp/gdk/neuroimpl-fuzzy.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "neuroimpl-fuzzy.h"
Index: cpp/gdk/neuroimpl-fuzzy.h
===================================================================
--- cpp/gdk/neuroimpl-fuzzy.h	(revision 45)
+++ cpp/gdk/neuroimpl-fuzzy.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _NEUROIMPLFUZZY_H_
Index: cpp/gdk/neuroimpl-simple.cpp
===================================================================
--- cpp/gdk/neuroimpl-simple.cpp	(revision 45)
+++ cpp/gdk/neuroimpl-simple.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "neuroimpl-simple.h"
Index: cpp/gdk/neuroimpl-simple.h
===================================================================
--- cpp/gdk/neuroimpl-simple.h	(revision 45)
+++ cpp/gdk/neuroimpl-simple.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _NEUROIMPLSIMPLE_H_
Index: cpp/gdk/neuroimpl.cpp
===================================================================
--- cpp/gdk/neuroimpl.cpp	(revision 45)
+++ cpp/gdk/neuroimpl.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "neuroimpl.h"
@@ -23,5 +23,5 @@
 {
 {"Creature: Neurons",1,2,"nnsim",},
-{"randinit",1,0,"Random initialization","f 0 10 0.01",FIELD(randominit),"Initialize all neuron states with uniform distribution random numbers"},
+{"randinit",1,0,"Random initialization","f 0 10 0.01",FIELD(randominit),"Allowed range for initializing all neuron states with uniform distribution random numbers and zero mean. Set 0 for deterministic initialization."},
 {"touchrange",1,0,"T receptor range","f 0 100 1",FIELD(touchrange),},
 {0,0,0,},
@@ -277,40 +277,40 @@
 ParamEntry neuroimpl_tab[]=
 {
-{"Neuro",1,26+NEUROIMPL_SIGNAL_PROPS,"Neuro","Live Neuron object."},
-
-{"getInputState",0,0,"get input signal","p f(d input)",PROCEDURE(p_get),},
-{"getInputWeight",0,0,"get input weight","p f(d input)",PROCEDURE(p_getweight),},
-{"getWeightedInputState",0,0,"get weighted input signal","p f(d input)",PROCEDURE(p_getw),},
-{"getInputSum",0,0,"get signal sum","p f(d input)",PROCEDURE(p_getsum),},
-{"getWeightedInputSum",0,0,"get weighted signal sum","p f(d input)",PROCEDURE(p_getwsum),"uses any number of inputs starting with the specified input. getWeightedInputSum(0)=weightedInputSum"},
-{"getInputCount",0,0,"get input count","d",GETONLY(count),},
-{"inputSum",0,0,"full signal sum","f",GETONLY(sum),},
-{"weightedInputSum",0,0,"full weighted signal sum","f",GETONLY(wsum),},
-{"getInputChannelCount",0,0,"get channel count for input","p d(d input)",PROCEDURE(p_getchancount),},
-{"getInputStateChannel",0,0,"get input signal from channel","p f(d input,d channel)",PROCEDURE(p_getchan),},
-{"getWeightedInputStateChannel",0,0,"get weighted input signal from channel","p f(d input,d channel)",PROCEDURE(p_getwchan),},
-{"state",0,0,"neuron state (channel 0)","f",GETSET(state),"when read, returns the current neuron state.\nWhen written, sets the next neuron state (for use in the neuron definition)"},
-{"channelCount",0,0,"number of output channels","d",GETSET(channels),},
-{"getStateChannel",0,0,"get output state for channel","p f(d channel)",PROCEDURE(p_getstate),},
-{"setStateChannel",0,0,"set output state for channel","p(d channel,f value)",PROCEDURE(p_setstate),},
-{"hold",0,0,"Hold state","d 0 1",GETSET(hold),"",},
-{"currState",0,0,"neuron state (channel 0)","f",GETSET(cstate),"the only difference from the \"state\" field is that currState, when written, changes the internal neuron state immediately (which disturbs the regular synchronous NN operation). This feature should only be used while controlling the neuron 'from outside' (like a neuro probe) and not in the neuron definition.",},
-{"setCurrStateChannel",0,0,"set neuron for channel","p(d channel,f value)",PROCEDURE(p_setcstate),"like \"currState\""},
-{"position_x",0,0,"position x","f",GETONLY(position_x),},
-{"position_y",0,0,"position y","f",GETONLY(position_y),},
-{"position_z",0,0,"position z","f",GETONLY(position_z),},
-{"creature",0,0,"get owner creature","o Creature",GETONLY(creature),},
-{"part",0,0,"the Part object where this neuron is located","o MechPart",GETONLY(part),},
-{"joint",0,0,"the Joint object where this neuron is located","o MechJoint",GETONLY(joint),},
-{"fields",0,0,"custom neuron fields","o Fields",GETONLY(fields),
+{"Neuro",1,27+NEUROIMPL_SIGNAL_PROPS,"Neuro","Live Neuron object."},
+
+{"getInputState",0,0,"Get input signal","p f(d input)",PROCEDURE(p_get),},
+{"getInputWeight",0,0,"Get input weight","p f(d input)",PROCEDURE(p_getweight),},
+{"getWeightedInputState",0,0,"Get weighted input signal","p f(d input)",PROCEDURE(p_getw),},
+{"getInputSum",0,0,"Get signal sum","p f(d input)",PROCEDURE(p_getsum),},
+{"getWeightedInputSum",0,0,"Get weighted signal sum","p f(d input)",PROCEDURE(p_getwsum),"Uses any number of inputs starting with the specified input. getWeightedInputSum(0)=weightedInputSum"},
+{"getInputCount",0,0,"Get input count","d",GETONLY(count),},
+{"inputSum",0,0,"Full signal sum","f",GETONLY(sum),},
+{"weightedInputSum",0,0,"Full weighted signal sum","f",GETONLY(wsum),},
+{"getInputChannelCount",0,0,"Get channel count for input","p d(d input)",PROCEDURE(p_getchancount),},
+{"getInputStateChannel",0,0,"Get input signal from channel","p f(d input,d channel)",PROCEDURE(p_getchan),},
+{"getWeightedInputStateChannel",0,0,"Get weighted input signal from channel","p f(d input,d channel)",PROCEDURE(p_getwchan),},
+{"state",0,0,"Neuron state (channel 0)","f",GETSET(state),"When read, returns the current neuron state.\nWhen written, sets the next neuron state (for use in the neuron definition)"},
+{"channelCount",0,0,"Number of output channels","d",GETSET(channels),},
+{"getStateChannel",0,0,"Get output state for channel","p f(d channel)",PROCEDURE(p_getstate),},
+{"setStateChannel",0,0,"Set output state for channel","p(d channel,f value)",PROCEDURE(p_setstate),},
+{"hold",0,0,"Hold state","d 0 1",GETSET(hold),"\"Holding\" means keeping the neuron state as is, blocking the regular neuron operation. This is useful when your script needs to inject some control signals into the NN. Without \"holding\", live neurons would be constantly overwriting your changes, and the rest of the NN could see inconsistent states, depending on the connections. Setting hold=1 ensures the neuron state will be only set by you, and not by the neuron. The enforced signal value can be set using Neuro.currState before or after setting hold=1. Set hold=0 to resume normal operation.",},
+{"currState",0,0,"Neuron state (channel 0)","f",GETSET(cstate),"The only difference from the \"state\" field is that currState, when written, changes the internal neuron state immediately (which disturbs the regular synchronous NN operation). This feature should only be used while controlling the neuron 'from outside' (like a neuro probe) and not in the neuron definition. See also: Neuro.hold",},
+{"setCurrStateChannel",0,0,"Set neuron for channel","p(d channel,f value)",PROCEDURE(p_setcstate),"Analogous to \"currState\"."},
+{"position_x",0,0,"Position x","f",GETONLY(position_x),},
+{"position_y",0,0,"Position y","f",GETONLY(position_y),},
+{"position_z",0,0,"Position z","f",GETONLY(position_z),},
+{"creature",0,0,"Gets owner creature","o Creature",GETONLY(creature),},
+{"part",0,0,"The Part object where this neuron is located","o MechPart",GETONLY(part),},
+{"joint",0,0,"The Joint object where this neuron is located","o MechJoint",GETONLY(joint),},
+{"fields",0,0,"Custom neuron fields","o Fields",GETONLY(fields),
 "Neurons can have different fields depending on their class. Script neurons have their fields defined using the \"prop:\" syntax. If you develop a custom neuron script you should use the Fields object for accessing your own neuron fields. The Neuro.fields property is meant for accessing the neuron fields from the outside script.\n"
 "Examples:\n"
-"var c=LiveLibrary.createFromString(\"X[N]\");\n"
+"var c=Populations.createFromString(\"X[N]\");\n"
 "Simulator.print(\"standard neuron inertia=\"+c.getNeuro(0).fields.in);\n"
-"c=LiveLibrary.createFromString(\"X[Nn,e:0.1]\");\n"
+"c=Populations.createFromString(\"X[Nn,e:0.1]\");\n"
 "Simulator.print(\"noisy neuron error rate=\"+c.getNeuro(0).fields.e);\n"
 "\n"
 "The Interface object can be used to discover which fields are available for a certain neuron object:\n"
-"c=LiveLibrary.createFromString(\"X[N]\");\n"
+"c=Populations.createFromString(\"X[N]\");\n"
 "var iobj=Interface.makeFrom(c.getNeuro(0).fields);\n"
 "var i;\n"
@@ -318,4 +318,5 @@
 " Simulator.print(iobj.getId(i)+\" (\"+iobj.getName(i)+\")\");",},
 {"def",0,0,"Neuron definition from which this live neuron was built","o NeuroDef",GETONLY(neurodef),},
+{"classObject",0,0,"Neuron class for this neuron","o NeuroClass",GETONLY(classObject),},
 #ifdef NEURO_SIGNALS
 {"signals",0,PARAM_READONLY,"Signals","o NeuroSignals",FIELD(sigs_obj),},
@@ -332,15 +333,15 @@
 
 #define FIELDSTRUCT NeuroSignals
-{"add",0,PARAM_NOSTATIC,"add","p(s channel)",PROCEDURE(p_add),"Create a new signal"},
-{"receive",0,PARAM_NOSTATIC,"receive","p f(s channel)",PROCEDURE(p_receive),"Receive the aggregated signal power in a given channel."},
-{"receiveSet",0,PARAM_NOSTATIC,"receive","p oVector(s channel,f max distance)",PROCEDURE(p_receiveSet),"Get all signals in the specified range. Returns a readonly vector object containing Signal objects (individual signals can be accessed as result[0] throught result[result.size-1])."},
+{"add",0,PARAM_NOSTATIC,"Add","p(s channel)",PROCEDURE(p_add),"Create a new signal"},
+{"receive",0,PARAM_NOSTATIC,"Receive","p f(s channel)",PROCEDURE(p_receive),"Receive the aggregated signal power in a given channel."},
+{"receiveSet",0,PARAM_NOSTATIC,"Receive","p oVector(s channel,f max distance)",PROCEDURE(p_receiveSet),"Get all signals in the specified range. Returns a readonly vector object containing Signal objects (individual signals can be accessed as result[0] throught result[result.size-1])."},
 {"receiveFilter",0,PARAM_NOSTATIC,"receive","p f(s channel,f max distance,f flavor,f filter)",PROCEDURE(p_receiveFilter),"Receive the aggregated signal power in a given channel.\n\nAdditional filtering options:\n- Max distance only receives the neighbor signals (based on their physical location)\n- Flavor filtering: only signals having the flavor close to the specified one will be received. The filter value is the maximum allowed difference."},
-{"receiveSingle",0,PARAM_NOSTATIC,"receive","p oSignal(s channel,f range)",PROCEDURE(p_receiveSingle),"Find the signal source having the highest signal power (including the distance)"},
+{"receiveSingle",0,PARAM_NOSTATIC,"Receive","p oSignal(s channel,f range)",PROCEDURE(p_receiveSingle),"Find the signal source having the highest signal power (including the distance)"},
 #undef FIELDSTRUCT
 
 #define FIELDSTRUCT SignalSet
-{"get",0,PARAM_NOSTATIC,"get","p oSignal(d index)",PROCEDURE(p_get),},
-{"size",0,1+PARAM_NOSTATIC,"size","d",GETONLY(size),},
-{"clear",0,1+PARAM_NOSTATIC,"clear","p()",PROCEDURE(p_clear),},
+{"get",0,PARAM_NOSTATIC,"Get","p oSignal(d index)",PROCEDURE(p_get),},
+{"size",0,1+PARAM_NOSTATIC,"Size","d",GETONLY(size),},
+{"clear",0,1+PARAM_NOSTATIC,"Clear","p()",PROCEDURE(p_clear),},
 #undef FIELDSTRUCT
 {0,0,0,},
@@ -383,8 +384,12 @@
 void NeuroSignals::p_add(PARAMPROCARGS)
 {
-if (!owner->owner->channels) {ret->setEmpty();return;}
-SigChannel *ch=owner->owner->channels->getChannel(args->getString(),true);
 SigSource *s=new NeuroSigSource(owner,getCreature());
-ch->addSource(s);
+if (owner->owner->channels)
+	{
+	SigChannel *ch=owner->owner->channels->getChannel(args->getString(),true);
+	ch->addSource(s);
+	}
+else
+	SigChannel::dummy_channel.addSource(s);
 sigs+=s;
 s->setupObject(ret);
@@ -522,4 +527,9 @@
 }
 
+void NeuroImpl::get_classObject(ExtValue *ret)
+{
+NeuroClassExt::makeStaticObject(ret,neuroclass);
+}
+
 NeuroImpl::~NeuroImpl()
 {
Index: cpp/gdk/neuroimpl.h
===================================================================
--- cpp/gdk/neuroimpl.h	(revision 45)
+++ cpp/gdk/neuroimpl.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _NEUROIMPL_H_
@@ -195,4 +195,5 @@
 /** originating neuron object (from the model) */
 Neuro *neuro;
+NeuroClass *neuroclass;
 /** don't access directly */
 double newstate;
@@ -294,4 +295,5 @@
 PARAMGETDEF(fields);
 PARAMGETDEF(neurodef);
+PARAMGETDEF(classObject);
 #undef STATRICKCLASS
 };
Index: cpp/gdk/neuroimplfiles.h
===================================================================
--- cpp/gdk/neuroimplfiles.h	(revision 45)
+++ cpp/gdk/neuroimplfiles.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "neuroimpl-simple.h"
Index: cpp/gdk/neurolibrary.cpp
===================================================================
--- cpp/gdk/neurolibrary.cpp	(revision 45)
+++ cpp/gdk/neurolibrary.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "neurolibrary.h"
Index: cpp/gdk/neurolibrary.h
===================================================================
--- cpp/gdk/neurolibrary.h	(revision 45)
+++ cpp/gdk/neurolibrary.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _NILIBRARY_H_
Index: cpp/gdk/neurotest.cpp
===================================================================
--- cpp/gdk/neurotest.cpp	(revision 45)
+++ cpp/gdk/neurotest.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "geno.h"
Index: cpp/gdk/nonstd.h
===================================================================
--- cpp/gdk/nonstd.h	(revision 45)
+++ cpp/gdk/nonstd.h	(revision 64)
@@ -1,6 +1,2 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
-
 //Define rnd01, rnd0N, and randomN so that they
 //work in your C++ environment.
@@ -96,3 +92,7 @@
 #endif
 
+#ifdef DEFINE_STRICMP_AS_STRCASECMP
+#define stricmp(a,b) strcasecmp(a,b)
 #endif
+
+#endif
Index: cpp/gdk/nonstd_io.h
===================================================================
--- cpp/gdk/nonstd_io.h	(revision 45)
+++ cpp/gdk/nonstd_io.h	(revision 64)
@@ -1,10 +1,6 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
-
 // int access(const char *pathname, int mode);
 #ifdef _Windows
  #include <dir.h> 
- #include <io.h> //include io.h przed dir.h powoduje ze w simul.h nie poznaje klasy SimWorld - szokujacy i niewyjasniony blad.
+ #include <io.h> //include io.h przed dir.h powoduje ze w simul.h nie poznaje klasy SimWorld - szokujacy i niewyjasniony blad. co wiecej w projekcie GUI go nie ma a w CLI jest - moze wplyw tych globalnych definicji typu NOVCL, NO_STRICT itp?
  #define makeDirectory(name) mkdir(name) 
 #else
Index: cpp/gdk/param.cpp
===================================================================
--- cpp/gdk/param.cpp	(revision 45)
+++ cpp/gdk/param.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include <stdio.h>
Index: cpp/gdk/param.h
===================================================================
--- cpp/gdk/param.h	(revision 45)
+++ cpp/gdk/param.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _PARAM_H_
Index: cpp/gdk/paramobj.cpp
===================================================================
--- cpp/gdk/paramobj.cpp	(revision 45)
+++ cpp/gdk/paramobj.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "paramobj.h"
Index: cpp/gdk/paramobj.h
===================================================================
--- cpp/gdk/paramobj.h	(revision 45)
+++ cpp/gdk/paramobj.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _PARAMOBJ_H_
Index: cpp/gdk/paramtabobj.cpp
===================================================================
--- cpp/gdk/paramtabobj.cpp	(revision 45)
+++ cpp/gdk/paramtabobj.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "paramtabobj.h"
Index: cpp/gdk/paramtabobj.h
===================================================================
--- cpp/gdk/paramtabobj.h	(revision 45)
+++ cpp/gdk/paramtabobj.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _PARAMTABOBJ_H_
Index: cpp/gdk/printconvmap.cpp
===================================================================
--- cpp/gdk/printconvmap.cpp	(revision 45)
+++ cpp/gdk/printconvmap.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "printconvmap.h"
Index: cpp/gdk/printconvmap.h
===================================================================
--- cpp/gdk/printconvmap.h	(revision 45)
+++ cpp/gdk/printconvmap.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _PRINTCONVMAP_H_
Index: cpp/gdk/sstring.cpp
===================================================================
--- cpp/gdk/sstring.cpp	(revision 45)
+++ cpp/gdk/sstring.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 
Index: cpp/gdk/sstring.h
===================================================================
--- cpp/gdk/sstring.h	(revision 45)
+++ cpp/gdk/sstring.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _SSTRING_H_
Index: cpp/gdk/sstringutils.cpp
===================================================================
--- cpp/gdk/sstringutils.cpp	(revision 45)
+++ cpp/gdk/sstringutils.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "sstringutils.h"
@@ -233,2 +233,15 @@
 }
 
+SString trim(SString& s)
+{
+const unsigned char*b=(const unsigned char*)(const char*)s;
+const unsigned char*e=b+s.len();
+while((b<e)&&(*b<=' ')) b++;
+while((b<e)&&(e[-1]<=' ')) e--;
+if ((e-b)==s.len()) return s;
+SString newstring;
+char* t=newstring.directWrite();
+memmove(t,b,e-b);
+newstring.endWrite(e-b);
+return newstring;
+}
Index: cpp/gdk/sstringutils.h
===================================================================
--- cpp/gdk/sstringutils.h	(revision 45)
+++ cpp/gdk/sstringutils.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _SSTRINGUTILS_H_
@@ -25,4 +25,6 @@
 void strSetField(SString& txt,const SString& name,const SString& value);
 
+SString trim(SString& s); //remove leading/trailing whitespace
+
 #endif
 
Index: cpp/gdk/statrick.h
===================================================================
--- cpp/gdk/statrick.h	(revision 45)
+++ cpp/gdk/statrick.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _STATRICK_H_
Index: cpp/gdk/stdiofile-autoinit.cpp
===================================================================
--- cpp/gdk/stdiofile-autoinit.cpp	(revision 45)
+++ cpp/gdk/stdiofile-autoinit.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "stdiofile.h"
Index: cpp/gdk/stdiofile.cpp
===================================================================
--- cpp/gdk/stdiofile.cpp	(revision 45)
+++ cpp/gdk/stdiofile.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "stdiofile.h"
Index: cpp/gdk/stdiofile.h
===================================================================
--- cpp/gdk/stdiofile.h	(revision 45)
+++ cpp/gdk/stdiofile.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _STDIOFILE_H_
Index: cpp/gdk/stdouterr.cpp
===================================================================
--- cpp/gdk/stdouterr.cpp	(revision 45)
+++ cpp/gdk/stdouterr.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "stdouterr.h"
Index: cpp/gdk/stdouterr.h
===================================================================
--- cpp/gdk/stdouterr.h	(revision 45)
+++ cpp/gdk/stdouterr.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _STDOUTERRORHANDLER_H_
Index: cpp/gdk/syntparam.cpp
===================================================================
--- cpp/gdk/syntparam.cpp	(revision 45)
+++ cpp/gdk/syntparam.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "nonstd.h"
Index: cpp/gdk/syntparam.h
===================================================================
--- cpp/gdk/syntparam.h	(revision 45)
+++ cpp/gdk/syntparam.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _SYNTPATAM_H_
Index: cpp/gdk/usertags.h
===================================================================
--- cpp/gdk/usertags.h	(revision 45)
+++ cpp/gdk/usertags.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _USERTAGS_H_
Index: cpp/gdk/virtfile.cpp
===================================================================
--- cpp/gdk/virtfile.cpp	(revision 45)
+++ cpp/gdk/virtfile.cpp	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #include "virtfile.h"
Index: cpp/gdk/virtfile.h
===================================================================
--- cpp/gdk/virtfile.h	(revision 45)
+++ cpp/gdk/virtfile.h	(revision 64)
@@ -1,5 +1,5 @@
-// This file is a part of Framsticks GDK library.
-// Copyright (C) 2002-2006  Szymon Ulatowski.  See LICENSE.txt for details.
-// Refer to http://www.frams.alife.pl/ for further information.
+// This file is a part of the Framsticks GDK library.
+// Copyright (C) 2002-2011  Szymon Ulatowski.  See LICENSE.txt for details.
+// Refer to http://www.framsticks.com/ for further information.
 
 #ifndef _VIRTFILE_H_
Index: cpp/geno_fx/geno_ftest.cpp
===================================================================
--- cpp/geno_fx/geno_ftest.cpp	(revision 45)
+++ cpp/geno_fx/geno_ftest.cpp	(revision 64)
@@ -1,4 +1,4 @@
-// This file is a part of Framsticks GenoFX library.
-// Copyright (C) 2002-2009  Maciej Komosinski.  See LICENSE.txt for details.
+// This file is a part of the Framsticks GenoFX library.
+// Copyright (C) 2002-2011  Maciej Komosinski.  See LICENSE.txt for details.
 // Refer to http://www.framsticks.com/ for further information.
 
Index: cpp/geno_fx/geno_ftest.h
===================================================================
--- cpp/geno_fx/geno_ftest.h	(revision 45)
+++ cpp/geno_fx/geno_ftest.h	(revision 64)
@@ -1,4 +1,4 @@
-// This file is a part of Framsticks GenoFX library.
-// Copyright (C) 2002-2009  Maciej Komosinski.  See LICENSE.txt for details.
+// This file is a part of the Framsticks GenoFX library.
+// Copyright (C) 2002-2011  Maciej Komosinski.  See LICENSE.txt for details.
 // Refer to http://www.framsticks.com/ for further information.
 
Index: cpp/geno_fx/geno_fx.cpp
===================================================================
--- cpp/geno_fx/geno_fx.cpp	(revision 45)
+++ cpp/geno_fx/geno_fx.cpp	(revision 64)
@@ -1,4 +1,4 @@
-// This file is a part of Framsticks GenoFX library.
-// Copyright (C) 2002-2009  Maciej Komosinski.  See LICENSE.txt for details.
+// This file is a part of the Framsticks GenoFX library.
+// Copyright (C) 2002-2011  Maciej Komosinski.  See LICENSE.txt for details.
 // Refer to http://www.framsticks.com/ for further information.
 
@@ -55,5 +55,5 @@
 double Geno_fx::mutateNeuProperty(double current,Neuro *n,int i)
 {
-   if (i==-1) return mutateCreepNoLimit('f',current,-10,10);
+   if (i==-1) return mutateCreepNoLimit('f',current,-10,10); //i==-1: mutating weight of neural connection
    ParamInterface *pi;
    if (i>=100) {i-=100; pi=&n->getClass()->getProperties();}
Index: cpp/geno_fx/geno_fx.h
===================================================================
--- cpp/geno_fx/geno_fx.h	(revision 45)
+++ cpp/geno_fx/geno_fx.h	(revision 64)
@@ -1,4 +1,4 @@
-// This file is a part of Framsticks GenoFX library.
-// Copyright (C) 2002-2009  Maciej Komosinski.  See LICENSE.txt for details.
+// This file is a part of the Framsticks GenoFX library.
+// Copyright (C) 2002-2011  Maciej Komosinski.  See LICENSE.txt for details.
 // Refer to http://www.framsticks.com/ for further information.
 
